mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 19:45:40 -04:00

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
20 lines
638 B
C++
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
|