diff options
| author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2010-09-13 22:18:28 +0000 |
|---|---|---|
| committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2010-09-13 22:18:28 +0000 |
| commit | 5c649bc7bb430c4a9466365e5af3dcf38880140c (patch) | |
| tree | a2beede2d2da9b2034c1c58d7fe850195a2e024d /clang/lib/Sema/SemaExprCXX.cpp | |
| parent | 058f3854ff88bca476e31fa99714e52566b9652f (diff) | |
| download | bcm5719-llvm-5c649bc7bb430c4a9466365e5af3dcf38880140c.tar.gz bcm5719-llvm-5c649bc7bb430c4a9466365e5af3dcf38880140c.zip | |
Don't crash when using type traits on a class with a constructor template.
llvm-svn: 113796
Diffstat (limited to 'clang/lib/Sema/SemaExprCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index b380a4b7a79..e03c5721c6c 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -2148,6 +2148,11 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, UnaryTypeTrait UTT, QualType T) { DeclContext::lookup_const_iterator Con, ConEnd; for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD); Con != ConEnd; ++Con) { + // A template constructor is never a copy constructor. + // FIXME: However, it may actually be selected at the actual overload + // resolution point. + if (isa<FunctionTemplateDecl>(*Con)) + continue; CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con); if (Constructor->isCopyConstructor(FoundTQs)) { FoundConstructor = true; @@ -2181,6 +2186,9 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, UnaryTypeTrait UTT, QualType T) { DeclContext::lookup_const_iterator Con, ConEnd; for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD); Con != ConEnd; ++Con) { + // FIXME: In C++0x, a constructor template can be a default constructor. + if (isa<FunctionTemplateDecl>(*Con)) + continue; CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con); if (Constructor->isDefaultConstructor()) { const FunctionProtoType *CPT |

