forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			38 lines
		
	
	
		
			899 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			899 B
		
	
	
	
		
			C++
		
	
	
	
| // STL allocators should not have unrelated-cast tests applied
 | |
| // RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -fvisibility hidden -fsanitize=cfi-unrelated-cast -emit-llvm -o - %s | FileCheck %s
 | |
| 
 | |
| #include <stddef.h>
 | |
| 
 | |
| template<class T>
 | |
| class myalloc {
 | |
|  public:
 | |
|   // CHECK: define{{.*}}allocateE{{.}}
 | |
|   // CHECK-NOT: llvm.type.test
 | |
|   T *allocate(size_t sz) {
 | |
|     return (T*)::operator new(sz);
 | |
|   }
 | |
| 
 | |
|   // CHECK: define{{.*}}allocateE{{.}}PKv
 | |
|   // CHECK-NOT: llvm.type.test
 | |
|   T *allocate(size_t sz, const void *ptr) {
 | |
|     return (T*)::operator new(sz);
 | |
|   }
 | |
| 
 | |
|   // CHECK: define{{.*}}differentName
 | |
|   // CHECK: llvm.type.test
 | |
|   T *differentName(size_t sz, const void *ptr) {
 | |
|     return (T*)::operator new(sz);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class C1 {
 | |
|   virtual void f() {}
 | |
| };
 | |
| 
 | |
| C1 *f1() {
 | |
|   myalloc<C1> allocator;
 | |
|   (void)allocator.allocate(16);
 | |
|   (void)allocator.allocate(16, 0);
 | |
|   (void)allocator.differentName(16, 0);
 | |
| }
 |