78 lines · cpp
1// RUN: %clang_cc1 %s -emit-llvm -triple x86_64-apple-macosx10.13.0 -o - | FileCheck %s --check-prefixes=CHECK,NO_EXCEPTIONS2// RUN: %clang_cc1 -fexceptions %s -emit-llvm -triple x86_64-apple-macosx10.13.0 -o - | FileCheck %s --check-prefixes=CHECK,EXCEPTIONS3 4struct NonTrivial {5 ~NonTrivial();6};7 8// CHECK-NOT: __cxa_atexit{{.*}}_ZN10NonTrivialD1Ev9[[clang::no_destroy]] NonTrivial nt1;10// CHECK-NOT: _tlv_atexit{{.*}}_ZN10NonTrivialD1Ev11[[clang::no_destroy]] thread_local NonTrivial nt2;12 13struct NonTrivial2 {14 ~NonTrivial2();15};16 17// CHECK: __cxa_atexit{{.*}}_ZN11NonTrivial2D1Ev{{.*}}nt2118NonTrivial2 nt21;19// CHECK: _tlv_atexit{{.*}}_ZN11NonTrivial2D1Ev{{.*}}nt2220thread_local NonTrivial2 nt22;21 22// CHECK-LABEL: define{{.*}} void @_Z1fv23void f() {24 // CHECK: __cxa_atexit{{.*}}_ZN11NonTrivial2D1Ev25 static NonTrivial2 nt21;26 // CHECK: _tlv_atexit{{.*}}_ZN11NonTrivial2D1Ev27 thread_local NonTrivial2 nt22;28}29 30// CHECK-LABEL: define{{.*}} void @_Z1gv31void g() {32 // CHECK-NOT: __cxa_atexit33 [[clang::no_destroy]] static NonTrivial2 nt21;34 // CHECK-NOT: _tlv_atexit35 [[clang::no_destroy]] thread_local NonTrivial2 nt22;36}37 38// CHECK-LABEL: define internal void @__cxx_global_var_init39// CHECK: __cxa_atexit{{.*}}_ZN10NonTrivialD1Ev40[[clang::always_destroy]] NonTrivial nt3;41// CHECK-LABEL: define internal void @__cxx_global_var_init42// CHECK: _tlv_atexit{{.*}}_ZN10NonTrivialD1Ev43[[clang::always_destroy]] thread_local NonTrivial nt4;44 45 46struct NonTrivial3 {47 NonTrivial3();48 ~NonTrivial3();49};50 51[[clang::no_destroy]] NonTrivial3 arr[10];52 53// CHECK-LABEL: define internal void @__cxx_global_var_init54// CHECK: {{invoke|call}} void @_ZN11NonTrivial3C1Ev55// EXCEPTIONS: call void @_ZN11NonTrivial3D1Ev56// NO_EXCEPTIONS-NOT: call void @_ZN11NonTrivial3D1Ev57// CHECK-NOT: call i32 @__cxa_atexit58 59void h() {60 [[clang::no_destroy]] static NonTrivial3 slarr[10];61}62 63// CHECK-LABEL: define{{.*}} void @_Z1hv64// CHECK: {{invoke|call}} void @_ZN11NonTrivial3C1Ev65// EXCEPTIONS: call void @_ZN11NonTrivial3D1Ev66// NO_EXCEPTIONS-NOT: call void @_ZN11NonTrivial3D1Ev67// CHECK-NOT: call i32 @__cxa_atexit68 69void i() {70 [[clang::no_destroy]] thread_local NonTrivial3 tlarr[10];71}72 73// CHECK-LABEL: define{{.*}} void @_Z1iv74// CHECK: {{invoke|call}} void @_ZN11NonTrivial3C1Ev75// EXCEPTIONS: call void @_ZN11NonTrivial3D1Ev76// NO_EXCEPTIONS-NOT: call void @_ZN11NonTrivial3D1Ev77// CHECK-NOT: _tlv_atexit78