From: Alex Lorenz Date: Tue, 16 May 2017 17:33:17 +0000 (+0000) Subject: [index] Avoid another crash that happens when looking up a dependent name X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3f318c863b1bb1a66c4683f79cbcdcc018b1462d;p=clang [index] Avoid another crash that happens when looking up a dependent name in a record that has a base without a definition rdar://32224197 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@303192 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/CXXInheritance.cpp b/lib/AST/CXXInheritance.cpp index 4499ec7036..746602d47b 100644 --- a/lib/AST/CXXInheritance.cpp +++ b/lib/AST/CXXInheritance.cpp @@ -278,6 +278,8 @@ bool CXXBasePaths::lookupInBases(ASTContext &Context, dyn_cast_or_null(TN.getAsTemplateDecl())) BaseRecord = TD->getTemplatedDecl(); } + if (BaseRecord && !BaseRecord->hasDefinition()) + BaseRecord = nullptr; } else { BaseRecord = cast( BaseSpec.getType()->castAs()->getDecl()); diff --git a/test/Index/Core/index-dependent-source.cpp b/test/Index/Core/index-dependent-source.cpp index 25410799a8..8c097b935a 100644 --- a/test/Index/Core/index-dependent-source.cpp +++ b/test/Index/Core/index-dependent-source.cpp @@ -131,3 +131,13 @@ void undefinedTemplateLookup(UndefinedTemplateClass &x) { x.lookup; typename UndefinedTemplateClass::Type y; } + +template +struct UserOfUndefinedTemplateClass: UndefinedTemplateClass { }; + +template +void undefinedTemplateLookup2(UserOfUndefinedTemplateClass &x) { +// Shouldn't crash! + x.lookup; + typename UserOfUndefinedTemplateClass::Type y; +}