Create embedded-5_0-branch branch for development on ARM embedded cores.
[official-gcc.git] / embedded-5_0-branch / gcc / testsuite / g++.dg / abi / covariant6.C
blob143b4ad36cbbcaf07e70ae187f23a67577702486
1 struct A
3   virtual A* f();
4 };
6 struct B: virtual A
8   virtual A* f();
9 };
11 struct C: B
13   virtual C* f();
16 C* C::f() { return 0; }
18 // When we emit C::f, we should emit both thunks: one for B and one for A.
19 // { dg-final { scan-assembler "_ZTch0_v0_n16_N1C1fEv" { target { ilp32  && { ! { ia64-*-hpux* } } } } } }
20 // { dg-final { scan-assembler "_ZTch0_v0_n32_N1C1fEv" { target { lp64  || { ia64-*-hpux* } } } } }
21 // { dg-final { scan-assembler "_ZTcv0_n12_v0_n16_N1C1fEv" { target { ilp32  && { ! { ia64-*-hpux* } } } } } }
22 // { dg-final { scan-assembler "_ZTcv0_n24_v0_n32_N1C1fEv" { target { lp64  || { ia64-*-hpux* } } } } }
24 struct D: B
26   virtual void dummy ();
27   virtual D* f();
30 void D::dummy() { }
32 // When we emit the D vtable, it should refer to the thunk for B.
33 // { dg-final { scan-assembler "_ZTch0_v0_n16_N1D1fEv" { target { ilp32  && { ! { ia64-*-hpux* } } } } } }
34 // { dg-final { scan-assembler "_ZTch0_v0_n32_N1D1fEv" { target { lp64  || { ia64-*-hpux* } } } } }