]> granicus.if.org Git - clang/commitdiff
When determining whether a class type has a const copy constructor, be
authorDouglas Gregor <dgregor@apple.com>
Tue, 23 Dec 2008 21:31:30 +0000 (21:31 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 23 Dec 2008 21:31:30 +0000 (21:31 +0000)
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

lib/AST/DeclCXX.cpp

index 3faf5ac0c7227530016927fa8de0d50d53ffda80..d213385d918be43469ced865017c18770055eae0 100644 (file)
@@ -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;
 }