Home | History | Annotate | Download | only in CodeGenCXX
      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 
     33 void C::h() { }
     34 
     35 C::C() { }
     36 
     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 
     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
     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 
     84 void f() {
     85   C c;
     86 }
     87 
     88 }
     89