From 0282655f9d5fd5827f63e2f5d381cdb610521c2d Mon Sep 17 00:00:00 2001 From: Richard Trieu Date: Sat, 7 Jul 2018 00:17:25 +0000 Subject: [PATCH] Check returned type is valid before using it. Add a .isNull() check to returned QualType. Fixes PR38077 llvm-svn: 336475 --- clang/lib/Sema/SemaCXXScopeSpec.cpp | 3 +++ clang/test/SemaCXX/overloaded-name.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/clang/lib/Sema/SemaCXXScopeSpec.cpp b/clang/lib/Sema/SemaCXXScopeSpec.cpp index 61a82aa..f2fad82 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()) { 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 6da0354..8f1dc2f 100644 --- a/clang/test/SemaCXX/overloaded-name.cpp +++ b/clang/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?}} + } +} -- 2.7.4