From: Richard Trieu Date: Sat, 7 Jul 2018 00:17:25 +0000 (+0000) Subject: Check returned type is valid before using it. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2af72fe5e815083513b80862541e312b92ced5f0;p=clang Check returned type is valid before using it. Add a .isNull() check to returned QualType. Fixes PR38077 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@336475 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaCXXScopeSpec.cpp b/lib/Sema/SemaCXXScopeSpec.cpp index 61a82aa721..f2fad825c3 100644 --- a/lib/Sema/SemaCXXScopeSpec.cpp +++ b/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()) { Diag(DS.getTypeSpecTypeLoc(), diag::err_expected_class_or_namespace) << T << getLangOpts().CPlusPlus; diff --git a/test/SemaCXX/overloaded-name.cpp b/test/SemaCXX/overloaded-name.cpp index 6da0354400..8f1dc2f59c 100644 --- a/test/SemaCXX/overloaded-name.cpp +++ b/test/SemaCXX/overloaded-name.cpp @@ -28,3 +28,11 @@ namespace rdar9623945 { } }; } + +namespace PR38077 { + template 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?}} + } +}