Clang Project

clang_source_code/test/CodeGenCXX/member-init-anon-union.cpp
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// 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: }
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: }
66