| // RUN: %clang_cc1 %s -std=c++11 -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s |
| |
| // PR10531. |
| |
| int make_a(); |
| |
| static union { |
| int a = make_a(); |
| char *b; |
| }; |
| |
| int f() { return a; } |
| |
| // CHECK-LABEL: define internal void @__cxx_global_var_init |
| // CHECK-NOT: } |
| // CHECK: call {{.*}}@"[[CONSTRUCT_GLOBAL:.*]]C1Ev" |
| |
| |
| int g() { |
| union { |
| int a; |
| int b = 81; |
| }; |
| // CHECK-LABEL: define {{.*}}_Z1gv |
| // CHECK-NOT: } |
| // CHECK: call {{.*}}@"[[CONSTRUCT_LOCAL:.*]]C1Ev" |
| return b; |
| } |
| |
| struct A { |
| A(); |
| }; |
| union B { |
| int k; |
| struct { |
| A x; |
| int y = 123; |
| }; |
| B() {} |
| B(int n) : k(n) {} |
| }; |
| |
| B b1; |
| B b2(0); |
| |
| // CHECK: define {{.*}}@"[[CONSTRUCT_GLOBAL]]C2Ev" |
| // CHECK-NOT: } |
| // CHECK: call {{.*}}@_Z6make_a |
| |
| // CHECK: define {{.*}}@"[[CONSTRUCT_LOCAL]]C2Ev" |
| // CHECK-NOT: } |
| // CHECK: store i32 81 |
| |
| // CHECK-LABEL: define {{.*}} @_ZN1BC2Ev( |
| // CHECK: call void @_ZN1AC1Ev( |
| // CHECK: store i32 123, |
| // CHECK: } |
| |
| // CHECK-LABEL: define {{.*}} @_ZN1BC2Ei( |
| // CHECK-NOT: call void @_ZN1AC1Ev( |
| // CHECK-NOT: store i32 123, |
| // CHECK: store i32 % |
| // CHECK-NOT: call void @_ZN1AC1Ev( |
| // CHECK-NOT: store i32 123, |
| // CHECK: } |