1// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s
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// CHECK: define void @_ZN5Test21fEv()
62// CHECK: call void @_ZN5Test21C1fEv
63// CHECK: ret void
64// CHECK: define available_externally void @_ZThn16_N5Test21C1fEv
65void f() {
66  C c;
67  f(&c);
68}
69
70}
71
72// Test that we don't assert.
73namespace Test3 {
74
75struct A {
76  virtual ~A();
77
78  int a;
79};
80
81struct B : A { };
82struct C : virtual B { };
83
84void f() {
85  C c;
86}
87
88}
89