| // 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; | 
 | } | 
 |  | 
 | } |