]> granicus.if.org Git - clang/commitdiff
Print out the union field being initialized by an InitListExpr when dumping the AST...
authorAaron Ballman <aaron@aaronballman.com>
Wed, 19 Jun 2019 19:40:07 +0000 (19:40 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Wed, 19 Jun 2019 19:40:07 +0000 (19:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@363869 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/JSONNodeDumper.h
lib/AST/JSONNodeDumper.cpp
test/AST/ast-dump-stmt-json.cpp

index 4c34d79a27ad077df6e7fc9636f60a1a7f4adf3d..8f1cc4016c89ff8b9c7c377a51a7abf5b6f23466 100644 (file)
@@ -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);
index 59da96cee25d6185bfb902f8ab96fa234f464710..9fd7fb0c7d68a80195c9019bae4f6713ddbdd1dd 100644 (file)
@@ -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(
index ecdb8338f4df9557d95bae963c04b7267afd737a..d64c539fb913524ed0f394fac584c205a527e011 100644 (file)
@@ -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: }
-