diff options
| author | Douglas Gregor <dgregor@apple.com> | 2008-12-23 21:31:30 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2008-12-23 21:31:30 +0000 |
| commit | 74a34443941242564429b9e2724bb8e2e6f8b0cd (patch) | |
| tree | e1ccd14368d52eeaf7ee58e87653c183fa795fff /clang/lib/AST | |
| parent | 4ecf1e94dba1264243b0b3f4793a4763e04083fe (diff) | |
| download | bcm5719-llvm-74a34443941242564429b9e2724bb8e2e6f8b0cd.tar.gz bcm5719-llvm-74a34443941242564429b9e2724bb8e2e6f8b0cd.zip | |
When determining whether a class type has a const copy constructor, be
sure to look at all of the results returned by name lookup. Fixes
<rdar://problem/6465262>
llvm-svn: 61388
Diffstat (limited to 'clang/lib/AST')
| -rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index 3faf5ac0c72..d213385d918 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -14,6 +14,7 @@ #include "clang/AST/DeclCXX.h" #include "clang/AST/ASTContext.h" #include "clang/Basic/IdentifierTable.h" +#include "llvm/ADT/STLExtras.h" using namespace clang; //===----------------------------------------------------------------------===// @@ -80,24 +81,14 @@ bool CXXRecordDecl::hasConstCopyConstructor(ASTContext &Context) const { = Context.DeclarationNames.getCXXConstructorName( Context.getCanonicalType(ClassType)); unsigned TypeQuals; - DeclContext::lookup_const_result Lookup - = this->lookup(Context, ConstructorName); - if (Lookup.first == Lookup.second) - return false; - else if (OverloadedFunctionDecl *Constructors - = dyn_cast<OverloadedFunctionDecl>(*Lookup.first)) { - for (OverloadedFunctionDecl::function_const_iterator Con - = Constructors->function_begin(); - Con != Constructors->function_end(); ++Con) { + DeclContext::lookup_const_iterator Con, ConEnd; + for (llvm::tie(Con, ConEnd) = this->lookup(Context, ConstructorName); + Con != ConEnd; ++Con) { if (cast<CXXConstructorDecl>(*Con)->isCopyConstructor(Context, TypeQuals) && (TypeQuals & QualType::Const) != 0) return true; - } - } else if (CXXConstructorDecl *Constructor - = dyn_cast<CXXConstructorDecl>(*Lookup.first)) { - return Constructor->isCopyConstructor(Context, TypeQuals) && - (TypeQuals & QualType::Const) != 0; } + return false; } |

