Эх сурвалжийг харах

[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

Alex Lorenz 8 жил өмнө
parent
commit
3f318c863b

+ 2 - 0
lib/AST/CXXInheritance.cpp

@@ -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());

+ 10 - 0
test/Index/Core/index-dependent-source.cpp

@@ -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;
+}