diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
commit | 173a4f43a911175643bda81ee675e8d9269056ea (patch) | |
tree | 47df2c12b57214af6c31e47404b005675b8b7ffc /test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-pure-virtual.cpp | |
parent | 88f7a7d5251a2d813460274c92decc143a11569b (diff) | |
download | FreeBSD-src-173a4f43a911175643bda81ee675e8d9269056ea.zip FreeBSD-src-173a4f43a911175643bda81ee675e8d9269056ea.tar.gz |
Vendor import of clang RELEASE_350/final tag r216957 (effectively, 3.5.0 release):
https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_350/final@216957
Diffstat (limited to 'test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-pure-virtual.cpp')
-rw-r--r-- | test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-pure-virtual.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-pure-virtual.cpp b/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-pure-virtual.cpp new file mode 100644 index 0000000..76182a2 --- /dev/null +++ b/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-pure-virtual.cpp @@ -0,0 +1,35 @@ +// 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(); } |