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 | fdfab6b5ee678cd4b6a1c6d01c46ea5d0e3153ed (patch) | |
tree | 919c2c3b08f755d92e5f0ddbf9cba2bfec7a4350 | |
parent | 3e1b16c2e5b2c02d76e60ff28d609eeb21a2eb71 (diff) |
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>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61388 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/DeclCXX.cpp | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index 3faf5ac0c7..d213385d91 100644 --- a/lib/AST/DeclCXX.cpp +++ b/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; } |