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