forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			89 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s
 | |
| 
 | |
| // Check that we don't assert on this case.
 | |
| namespace Test1 {
 | |
| 
 | |
| struct Incomplete;
 | |
| 
 | |
| struct A {
 | |
|   virtual void f();
 | |
|   virtual void g(Incomplete);
 | |
|   virtual void h();
 | |
|   virtual void i();
 | |
|   int a;
 | |
| };
 | |
| 
 | |
| struct B {
 | |
|   virtual void f();
 | |
|   virtual void g(Incomplete);
 | |
|   virtual void h();
 | |
|   virtual void i();
 | |
|   int b;
 | |
| };
 | |
| 
 | |
| struct C : A, B {
 | |
|   C();
 | |
| 
 | |
|   virtual void f();
 | |
|   virtual void g(Incomplete);
 | |
|   virtual void h();
 | |
|   virtual void i();
 | |
| };
 | |
| 
 | |
| void C::h() { }
 | |
| 
 | |
| C::C() { }
 | |
| 
 | |
| void C::i() { }
 | |
| 
 | |
| }
 | |
| 
 | |
| namespace Test2 {
 | |
| 
 | |
| struct A {
 | |
|   virtual void f();
 | |
|   int a;
 | |
| };
 | |
| 
 | |
| struct B {
 | |
|   virtual void f();
 | |
|   int b;
 | |
| };
 | |
| 
 | |
| struct C : A, B {
 | |
|   virtual void f();
 | |
| };
 | |
| 
 | |
| static void f(B* b) {
 | |
|   b->f();
 | |
| }
 | |
| 
 | |
| // CHECK: define void @_ZN5Test21fEv()
 | |
| // CHECK: call void @_ZN5Test21C1fEv
 | |
| // CHECK: ret void
 | |
| // CHECK: define available_externally void @_ZThn16_N5Test21C1fEv
 | |
| void f() {
 | |
|   C c;
 | |
|   f(&c);
 | |
| }
 | |
| 
 | |
| }
 | |
| 
 | |
| // Test that we don't assert.
 | |
| namespace Test3 {
 | |
| 
 | |
| struct A {
 | |
|   virtual ~A();
 | |
| 
 | |
|   int a;
 | |
| };
 | |
| 
 | |
| struct B : A { };
 | |
| struct C : virtual B { };
 | |
| 
 | |
| void f() {
 | |
|   C c;
 | |
| }
 | |
| 
 | |
| }
 |