1889a6758554c27ca4cf93502cfb5dc788cb47990Rafael Espindola// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm-only -O3 214e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 314e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson// Check that we don't assert on this case. 414e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonnamespace Test1 { 514e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 614e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstruct Incomplete; 714e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 814e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstruct A { 914e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void f(); 1014e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void g(Incomplete); 1114e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void h(); 1214e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void i(); 1314e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson int a; 1414e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson}; 1514e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 1614e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstruct B { 1714e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void f(); 1814e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void g(Incomplete); 1914e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void h(); 2014e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void i(); 2114e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson int b; 2214e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson}; 2314e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 2414e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstruct C : A, B { 2514e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson C(); 2614e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 2714e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void f(); 2814e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void g(Incomplete); 2914e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void h(); 3014e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void i(); 3114e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson}; 3214e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 3314e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonvoid C::h() { } 3414e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 3514e82fd91c6d5041aa840574143521d244f185cdAnders CarlssonC::C() { } 3614e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 3714e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonvoid C::i() { } 3814e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 3914e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson} 4014e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 4114e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonnamespace Test2 { 4214e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 4314e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstruct A { 4414e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void f(); 4514e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson int a; 4614e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson}; 4714e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 4814e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstruct B { 4914e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void f(); 5014e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson int b; 5114e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson}; 5214e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 5314e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstruct C : A, B { 5414e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson virtual void f(); 5514e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson}; 5614e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 5714e82fd91c6d5041aa840574143521d244f185cdAnders Carlssonstatic void f(B* b) { 5814e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson b->f(); 5914e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson} 6014e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson 6114e82fd91c6d5041aa840574143521d244f185cdAnders Carlsson} 6222df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson 6322df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson// Test that we don't assert. 6422df7b17f1b086f4347256406703d259753a0cbfAnders Carlssonnamespace Test3 { 6522df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson 6622df7b17f1b086f4347256406703d259753a0cbfAnders Carlssonstruct A { 6722df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson virtual ~A(); 6822df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson 6922df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson int a; 7022df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson}; 7122df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson 7222df7b17f1b086f4347256406703d259753a0cbfAnders Carlssonstruct B : A { }; 7322df7b17f1b086f4347256406703d259753a0cbfAnders Carlssonstruct C : virtual B { }; 7422df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson 7522df7b17f1b086f4347256406703d259753a0cbfAnders Carlssonvoid f() { 7622df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson C c; 7722df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson} 7822df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson 7922df7b17f1b086f4347256406703d259753a0cbfAnders Carlsson} 80