| // RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s |
| |
| // 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(); |
| } |
| |
| // CHECK: define void @_ZN5Test21fEv() |
| // CHECK: call void @_ZN5Test21C1fEv |
| // CHECK: ret void |
| // CHECK: define available_externally void @_ZThn16_N5Test21C1fEv |
| void f() { |
| C c; |
| f(&c); |
| } |
| |
| } |
| |
| // 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; |
| } |
| |
| } |