// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck %s // RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only -ast-dump=json %s | FileCheck --check-prefix JSON %s struct A { int arr[1]; }; struct B { const A &a = A{{0}}; }; void test() { B b{}; } // CHECK: -CXXDefaultInitExpr 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue has rewritten init // CHECK-NEXT: `-ExprWithCleanups 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue // CHECK-NEXT: `-MaterializeTemporaryExpr 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue extended by Var 0x{{[^ ]*}} 'b' 'B' // CHECK-NEXT: `-ImplicitCastExpr 0x{{[^ ]*}} <{{.*}}> 'const A' // CHECK-NEXT: `-CXXFunctionalCastExpr 0x{{[^ ]*}} <{{.*}}> 'A' functional cast to A // CHECK-NEXT: `-InitListExpr 0x{{[^ ]*}} <{{.*}}> 'A' // CHECK-NEXT: `-InitListExpr 0x{{[^ ]*}} <{{.*}}> 'int[1]' // CHECK-NEXT: `-IntegerLiteral 0x{{[^ ]*}} <{{.*}}> 'int' 0 // JSON: "kind": "CXXDefaultInitExpr", // JSON: "type": { // JSON-NEXT: "qualType": "const A" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "lvalue", // JSON-NEXT: "hasRewrittenInit": true, // JSON-NEXT: "inner": [ // JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "ExprWithCleanups", // JSON: "type": { // JSON-NEXT: "qualType": "const A" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "lvalue", // JSON-NEXT: "inner": [ // JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "MaterializeTemporaryExpr", // JSON: "type": { // JSON-NEXT: "qualType": "const A" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "lvalue", // JSON-NEXT: "extendingDecl": { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "VarDecl", // JSON-NEXT: "name": "b", // JSON-NEXT: "type": { // JSON-NEXT: "qualType": "B" // JSON-NEXT: } // JSON-NEXT: }, // JSON-NEXT: "storageDuration": "automatic", // JSON-NEXT: "boundToLValueRef": true, // JSON-NEXT: "inner": [ // JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "ImplicitCastExpr", // JSON: "type": { // JSON-NEXT: "qualType": "const A" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "prvalue", // JSON-NEXT: "castKind": "NoOp", // JSON-NEXT: "inner": [ // JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "CXXFunctionalCastExpr", // JSON: "type": { // JSON-NEXT: "qualType": "A" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "prvalue", // JSON-NEXT: "castKind": "NoOp", // JSON-NEXT: "inner": [ // JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "InitListExpr", // JSON: "type": { // JSON-NEXT: "qualType": "A" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "prvalue", // JSON-NEXT: "inner": [ // JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "InitListExpr", // JSON: "type": { // JSON-NEXT: "qualType": "int[1]" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "prvalue", // JSON-NEXT: "inner": [ // JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "IntegerLiteral", // JSON: "type": { // JSON-NEXT: "qualType": "int" // JSON-NEXT: }, // JSON-NEXT: "valueCategory": "prvalue", // JSON-NEXT: "value": "0" // JSON-NEXT: } // JSON-NEXT: ] // JSON-NEXT: } // JSON-NEXT: ]