1// RUN: %clang_cc1 %s -std=c++11 -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s
2
3// PR10531.
4
5int make_a();
6
7static union {
8  int a = make_a();
9  char *b;
10};
11
12int f() { return a; }
13
14// CHECK-LABEL: define internal void @__cxx_global_var_init
15// CHECK-NOT: }
16// CHECK: call {{.*}}@"[[CONSTRUCT_GLOBAL:.*]]C1Ev"
17
18
19int g() {
20  union {
21    int a;
22    int b = 81;
23  };
24  // CHECK-LABEL: define {{.*}}_Z1gv
25  // CHECK-NOT: }
26  // CHECK: call {{.*}}@"[[CONSTRUCT_LOCAL:.*]]C1Ev"
27  return b;
28}
29
30struct 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
46
47// CHECK-LABEL: define {{.*}} @_ZN1BC2Ei(
48// CHECK-NOT: call void @_ZN1AC1Ev(
49// CHECK-NOT: store i32 123,
50// CHECK: store i32 %
51// CHECK-NOT: call void @_ZN1AC1Ev(
52// CHECK-NOT: store i32 123,
53// CHECK: }
54
55// CHECK-LABEL: define {{.*}} @_ZN1BC2Ev(
56// CHECK: call void @_ZN1AC1Ev(
57// CHECK: store i32 123,
58// CHECK: }
59
60
61// CHECK: define {{.*}}@"[[CONSTRUCT_LOCAL]]C2Ev"
62// CHECK-NOT: }
63// CHECK: store i32 81
64
65// CHECK: define {{.*}}@"[[CONSTRUCT_GLOBAL]]C2Ev"
66// CHECK-NOT: }
67// CHECK: call {{.*}}@_Z6make_a
68