diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-12-02 19:20:19 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-12-02 19:20:19 +0000 |
commit | 545937e1be2eb318dc3c8db284ab27a64c51c773 (patch) | |
tree | 2094a515cd4d327c4154dddf013798d1b7737209 /lib/Sema/SemaExprCXX.cpp | |
parent | 17c7957f023f02fc2c88f51f8908c19b52609275 (diff) | |
download | src-545937e1be2eb318dc3c8db284ab27a64c51c773.tar.gz src-545937e1be2eb318dc3c8db284ab27a64c51c773.zip |
Vendor import of clang release_39 branch r288513:vendor/clang/clang-release_39-r288847vendor/clang/clang-release_39-r288513
Notes
Notes:
svn path=/vendor/clang/dist/; revision=309429
svn path=/vendor/clang/clang-release_39-r288513/dist/; revision=309814; tag=vendor/clang/clang-release_39-r288847
Diffstat (limited to 'lib/Sema/SemaExprCXX.cpp')
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 56f4019bfbb6..dfdd36752bf6 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -4221,9 +4221,12 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, // A template constructor is never a copy constructor. // FIXME: However, it may actually be selected at the actual overload // resolution point. - if (isa<FunctionTemplateDecl>(ND)) + if (isa<FunctionTemplateDecl>(ND->getUnderlyingDecl())) continue; - const CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(ND); + // UsingDecl itself is not a constructor + if (isa<UsingDecl>(ND)) + continue; + auto *Constructor = cast<CXXConstructorDecl>(ND->getUnderlyingDecl()); if (Constructor->isCopyConstructor(FoundTQs)) { FoundConstructor = true; const FunctionProtoType *CPT @@ -4257,9 +4260,12 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, bool FoundConstructor = false; for (const auto *ND : Self.LookupConstructors(RD)) { // FIXME: In C++0x, a constructor template can be a default constructor. - if (isa<FunctionTemplateDecl>(ND)) + if (isa<FunctionTemplateDecl>(ND->getUnderlyingDecl())) + continue; + // UsingDecl itself is not a constructor + if (isa<UsingDecl>(ND)) continue; - const CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(ND); + auto *Constructor = cast<CXXConstructorDecl>(ND->getUnderlyingDecl()); if (Constructor->isDefaultConstructor()) { FoundConstructor = true; const FunctionProtoType *CPT |