diff options
author | Alex Lorenz <arphaman@gmail.com> | 2017-05-23 16:23:28 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2017-05-23 16:23:28 +0000 |
commit | 2109d436abdb0408b2bd8b76602eb7a478e9dbbd (patch) | |
tree | cf52cfefec8e4fd78dc5b27d9a477d9169e84352 /clang/lib/Index/IndexingContext.cpp | |
parent | 2857b1245b7bab722e3a678fd4e7d65143bc0f55 (diff) | |
download | bcm5719-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.cpp | 5 |
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())) { |