Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 %s -std=c++11 -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s
      2 
      3 // PR10531.
      4 
      5 int make_a();
      6 
      7 static union {
      8   int a = make_a();
      9   char *b;
     10 };
     11 
     12 int 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 
     19 int 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 
     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 
     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