blob: 1195b912c2556484f2df3e55614ce11d22abda59 [file] [log] [blame]
Fangrui Songdbc96b52020-02-03 10:09:39 -08001// 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
Richard Smith2b4fa532019-09-29 05:08:46 +00002
3// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-pch -o %t.pch %s -std=c++2a
Fangrui Songdbc96b52020-02-03 10:09:39 -08004// 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
Fangrui Songdbc96b52020-02-03 10:09:39 -08006// CHECK: @a = global i32 123,
Richard Smithda1b4342019-09-27 01:26:47 +00007int 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};
Fangrui Songdbc96b52020-02-03 10:09:39 -080014// CHECK: @b = global {{.*}} i32 123
Richard Smith2b4fa532019-09-29 05:08:46 +000015extern 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;
Fangrui Songdbc96b52020-02-03 10:09:39 -080026// CHECK: @d = global {{.*}} zeroinitializer
Richard Smith2b4fa532019-09-29 05:08:46 +000027
28D d_arr[3];
Fangrui Songdbc96b52020-02-03 10:09:39 -080029// CHECK: @d_arr = global {{.*}} zeroinitializer
Richard Smith2b4fa532019-09-29 05:08:46 +000030
31thread_local D d_tl;
Fangrui Songdbc96b52020-02-03 10:09:39 -080032// CHECK: @d_tl = thread_local global {{.*}} zeroinitializer
Richard Smith2b4fa532019-09-29 05:08:46 +000033
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}