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&lt;_Complex int x&gt;
struct E;
template&lt;&gt;
struct E&lt;{1, 2}&gt;;
```

Command `clang++ -Xclang -ast-dump usr.cpp -fsyntax-only -std=c++23`

Current AST dump result

```
|-ClassTemplateDecl 0x61a3b52364e8 &lt;usr.cpp:172:1, line:173:8&gt; col:8 E
| |-NonTypeTemplateParmDecl 0x61a3b52363b8 &lt;line:172:10, col:23&gt; col:23 
'_Complex int' depth 0 index 0 x
| |-CXXRecordDecl 0x61a3b5236438 &lt;line:173:1, col:8&gt; col:8 struct E
| `-ClassTemplateSpecialization 0x61a3b5236918 'E'
`-ClassTemplateSpecializationDecl 0x61a3b5236918 &lt;line:174:1, 
line:175:16&gt; col:8 struct E explicit_specialization
  `-TemplateArgument
```

After apply this fix

```
|-ClassTemplateDecl 0x7ce2a834fd60 &lt;usr.cpp:172:1, line:173:8&gt; col:8 E
| |-NonTypeTemplateParmDecl 0x7ce2a834fc10 &lt;line:172:10, col:23&gt; col:23 
'_Complex int' depth 0 index 0 x
| |-CXXRecordDecl 0x7ce2a834fca0 &lt;line:173:1, col:8&gt; col:8 struct E
| `-ClassTemplateSpecialization 0x7ce2a8350218 'E'
`-ClassTemplateSpecializationDecl 0x7ce2a8350218 &lt;line:174:1, 
line:175:16&gt; 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

Reply via email to