forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - %s | FileCheck %s -check-prefix=PLAIN
 | |
| // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - -fsanitize=address %s | FileCheck %s -check-prefix=ASAN
 | |
| // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - -fsanitize=address -fsanitize-address-poison-custom-array-cookie %s | FileCheck %s -check-prefix=ASAN-POISON-ALL-NEW-ARRAY
 | |
| 
 | |
| typedef __typeof__(sizeof(0)) size_t;
 | |
| namespace std {
 | |
|   struct nothrow_t {};
 | |
|   std::nothrow_t nothrow;
 | |
| }
 | |
| void *operator new[](size_t, const std::nothrow_t &) throw();
 | |
| void *operator new[](size_t, char *);
 | |
| void *operator new[](size_t, int, int);
 | |
| 
 | |
| struct C {
 | |
|   int x;
 | |
|   ~C();
 | |
| };
 | |
| 
 | |
| C *CallNew() {
 | |
|   return new C[10];
 | |
| }
 | |
| // PLAIN-LABEL: CallNew
 | |
| // PLAIN-NOT: nosanitize
 | |
| // PLAIN-NOT: __asan_poison_cxx_array_cookie
 | |
| // ASAN-LABEL: CallNew
 | |
| // ASAN: store{{.*}}nosanitize
 | |
| // ASAN-NOT: nosanitize
 | |
| // ASAN: call void @__asan_poison_cxx_array_cookie
 | |
| 
 | |
| C *CallNewNoThrow() {
 | |
|   return new (std::nothrow) C[10];
 | |
| }
 | |
| // PLAIN-LABEL: CallNewNoThrow
 | |
| // PLAIN-NOT: nosanitize
 | |
| // PLAIN-NOT: __asan_poison_cxx_array_cookie
 | |
| // ASAN-LABEL: CallNewNoThrow
 | |
| // ASAN: store{{.*}}nosanitize
 | |
| // ASAN-NOT: nosanitize
 | |
| // ASAN: call void @__asan_poison_cxx_array_cookie
 | |
| 
 | |
| void CallDelete(C *c) {
 | |
|   delete [] c;
 | |
| }
 | |
| 
 | |
| // PLAIN-LABEL: CallDelete
 | |
| // PLAIN-NOT: nosanitize
 | |
| // ASAN-LABEL: CallDelete
 | |
| // ASAN-NOT: nosanitize
 | |
| // ASAN: call i64 @__asan_load_cxx_array_cookie
 | |
| // ASAN-NOT: nosanitize
 | |
| 
 | |
| char Buffer[20];
 | |
| C *CallPlacementNew() {
 | |
|   return new (Buffer) C[20];
 | |
| }
 | |
| // ASAN-LABEL: CallPlacementNew
 | |
| // ASAN-NOT: __asan_poison_cxx_array_cookie
 | |
| 
 | |
| C *CallNewWithArgs() {
 | |
| // ASAN-LABEL: CallNewWithArgs
 | |
| // ASAN-NOT: call void @__asan_poison_cxx_array_cookie
 | |
| // ASAN-POISON-ALL-NEW-ARRAY: call void @__asan_poison_cxx_array_cookie
 | |
|   return new (123, 456) C[20];
 | |
| }
 |