From: Aaron Ballman Date: Wed, 19 Jun 2019 19:40:07 +0000 (+0000) Subject: Print out the union field being initialized by an InitListExpr when dumping the AST... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=76cc1a176372a9776265522f6d3e65fb67a63aee;p=clang Print out the union field being initialized by an InitListExpr when dumping the AST to JSON. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@363869 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/JSONNodeDumper.h b/include/clang/AST/JSONNodeDumper.h index 4c34d79a27..8f1cc4016c 100644 --- a/include/clang/AST/JSONNodeDumper.h +++ b/include/clang/AST/JSONNodeDumper.h @@ -251,6 +251,7 @@ public: void VisitAddrLabelExpr(const AddrLabelExpr *ALE); void VisitCXXTypeidExpr(const CXXTypeidExpr *CTE); void VisitConstantExpr(const ConstantExpr *CE); + void VisitInitListExpr(const InitListExpr *ILE); void VisitIntegerLiteral(const IntegerLiteral *IL); void VisitCharacterLiteral(const CharacterLiteral *CL); diff --git a/lib/AST/JSONNodeDumper.cpp b/lib/AST/JSONNodeDumper.cpp index 59da96cee2..9fd7fb0c7d 100644 --- a/lib/AST/JSONNodeDumper.cpp +++ b/lib/AST/JSONNodeDumper.cpp @@ -984,6 +984,11 @@ void JSONNodeDumper::VisitConstantExpr(const ConstantExpr *CE) { } } +void JSONNodeDumper::VisitInitListExpr(const InitListExpr *ILE) { + if (const FieldDecl *FD = ILE->getInitializedFieldInUnion()) + JOS.attribute("field", createBareDeclRef(FD)); +} + void JSONNodeDumper::VisitIntegerLiteral(const IntegerLiteral *IL) { JOS.attribute("value", IL->getValue().toString( diff --git a/test/AST/ast-dump-stmt-json.cpp b/test/AST/ast-dump-stmt-json.cpp index ecdb8338f4..d64c539fb9 100644 --- a/test/AST/ast-dump-stmt-json.cpp +++ b/test/AST/ast-dump-stmt-json.cpp @@ -2415,7 +2415,15 @@ void TestIteration() { // CHECK-NEXT: "type": { // CHECK-NEXT: "qualType": "U" // CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "rvalue" +// CHECK-NEXT: "valueCategory": "rvalue", +// CHECK-NEXT: "field": { +// CHECK-NEXT: "id": "0x{{.*}}", +// CHECK-NEXT: "kind": "FieldDecl", +// CHECK-NEXT: "name": "i", +// CHECK-NEXT: "type": { +// CHECK-NEXT: "qualType": "int" +// CHECK-NEXT: } +// CHECK-NEXT: } // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "id": "0x{{.*}}", @@ -2436,6 +2444,14 @@ void TestIteration() { // CHECK-NEXT: "qualType": "U" // CHECK-NEXT: }, // CHECK-NEXT: "valueCategory": "rvalue", +// CHECK-NEXT: "field": { +// CHECK-NEXT: "id": "0x{{.*}}", +// CHECK-NEXT: "kind": "FieldDecl", +// CHECK-NEXT: "name": "i", +// CHECK-NEXT: "type": { +// CHECK-NEXT: "qualType": "int" +// CHECK-NEXT: } +// CHECK-NEXT: }, // CHECK-NEXT: "inner": [ // CHECK-NEXT: { // CHECK-NEXT: "id": "0x{{.*}}", @@ -5975,4 +5991,3 @@ void TestIteration() { // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: } -