• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 namespace Test1 {
5 
6 struct Incomplete;
7 
8 struct A {
9   virtual void f();
10   virtual void g(Incomplete);
11   virtual void h();
12   virtual void i();
13   int a;
14 };
15 
16 struct B {
17   virtual void f();
18   virtual void g(Incomplete);
19   virtual void h();
20   virtual void i();
21   int b;
22 };
23 
24 struct 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 
h()33 void C::h() { }
34 
C()35 C::C() { }
36 
i()37 void C::i() { }
38 
39 }
40 
41 namespace Test2 {
42 
43 struct A {
44   virtual void f();
45   int a;
46 };
47 
48 struct B {
49   virtual void f();
50   int b;
51 };
52 
53 struct C : A, B {
54   virtual void f();
55 };
56 
f(B * b)57 static 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
f()65 void f() {
66   C c;
67   f(&c);
68 }
69 
70 }
71 
72 // Test that we don't assert.
73 namespace Test3 {
74 
75 struct A {
76   virtual ~A();
77 
78   int a;
79 };
80 
81 struct B : A { };
82 struct C : virtual B { };
83 
f()84 void f() {
85   C c;
86 }
87 
88 }
89