brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.4 KiB · edd13ba Raw
315 lines · cpp
1// Test without serialization:2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++17 -ast-dump %s \3// RUN: | FileCheck -strict-whitespace %s4//5// Test with serialization:6// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++17 -emit-pch -o %t %s7// RUN: %clang_cc1 -x c++ -triple x86_64-unknown-unknown -std=c++17 -include-pch %t -ast-dump-all /dev/null \8// RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \9// RUN: | FileCheck -strict-whitespace %s10 11struct A;12// CHECK: CXXRecordDecl 0x{{[^ ]*}} <{{.*}}:1, col:8> col:8 struct A13 14struct B;15// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, col:8> col:8 referenced struct B16 17struct A {18  // CHECK: CXXRecordDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+32]]:1> line:[[@LINE-1]]:8 struct A definition19  // CHECK-NEXT: DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal20  // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit21  // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param22  // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit23  // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param24  // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit25  // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit26 27  // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <col:1, col:8> col:8 implicit struct A28  int a;29  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> col:7 a 'int'30  int b, c;31  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> col:7 b 'int'32  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <col:3, col:10> col:10 c 'int'33  int d : 12;34  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> col:7 d 'int'35  // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} <col:11> 'int'36  // CHECK-NEXT: value: Int 1237  // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:11> 'int' 1238  int : 0;39  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9> col:7 'int'40  // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} <col:9> 'int'41  // CHECK-NEXT: value: Int 042  // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:9> 'int' 043  int e : 10;44  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> col:7 e 'int'45  // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} <col:11> 'int'46  // CHECK-NEXT: value: Int 1047  // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:11> 'int' 1048  B *f;49  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:6> col:6 f 'B *'50};51 52struct C {53  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+66]]:1> line:[[@LINE-1]]:8 struct C definition54  // CHECK-NEXT: DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal has_variant_members55  // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit56  // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param57  // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit58  // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param59  // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit60  // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit61 62  // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <col:1, col:8> col:8 implicit struct C63  struct {64    // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, line:[[@LINE+10]]:3> line:[[@LINE-1]]:3 struct definition65    // CHECK-NEXT: DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal66    // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit67    // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param68    // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit69    // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param70    // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit71    // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit72    int a;73    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:9> col:9 a 'int'74  } b;75  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-12]]:3, line:[[@LINE-1]]:5> col:5 b 'struct (unnamed struct at {{.*}}:[[@LINE-12]]:3)'76 77  union {78    // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, line:[[@LINE+12]]:3> line:[[@LINE-1]]:3 union definition79    // CHECK-NEXT: DefinitionData is_anonymous pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal80    // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit81    // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param82    // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit83    // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param84    // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit85    // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit86    int c;87    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:9> col:9 c 'int'88    float d;89    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:11> col:11 d 'float'90  };91  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-14]]:3> col:3 implicit 'C::(anonymous union at {{.*}}:[[@LINE-14]]:3)'92  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <line:[[@LINE-6]]:9> col:9 implicit c 'int'93  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 1 'C::(anonymous union at {{.*}}:[[@LINE-16]]:3)'94  // CHECK-NEXT: Field 0x{{[^ ]*}} 'c' 'int'95  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <line:[[@LINE-7]]:11> col:11 implicit d 'float'96  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 1 'C::(anonymous union at {{.*}}:[[@LINE-19]]:3)'97  // CHECK-NEXT: Field 0x{{[^ ]*}} 'd' 'float'98 99  struct {100    // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, line:[[@LINE+11]]:3> line:[[@LINE-1]]:3 struct definition101    // CHECK-NEXT: DefinitionData is_anonymous pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal102    // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit103    // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param104    // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit105    // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param106    // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit107    // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit108    int e, f;109    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:9> col:9 e 'int'110    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <col:5, col:12> col:12 f 'int'111  };112  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-13]]:3> col:3 implicit 'C::(anonymous struct at {{.*}}:[[@LINE-13]]:3)'113  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <line:[[@LINE-5]]:9> col:9 implicit e 'int'114  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 2 'C::(anonymous struct at {{.*}}:[[@LINE-15]]:3)'115  // CHECK-NEXT: Field 0x{{[^ ]*}} 'e' 'int'116  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <col:12> col:12 implicit f 'int'117  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 2 'C::(anonymous struct at {{.*}}:[[@LINE-18]]:3)'118  // CHECK-NEXT: Field 0x{{[^ ]*}} 'f' 'int'119};120 121struct D {122  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+16]]:1> line:[[@LINE-1]]:8 struct D definition123  // CHECK-NEXT: DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal124  // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit125  // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param126  // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit127  // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param128  // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit129  // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit130 131  // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <col:1, col:8> col:8 implicit struct D132  int a;133  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> col:7 a 'int'134  int b[10];135  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> col:7 b 'int[10]'136  int c[];137  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9> col:7 c 'int[]'138};139 140union E;141// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, col:7> col:7 union E142 143union F;144// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, col:7> col:7 union F145 146union E {147  // CHECK: CXXRecordDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+32]]:1> line:[[@LINE-1]]:7 union E definition148  // CHECK-NEXT: DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal149  // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit150  // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param151  // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit152  // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param153  // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit154  // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit155 156  // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <col:1, col:7> col:7 implicit union E157  int a;158  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> col:7 a 'int'159  int b, c;160  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> col:7 b 'int'161  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <col:3, col:10> col:10 c 'int'162  int d : 12;163  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> col:7 d 'int'164  // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} <col:11> 'int'165  // CHECK-NEXT: value: Int 12166  // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:11> 'int' 12167  int : 0;168  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9> col:7 'int'169  // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} <col:9> 'int'170  // CHECK-NEXT: value: Int 0171  // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:9> 'int' 0172  int e : 10;173  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> col:7 e 'int'174  // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} <col:11> 'int'175  // CHECK-NEXT: value: Int 10176  // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:11> 'int' 10177  B *f;178  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:6> col:6 f 'B *'179};180 181union G {182  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+69]]:1> line:[[@LINE-1]]:7 union G definition183  // CHECK-NEXT: DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal184  // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit185  // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param186  // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit187  // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param188  // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit189  // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit190 191  // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <col:1, col:7> col:7 implicit union G192  struct {193    // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, line:[[@LINE+11]]:3> line:[[@LINE-1]]:3 struct definition194    // CHECK-NEXT: DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal195    // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit196    // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param197    // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit198    // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param199    // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit200    // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit201 202    int a;203    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:9> col:9 a 'int'204  } b;205  // CHECK: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-13]]:3, line:[[@LINE-1]]:5> col:5 b 'struct (unnamed struct at {{.*}}:[[@LINE-13]]:3)'206 207  union {208    // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, line:[[@LINE+13]]:3> line:[[@LINE-1]]:3 union definition209    // CHECK-NEXT: DefinitionData is_anonymous pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal210    // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit211    // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param212    // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit213    // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param214    // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit215    // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit216 217    int c;218    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:9> col:9 c 'int'219    float d;220    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:11> col:11 d 'float'221  };222  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-15]]:3> col:3 implicit 'G::(anonymous union at {{.*}}:[[@LINE-15]]:3)'223  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <line:[[@LINE-6]]:9> col:9 implicit c 'int'224  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 1 'G::(anonymous union at {{.*}}:[[@LINE-17]]:3)'225  // CHECK-NEXT: Field 0x{{[^ ]*}} 'c' 'int'226  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <line:[[@LINE-7]]:11> col:11 implicit d 'float'227  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 1 'G::(anonymous union at {{.*}}:[[@LINE-20]]:3)'228  // CHECK-NEXT: Field 0x{{[^ ]*}} 'd' 'float'229 230  struct {231    // CHECK-NEXT: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:3, line:[[@LINE+12]]:3> line:[[@LINE-1]]:3 struct definition232    // CHECK-NEXT: DefinitionData is_anonymous pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal233    // CHECK-NEXT: DefaultConstructor exists trivial needs_implicit234    // CHECK-NEXT: CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param235    // CHECK-NEXT: MoveConstructor exists simple trivial needs_implicit236    // CHECK-NEXT: CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param237    // CHECK-NEXT: MoveAssignment exists simple trivial needs_implicit238    // CHECK-NEXT: Destructor simple irrelevant trivial needs_implicit239 240    int e, f;241    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:5, col:9> col:9 e 'int'242    // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <col:5, col:12> col:12 f 'int'243  };244  // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} <line:[[@LINE-14]]:3> col:3 implicit 'G::(anonymous struct at {{.*}}:[[@LINE-14]]:3)'245  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <line:[[@LINE-5]]:9> col:9 implicit e 'int'246  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 2 'G::(anonymous struct at {{.*}}:[[@LINE-16]]:3)'247  // CHECK-NEXT: Field 0x{{[^ ]*}} 'e' 'int'248  // CHECK-NEXT: IndirectFieldDecl 0x{{[^ ]*}} <col:12> col:12 implicit f 'int'249  // CHECK-NEXT: Field 0x{{[^ ]*}} field_index 2 'G::(anonymous struct at {{.*}}:[[@LINE-19]]:3)'250  // CHECK-NEXT: Field 0x{{[^ ]*}} 'f' 'int'251};252 253struct Base1 {};254struct Base2 {};255struct Base3 {};256 257struct Derived1 : Base1 {258  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct Derived1 definition259  // CHECK: public 'Base1'260};261 262struct Derived2 : private Base1 {263  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct Derived2 definition264  // CHECK: private 'Base1'265};266 267struct Derived3 : virtual Base1 {268  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct Derived3 definition269  // CHECK: virtual public 'Base1'270};271 272struct Derived4 : Base1, virtual Base2, protected Base3 {273  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+4]]:1> line:[[@LINE-1]]:8 struct Derived4 definition274  // CHECK: public 'Base1'275  // CHECK-NEXT: virtual public 'Base2'276  // CHECK-NEXT: protected 'Base3'277};278 279struct Derived5 : protected virtual Base1 {280  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct Derived5 definition281  // CHECK: virtual protected 'Base1'282};283 284template <typename... Bases>285struct Derived6 : virtual public Bases... {286  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct Derived6 definition287  // CHECK: virtual public 'Bases'...288};289 290class NonTrivial {291// CHECK: |-CXXRecordDecl {{.*}} referenced class NonTrivial definition292 public:293  NonTrivial();294// CHECK: | |-CXXConstructorDecl {{.*}} referenced NonTrivial 'void ()'295  ~NonTrivial();296// CHECK: | |-CXXDestructorDecl {{.*}} referenced ~NonTrivial 'void () noexcept'297};298 299struct CheckFullExpression {300// CHECK: |-CXXRecordDecl {{.*}} struct CheckFullExpression definition301  NonTrivial value = NonTrivial();302// CHECK: | |-FieldDecl {{.*}} value 'NonTrivial'303// CHECK-NEXT: | | `-ExprWithCleanups {{.*}} 'NonTrivial'304// CHECK-NEXT: | |   `-CXXBindTemporaryExpr {{.*}} 'NonTrivial' (CXXTemporary{{.*}})305// CHECK-NEXT: | |     `-CXXTemporaryObjectExpr {{.*}} 'NonTrivial' 'void ()'306};307 308struct CheckNoCleanup {309// CHECK: `-CXXRecordDecl {{.*}} struct CheckNoCleanup definition310  static constexpr char kConstant = '+';311// CHECK: `-VarDecl {{.*}} kConstant 'const char' static inline constexpr cinit312// CHECK-NEXT: |-value: Int 43313// CHECK-NEXT: `-CharacterLiteral {{.*}} 'char' 43314};315