Skip to content

Commit d83501f

Browse files
collect template argument locs ahead of time to null-check
rdar://140592475
1 parent 1618d09 commit d83501f

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

clang/lib/ExtractAPI/DeclarationFragments.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1225,6 +1225,10 @@ DeclarationFragments
12251225
DeclarationFragmentsBuilder::getFragmentsForClassTemplateSpecialization(
12261226
const ClassTemplateSpecializationDecl *Decl) {
12271227
DeclarationFragments Fragments;
1228+
std::optional<ArrayRef<TemplateArgumentLoc>> TemplateArgumentLocs = {};
1229+
if (auto *TemplateArgs = Decl->getTemplateArgsAsWritten()) {
1230+
TemplateArgumentLocs = TemplateArgs->arguments();
1231+
}
12281232
return Fragments
12291233
.append("template", DeclarationFragments::FragmentKind::Keyword)
12301234
.appendSpace()
@@ -1237,7 +1241,7 @@ DeclarationFragmentsBuilder::getFragmentsForClassTemplateSpecialization(
12371241
.append("<", DeclarationFragments::FragmentKind::Text)
12381242
.append(getFragmentsForTemplateArguments(
12391243
Decl->getTemplateArgs().asArray(), Decl->getASTContext(),
1240-
Decl->getTemplateArgsAsWritten()->arguments()))
1244+
TemplateArgumentLocs))
12411245
.append(">", DeclarationFragments::FragmentKind::Text)
12421246
.appendSemicolon();
12431247
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Test is line- and column-sensitive. Run lines are below
2+
3+
template <typename T>
4+
class basic_vector {
5+
public:
6+
T x;
7+
T y;
8+
};
9+
10+
using my_vec = basic_vector<int>;
11+
12+
class MyClass {
13+
my_vec myVec;
14+
};
15+
16+
// RUN: c-index-test -single-symbol-sgf-at=%s:13:13 local %s | FileCheck --check-prefix=CHECK-MYVEC %s
17+
// CHECK-MYVEC: "parentContexts":[{"kind":"c++.class","name":"MyClass","usr":"c:@S@MyClass"},{"kind":"c++.property","name":"myVec","usr":"c:@S@MyClass@FI@myVec"}]
18+
// CHECK-MYVEC: "identifier":{"interfaceLanguage":"c++","precise":"c:@S@MyClass@FI@myVec"}
19+
// CHECK-MYVEC: "kind":{"displayName":"Instance Property","identifier":"c++.property"}
20+
// CHECK-MYVEC: "title":"myVec"
21+
// CHECK-MYVEC: "pathComponents":["MyClass","myVec"]

0 commit comments

Comments
 (0)