1 // RUN: %clang_cc1 %s -fno-c++-static-destructors -emit-llvm -triple x86_64-apple-macosx10.13.0 -o - | FileCheck %s 2 3 struct NonTrivial { 4 ~NonTrivial(); 5 }; 6 7 // CHECK-NOT: __cxa_atexit{{.*}}_ZN10NonTrivialD1Ev 8 NonTrivial nt1; 9 // CHECK-NOT: _tlv_atexit{{.*}}_ZN10NonTrivialD1Ev 10 thread_local NonTrivial nt2; 11 12 struct NonTrivial2 { 13 ~NonTrivial2(); 14 }; 15 16 // CHECK: __cxa_atexit{{.*}}_ZN11NonTrivial2D1Ev 17 [[clang::always_destroy]] NonTrivial2 nt21; 18 // CHECK: _tlv_atexit{{.*}}_ZN11NonTrivial2D1Ev 19 [[clang::always_destroy]] thread_local NonTrivial2 nt22; 20 f()21void f() { 22 // CHECK: __cxa_atexit{{.*}}_ZN11NonTrivial2D1Ev 23 [[clang::always_destroy]] static NonTrivial2 nt21; 24 // CHECK: _tlv_atexit{{.*}}_ZN11NonTrivial2D1Ev 25 [[clang::always_destroy]] thread_local NonTrivial2 nt22; 26 } 27 28 // CHECK-NOT: __cxa_atexit{{.*}}_ZN10NonTrivialD1Ev 29 [[clang::no_destroy]] NonTrivial nt3; 30 // CHECK-NOT: _tlv_atexit{{.*}}_ZN10NonTrivialD1Ev 31 [[clang::no_destroy]] thread_local NonTrivial nt4; 32