mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-30 13:47:32 +00:00
[clangd] Fix template type aliases in findExplicitReference
Reviewers: kadircet Reviewed By: kadircet Subscribers: MaskRay, jkorous, arphaman, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D68124 llvm-svn: 373104
This commit is contained in:
parent
a524e630a7
commit
4ae2381430
@ -477,13 +477,6 @@ Optional<ReferenceLoc> refInTypeLoc(TypeLoc L) {
|
||||
Ref->Qualifier = L.getQualifierLoc();
|
||||
}
|
||||
|
||||
void VisitDeducedTemplateSpecializationTypeLoc(
|
||||
DeducedTemplateSpecializationTypeLoc L) {
|
||||
Ref = ReferenceLoc{
|
||||
NestedNameSpecifierLoc(), L.getNameLoc(),
|
||||
explicitReferenceTargets(DynTypedNode::create(L.getType()))};
|
||||
}
|
||||
|
||||
void VisitTagTypeLoc(TagTypeLoc L) {
|
||||
Ref =
|
||||
ReferenceLoc{NestedNameSpecifierLoc(), L.getNameLoc(), {L.getDecl()}};
|
||||
@ -495,9 +488,25 @@ Optional<ReferenceLoc> refInTypeLoc(TypeLoc L) {
|
||||
}
|
||||
|
||||
void VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc L) {
|
||||
// We must ensure template type aliases are included in results if they
|
||||
// were written in the source code, e.g. in
|
||||
// template <class T> using valias = vector<T>;
|
||||
// ^valias<int> x;
|
||||
// 'explicitReferenceTargets' will return:
|
||||
// 1. valias with mask 'Alias'.
|
||||
// 2. 'vector<int>' with mask 'Underlying'.
|
||||
// we want to return only #1 in this case.
|
||||
Ref = ReferenceLoc{
|
||||
NestedNameSpecifierLoc(), L.getTemplateNameLoc(),
|
||||
explicitReferenceTargets(DynTypedNode::create(L.getType()))};
|
||||
explicitReferenceTargets(DynTypedNode::create(L.getType()),
|
||||
DeclRelation::Alias)};
|
||||
}
|
||||
void VisitDeducedTemplateSpecializationTypeLoc(
|
||||
DeducedTemplateSpecializationTypeLoc L) {
|
||||
Ref = ReferenceLoc{
|
||||
NestedNameSpecifierLoc(), L.getNameLoc(),
|
||||
explicitReferenceTargets(DynTypedNode::create(L.getType()),
|
||||
DeclRelation::Alias)};
|
||||
}
|
||||
|
||||
void VisitDependentTemplateSpecializationTypeLoc(
|
||||
|
@ -615,20 +615,18 @@ TEST_F(FindExplicitReferencesTest, All) {
|
||||
)cpp",
|
||||
"0: targets = {vector<int>}\n"
|
||||
"1: targets = {vector<bool>}\n"},
|
||||
// FIXME: Fix 'allTargetDecls' to return alias template and re-enable.
|
||||
// Template type aliases.
|
||||
// {R"cpp(
|
||||
// template <class T> struct vector { using value_type = T; };
|
||||
// template <> struct vector<bool> { using value_type = bool; };
|
||||
// template <class T> using valias = vector<T>;
|
||||
// void foo() {
|
||||
// $0^valias<int> vi;
|
||||
// $1^valias<bool> vb;
|
||||
// }
|
||||
// )cpp",
|
||||
// "0: targets = {valias}\n"
|
||||
// "1: targets = {valias}\n"},
|
||||
|
||||
{R"cpp(
|
||||
template <class T> struct vector { using value_type = T; };
|
||||
template <> struct vector<bool> { using value_type = bool; };
|
||||
template <class T> using valias = vector<T>;
|
||||
void foo() {
|
||||
$0^valias<int> vi;
|
||||
$1^valias<bool> vb;
|
||||
}
|
||||
)cpp",
|
||||
"0: targets = {valias}\n"
|
||||
"1: targets = {valias}\n"},
|
||||
// MemberExpr should know their using declaration.
|
||||
{R"cpp(
|
||||
struct X { void func(int); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user