From 39fcc9a984e2820e4ea0fa2ac4abd17d9f3a31df Mon Sep 17 00:00:00 2001 From: dim Date: Sun, 20 Feb 2011 13:06:31 +0000 Subject: Vendor import of clang trunk r126079: http://llvm.org/svn/llvm-project/cfe/trunk@126079 --- test/CodeGenCXX/thunks.cpp | 63 +++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 23 deletions(-) (limited to 'test/CodeGenCXX/thunks.cpp') diff --git a/test/CodeGenCXX/thunks.cpp b/test/CodeGenCXX/thunks.cpp index ba60385..a74cc05 100644 --- a/test/CodeGenCXX/thunks.cpp +++ b/test/CodeGenCXX/thunks.cpp @@ -88,31 +88,29 @@ void C::f() { } } // Check that the thunk gets internal linkage. -namespace { - -struct A { - virtual void f(); -}; - -struct B { - virtual void f(); -}; - -struct C : A, B { - virtual void c(); - - virtual void f(); -}; +namespace Test4B { + struct A { + virtual void f(); + }; -void C::f() { } + struct B { + virtual void f(); + }; -} + namespace { + struct C : A, B { + virtual void c(); + virtual void f(); + }; + } + void C::c() {} + void C::f() {} -// Force C::f to be used. -void f() { - C c; - - c.f(); + // Force C::f to be used. + void f() { + C c; + c.f(); + } } namespace Test5 { @@ -260,8 +258,27 @@ namespace Test10 { } } +// PR7611 +namespace Test11 { + struct A { virtual A* f(); }; + struct B : virtual A { virtual A* f(); }; + struct C : B { virtual C* f(); }; + C* C::f() { return 0; } + + // The this-adjustment and return-adjustment thunk required when + // C::f appears in a vtable where A is at a nonzero offset from C. + // CHECK: define {{.*}} @_ZTcv0_n24_v0_n32_N6Test111C1fEv( + + // C::f itself. + // CHECK: define {{.*}} @_ZN6Test111C1fEv( + + // The return-adjustment thunk required when C::f appears in a vtable + // where A is at a zero offset from C. + // CHECK: define {{.*}} @_ZTch0_v0_n32_N6Test111C1fEv( +} + /**** The following has to go at the end of the file ****/ // This is from Test5: // CHECK: define linkonce_odr void @_ZTv0_n24_N5Test51B1fEv -// CHECK: define internal void @_ZThn8_N12_GLOBAL__N_11C1fEv( +// CHECK: define internal void @_ZThn8_N6Test4B12_GLOBAL__N_11C1fEv( -- cgit v1.1