[clang] [clang] [ASTDump] Add support for structural value template arguments in TextNodeDumper (PR #126341)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 7 20:10:21 PST 2025
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
More information about the cfe-commits
mailing list