80 lines
903 B
C++
80 lines
903 B
C++
|
// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm-only -O3
|
||
|
|
||
|
// 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();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// 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;
|
||
|
}
|
||
|
|
||
|
}
|