Richard Smith | 0b7f118 | 2013-12-10 19:37:58 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 %s -std=c++11 -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s |
Richard Smith | 4037235 | 2011-09-18 00:06:34 +0000 | [diff] [blame] | 2 | |
| 3 | // PR10531. |
| 4 | |
Richard Smith | e2648ba | 2012-05-07 01:07:30 +0000 | [diff] [blame] | 5 | int make_a(); |
| 6 | |
Richard Smith | 4037235 | 2011-09-18 00:06:34 +0000 | [diff] [blame] | 7 | static union { |
Richard Smith | e2648ba | 2012-05-07 01:07:30 +0000 | [diff] [blame] | 8 | int a = make_a(); |
Richard Smith | 4037235 | 2011-09-18 00:06:34 +0000 | [diff] [blame] | 9 | char *b; |
| 10 | }; |
| 11 | |
| 12 | int f() { return a; } |
| 13 | |
Stephen Lin | 4362261 | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 14 | // CHECK-LABEL: define internal void @__cxx_global_var_init |
Richard Smith | 4037235 | 2011-09-18 00:06:34 +0000 | [diff] [blame] | 15 | // CHECK-NOT: } |
| 16 | // CHECK: call {{.*}}@"[[CONSTRUCT_GLOBAL:.*]]C1Ev" |
| 17 | |
| 18 | |
| 19 | int g() { |
| 20 | union { |
| 21 | int a; |
| 22 | int b = 81; |
| 23 | }; |
Richard Smith | ab44d5b | 2013-12-10 08:25:00 +0000 | [diff] [blame] | 24 | // CHECK-LABEL: define {{.*}}_Z1gv |
Richard Smith | 4037235 | 2011-09-18 00:06:34 +0000 | [diff] [blame] | 25 | // CHECK-NOT: } |
| 26 | // CHECK: call {{.*}}@"[[CONSTRUCT_LOCAL:.*]]C1Ev" |
| 27 | return b; |
| 28 | } |
| 29 | |
Richard Smith | ab44d5b | 2013-12-10 08:25:00 +0000 | [diff] [blame] | 30 | struct A { |
| 31 | A(); |
| 32 | }; |
| 33 | union B { |
| 34 | int k; |
| 35 | struct { |
| 36 | A x; |
| 37 | int y = 123; |
| 38 | }; |
| 39 | B() {} |
| 40 | B(int n) : k(n) {} |
| 41 | }; |
| 42 | |
| 43 | B b1; |
| 44 | B b2(0); |
| 45 | |
Rafael Espindola | e5df59f | 2015-01-22 00:24:57 +0000 | [diff] [blame] | 46 | // CHECK: define {{.*}}@"[[CONSTRUCT_GLOBAL]]C2Ev" |
| 47 | // CHECK-NOT: } |
| 48 | // CHECK: call {{.*}}@_Z6make_a |
| 49 | |
| 50 | // CHECK: define {{.*}}@"[[CONSTRUCT_LOCAL]]C2Ev" |
| 51 | // CHECK-NOT: } |
| 52 | // CHECK: store i32 81 |
| 53 | |
| 54 | // CHECK-LABEL: define {{.*}} @_ZN1BC2Ev( |
| 55 | // CHECK: call void @_ZN1AC1Ev( |
| 56 | // CHECK: store i32 123, |
| 57 | // CHECK: } |
Richard Smith | ab44d5b | 2013-12-10 08:25:00 +0000 | [diff] [blame] | 58 | |
| 59 | // CHECK-LABEL: define {{.*}} @_ZN1BC2Ei( |
| 60 | // CHECK-NOT: call void @_ZN1AC1Ev( |
| 61 | // CHECK-NOT: store i32 123, |
| 62 | // CHECK: store i32 % |
| 63 | // CHECK-NOT: call void @_ZN1AC1Ev( |
| 64 | // CHECK-NOT: store i32 123, |
| 65 | // CHECK: } |