aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2010-09-13 21:10:20 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2010-09-13 21:10:20 +0000
commit951006f510404f835f4d57be0da0787d24c2030b (patch)
treeb82229e2e17f3766a46084a3c0d65e905c70586d
parentb1248ffe9d02c75ecce8581d4a174c787d6d13f9 (diff)
downloadllvm-951006f510404f835f4d57be0da0787d24c2030b.zip
llvm-951006f510404f835f4d57be0da0787d24c2030b.tar.gz
llvm-951006f510404f835f4d57be0da0787d24c2030b.tar.bz2
Have __has_nothrow_copy use Sema's lookup routines. This fixes the problem with not finding implicitly declared copy constructors, part of PR8107.
llvm-svn: 113784
-rw-r--r--clang/lib/Sema/SemaExprCXX.cpp2
-rw-r--r--clang/test/SemaCXX/type-traits.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 76d6f49..d026851 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -2148,7 +2148,7 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, UnaryTypeTrait UTT, QualType T) {
DeclarationName ConstructorName
= C.DeclarationNames.getCXXConstructorName(C.getCanonicalType(T));
DeclContext::lookup_const_iterator Con, ConEnd;
- for (llvm::tie(Con, ConEnd) = RD->lookup(ConstructorName);
+ for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD);
Con != ConEnd; ++Con) {
CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
if (Constructor->isCopyConstructor(FoundTQs)) {
diff --git a/clang/test/SemaCXX/type-traits.cpp b/clang/test/SemaCXX/type-traits.cpp
index 99ac5cd..61aba07 100644
--- a/clang/test/SemaCXX/type-traits.cpp
+++ b/clang/test/SemaCXX/type-traits.cpp
@@ -366,6 +366,7 @@ void has_nothrow_copy() {
int t21[T(__has_nothrow_copy(HasMultipleNoThrowCopy))];
int t22[F(__has_nothrow_copy(void))];
int t23[F(__has_nothrow_copy(cvoid))];
+ int t24[T(__has_nothrow_copy(HasVirtDest))];
}
void has_nothrow_constructor() {