forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			52 lines
		
	
	
		
			906 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			906 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
 | |
| 
 | |
| namespace Test1 {
 | |
|   struct A {
 | |
|     virtual int f() final;
 | |
|   };
 | |
| 
 | |
|   // CHECK: define i32 @_ZN5Test11fEPNS_1AE
 | |
|   int f(A *a) {
 | |
|     // CHECK: call i32 @_ZN5Test11A1fEv
 | |
|     return a->f();
 | |
|   }
 | |
| }
 | |
| 
 | |
| namespace Test2 {
 | |
|   struct A final {
 | |
|     virtual int f();
 | |
|   };
 | |
| 
 | |
|   // CHECK: define i32 @_ZN5Test21fEPNS_1AE
 | |
|   int f(A *a) {
 | |
|     // CHECK: call i32 @_ZN5Test21A1fEv
 | |
|     return a->f();
 | |
|   }
 | |
| }
 | |
| 
 | |
| namespace Test3 {
 | |
|   struct A {
 | |
|     virtual int f();
 | |
|   };
 | |
| 
 | |
|   struct B final : A { };
 | |
| 
 | |
|   // CHECK: define i32 @_ZN5Test31fEPNS_1BE
 | |
|   int f(B *b) {
 | |
|     // CHECK: call i32 @_ZN5Test31A1fEv
 | |
|     return b->f();
 | |
|   }
 | |
| 
 | |
|   // CHECK: define i32 @_ZN5Test31fERNS_1BE
 | |
|   int f(B &b) {
 | |
|     // CHECK: call i32 @_ZN5Test31A1fEv
 | |
|     return b.f();
 | |
|   }
 | |
| 
 | |
|   // CHECK: define i32 @_ZN5Test31fEPv
 | |
|   int f(void *v) {
 | |
|     // CHECK: call i32 @_ZN5Test31A1fEv
 | |
|     return static_cast<B*>(v)->f();
 | |
|   }
 | |
| }
 |