summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
diff options
context:
space:
mode:
authorTimur Iskhodzhanov <timurrrr@google.com>2013-10-30 11:55:43 +0000
committerTimur Iskhodzhanov <timurrrr@google.com>2013-10-30 11:55:43 +0000
commit0201432a5e742b9c690679511a02ecb7102b246a (patch)
tree28dc74ba9d17886772c92a6feb523e3d062f0045 /clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
parent580da276161ee8b2aa7bc6bd4631cd8261fb9bfb (diff)
downloadbcm5719-llvm-0201432a5e742b9c690679511a02ecb7102b246a.tar.gz
bcm5719-llvm-0201432a5e742b9c690679511a02ecb7102b246a.zip
Make thunk this/return adjustment ABI-specific. Also, fix the return adjustment when using -cxx-abi microsoft
Reviewed at http://llvm-reviews.chandlerc.com/D2026 llvm-svn: 193679
Diffstat (limited to 'clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp')
-rw-r--r--clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp35
1 files changed, 27 insertions, 8 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
index cfbdad941ac..781e4adbc56 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
@@ -22,6 +22,7 @@
// RUN: FileCheck --check-prefix=VDTORS-P %s < %t
// RUN: FileCheck --check-prefix=RET-W %s < %t
// RUN: FileCheck --check-prefix=RET-T %s < %t
+// RUN: FileCheck --check-prefix=RET-V %s < %t
// RUN: FileCheck --check-prefix=MANGLING %s < %t
@@ -152,7 +153,7 @@ struct X: virtual C {
// TEST4: VFTable for 'A' in 'C' in 'Test4::X' (2 entries).
// TEST4-NEXT: 0 | void C::f()
- // TEST4-NEXT: [this adjustment: 8 non-virtual]
+ // TEST4-NEXT: [this adjustment: 8 non-virtual]
// TEST4-NEXT: 1 | void A::z()
// TEST4-NOT: VFTable indices for 'Test4::X'
@@ -223,7 +224,7 @@ struct Y : virtual X {
// TEST7-NEXT: 1 | void A::z()
// TEST7: Thunks for 'void C::f()' (1 entry).
- // TEST7-NEXT: 0 | this adjustment: 8 non-virtual
+ // TEST7-NEXT: 0 | [this adjustment: 8 non-virtual]
// TEST7-NOT: VFTable indices for 'Test7::Y'
@@ -338,7 +339,7 @@ struct W : Z, D, virtual A, virtual B {
// TEST9-W-NEXT: 1 | void A::z()
// TEST9-W: Thunks for 'void D::f()' (1 entry).
- // TEST9-W-NEXT: 0 | this adjustment: -8 non-virtual
+ // TEST9-W-NEXT: 0 | [this adjustment: -8 non-virtual]
// TEST9-W-NOT: VFTable indices for 'Test9::W'
@@ -371,7 +372,7 @@ struct T : Z, D, virtual A, virtual B {
// TEST9-T-NEXT: [this adjustment: -8 non-virtual]
// TEST9-T: Thunks for 'void Test9::T::h()' (1 entry).
- // TEST9-T-NEXT: 0 | this adjustment: -8 non-virtual
+ // TEST9-T-NEXT: 0 | [this adjustment: -8 non-virtual]
// TEST9-T: VFTable for 'A' in 'D' in 'Test9::T' (2 entries).
// TEST9-T-NEXT: 0 | void Test9::T::f()
@@ -380,10 +381,10 @@ struct T : Z, D, virtual A, virtual B {
// TEST9-T-NEXT: [this adjustment: -8 non-virtual]
// TEST9-T: Thunks for 'void Test9::T::f()' (1 entry).
- // TEST9-T-NEXT: 0 | this adjustment: -8 non-virtual
+ // TEST9-T-NEXT: 0 | [this adjustment: -8 non-virtual]
// TEST9-T: Thunks for 'void Test9::T::z()' (1 entry).
- // TEST9-T-NEXT: 0 | this adjustment: -8 non-virtual
+ // TEST9-T-NEXT: 0 | [this adjustment: -8 non-virtual]
// TEST9-T: VFTable indices for 'Test9::T' (4 entries).
// TEST9-T-NEXT: via vfptr at offset 0
@@ -464,7 +465,7 @@ struct U : virtual W {
// VDTORS-U-NEXT: 1 | void vdtors::X::zzz()
// VDTORS-U: Thunks for 'vdtors::W::~W()' (1 entry).
- // VDTORS-U-NEXT: 0 | this adjustment: -4 non-virtual
+ // VDTORS-U-NEXT: 0 | [this adjustment: -4 non-virtual]
// VDTORS-U: VFTable indices for 'vdtors::U' (1 entries).
// VDTORS-U-NEXT: -- accessible via vbtable index 1, vfptr at offset 4 --
@@ -484,7 +485,7 @@ struct V : virtual W {
// VDTORS-V-NEXT: 1 | void vdtors::X::zzz()
// VDTORS-V: Thunks for 'vdtors::W::~W()' (1 entry).
- // VDTORS-V-NEXT: 0 | this adjustment: -4 non-virtual
+ // VDTORS-V-NEXT: 0 | [this adjustment: -4 non-virtual]
// VDTORS-V: VFTable indices for 'vdtors::V' (1 entries).
// VDTORS-V-NEXT: -- accessible via vbtable index 1, vfptr at offset 4 --
@@ -553,4 +554,22 @@ struct T : W {
};
T t;
+
+struct U : virtual A {
+ virtual void g(); // adds a vfptr
+};
+
+struct V : Z {
+ // RET-V: VFTable for 'return_adjustment::Z' in 'return_adjustment::V' (2 entries).
+ // RET-V-NEXT: 0 | return_adjustment::U *return_adjustment::V::foo()
+ // RET-V-NEXT: [return adjustment: vbptr at offset 4, vbase #1, 0 non-virtual]
+ // RET-V-NEXT: 1 | return_adjustment::U *return_adjustment::V::foo()
+
+ // RET-V: VFTable indices for 'return_adjustment::V' (1 entries).
+ // RET-V-NEXT: 1 | return_adjustment::U *return_adjustment::V::foo()
+
+ virtual U* foo();
+};
+
+V v;
}
OpenPOWER on IntegriCloud