teak-llvm/clang/test/CodeGenCXX/non-const-init-cxx2a.cpp
Richard Smith 2b4fa5348e For P0784R7: compute whether a variable has constant destruction if it
has a constexpr destructor.

For constexpr variables, reject if the variable does not have constant
destruction. In all cases, do not emit runtime calls to the destructor
for variables with constant destruction.

llvm-svn: 373159
2019-09-29 05:08:46 +00:00

20 lines
638 B
C++

// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s -std=c++2a | FileCheck %s
// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-pch -o %t.pch %s -std=c++2a
// RUN: %clang_cc1 -triple x86_64-apple-darwin -include-pch %t.pch -x c++ /dev/null -emit-llvm -o - -std=c++2a | FileCheck %s
struct B {
constexpr B() {}
constexpr ~B() { n *= 5; }
int n = 123;
};
// We emit a dynamic destructor here because b.n might have been modified
// before b is destroyed.
//
// CHECK: @b = global {{.*}} i32 123
B b = B();
// CHECK: define {{.*}}cxx_global_var_init
// CHECK: call {{.*}} @__cxa_atexit({{.*}} @_ZN1BD1Ev {{.*}} @b