From 477d242a2e4b9adce39226c2580b5e459ed55176 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Mon, 22 Jun 2009 23:34:40 +0000 Subject: patch to mark use of implicit copy constructors. llvm-svn: 73922 --- clang/lib/AST/DeclCXX.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'clang/lib/AST/DeclCXX.cpp') diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index 7a930d78c12..25e4d196177 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -66,21 +66,29 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases, } bool CXXRecordDecl::hasConstCopyConstructor(ASTContext &Context) const { + return getCopyConstructor(Context, QualType::Const) != 0; +} + +CXXConstructorDecl *CXXRecordDecl::getCopyConstructor(ASTContext &Context, + unsigned TypeQuals) const{ QualType ClassType = Context.getTypeDeclType(const_cast(this)); DeclarationName ConstructorName = Context.DeclarationNames.getCXXConstructorName( - Context.getCanonicalType(ClassType)); - unsigned TypeQuals; + Context.getCanonicalType(ClassType)); + unsigned FoundTQs; DeclContext::lookup_const_iterator Con, ConEnd; for (llvm::tie(Con, ConEnd) = this->lookup(Context, ConstructorName); Con != ConEnd; ++Con) { - if (cast(*Con)->isCopyConstructor(Context, TypeQuals) && - (TypeQuals & QualType::Const) != 0) - return true; + if (cast(*Con)->isCopyConstructor(Context, + FoundTQs)) { + if (((TypeQuals & QualType::Const) == (FoundTQs & QualType::Const)) || + (!(TypeQuals & QualType::Const) && (FoundTQs & QualType::Const))) + return cast(*Con); + + } } - - return false; + return 0; } bool CXXRecordDecl::hasConstCopyAssignment(ASTContext &Context) const { -- cgit v1.2.3