llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: None (sakria9) <details> <summary>Changes</summary> Dump structural value in AST. Example code ```cpp template<_Complex int x> struct E; template<> struct E<{1, 2}>; ``` Command `clang++ -Xclang -ast-dump usr.cpp -fsyntax-only -std=c++23` Current AST dump result ``` |-ClassTemplateDecl 0x61a3b52364e8 <usr.cpp:172:1, line:173:8> col:8 E | |-NonTypeTemplateParmDecl 0x61a3b52363b8 <line:172:10, col:23> col:23 '_Complex int' depth 0 index 0 x | |-CXXRecordDecl 0x61a3b5236438 <line:173:1, col:8> col:8 struct E | `-ClassTemplateSpecialization 0x61a3b5236918 'E' `-ClassTemplateSpecializationDecl 0x61a3b5236918 <line:174:1, line:175:16> col:8 struct E explicit_specialization `-TemplateArgument ``` After apply this fix ``` |-ClassTemplateDecl 0x7ce2a834fd60 <usr.cpp:172:1, line:173:8> col:8 E | |-NonTypeTemplateParmDecl 0x7ce2a834fc10 <line:172:10, col:23> col:23 '_Complex int' depth 0 index 0 x | |-CXXRecordDecl 0x7ce2a834fca0 <line:173:1, col:8> col:8 struct E | `-ClassTemplateSpecialization 0x7ce2a8350218 'E' `-ClassTemplateSpecializationDecl 0x7ce2a8350218 <line:174:1, line:175:16> col:8 struct E explicit_specialization `-TemplateArgument structural value '1+2i' ``` --- Full diff: https://github.com/llvm/llvm-project/pull/126341.diff 2 Files Affected: - (modified) clang/include/clang/AST/TextNodeDumper.h (+1) - (modified) clang/lib/AST/TextNodeDumper.cpp (+5) ``````````diff diff --git a/clang/include/clang/AST/TextNodeDumper.h b/clang/include/clang/AST/TextNodeDumper.h index bfd205ffb0d99a..4b5ad2b5fa74c0 100644 --- a/clang/include/clang/AST/TextNodeDumper.h +++ b/clang/include/clang/AST/TextNodeDumper.h @@ -249,6 +249,7 @@ class TextNodeDumper void VisitDeclarationTemplateArgument(const TemplateArgument &TA); void VisitNullPtrTemplateArgument(const TemplateArgument &TA); void VisitIntegralTemplateArgument(const TemplateArgument &TA); + void VisitStructuralValueTemplateArgument(const TemplateArgument &TA); void VisitTemplateTemplateArgument(const TemplateArgument &TA); void VisitTemplateExpansionTemplateArgument(const TemplateArgument &TA); void VisitExpressionTemplateArgument(const TemplateArgument &TA); diff --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp index 6da1f776b4b635..cb0c742177d2c7 100644 --- a/clang/lib/AST/TextNodeDumper.cpp +++ b/clang/lib/AST/TextNodeDumper.cpp @@ -1226,6 +1226,11 @@ void TextNodeDumper::VisitIntegralTemplateArgument(const TemplateArgument &TA) { dumpTemplateArgument(TA); } +void TextNodeDumper::VisitStructuralValueTemplateArgument(const TemplateArgument &TA) { + OS << " structural value"; + dumpTemplateArgument(TA); +} + void TextNodeDumper::dumpTemplateName(TemplateName TN, StringRef Label) { AddChild(Label, [=] { { `````````` </details> https://github.com/llvm/llvm-project/pull/126341 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits