From 2109d436abdb0408b2bd8b76602eb7a478e9dbbd Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 23 May 2017 16:23:28 +0000 Subject: [index] The references to records from template instantiations should refer to the pattern records in the base templates rdar://32325459 llvm-svn: 303646 --- clang/lib/Index/IndexingContext.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'clang/lib/Index/IndexingContext.cpp') diff --git a/clang/lib/Index/IndexingContext.cpp b/clang/lib/Index/IndexingContext.cpp index 5cebb198460..b9f991d6ba6 100644 --- a/clang/lib/Index/IndexingContext.cpp +++ b/clang/lib/Index/IndexingContext.cpp @@ -124,6 +124,9 @@ bool IndexingContext::isTemplateImplicitInstantiation(const Decl *D) { TKind = FD->getTemplateSpecializationKind(); } else if (auto *VD = dyn_cast(D)) { TKind = VD->getTemplateSpecializationKind(); + } else if (const auto *RD = dyn_cast(D)) { + if (RD->getInstantiatedFromMemberClass()) + TKind = RD->getTemplateSpecializationKind(); } else if (isa(D)) { if (const auto *Parent = dyn_cast(D->getDeclContext())) @@ -163,6 +166,8 @@ static const Decl *adjustTemplateImplicitInstantiation(const Decl *D) { return FD->getTemplateInstantiationPattern(); } else if (auto *VD = dyn_cast(D)) { return VD->getTemplateInstantiationPattern(); + } else if (const auto *RD = dyn_cast(D)) { + return RD->getInstantiatedFromMemberClass(); } else if (const auto *FD = dyn_cast(D)) { if (const auto *Parent = dyn_cast(D->getDeclContext())) { -- cgit v1.2.3