Skip to content

Commit 550e585

Browse files
committed
[clang][AST] Pretty-print default template template args
1 parent 2121bda commit 550e585

File tree

4 files changed

+14
-3
lines changed

4 files changed

+14
-3
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ AST Dumping Potentially Breaking Changes
124124
``__atomic_test_and_set(p, 0)``
125125

126126
- Pretty-printing of templates with inherited (i.e. specified in a previous
127-
redeclaration) default arguments has been fixed.
127+
redeclaration) and template default arguments has been fixed.
128128

129129
Clang Frontend Potentially Breaking Changes
130130
-------------------------------------------

clang/lib/AST/DeclPrinter.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,11 @@ void DeclPrinter::printTemplateParameters(const TemplateParameterList *Params,
11901190
VisitNonTypeTemplateParmDecl(NTTP);
11911191
} else if (auto TTPD = dyn_cast<TemplateTemplateParmDecl>(Param)) {
11921192
VisitTemplateDecl(TTPD);
1193-
// FIXME: print the default argument, if present.
1193+
if (TTPD->hasDefaultArgument() && !TTPD->defaultArgumentWasInherited()) {
1194+
Out << " = ";
1195+
TTPD->getDefaultArgument().getArgument().print(Policy, Out,
1196+
/*IncludeType=*/false);
1197+
}
11941198
}
11951199
}
11961200

clang/test/AST/ast-print-record-decl.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,4 +315,11 @@ template <int, int = 0> KW SmearedNTTPDefArgs;
315315
// PRINT-CXX-NEXT: template <int = 0, int> [[KW]] SmearedNTTPDefArgs;
316316
template <int = 0, int> KW SmearedNTTPDefArgs;
317317

318+
// PRINT-CXX-LABEL: Tpl
319+
template <int> KW Tpl;
320+
// PRINT-CXX-NEXT: template <template <int> class, template <int> class = Tpl> [[KW]] SmearedTplDefArgs;
321+
template <template <int> class, template <int> class = Tpl> KW SmearedTplDefArgs;
322+
// PRINT-CXX-NEXT: template <template <int> class = Tpl, template <int> class> [[KW]] SmearedTplDefArgs;
323+
template <template <int> class = Tpl, template <int> class> KW SmearedTplDefArgs;
324+
318325
#endif

clang/unittests/AST/DeclPrinterTest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ TEST(DeclPrinter, TestClassTemplateDecl9) {
10901090
"template<typename T> struct Z { };"
10911091
"template<template<typename U> class T = Z> struct A { };",
10921092
classTemplateDecl(hasName("A")).bind("id"),
1093-
"template <template <typename U> class T> struct A {}"));
1093+
"template <template <typename U> class T = Z> struct A {}"));
10941094
}
10951095

10961096
TEST(DeclPrinter, TestClassTemplateDecl10) {

0 commit comments

Comments
 (0)