From 3f318c863b1bb1a66c4683f79cbcdcc018b1462d Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 16 May 2017 17:33:17 +0000 Subject: [PATCH] [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 --- lib/AST/CXXInheritance.cpp | 2 ++ test/Index/Core/index-dependent-source.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+) 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; +} -- 2.40.0