blob: 6c2f90d284b18f11674a7a8b27995958683a8f1e [file] [log] [blame]
Richard Smith0b7f1182013-12-10 19:37:58 +00001// RUN: %clang_cc1 %s -std=c++11 -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s
Richard Smith40372352011-09-18 00:06:34 +00002
3// PR10531.
4
Richard Smithe2648ba2012-05-07 01:07:30 +00005int make_a();
6
Richard Smith40372352011-09-18 00:06:34 +00007static union {
Richard Smithe2648ba2012-05-07 01:07:30 +00008 int a = make_a();
Richard Smith40372352011-09-18 00:06:34 +00009 char *b;
10};
11
12int f() { return a; }
13
Stephen Lin43622612013-08-15 06:47:53 +000014// CHECK-LABEL: define internal void @__cxx_global_var_init
Richard Smith40372352011-09-18 00:06:34 +000015// CHECK-NOT: }
16// CHECK: call {{.*}}@"[[CONSTRUCT_GLOBAL:.*]]C1Ev"
17
18
19int g() {
20 union {
21 int a;
22 int b = 81;
23 };
Richard Smithab44d5b2013-12-10 08:25:00 +000024 // CHECK-LABEL: define {{.*}}_Z1gv
Richard Smith40372352011-09-18 00:06:34 +000025 // CHECK-NOT: }
26 // CHECK: call {{.*}}@"[[CONSTRUCT_LOCAL:.*]]C1Ev"
27 return b;
28}
29
Richard Smithab44d5b2013-12-10 08:25:00 +000030struct A {
31 A();
32};
33union B {
34 int k;
35 struct {
36 A x;
37 int y = 123;
38 };
39 B() {}
40 B(int n) : k(n) {}
41};
42
43B b1;
44B b2(0);
45
Rafael Espindolae5df59f2015-01-22 00:24:57 +000046// 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 Smithab44d5b2013-12-10 08:25:00 +000058
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: }