diff options
-rw-r--r-- | clang/lib/Sema/SemaCXXScopeSpec.cpp | 3 | ||||
-rw-r--r-- | clang/test/SemaCXX/overloaded-name.cpp | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaCXXScopeSpec.cpp b/clang/lib/Sema/SemaCXXScopeSpec.cpp index 61a82aa721c..f2fad825c3e 100644 --- a/clang/lib/Sema/SemaCXXScopeSpec.cpp +++ b/clang/lib/Sema/SemaCXXScopeSpec.cpp @@ -846,6 +846,9 @@ bool Sema::ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS, assert(DS.getTypeSpecType() == DeclSpec::TST_decltype); QualType T = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc()); + if (T.isNull()) + return true; + if (!T->isDependentType() && !T->getAs<TagType>()) { Diag(DS.getTypeSpecTypeLoc(), diag::err_expected_class_or_namespace) << T << getLangOpts().CPlusPlus; diff --git a/clang/test/SemaCXX/overloaded-name.cpp b/clang/test/SemaCXX/overloaded-name.cpp index 6da03544009..8f1dc2f59c6 100644 --- a/clang/test/SemaCXX/overloaded-name.cpp +++ b/clang/test/SemaCXX/overloaded-name.cpp @@ -28,3 +28,11 @@ namespace rdar9623945 { } }; } + +namespace PR38077 { + template <class T> void bar() {} // expected-note {{possible target for call}} + + int run() { + decltype(bar)::does_not_exist; // expected-error {{reference to overloaded function could not be resolved; did you mean to call it?}} + } +} |