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 5struct A { 6 virtual void f(); 7}; 8 9struct B { 10 virtual void g() = 0; 11 virtual void h(); 12}; 13 14struct 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 34C c; 35void build_vftable(C *obj) { obj->g(); } 36