]> granicus.if.org Git - clang/commitdiff
[index] Avoid another crash that happens when looking up a dependent name
authorAlex Lorenz <arphaman@gmail.com>
Tue, 16 May 2017 17:33:17 +0000 (17:33 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Tue, 16 May 2017 17:33:17 +0000 (17:33 +0000)
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
test/Index/Core/index-dependent-source.cpp

index 4499ec70366faeebfad2f1a89ccd8e4487c89ed5..746602d47be52683d43c70fb4e1761395c20bf64 100644 (file)
@@ -278,6 +278,8 @@ bool CXXBasePaths::lookupInBases(ASTContext &Context,
                   dyn_cast_or_null<ClassTemplateDecl>(TN.getAsTemplateDecl()))
             BaseRecord = TD->getTemplatedDecl();
         }
+        if (BaseRecord && !BaseRecord->hasDefinition())
+          BaseRecord = nullptr;
       } else {
         BaseRecord = cast<CXXRecordDecl>(
             BaseSpec.getType()->castAs<RecordType>()->getDecl());
index 25410799a86e03a9c4df996c34ff1fae14526429..8c097b935a37ca686346caa0f59f7c561bba1f9f 100644 (file)
@@ -131,3 +131,13 @@ void undefinedTemplateLookup(UndefinedTemplateClass<T> &x) {
   x.lookup;
   typename UndefinedTemplateClass<T>::Type y;
 }
+
+template<typename T>
+struct UserOfUndefinedTemplateClass: UndefinedTemplateClass<T> { };
+
+template<typename T>
+void undefinedTemplateLookup2(UserOfUndefinedTemplateClass<T> &x) {
+// Shouldn't crash!
+  x.lookup;
+  typename UserOfUndefinedTemplateClass<T>::Type y;
+}