summaryrefslogtreecommitdiffstats
path: root/clang/lib/Index
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Index')
-rw-r--r--clang/lib/Index/IndexingContext.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/clang/lib/Index/IndexingContext.cpp b/clang/lib/Index/IndexingContext.cpp
index 1a341b04c43..5b5270df992 100644
--- a/clang/lib/Index/IndexingContext.cpp
+++ b/clang/lib/Index/IndexingContext.cpp
@@ -127,7 +127,7 @@ bool IndexingContext::isTemplateImplicitInstantiation(const Decl *D) {
} else if (const auto *RD = dyn_cast<CXXRecordDecl>(D)) {
if (RD->getInstantiatedFromMemberClass())
TKind = RD->getTemplateSpecializationKind();
- } else if (isa<FieldDecl>(D)) {
+ } else if (isa<FieldDecl>(D) || isa<TypedefNameDecl>(D)) {
if (const auto *Parent = dyn_cast<Decl>(D->getDeclContext()))
return isTemplateImplicitInstantiation(Parent);
}
@@ -177,14 +177,15 @@ static const Decl *adjustTemplateImplicitInstantiation(const Decl *D) {
return VD->getTemplateInstantiationPattern();
} else if (const auto *RD = dyn_cast<CXXRecordDecl>(D)) {
return RD->getInstantiatedFromMemberClass();
- } else if (const auto *FD = dyn_cast<FieldDecl>(D)) {
+ } else if (isa<FieldDecl>(D) || isa<TypedefNameDecl>(D)) {
+ const auto *ND = cast<NamedDecl>(D);
if (const CXXRecordDecl *Pattern =
- getDeclContextForTemplateInstationPattern(FD)) {
- for (const NamedDecl *ND : Pattern->lookup(FD->getDeclName())) {
- if (ND->isImplicit())
+ getDeclContextForTemplateInstationPattern(ND)) {
+ for (const NamedDecl *BaseND : Pattern->lookup(ND->getDeclName())) {
+ if (BaseND->isImplicit())
continue;
- if (isa<FieldDecl>(ND))
- return ND;
+ if (BaseND->getKind() == ND->getKind())
+ return BaseND;
}
}
}
OpenPOWER on IntegriCloud