r361511 - [Index] Fix reported references in presence of template type aliases
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Thu May 23 09:48:47 PDT 2019
Author: ibiryukov
Date: Thu May 23 09:48:47 2019
New Revision: 361511
URL: http://llvm.org/viewvc/llvm-project?rev=361511&view=rev
Log:
[Index] Fix reported references in presence of template type aliases
Summary: See the added test for an example.
Reviewers: kadircet
Reviewed By: kadircet
Subscribers: jkorous, arphaman, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D62303
Modified:
cfe/trunk/lib/Index/IndexTypeSourceInfo.cpp
Modified: cfe/trunk/lib/Index/IndexTypeSourceInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/IndexTypeSourceInfo.cpp?rev=361511&r1=361510&r2=361511&view=diff
==============================================================================
--- cfe/trunk/lib/Index/IndexTypeSourceInfo.cpp (original)
+++ cfe/trunk/lib/Index/IndexTypeSourceInfo.cpp Thu May 23 09:48:47 2019
@@ -133,29 +133,41 @@ public:
return true;
}
- template<typename TypeLocType>
- bool HandleTemplateSpecializationTypeLoc(TypeLocType TL) {
- if (const auto *T = TL.getTypePtr()) {
- if (CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {
- if (!RD->isImplicit() || IndexCtx.shouldIndexImplicitInstantiation()) {
- IndexCtx.handleReference(RD, TL.getTemplateNameLoc(), Parent,
- ParentDC, SymbolRoleSet(), Relations);
- return true;
- }
- }
- if (const TemplateDecl *D = T->getTemplateName().getAsTemplateDecl())
- IndexCtx.handleReference(D, TL.getTemplateNameLoc(), Parent, ParentDC,
- SymbolRoleSet(), Relations);
+ void HandleTemplateSpecializationTypeLoc(TemplateName TemplName,
+ SourceLocation TemplNameLoc,
+ CXXRecordDecl *ResolvedClass,
+ bool IsTypeAlias) {
+ // In presence of type aliases, the resolved class was never written in
+ // the code so don't report it.
+ if (!IsTypeAlias && ResolvedClass &&
+ (!ResolvedClass->isImplicit() ||
+ IndexCtx.shouldIndexImplicitInstantiation())) {
+ IndexCtx.handleReference(ResolvedClass, TemplNameLoc, Parent, ParentDC,
+ SymbolRoleSet(), Relations);
+ } else if (const TemplateDecl *D = TemplName.getAsTemplateDecl()) {
+ IndexCtx.handleReference(D, TemplNameLoc, Parent, ParentDC,
+ SymbolRoleSet(), Relations);
}
- return true;
}
bool VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc TL) {
- return HandleTemplateSpecializationTypeLoc(TL);
+ auto *T = TL.getTypePtr();
+ if (!T)
+ return true;
+ HandleTemplateSpecializationTypeLoc(
+ T->getTemplateName(), TL.getTemplateNameLoc(), T->getAsCXXRecordDecl(),
+ T->isTypeAlias());
+ return true;
}
bool VisitDeducedTemplateSpecializationTypeLoc(DeducedTemplateSpecializationTypeLoc TL) {
- return HandleTemplateSpecializationTypeLoc(TL);
+ auto *T = TL.getTypePtr();
+ if (!T)
+ return true;
+ HandleTemplateSpecializationTypeLoc(
+ T->getTemplateName(), TL.getTemplateNameLoc(), T->getAsCXXRecordDecl(),
+ /*IsTypeAlias=*/false);
+ return true;
}
bool VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
More information about the cfe-commits
mailing list