2020-02-04 02:09:39 +08:00
|
|
|
// 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
|
2019-09-29 13:08:46 +08:00
|
|
|
|
|
|
|
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-pch -o %t.pch %s -std=c++2a
|
2020-02-04 02:09:39 +08:00
|
|
|
// 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
|
2019-09-27 09:26:47 +08:00
|
|
|
|
2020-02-04 02:09:39 +08:00
|
|
|
// CHECK: @a = global i32 123,
|
2019-09-27 09:26:47 +08:00
|
|
|
int a = (delete new int, 123);
|
2019-09-29 13:08:46 +08:00
|
|
|
|
|
|
|
struct B {
|
|
|
|
constexpr B() {}
|
|
|
|
constexpr ~B() { n *= 5; }
|
|
|
|
int n = 123;
|
|
|
|
};
|
2020-02-04 02:09:39 +08:00
|
|
|
// CHECK: @b = global {{.*}} i32 123
|
2019-09-29 13:08:46 +08:00
|
|
|
extern constexpr B b = B();
|
|
|
|
|
|
|
|
// CHECK: @_ZL1c = internal global {{.*}} i32 123
|
|
|
|
const B c;
|
|
|
|
int use_c() { return c.n; }
|
|
|
|
|
|
|
|
struct D {
|
|
|
|
int n;
|
|
|
|
constexpr ~D() {}
|
|
|
|
};
|
|
|
|
D d;
|
2020-02-04 02:09:39 +08:00
|
|
|
// CHECK: @d = global {{.*}} zeroinitializer
|
2019-09-29 13:08:46 +08:00
|
|
|
|
|
|
|
D d_arr[3];
|
2020-02-04 02:09:39 +08:00
|
|
|
// CHECK: @d_arr = global {{.*}} zeroinitializer
|
2019-09-29 13:08:46 +08:00
|
|
|
|
|
|
|
thread_local D d_tl;
|
2020-02-04 02:09:39 +08:00
|
|
|
// CHECK: @d_tl = thread_local global {{.*}} zeroinitializer
|
2019-09-29 13:08:46 +08:00
|
|
|
|
|
|
|
// CHECK-NOT: @llvm.global_ctors
|
|
|
|
|
|
|
|
// CHECK-LABEL: define {{.*}} @_Z1fv(
|
|
|
|
void f() {
|
|
|
|
// CHECK-NOT: call
|
|
|
|
// CHECK: call {{.*}}memcpy
|
|
|
|
// CHECK-NOT: call
|
|
|
|
// CHECK: call {{.*}}memset
|
|
|
|
// CHECK-NOT: call
|
|
|
|
// CHECK: }
|
|
|
|
constexpr B b;
|
|
|
|
D d = D();
|
|
|
|
}
|
|
|
|
|
|
|
|
// CHECK-LABEL: define {{.*}} @_Z1gv(
|
|
|
|
void g() {
|
|
|
|
// CHECK-NOT: call
|
|
|
|
// CHECK-NOT: cxa_guard
|
|
|
|
// CHECK-NOT: _ZGV
|
|
|
|
// CHECK: }
|
|
|
|
static constexpr B b1;
|
|
|
|
static const B b2;
|
|
|
|
static D d;
|
|
|
|
thread_local D d_tl;
|
|
|
|
}
|