diff options
Diffstat (limited to 'clang/lib/Index')
| -rw-r--r-- | clang/lib/Index/IndexingContext.cpp | 15 |
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; } } } |

