|  | // RUN: %clang_cc1 %s -fno-c++-static-destructors -emit-llvm -triple x86_64-apple-macosx10.13.0 -o - | FileCheck %s | 
|  |  | 
|  | struct NonTrivial { | 
|  | ~NonTrivial(); | 
|  | }; | 
|  |  | 
|  | // CHECK-NOT: __cxa_atexit{{.*}}_ZN10NonTrivialD1Ev | 
|  | NonTrivial nt1; | 
|  | // CHECK-NOT: _tlv_atexit{{.*}}_ZN10NonTrivialD1Ev | 
|  | thread_local NonTrivial nt2; | 
|  |  | 
|  | struct NonTrivial2 { | 
|  | ~NonTrivial2(); | 
|  | }; | 
|  |  | 
|  | // CHECK: __cxa_atexit{{.*}}_ZN11NonTrivial2D1Ev | 
|  | [[clang::always_destroy]] NonTrivial2 nt21; | 
|  | // CHECK: _tlv_atexit{{.*}}_ZN11NonTrivial2D1Ev | 
|  | [[clang::always_destroy]] thread_local NonTrivial2 nt22; | 
|  |  | 
|  | void f() { | 
|  | // CHECK: __cxa_atexit{{.*}}_ZN11NonTrivial2D1Ev | 
|  | [[clang::always_destroy]] static NonTrivial2 nt21; | 
|  | // CHECK: _tlv_atexit{{.*}}_ZN11NonTrivial2D1Ev | 
|  | [[clang::always_destroy]] thread_local NonTrivial2 nt22; | 
|  | } | 
|  |  | 
|  | // CHECK-NOT: __cxa_atexit{{.*}}_ZN10NonTrivialD1Ev | 
|  | [[clang::no_destroy]] NonTrivial nt3; | 
|  | // CHECK-NOT: _tlv_atexit{{.*}}_ZN10NonTrivialD1Ev | 
|  | [[clang::no_destroy]] thread_local NonTrivial nt4; |