1*67e74705SXin Li // RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm-only -O3 2*67e74705SXin Li 3*67e74705SXin Li // Check that we don't assert on this case. 4*67e74705SXin Li namespace Test1 { 5*67e74705SXin Li 6*67e74705SXin Li struct Incomplete; 7*67e74705SXin Li 8*67e74705SXin Li struct A { 9*67e74705SXin Li virtual void f(); 10*67e74705SXin Li virtual void g(Incomplete); 11*67e74705SXin Li virtual void h(); 12*67e74705SXin Li virtual void i(); 13*67e74705SXin Li int a; 14*67e74705SXin Li }; 15*67e74705SXin Li 16*67e74705SXin Li struct B { 17*67e74705SXin Li virtual void f(); 18*67e74705SXin Li virtual void g(Incomplete); 19*67e74705SXin Li virtual void h(); 20*67e74705SXin Li virtual void i(); 21*67e74705SXin Li int b; 22*67e74705SXin Li }; 23*67e74705SXin Li 24*67e74705SXin Li struct C : A, B { 25*67e74705SXin Li C(); 26*67e74705SXin Li 27*67e74705SXin Li virtual void f(); 28*67e74705SXin Li virtual void g(Incomplete); 29*67e74705SXin Li virtual void h(); 30*67e74705SXin Li virtual void i(); 31*67e74705SXin Li }; 32*67e74705SXin Li h()33*67e74705SXin Livoid C::h() { } 34*67e74705SXin Li C()35*67e74705SXin LiC::C() { } 36*67e74705SXin Li i()37*67e74705SXin Livoid C::i() { } 38*67e74705SXin Li 39*67e74705SXin Li } 40*67e74705SXin Li 41*67e74705SXin Li namespace Test2 { 42*67e74705SXin Li 43*67e74705SXin Li struct A { 44*67e74705SXin Li virtual void f(); 45*67e74705SXin Li int a; 46*67e74705SXin Li }; 47*67e74705SXin Li 48*67e74705SXin Li struct B { 49*67e74705SXin Li virtual void f(); 50*67e74705SXin Li int b; 51*67e74705SXin Li }; 52*67e74705SXin Li 53*67e74705SXin Li struct C : A, B { 54*67e74705SXin Li virtual void f(); 55*67e74705SXin Li }; 56*67e74705SXin Li f(B * b)57*67e74705SXin Listatic void f(B* b) { 58*67e74705SXin Li b->f(); 59*67e74705SXin Li } 60*67e74705SXin Li 61*67e74705SXin Li } 62*67e74705SXin Li 63*67e74705SXin Li // Test that we don't assert. 64*67e74705SXin Li namespace Test3 { 65*67e74705SXin Li 66*67e74705SXin Li struct A { 67*67e74705SXin Li virtual ~A(); 68*67e74705SXin Li 69*67e74705SXin Li int a; 70*67e74705SXin Li }; 71*67e74705SXin Li 72*67e74705SXin Li struct B : A { }; 73*67e74705SXin Li struct C : virtual B { }; 74*67e74705SXin Li f()75*67e74705SXin Livoid f() { 76*67e74705SXin Li C c; 77*67e74705SXin Li } 78*67e74705SXin Li 79*67e74705SXin Li } 80