forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			32 lines
		
	
	
		
			968 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			968 B
		
	
	
	
		
			C++
		
	
	
	
| // 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;
 |