forked from OSchip/llvm-project
[index] Avoid a crash that happens when looking up a dependent name
in a record that has no definition rdar://32194921 llvm-svn: 303045
This commit is contained in:
parent
1a5a5e6a2a
commit
09653330bc
|
@ -165,6 +165,9 @@ public:
|
|||
if (!TD)
|
||||
return true;
|
||||
CXXRecordDecl *RD = TD->getTemplatedDecl();
|
||||
if (!RD->hasDefinition())
|
||||
return true;
|
||||
RD = RD->getDefinition();
|
||||
std::vector<const NamedDecl *> Symbols =
|
||||
RD->lookupDependentName(NameInfo.getName(), Filter);
|
||||
// FIXME: Improve overload handling.
|
||||
|
|
|
@ -157,6 +157,9 @@ public:
|
|||
if (!TD)
|
||||
return true;
|
||||
CXXRecordDecl *RD = TD->getTemplatedDecl();
|
||||
if (!RD->hasDefinition())
|
||||
return true;
|
||||
RD = RD->getDefinition();
|
||||
DeclarationName Name(DNT->getIdentifier());
|
||||
std::vector<const NamedDecl *> Symbols = RD->lookupDependentName(
|
||||
Name, [](const NamedDecl *ND) { return isa<TypeDecl>(ND); });
|
||||
|
|
|
@ -122,3 +122,12 @@ void indexDependentOverloads(const TemplateClass<T, S> &object) {
|
|||
object.overload1(Y());
|
||||
// CHECK-NOT: [[@LINE-1]]
|
||||
}
|
||||
|
||||
template<typename T> struct UndefinedTemplateClass;
|
||||
|
||||
template<typename T>
|
||||
void undefinedTemplateLookup(UndefinedTemplateClass<T> &x) {
|
||||
// Shouldn't crash!
|
||||
x.lookup;
|
||||
typename UndefinedTemplateClass<T>::Type y;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue