llvm-project/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-pure-virtual.cpp
Timur Iskhodzhanov d60ae72c42 Split out the rest of MS ABI multiple inheritance tests
Intentionally duplicate base class definitions per test, so it's easier to copy tests while debugging failures.

llvm-svn: 206782
2014-04-21 20:23:34 +00:00

36 lines
878 B
C++

// RUN: %clang_cc1 %s -fno-rtti -triple=i386-pc-win32 -emit-llvm -o %t.ll -fdump-vtable-layouts >%t
// RUN: FileCheck %s < %t
// RUN: FileCheck --check-prefix=MANGLING %s < %t.ll
struct A {
virtual void f();
};
struct B {
virtual void g() = 0;
virtual void h();
};
struct C : A, B {
// CHECK-LABEL: VFTable for 'A' in 'C' (1 entry)
// CHECK-NEXT: 0 | void A::f()
// CHECK-LABEL: VFTable for 'B' in 'C' (2 entries)
// CHECK-NEXT: 0 | void C::g()
// CHECK-NEXT: 1 | void B::h()
// CHECK-LABEL: VFTable indices for 'C' (1 entry).
// CHECK-NEXT: via vfptr at offset 4
// CHECK-NEXT: 0 | void C::g()
// MANGLING-DAG: @"\01??_7C@@6BA@@@"
// MANGLING-DAG: @"\01??_7C@@6BB@@@"
// Overrides only the right child's method (B::g),
// needs this adjustment but not thunks.
virtual void g();
};
C c;
void build_vftable(C *obj) { obj->g(); }