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