xref: /llvm-project/clang/test/AST/ast-dump-default-init.cpp (revision 060137038ab9246b377e190ae3c6f272fa57cbfc)
17c1d9b15SFangrui Song // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck %s
2986d0dbaSyronglin 
3986d0dbaSyronglin struct A {
4986d0dbaSyronglin   int arr[1];
5986d0dbaSyronglin };
6986d0dbaSyronglin 
7986d0dbaSyronglin struct B {
8986d0dbaSyronglin   const A &a = A{{0}};
9986d0dbaSyronglin };
10986d0dbaSyronglin 
11986d0dbaSyronglin void test() {
12986d0dbaSyronglin   B b{};
13986d0dbaSyronglin }
14986d0dbaSyronglin // CHECK: -CXXDefaultInitExpr 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue has rewritten init
15986d0dbaSyronglin // CHECK-NEXT:  `-ExprWithCleanups 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue
16*06013703Syronglin // CHECK-NEXT:    `-MaterializeTemporaryExpr 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue extended by Var 0x{{[^ ]*}} 'b' 'B'
17986d0dbaSyronglin // CHECK-NEXT:      `-ImplicitCastExpr 0x{{[^ ]*}} <{{.*}}> 'const A' <NoOp>
18986d0dbaSyronglin // CHECK-NEXT:        `-CXXFunctionalCastExpr 0x{{[^ ]*}} <{{.*}}> 'A' functional cast to A <NoOp>
19986d0dbaSyronglin // CHECK-NEXT:          `-InitListExpr 0x{{[^ ]*}} <{{.*}}> 'A'
20986d0dbaSyronglin // CHECK-NEXT:            `-InitListExpr 0x{{[^ ]*}} <{{.*}}> 'int[1]'
21986d0dbaSyronglin // CHECK-NEXT:              `-IntegerLiteral 0x{{[^ ]*}} <{{.*}}> 'int' 0
22