Skip to content

Commit 3cabbf6

Browse files
authored
[clang] text ast-dumper: dump TemplateName for TST and DTST (#93766)
Implement AST text dumping of the TemplateName for TemplateSpecializationType and DeducedTemplateSpecializationType.
1 parent 1034b4d commit 3cabbf6

12 files changed

+149
-66
lines changed

clang/include/clang/AST/TemplateName.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,10 @@ class TemplateName {
360360
static TemplateName getFromVoidPointer(void *Ptr) {
361361
return TemplateName(Ptr);
362362
}
363+
364+
/// Structural equality.
365+
bool operator==(TemplateName Other) const { return Storage == Other.Storage; }
366+
bool operator!=(TemplateName Other) const { return !operator==(Other); }
363367
};
364368

365369
/// Insertion operator for diagnostics. This allows sending TemplateName's

clang/include/clang/AST/TextNodeDumper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ class TextNodeDumper
214214
void dumpNestedNameSpecifier(const NestedNameSpecifier *NNS);
215215
void dumpConceptReference(const ConceptReference *R);
216216
void dumpTemplateArgument(const TemplateArgument &TA);
217-
void dumpTemplateName(TemplateName TN);
217+
void dumpBareTemplateName(TemplateName TN);
218+
void dumpTemplateName(TemplateName TN, StringRef Label = {});
218219

219220
void dumpDeclRef(const Decl *D, StringRef Label = {});
220221

clang/lib/AST/TextNodeDumper.cpp

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,32 @@ void TextNodeDumper::VisitIntegralTemplateArgument(const TemplateArgument &TA) {
11261126
dumpTemplateArgument(TA);
11271127
}
11281128

1129-
void TextNodeDumper::dumpTemplateName(TemplateName TN) {
1129+
void TextNodeDumper::dumpTemplateName(TemplateName TN, StringRef Label) {
1130+
AddChild(Label, [=] {
1131+
{
1132+
llvm::SmallString<128> Str;
1133+
{
1134+
llvm::raw_svector_ostream SS(Str);
1135+
TN.print(SS, PrintPolicy);
1136+
}
1137+
OS << " '" << Str << "'";
1138+
1139+
if (TemplateName CanonTN = Context->getCanonicalTemplateName(TN);
1140+
CanonTN != TN) {
1141+
llvm::SmallString<128> CanonStr;
1142+
{
1143+
llvm::raw_svector_ostream SS(CanonStr);
1144+
CanonTN.print(SS, PrintPolicy);
1145+
}
1146+
if (CanonStr != Str)
1147+
OS << ":'" << CanonStr << "'";
1148+
}
1149+
}
1150+
dumpBareTemplateName(TN);
1151+
});
1152+
}
1153+
1154+
void TextNodeDumper::dumpBareTemplateName(TemplateName TN) {
11301155
switch (TN.getKind()) {
11311156
case TemplateName::Template:
11321157
AddChild([=] { Visit(TN.getAsTemplateDecl()); });
@@ -1143,7 +1168,7 @@ void TextNodeDumper::dumpTemplateName(TemplateName TN) {
11431168
if (QTN->hasTemplateKeyword())
11441169
OS << " keyword";
11451170
dumpNestedNameSpecifier(QTN->getQualifier());
1146-
dumpTemplateName(QTN->getUnderlyingTemplate());
1171+
dumpBareTemplateName(QTN->getUnderlyingTemplate());
11471172
return;
11481173
}
11491174
case TemplateName::DependentTemplate: {
@@ -1162,7 +1187,7 @@ void TextNodeDumper::dumpTemplateName(TemplateName TN) {
11621187
if (const TemplateTemplateParmDecl *P = STS->getParameter())
11631188
AddChild("parameter", [=] { Visit(P); });
11641189
dumpDeclRef(STS->getAssociatedDecl(), "associated");
1165-
AddChild("replacement", [=] { dumpTemplateName(STS->getReplacement()); });
1190+
dumpTemplateName(STS->getReplacement(), "replacement");
11661191
return;
11671192
}
11681193
// FIXME: Implement these.
@@ -1182,14 +1207,14 @@ void TextNodeDumper::dumpTemplateName(TemplateName TN) {
11821207
void TextNodeDumper::VisitTemplateTemplateArgument(const TemplateArgument &TA) {
11831208
OS << " template";
11841209
dumpTemplateArgument(TA);
1185-
dumpTemplateName(TA.getAsTemplate());
1210+
dumpBareTemplateName(TA.getAsTemplate());
11861211
}
11871212

11881213
void TextNodeDumper::VisitTemplateExpansionTemplateArgument(
11891214
const TemplateArgument &TA) {
11901215
OS << " template expansion";
11911216
dumpTemplateArgument(TA);
1192-
dumpTemplateName(TA.getAsTemplateOrTemplatePattern());
1217+
dumpBareTemplateName(TA.getAsTemplateOrTemplatePattern());
11931218
}
11941219

11951220
void TextNodeDumper::VisitExpressionTemplateArgument(
@@ -1989,18 +2014,14 @@ void TextNodeDumper::VisitAutoType(const AutoType *T) {
19892014

19902015
void TextNodeDumper::VisitDeducedTemplateSpecializationType(
19912016
const DeducedTemplateSpecializationType *T) {
1992-
if (T->getTemplateName().getAsUsingShadowDecl())
1993-
OS << " using";
2017+
dumpTemplateName(T->getTemplateName(), "name");
19942018
}
19952019

19962020
void TextNodeDumper::VisitTemplateSpecializationType(
19972021
const TemplateSpecializationType *T) {
19982022
if (T->isTypeAlias())
19992023
OS << " alias";
2000-
if (T->getTemplateName().getAsUsingShadowDecl())
2001-
OS << " using";
2002-
OS << " ";
2003-
T->getTemplateName().dump(OS);
2024+
dumpTemplateName(T->getTemplateName(), "name");
20042025
}
20052026

20062027
void TextNodeDumper::VisitInjectedClassNameType(

clang/test/AST/ast-dump-ctad-alias.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,12 @@ Out2<double>::AInner t(1.0);
3636
// CHECK-NEXT: | | | `-TemplateTypeParmType {{.*}} 'type-parameter-1-0' dependent depth 1 index 0
3737
// CHECK-NEXT: | | `-TypeTraitExpr {{.*}} 'bool' __is_deducible
3838
// CHECK-NEXT: | | |-DeducedTemplateSpecializationType {{.*}} 'Out2<double>::AInner' dependent
39+
// CHECK-NEXT: | | | `-name: 'Out2<double>::AInner'
40+
// CHECK-NEXT: | | | `-TypeAliasTemplateDecl {{.+}} AInner{{$}}
3941
// CHECK-NEXT: | | `-ElaboratedType {{.*}} 'Inner<type-parameter-1-0>' sugar dependent
40-
// CHECK-NEXT: | | `-TemplateSpecializationType {{.*}} 'Inner<type-parameter-1-0>' dependent Inner
42+
// CHECK-NEXT: | | `-TemplateSpecializationType {{.*}} 'Inner<type-parameter-1-0>' dependent
43+
// CHECK-NEXT: | | |-name: 'Inner':'Out<int>::Inner' qualified
44+
// CHECK-NEXT: | | | `-ClassTemplateDecl {{.+}} Inner{{$}}
4145
// CHECK-NEXT: | | `-TemplateArgument type 'type-parameter-1-0'
4246
// CHECK-NEXT: | | `-SubstTemplateTypeParmType {{.*}} 'type-parameter-1-0'
4347
// CHECK-NEXT: | | |-FunctionTemplate {{.*}} '<deduction guide for Inner>'

clang/test/AST/ast-dump-template-decls.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ template <class T> struct C {
116116
using type2 = typename C<int>::type1<void>;
117117
// CHECK: TypeAliasDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, col:42> col:7 type2 'typename C<int>::type1<void>':'void (int)'
118118
// CHECK-NEXT: ElaboratedType 0x{{[^ ]*}} 'typename C<int>::type1<void>' sugar
119-
// CHECK-NEXT: TemplateSpecializationType 0x{{[^ ]*}} 'type1<void>' sugar alias C<int>::type1
119+
// CHECK-NEXT: TemplateSpecializationType 0x{{[^ ]*}} 'type1<void>' sugar alias
120+
// CHECK-NEXT: name: 'C<int>::type1':'PR55886::C<int>::type1' qualified
121+
// CHECK-NEXT: NestedNameSpecifier TypeSpec 'C<int>':'PR55886::C<int>'
122+
// CHECK-NEXT: TypeAliasTemplateDecl {{.+}} type1
120123
// CHECK-NEXT: TemplateArgument type 'void'
121124
// CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'void'
122125
// CHECK-NEXT: FunctionProtoType 0x{{[^ ]*}} 'void (int)' cdecl
@@ -135,7 +138,7 @@ template <typename... Cs> struct foo {
135138
template <typename... Ds> using bind = Z<Ds..., Cs...>;
136139
};
137140
using t1 = foo<int, short>::bind<char, float>;
138-
// CHECK: TemplateSpecializationType 0x{{[^ ]*}} 'Y<char, float, int, short>' sugar Y
141+
// CHECK: TemplateSpecializationType 0x{{[^ ]*}} 'Y<char, float, int, short>' sugar
139142
// CHECK: SubstTemplateTypeParmType 0x{{[^ ]*}} 'char' sugar typename depth 0 index 0 ... Bs pack_index 3
140143
// CHECK-NEXT: TypeAliasTemplate 0x{{[^ ]*}} 'Z'
141144
// CHECK: SubstTemplateTypeParmType 0x{{[^ ]*}} 'float' sugar typename depth 0 index 0 ... Bs pack_index 2
@@ -149,7 +152,8 @@ template <typename... T> struct D {
149152
template <typename... U> using B = int(int (*...p)(T, U));
150153
};
151154
using t2 = D<float, char>::B<int, short>;
152-
// CHECK: TemplateSpecializationType 0x{{[^ ]*}} 'B<int, short>' sugar alias D<float, char>::B{{$}}
155+
// CHECK: TemplateSpecializationType 0x{{[^ ]*}} 'B<int, short>' sugar alias{{$}}
156+
// CHECK-NEXT: name: 'D<float, char>::B':'PR56099::D<float, char>::B' qualified
153157
// CHECK: FunctionProtoType 0x{{[^ ]*}} 'int (int (*)(float, int), int (*)(char, short))' cdecl
154158
// CHECK: FunctionProtoType 0x{{[^ ]*}} 'int (float, int)' cdecl
155159
// CHECK: SubstTemplateTypeParmType 0x{{[^ ]*}} 'float' sugar typename depth 0 index 0 ... T pack_index 1
@@ -170,7 +174,9 @@ template<template<class C1, class C2 = A<C1>> class D1, class D2> using D = D1<D
170174
template<class E1, class E2> class E {};
171175
using test1 = D<E, int>;
172176
// CHECK: TypeAliasDecl 0x{{[^ ]*}} <line:{{[1-9]+}}:1, col:23> col:7 test1 'D<E, int>':'subst_default_argument::E<int, subst_default_argument::A<int>>'
173-
// CHECK: TemplateSpecializationType 0x{{[^ ]*}} 'A<int>' sugar A
177+
// CHECK: TemplateSpecializationType 0x{{[^ ]*}} 'A<int>' sugar
178+
// CHECK-NEXT: |-name: 'A':'subst_default_argument::A' qualified
179+
// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} A
174180
// CHECK-NEXT: |-TemplateArgument type 'int'
175181
// CHECK-NEXT: | `-SubstTemplateTypeParmType 0x{{[^ ]*}} 'int' sugar class depth 0 index 1 D2
176182
// CHECK-NEXT: | |-TypeAliasTemplate 0x{{[^ ]*}} 'D'

clang/test/AST/ast-dump-template-name.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ namespace qualified {
1313
// CHECK-NEXT: TypeAliasDecl
1414
// CHECK-NEXT: `-ElaboratedType
1515
// CHECK-NEXT: `-TemplateSpecializationType
16+
// CHECK-NEXT: |-name: 'N' qualified
17+
// CHECK-NEXT: | `-TypeAliasTemplateDecl {{.+}} N{{$}}
1618
// CHECK-NEXT: |-TemplateArgument template 'foo::A':'qualified::foo::A' qualified{{$}}
1719
// CHECK-NEXT: | |-NestedNameSpecifier Namespace 0x{{.+}} 'foo'{{$}}
1820
// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} A{{$}}
@@ -27,6 +29,8 @@ namespace dependent {
2729
// CHECK-NEXT: TypeAliasDecl
2830
// CHECK-NEXT: `-ElaboratedType
2931
// CHECK-NEXT: `-TemplateSpecializationType
32+
// CHECK-NEXT: |-name: 'N' qualified
33+
// CHECK-NEXT: | `-TypeAliasTemplateDecl
3034
// CHECK-NEXT: |-TemplateArgument template 'T::template X':'type-parameter-0-0::template X' dependent{{$}}
3135
// CHECK-NEXT: | `-NestedNameSpecifier TypeSpec 'T'{{$}}
3236

@@ -47,6 +51,8 @@ namespace subst {
4751
// CHECK-NEXT: |-TypeAlias
4852
// CHECK-NEXT: `-ElaboratedType
4953
// CHECK-NEXT: `-TemplateSpecializationType
54+
// CHECK-NEXT: |-name: 'C':'subst::B<subst::A>::C' qualified
55+
// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} C
5056
// CHECK-NEXT: |-TemplateArgument template 'subst::A' subst index 0
5157
// CHECK-NEXT: | |-parameter: TemplateTemplateParmDecl {{.+}} depth 0 index 0 TT{{$}}
5258
// CHECK-NEXT: | |-associated ClassTemplateSpecialization {{.+}} 'B'{{$}}

clang/test/AST/ast-dump-using-template.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,19 @@ template<typename T>
2020
using A = S<T>;
2121
// CHECK: TypeAliasDecl
2222
// CHECK-NEXT: `-ElaboratedType {{.*}} 'S<T>' sugar dependent
23-
// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'S<T>' dependent using S
23+
// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'S<T>' dependent
24+
// CHECK-NEXT: |-name: 'S':'ns::S' qualified
25+
// CHECk-NEXT: | |-UsingShadowDecl {{.+}} ClassTemplate {{.+}} 'S'
2426

2527
// TemplateName in TemplateArgument.
2628
template <template <typename> class T> class X {};
2729
using B = X<S>;
2830
// CHECK: TypeAliasDecl
2931
// CHECK-NEXT: `-ElaboratedType {{.*}} 'X<S>' sugar
30-
// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'X<S>' sugar X
31-
// CHECK-NEXT: |-TemplateArgument template 'S'
32+
// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'X<S>' sugar
33+
// CHECK-NEXT: |-name: 'X' qualified
34+
// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} X
35+
// CHECK-NEXT: |-TemplateArgument template 'S':'ns::S' qualified
3236
// CHECK-NEXT: | |-UsingShadowDecl {{.*}} implicit ClassTemplate {{.*}} 'S'
3337
// CHECK-NEXT: | `-target: ClassTemplateDecl {{.*}} S
3438
// CHECK-NEXT: `-RecordType {{.*}} 'X<ns::S>'
@@ -40,11 +44,15 @@ using C = decltype(DeducedTemplateSpecializationT);
4044
// CHECK: DecltypeType {{.*}}
4145
// CHECK-NEXT: |-DeclRefExpr {{.*}}
4246
// CHECK-NEXT: `-ElaboratedType {{.*}} 'S<int>' sugar
43-
// CHECK-NEXT: `-DeducedTemplateSpecializationType {{.*}} 'ns::S<int>' sugar using
47+
// CHECK-NEXT: `-DeducedTemplateSpecializationType {{.*}} 'ns::S<int>' sugar
48+
// CHECK-NEXT: |-name: 'S':'ns::S' qualified
49+
// CHECK-NEXT: | |-UsingShadowDecl {{.+}} 'S'
4450

4551
S2 DeducedTemplateSpecializationT2(123);
4652
using D = decltype(DeducedTemplateSpecializationT2);
4753
// CHECK: DecltypeType {{.*}}
4854
// CHECK-NEXT: |-DeclRefExpr {{.*}}
4955
// CHECK-NEXT: `-ElaboratedType {{.*}} 'S2<int>' sugar
50-
// CHECK-NEXT: `-DeducedTemplateSpecializationType {{.*}} 'S2<int>' sugar using
56+
// CHECK-NEXT: `-DeducedTemplateSpecializationType {{.*}} 'S2<int>' sugar
57+
// CHECK-NEXT: |-name: 'S2':'ns::S2' qualified
58+
//CHECk-NEXT: | |-UsingShadowDecl {{.+}} ClassTemplate {{.+}} 'S2'

clang/test/Import/builtin-template/test.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,8 @@
22
// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s -Xcc -DPACK | FileCheck --check-prefix=CHECK-PACK %s
33
// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s -Xcc -DPACK -Xcc -DSEQ | FileCheck --check-prefixes=CHECK-SEQ,CHECK-PACK %s
44

5-
// CHECK-SEQ: BuiltinTemplateDecl
6-
// CHECK-SEQ-SAME: <invalid sloc>
7-
// CHECK-SEQ-SAME: implicit
8-
// CHECK-SEQ-SAME: __make_integer_seq
9-
10-
// CHECK-PACK: BuiltinTemplateDecl
11-
// CHECK-PACK-SAME: <invalid sloc>
12-
// CHECK-PACK-SAME: implicit
13-
// CHECK-PACK-SAME: __type_pack_element
5+
// CHECK-SEQ: BuiltinTemplateDecl {{.+}} <<invalid sloc>> <invalid sloc> implicit __make_integer_seq{{$}}
6+
// CHECK-PACK: BuiltinTemplateDecl {{.+}} <<invalid sloc>> <invalid sloc> implicit __type_pack_element{{$}}
147

158
void expr() {
169
#ifdef SEQ

clang/test/SemaTemplate/aggregate-deduction-candidate.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ namespace Basic {
7676
// CHECK: |-InjectedClassNameType {{.*}} 'C<T>' dependent
7777
// CHECK: | `-CXXRecord {{.*}} 'C'
7878
// CHECK: |-ElaboratedType {{.*}} 'S<T>' sugar dependent
79-
// CHECK: | `-TemplateSpecializationType {{.*}} 'S<T>' dependent S
79+
// CHECK: | `-TemplateSpecializationType {{.*}} 'S<T>' dependent
8080
// CHECK: | `-TemplateArgument type 'T'
8181
// CHECK: | `-TemplateTypeParmType {{.*}} 'T' dependent depth 0 index 0
8282
// CHECK: | `-TemplateTypeParm {{.*}} 'T'
@@ -354,7 +354,7 @@ namespace DeduceArity {
354354
// CHECK: |-InjectedClassNameType {{.*}} 'F<T...>' dependent
355355
// CHECK: | `-CXXRecord {{.*}} 'F'
356356
// CHECK: |-ElaboratedType {{.*}} 'Types<T...>' sugar dependent
357-
// CHECK: | `-TemplateSpecializationType {{.*}} 'Types<T...>' dependent Types
357+
// CHECK: | `-TemplateSpecializationType {{.*}} 'Types<T...>' dependent
358358
// CHECK: | `-TemplateArgument type 'T...'
359359
// CHECK: | `-PackExpansionType {{.*}} 'T...' dependent
360360
// CHECK: | `-TemplateTypeParmType {{.*}} 'T' dependent contains_unexpanded_pack depth 0 index 0 pack

clang/test/SemaTemplate/deduction-guide.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ using AT = A<int[3], int, int, short>;
4444
// CHECK: FunctionProtoType {{.*}} 'auto (X<Ps...>, Ts (*)[Ns]...) -> A<T, Ts...>' dependent trailing_return
4545
// CHECK: |-InjectedClassNameType {{.*}} 'A<T, Ts...>' dependent
4646
// CHECK: |-ElaboratedType {{.*}} 'X<Ps...>' sugar dependent
47-
// CHECK: | `-TemplateSpecializationType {{.*}} 'X<Ps...>' dependent X
47+
// CHECK: | `-TemplateSpecializationType {{.*}} 'X<Ps...>' dependent
4848
// CHECK: | `-TemplateArgument expr
4949
// CHECK: | `-PackExpansionExpr {{.*}} 'T *'
5050
// CHECK: | `-DeclRefExpr {{.*}} 'T *' NonTypeTemplateParm {{.*}} 'Ps' 'T *'
@@ -79,7 +79,7 @@ using BT = B<char, 'x'>;
7979
// CHECK: `-ParmVarDecl {{.*}} 'X<nullptr, 'x'>'
8080
// CHECK: FunctionProtoType {{.*}} 'auto (X<W, V>) -> B<T, V>' dependent trailing_return
8181
// CHECK: |-InjectedClassNameType {{.*}} 'B<T, V>' dependent
82-
// CHECK: `-TemplateSpecializationType {{.*}} 'X<W, V>' dependent X
82+
// CHECK: `-TemplateSpecializationType {{.*}} 'X<W, V>' dependent
8383
// CHECK: |-TemplateArgument expr
8484
// CHECK: | `-DeclRefExpr {{.*}} 'type-parameter-0-2' NonTypeTemplateParm {{.*}} 'W' 'type-parameter-0-2'
8585
// CHECK: `-TemplateArgument expr
@@ -119,7 +119,7 @@ using CT = C<int>;
119119
// CHECK: |-TemplateTypeParmType {{.*}} 'A' dependent depth 0 index 0
120120
// CHECK: | `-TemplateTypeParm {{.*}} 'A'
121121
// CHECK: |-ElaboratedType {{.*}} 'Y<template-parameter-0-1>' sugar dependent
122-
// CHECK: | `-TemplateSpecializationType {{.*}} 'Y<template-parameter-0-1>' dependent Y
122+
// CHECK: | `-TemplateSpecializationType {{.*}} 'Y<template-parameter-0-1>' dependent
123123
// CHECK: | `-TemplateArgument template
124124
// CHECK: `-TemplateTypeParmType {{.*}} 'type-parameter-0-2' dependent depth 0 index 2
125125

@@ -144,7 +144,7 @@ using DT = D<int, int>;
144144
// CHECK: FunctionProtoType {{.*}} 'auto (B<type-parameter-0-1, type-parameter-0-2> *) -> D<T...>' dependent trailing_return
145145
// CHECK: |-InjectedClassNameType {{.*}} 'D<T...>' dependent
146146
// CHECK: `-PointerType {{.*}} 'B<type-parameter-0-1, type-parameter-0-2> *' dependent
147-
// CHECK: `-TemplateSpecializationType {{.*}} 'B<type-parameter-0-1, type-parameter-0-2>' sugar dependent alias B
147+
// CHECK: `-TemplateSpecializationType {{.*}} 'B<type-parameter-0-1, type-parameter-0-2>' sugar dependent alias
148148
// CHECK: |-TemplateArgument type 'type-parameter-0-1'
149149
// CHECK: |-TemplateArgument type 'type-parameter-0-2'
150150
// CHECK: `-FunctionProtoType {{.*}} 'int (int (*)(T, U)...)' dependent cdecl
@@ -185,15 +185,15 @@ using ET = E<1, 3>;
185185
// CHECK: `-ParmVarDecl {{.*}} 'B<M1, M2>':'Z<X<N, M>...>'
186186
// CHECK: FunctionProtoType {{.*}} 'auto (B<M1, M2>) -> E<N...>' dependent trailing_return
187187
// CHECK: |-InjectedClassNameType {{.*}} 'E<N...>' dependent
188-
// CHECK: `-TemplateSpecializationType {{.*}} 'B<M1, M2>' sugar dependent alias B
188+
// CHECK: `-TemplateSpecializationType {{.*}} 'B<M1, M2>' sugar dependent alias
189189
// CHECK: |-TemplateArgument expr
190190
// CHECK: | `-DeclRefExpr {{.*}} 'int' NonTypeTemplateParm {{.*}} 'M1' 'int'
191191
// CHECK: |-TemplateArgument expr
192192
// CHECK: | `-DeclRefExpr {{.*}} 'int' NonTypeTemplateParm {{.*}} 'M2' 'int'
193-
// CHECK: `-TemplateSpecializationType {{.*}} 'Z<X<N, M>...>' dependent Z
193+
// CHECK: `-TemplateSpecializationType {{.*}} 'Z<X<N, M>...>' dependent
194194
// CHECK: `-TemplateArgument type 'X<N, M>...'
195195
// CHECK: `-PackExpansionType {{.*}} 'X<N, M>...' dependent expansions 2
196-
// CHECK: `-TemplateSpecializationType {{.*}} 'X<N, M>' dependent contains_unexpanded_pack X
196+
// CHECK: `-TemplateSpecializationType {{.*}} 'X<N, M>' dependent contains_unexpanded_pack
197197
// CHECK: |-TemplateArgument expr
198198
// CHECK-NOT: Subst
199199
// CHECK: | `-DeclRefExpr {{.*}} 'int' NonTypeTemplateParm [[N]] 'N' 'int'
@@ -290,7 +290,9 @@ using AFoo = Foo<G<U>>;
290290
// CHECK-NEXT: | | `-IntegerLiteral {{.*}}
291291
// CHECK-NEXT: | `-TypeTraitExpr {{.*}} 'bool' __is_deducible
292292
// CHECK-NEXT: | |-DeducedTemplateSpecializationType {{.*}} 'AFoo' dependent
293-
// CHECK-NEXT: | `-TemplateSpecializationType {{.*}} 'Foo<G<type-parameter-0-0>>' dependent Foo
293+
// CHECK-NEXT: | | `-name: 'AFoo'
294+
// CHECK-NEXT: | | `-TypeAliasTemplateDecl {{.+}} AFoo
295+
// CHECK-NEXT: | `-TemplateSpecializationType {{.*}} 'Foo<G<type-parameter-0-0>>' dependent
294296
// CHECK: |-CXXDeductionGuideDecl {{.*}} implicit <deduction guide for AFoo> 'auto (G<type-parameter-0-0>) -> Foo<G<type-parameter-0-0>>'
295297
// CHECK-NEXT: | `-ParmVarDecl {{.*}} 'G<type-parameter-0-0>'
296298
// CHECK-NEXT: `-CXXDeductionGuideDecl {{.*}} implicit used <deduction guide for AFoo> 'auto (G<int>) -> Foo<G<int>>' implicit_instantiation
@@ -327,7 +329,9 @@ namespace TTP {
327329
// CHECK-NEXT: |-InjectedClassNameType {{.+}} 'B<T>' dependent{{$}}
328330
// CHECK-NEXT: | `-CXXRecord {{.+}} 'B'{{$}}
329331
// CHECK-NEXT: `-ElaboratedType {{.+}} 'template-parameter-0-1<T>' sugar dependent{{$}}
330-
// CHECK-NEXT: `-TemplateSpecializationType {{.+}} 'template-parameter-0-1<T>' dependent template-parameter-0-1{{$}}
332+
// CHECK-NEXT: `-TemplateSpecializationType {{.+}} 'template-parameter-0-1<T>' dependent{{$}}
333+
// CHECK-NEXT: |-name: 'template-parameter-0-1' qualified
334+
// CHECK-NEXT: | `-TemplateTemplateParmDecl {{.+}} depth 0 index 1
331335
// CHECK-NEXT: `-TemplateArgument type 'T':'type-parameter-0-0'{{$}}
332336
// CHECK-NEXT: `-TemplateTypeParmType {{.+}} 'T' dependent depth 0 index 0{{$}}
333337
// CHECK-NEXT: `-TemplateTypeParm {{.+}} 'T'{{$}}

0 commit comments

Comments
 (0)