From 6afe3fe6f81f920d5ea6019b1117f42f8c079195 Mon Sep 17 00:00:00 2001 From: Bolshakov Date: Mon, 6 Oct 2025 21:57:33 +0300 Subject: [PATCH 1/2] [clang][AST] Pretty-print default template template args --- clang/docs/ReleaseNotes.rst | 2 +- clang/lib/AST/DeclPrinter.cpp | 6 +++++- clang/test/AST/ast-print-record-decl.c | 7 +++++++ clang/unittests/AST/DeclPrinterTest.cpp | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 390e0fa7a9a2b..be585e4919b54 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -124,7 +124,7 @@ AST Dumping Potentially Breaking Changes ``__atomic_test_and_set(p, 0)`` - Pretty-printing of templates with inherited (i.e. specified in a previous - redeclaration) default arguments has been fixed. + redeclaration) and template default arguments has been fixed. Clang Frontend Potentially Breaking Changes ------------------------------------------- diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp index 7001adeff5397..b2a837b82bb13 100644 --- a/clang/lib/AST/DeclPrinter.cpp +++ b/clang/lib/AST/DeclPrinter.cpp @@ -1190,7 +1190,11 @@ void DeclPrinter::printTemplateParameters(const TemplateParameterList *Params, VisitNonTypeTemplateParmDecl(NTTP); } else if (auto TTPD = dyn_cast(Param)) { VisitTemplateDecl(TTPD); - // FIXME: print the default argument, if present. + if (TTPD->hasDefaultArgument() && !TTPD->defaultArgumentWasInherited()) { + Out << " = "; + TTPD->getDefaultArgument().getArgument().print(Policy, Out, + /*IncludeType=*/false); + } } } diff --git a/clang/test/AST/ast-print-record-decl.c b/clang/test/AST/ast-print-record-decl.c index fd815881ebeb0..394f837c3645d 100644 --- a/clang/test/AST/ast-print-record-decl.c +++ b/clang/test/AST/ast-print-record-decl.c @@ -315,4 +315,11 @@ template KW SmearedNTTPDefArgs; // PRINT-CXX-NEXT: template [[KW]] SmearedNTTPDefArgs; template KW SmearedNTTPDefArgs; +// PRINT-CXX-LABEL: Tpl +template KW Tpl; +// PRINT-CXX-NEXT: template