summaryrefslogtreecommitdiffstats
path: root/clang/lib/Index/IndexingContext.cpp
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2017-05-23 16:23:28 +0000
committerAlex Lorenz <arphaman@gmail.com>2017-05-23 16:23:28 +0000
commit2109d436abdb0408b2bd8b76602eb7a478e9dbbd (patch)
treecf52cfefec8e4fd78dc5b27d9a477d9169e84352 /clang/lib/Index/IndexingContext.cpp
parent2857b1245b7bab722e3a678fd4e7d65143bc0f55 (diff)
downloadbcm5719-llvm-2109d436abdb0408b2bd8b76602eb7a478e9dbbd.tar.gz
bcm5719-llvm-2109d436abdb0408b2bd8b76602eb7a478e9dbbd.zip
[index] The references to records from template instantiations should refer
to the pattern records in the base templates rdar://32325459 llvm-svn: 303646
Diffstat (limited to 'clang/lib/Index/IndexingContext.cpp')
-rw-r--r--clang/lib/Index/IndexingContext.cpp5
1 files changed, 5 insertions, 0 deletions
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<VarDecl>(D)) {
TKind = VD->getTemplateSpecializationKind();
+ } else if (const auto *RD = dyn_cast<CXXRecordDecl>(D)) {
+ if (RD->getInstantiatedFromMemberClass())
+ TKind = RD->getTemplateSpecializationKind();
} else if (isa<FieldDecl>(D)) {
if (const auto *Parent =
dyn_cast<ClassTemplateSpecializationDecl>(D->getDeclContext()))
@@ -163,6 +166,8 @@ static const Decl *adjustTemplateImplicitInstantiation(const Decl *D) {
return FD->getTemplateInstantiationPattern();
} else if (auto *VD = dyn_cast<VarDecl>(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)) {
if (const auto *Parent =
dyn_cast<ClassTemplateSpecializationDecl>(D->getDeclContext())) {
OpenPOWER on IntegriCloud