blob: 1195b912c2556484f2df3e55614ce11d22abda59 [file] [log] [blame]
Richard Smith2b4fa532019-09-29 05:08:46 +00001// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -o - %s -std=c++2a | FileCheck %s --implicit-check-not=cxx_global_var_init --implicit-check-not=cxa_atexit
2
3// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-pch -o %t.pch %s -std=c++2a
4// RUN: %clang_cc1 -triple x86_64-linux-gnu -include-pch %t.pch -x c++ /dev/null -emit-llvm -o - -std=c++2a | FileCheck %s --implicit-check-not=cxx_global_var_init --implicit-check-not=cxa_atexit
Richard Smithda1b4342019-09-27 01:26:47 +00005
6// CHECK: @a = global i32 123,
7int a = (delete new int, 123);
Richard Smith2b4fa532019-09-29 05:08:46 +00008
9struct B {
10 constexpr B() {}
11 constexpr ~B() { n *= 5; }
12 int n = 123;
13};
14// CHECK: @b = global {{.*}} i32 123
15extern constexpr B b = B();
16
17// CHECK: @_ZL1c = internal global {{.*}} i32 123
18const B c;
19int use_c() { return c.n; }
20
21struct D {
22 int n;
23 constexpr ~D() {}
24};
25D d;
26// CHECK: @d = global {{.*}} zeroinitializer
27
28D d_arr[3];
29// CHECK: @d_arr = global {{.*}} zeroinitializer
30
31thread_local D d_tl;
32// CHECK: @d_tl = thread_local global {{.*}} zeroinitializer
33
34// CHECK-NOT: @llvm.global_ctors
35
36// CHECK-LABEL: define {{.*}} @_Z1fv(
37void f() {
38 // CHECK-NOT: call
39 // CHECK: call {{.*}}memcpy
40 // CHECK-NOT: call
41 // CHECK: call {{.*}}memset
42 // CHECK-NOT: call
43 // CHECK: }
44 constexpr B b;
45 D d = D();
46}
47
48// CHECK-LABEL: define {{.*}} @_Z1gv(
49void g() {
50 // CHECK-NOT: call
51 // CHECK-NOT: cxa_guard
52 // CHECK-NOT: _ZGV
53 // CHECK: }
54 static constexpr B b1;
55 static const B b2;
56 static D d;
57 thread_local D d_tl;
58}