Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 %s -fno-rtti -triple=i386-pc-win32 -emit-llvm -o %t.ll -fdump-vtable-layouts >%t
      2 // RUN: FileCheck %s < %t
      3 // RUN: FileCheck --check-prefix=MANGLING %s < %t.ll
      4 
      5 struct A {
      6   virtual void f();
      7 };
      8 
      9 struct B {
     10   virtual void g() = 0;
     11   virtual void h();
     12 };
     13 
     14 struct C : A, B {
     15   // CHECK-LABEL: VFTable for 'A' in 'C' (1 entry)
     16   // CHECK-NEXT:   0 | void A::f()
     17 
     18   // CHECK-LABEL: VFTable for 'B' in 'C' (2 entries)
     19   // CHECK-NEXT:   0 | void C::g()
     20   // CHECK-NEXT:   1 | void B::h()
     21 
     22   // CHECK-LABEL: VFTable indices for 'C' (1 entry).
     23   // CHECK-NEXT:   via vfptr at offset 4
     24   // CHECK-NEXT:   0 | void C::g()
     25 
     26   // MANGLING-DAG: @"\01??_7C@@6BA@@@"
     27   // MANGLING-DAG: @"\01??_7C@@6BB@@@"
     28 
     29   // Overrides only the right child's method (B::g),
     30   // needs this adjustment but not thunks.
     31   virtual void g();
     32 };
     33 
     34 C c;
     35 void build_vftable(C *obj) { obj->g(); }
     36