From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/g++.dg/abi/align1.C | 27 +++++++++++ gcc/testsuite/g++.dg/abi/anon1.C | 5 ++ gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C | 32 ++++++++++++ gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C | 41 ++++++++++++++++ gcc/testsuite/g++.dg/abi/arm_rtti1.C | 14 ++++++ gcc/testsuite/g++.dg/abi/arm_va_list.C | 14 ++++++ gcc/testsuite/g++.dg/abi/arm_va_list2.C | 7 +++ gcc/testsuite/g++.dg/abi/arm_va_list2.h | 4 ++ gcc/testsuite/g++.dg/abi/bitfield1.C | 34 +++++++++++++ gcc/testsuite/g++.dg/abi/bitfield10.C | 5 ++ gcc/testsuite/g++.dg/abi/bitfield11.C | 14 ++++++ gcc/testsuite/g++.dg/abi/bitfield12.C | 5 ++ gcc/testsuite/g++.dg/abi/bitfield2.C | 34 +++++++++++++ gcc/testsuite/g++.dg/abi/bitfield3.C | 84 ++++++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/bitfield4.C | 41 ++++++++++++++++ gcc/testsuite/g++.dg/abi/bitfield5.C | 15 ++++++ gcc/testsuite/g++.dg/abi/bitfield6.C | 14 ++++++ gcc/testsuite/g++.dg/abi/bitfield7.C | 7 +++ gcc/testsuite/g++.dg/abi/bitfield8.C | 22 +++++++++ gcc/testsuite/g++.dg/abi/bitfield9.C | 12 +++++ gcc/testsuite/g++.dg/abi/cookie1.C | 15 ++++++ gcc/testsuite/g++.dg/abi/cookie2.C | 16 ++++++ gcc/testsuite/g++.dg/abi/covariant1.C | 26 ++++++++++ gcc/testsuite/g++.dg/abi/covariant2.C | 32 ++++++++++++ gcc/testsuite/g++.dg/abi/covariant3.C | 85 ++++++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/covariant4.C | 46 ++++++++++++++++++ gcc/testsuite/g++.dg/abi/covariant5.C | 52 ++++++++++++++++++++ gcc/testsuite/g++.dg/abi/covariant6.C | 34 +++++++++++++ gcc/testsuite/g++.dg/abi/dcast1.C | 29 +++++++++++ gcc/testsuite/g++.dg/abi/dtor1.C | 23 +++++++++ gcc/testsuite/g++.dg/abi/dtor2.C | 14 ++++++ gcc/testsuite/g++.dg/abi/empty10.C | 28 +++++++++++ gcc/testsuite/g++.dg/abi/empty11.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/empty4.C | 86 +++++++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/empty5.C | 17 +++++++ gcc/testsuite/g++.dg/abi/empty6.C | 14 ++++++ gcc/testsuite/g++.dg/abi/empty7.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/empty8.C | 14 ++++++ gcc/testsuite/g++.dg/abi/empty9.C | 17 +++++++ gcc/testsuite/g++.dg/abi/enum1.C | 16 ++++++ gcc/testsuite/g++.dg/abi/forced.C | 25 ++++++++++ gcc/testsuite/g++.dg/abi/guard1.C | 10 ++++ gcc/testsuite/g++.dg/abi/guard2.C | 16 ++++++ gcc/testsuite/g++.dg/abi/inline1.C | 6 +++ gcc/testsuite/g++.dg/abi/key1.C | 26 ++++++++++ gcc/testsuite/g++.dg/abi/key2.C | 16 ++++++ gcc/testsuite/g++.dg/abi/layout1.C | 31 ++++++++++++ gcc/testsuite/g++.dg/abi/layout2.C | 33 +++++++++++++ gcc/testsuite/g++.dg/abi/layout3.C | 27 +++++++++++ gcc/testsuite/g++.dg/abi/layout4.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/local1-a.cc | 14 ++++++ gcc/testsuite/g++.dg/abi/local1.C | 22 +++++++++ gcc/testsuite/g++.dg/abi/local2.C | 17 +++++++ gcc/testsuite/g++.dg/abi/macro0.C | 5 ++ gcc/testsuite/g++.dg/abi/macro1.C | 5 ++ gcc/testsuite/g++.dg/abi/macro2.C | 5 ++ gcc/testsuite/g++.dg/abi/mangle-neon.C | 49 +++++++++++++++++++ gcc/testsuite/g++.dg/abi/mangle1.C | 28 +++++++++++ gcc/testsuite/g++.dg/abi/mangle10.C | 13 +++++ gcc/testsuite/g++.dg/abi/mangle11.C | 10 ++++ gcc/testsuite/g++.dg/abi/mangle12.C | 11 +++++ gcc/testsuite/g++.dg/abi/mangle13.C | 28 +++++++++++ gcc/testsuite/g++.dg/abi/mangle14.C | 13 +++++ gcc/testsuite/g++.dg/abi/mangle15.C | 14 ++++++ gcc/testsuite/g++.dg/abi/mangle16.C | 18 +++++++ gcc/testsuite/g++.dg/abi/mangle17.C | 11 +++++ gcc/testsuite/g++.dg/abi/mangle18-1.C | 23 +++++++++ gcc/testsuite/g++.dg/abi/mangle18-2.C | 23 +++++++++ gcc/testsuite/g++.dg/abi/mangle19-1.C | 13 +++++ gcc/testsuite/g++.dg/abi/mangle19-2.C | 13 +++++ gcc/testsuite/g++.dg/abi/mangle2.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/mangle20-1.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/mangle20-2.C | 16 ++++++ gcc/testsuite/g++.dg/abi/mangle21.C | 13 +++++ gcc/testsuite/g++.dg/abi/mangle22.C | 9 ++++ gcc/testsuite/g++.dg/abi/mangle23.C | 9 ++++ gcc/testsuite/g++.dg/abi/mangle24.C | 12 +++++ gcc/testsuite/g++.dg/abi/mangle25.C | 13 +++++ gcc/testsuite/g++.dg/abi/mangle26.C | 14 ++++++ gcc/testsuite/g++.dg/abi/mangle27.C | 14 ++++++ gcc/testsuite/g++.dg/abi/mangle28.C | 14 ++++++ gcc/testsuite/g++.dg/abi/mangle29.C | 14 ++++++ gcc/testsuite/g++.dg/abi/mangle3.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/mangle30.C | 22 +++++++++ gcc/testsuite/g++.dg/abi/mangle31.C | 35 ++++++++++++++ gcc/testsuite/g++.dg/abi/mangle32.C | 44 +++++++++++++++++ gcc/testsuite/g++.dg/abi/mangle33.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/mangle34.C | 41 ++++++++++++++++ gcc/testsuite/g++.dg/abi/mangle35.C | 13 +++++ gcc/testsuite/g++.dg/abi/mangle36.C | 9 ++++ gcc/testsuite/g++.dg/abi/mangle37.C | 35 ++++++++++++++ gcc/testsuite/g++.dg/abi/mangle39.C | 28 +++++++++++ gcc/testsuite/g++.dg/abi/mangle4.C | 24 +++++++++ gcc/testsuite/g++.dg/abi/mangle40.C | 28 +++++++++++ gcc/testsuite/g++.dg/abi/mangle41.C | 7 +++ gcc/testsuite/g++.dg/abi/mangle42.C | 15 ++++++ gcc/testsuite/g++.dg/abi/mangle43.C | 43 +++++++++++++++++ gcc/testsuite/g++.dg/abi/mangle44.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/mangle45.C | 25 ++++++++++ gcc/testsuite/g++.dg/abi/mangle46.C | 15 ++++++ gcc/testsuite/g++.dg/abi/mangle5.C | 6 +++ gcc/testsuite/g++.dg/abi/mangle6.C | 23 +++++++++ gcc/testsuite/g++.dg/abi/mangle60.C | 21 ++++++++ gcc/testsuite/g++.dg/abi/mangle7.C | 6 +++ gcc/testsuite/g++.dg/abi/mangle8.C | 16 ++++++ gcc/testsuite/g++.dg/abi/mangle9.C | 12 +++++ gcc/testsuite/g++.dg/abi/noreturn1.C | 14 ++++++ gcc/testsuite/g++.dg/abi/noreturn2.C | 14 ++++++ gcc/testsuite/g++.dg/abi/offsetof.C | 22 +++++++++ gcc/testsuite/g++.dg/abi/packed1.C | 24 +++++++++ gcc/testsuite/g++.dg/abi/param1.C | 28 +++++++++++ gcc/testsuite/g++.dg/abi/param2.C | 19 ++++++++ gcc/testsuite/g++.dg/abi/pr39188-1.h | 11 +++++ gcc/testsuite/g++.dg/abi/pr39188-1a.C | 12 +++++ gcc/testsuite/g++.dg/abi/pr39188-1b.C | 15 ++++++ gcc/testsuite/g++.dg/abi/pr39188-2.h | 12 +++++ gcc/testsuite/g++.dg/abi/pr39188-2a.C | 12 +++++ gcc/testsuite/g++.dg/abi/pr39188-2b.C | 15 ++++++ gcc/testsuite/g++.dg/abi/pr39188-3.h | 11 +++++ gcc/testsuite/g++.dg/abi/pr39188-3a.C | 12 +++++ gcc/testsuite/g++.dg/abi/pr39188-3b.C | 15 ++++++ gcc/testsuite/g++.dg/abi/pragma-pack1.C | 37 ++++++++++++++ gcc/testsuite/g++.dg/abi/regparm1.C | 51 +++++++++++++++++++ gcc/testsuite/g++.dg/abi/rtti1.C | 13 +++++ gcc/testsuite/g++.dg/abi/rtti2.C | 12 +++++ gcc/testsuite/g++.dg/abi/rtti3.C | 18 +++++++ gcc/testsuite/g++.dg/abi/structret1.C | 31 ++++++++++++ gcc/testsuite/g++.dg/abi/thunk1.C | 24 +++++++++ gcc/testsuite/g++.dg/abi/thunk2.C | 27 +++++++++++ gcc/testsuite/g++.dg/abi/thunk3.C | 22 +++++++++ gcc/testsuite/g++.dg/abi/thunk4.C | 26 ++++++++++ gcc/testsuite/g++.dg/abi/thunk5.C | 13 +++++ gcc/testsuite/g++.dg/abi/vague1.C | 17 +++++++ gcc/testsuite/g++.dg/abi/vbase1.C | 60 +++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/vbase10.C | 14 ++++++ gcc/testsuite/g++.dg/abi/vbase11.C | 13 +++++ gcc/testsuite/g++.dg/abi/vbase12.C | 14 ++++++ gcc/testsuite/g++.dg/abi/vbase13.C | 17 +++++++ gcc/testsuite/g++.dg/abi/vbase14.C | 6 +++ gcc/testsuite/g++.dg/abi/vbase15.C | 30 ++++++++++++ gcc/testsuite/g++.dg/abi/vbase8-10.C | 75 ++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/vbase8-21.C | 75 ++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/vbase8-22.C | 80 ++++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/vbase8-4.C | 78 ++++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/abi/vbase9.C | 29 +++++++++++ gcc/testsuite/g++.dg/abi/vcall1.C | 36 ++++++++++++++ gcc/testsuite/g++.dg/abi/vthunk1.C | 45 +++++++++++++++++ gcc/testsuite/g++.dg/abi/vthunk2.C | 17 +++++++ gcc/testsuite/g++.dg/abi/vthunk3.C | 27 +++++++++++ gcc/testsuite/g++.dg/abi/vtt1.C | 11 +++++ 150 files changed, 3422 insertions(+) create mode 100644 gcc/testsuite/g++.dg/abi/align1.C create mode 100644 gcc/testsuite/g++.dg/abi/anon1.C create mode 100644 gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C create mode 100644 gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C create mode 100644 gcc/testsuite/g++.dg/abi/arm_rtti1.C create mode 100644 gcc/testsuite/g++.dg/abi/arm_va_list.C create mode 100644 gcc/testsuite/g++.dg/abi/arm_va_list2.C create mode 100644 gcc/testsuite/g++.dg/abi/arm_va_list2.h create mode 100644 gcc/testsuite/g++.dg/abi/bitfield1.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield10.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield11.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield12.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield2.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield3.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield4.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield5.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield6.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield7.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield8.C create mode 100644 gcc/testsuite/g++.dg/abi/bitfield9.C create mode 100644 gcc/testsuite/g++.dg/abi/cookie1.C create mode 100644 gcc/testsuite/g++.dg/abi/cookie2.C create mode 100644 gcc/testsuite/g++.dg/abi/covariant1.C create mode 100644 gcc/testsuite/g++.dg/abi/covariant2.C create mode 100644 gcc/testsuite/g++.dg/abi/covariant3.C create mode 100644 gcc/testsuite/g++.dg/abi/covariant4.C create mode 100644 gcc/testsuite/g++.dg/abi/covariant5.C create mode 100644 gcc/testsuite/g++.dg/abi/covariant6.C create mode 100644 gcc/testsuite/g++.dg/abi/dcast1.C create mode 100644 gcc/testsuite/g++.dg/abi/dtor1.C create mode 100644 gcc/testsuite/g++.dg/abi/dtor2.C create mode 100644 gcc/testsuite/g++.dg/abi/empty10.C create mode 100644 gcc/testsuite/g++.dg/abi/empty11.C create mode 100644 gcc/testsuite/g++.dg/abi/empty4.C create mode 100644 gcc/testsuite/g++.dg/abi/empty5.C create mode 100644 gcc/testsuite/g++.dg/abi/empty6.C create mode 100644 gcc/testsuite/g++.dg/abi/empty7.C create mode 100644 gcc/testsuite/g++.dg/abi/empty8.C create mode 100644 gcc/testsuite/g++.dg/abi/empty9.C create mode 100644 gcc/testsuite/g++.dg/abi/enum1.C create mode 100644 gcc/testsuite/g++.dg/abi/forced.C create mode 100644 gcc/testsuite/g++.dg/abi/guard1.C create mode 100644 gcc/testsuite/g++.dg/abi/guard2.C create mode 100644 gcc/testsuite/g++.dg/abi/inline1.C create mode 100644 gcc/testsuite/g++.dg/abi/key1.C create mode 100644 gcc/testsuite/g++.dg/abi/key2.C create mode 100644 gcc/testsuite/g++.dg/abi/layout1.C create mode 100644 gcc/testsuite/g++.dg/abi/layout2.C create mode 100644 gcc/testsuite/g++.dg/abi/layout3.C create mode 100644 gcc/testsuite/g++.dg/abi/layout4.C create mode 100644 gcc/testsuite/g++.dg/abi/local1-a.cc create mode 100644 gcc/testsuite/g++.dg/abi/local1.C create mode 100644 gcc/testsuite/g++.dg/abi/local2.C create mode 100644 gcc/testsuite/g++.dg/abi/macro0.C create mode 100644 gcc/testsuite/g++.dg/abi/macro1.C create mode 100644 gcc/testsuite/g++.dg/abi/macro2.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle-neon.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle1.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle10.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle11.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle12.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle13.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle14.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle15.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle16.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle17.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle18-1.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle18-2.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle19-1.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle19-2.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle2.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle20-1.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle20-2.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle21.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle22.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle23.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle24.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle25.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle26.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle27.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle28.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle29.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle3.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle30.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle31.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle32.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle33.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle34.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle35.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle36.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle37.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle39.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle4.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle40.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle41.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle42.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle43.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle44.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle45.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle46.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle5.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle6.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle60.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle7.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle8.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle9.C create mode 100644 gcc/testsuite/g++.dg/abi/noreturn1.C create mode 100644 gcc/testsuite/g++.dg/abi/noreturn2.C create mode 100644 gcc/testsuite/g++.dg/abi/offsetof.C create mode 100644 gcc/testsuite/g++.dg/abi/packed1.C create mode 100644 gcc/testsuite/g++.dg/abi/param1.C create mode 100644 gcc/testsuite/g++.dg/abi/param2.C create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-1.h create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-1a.C create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-1b.C create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-2.h create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-2a.C create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-2b.C create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-3.h create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-3a.C create mode 100644 gcc/testsuite/g++.dg/abi/pr39188-3b.C create mode 100644 gcc/testsuite/g++.dg/abi/pragma-pack1.C create mode 100644 gcc/testsuite/g++.dg/abi/regparm1.C create mode 100644 gcc/testsuite/g++.dg/abi/rtti1.C create mode 100644 gcc/testsuite/g++.dg/abi/rtti2.C create mode 100644 gcc/testsuite/g++.dg/abi/rtti3.C create mode 100644 gcc/testsuite/g++.dg/abi/structret1.C create mode 100644 gcc/testsuite/g++.dg/abi/thunk1.C create mode 100644 gcc/testsuite/g++.dg/abi/thunk2.C create mode 100644 gcc/testsuite/g++.dg/abi/thunk3.C create mode 100644 gcc/testsuite/g++.dg/abi/thunk4.C create mode 100644 gcc/testsuite/g++.dg/abi/thunk5.C create mode 100644 gcc/testsuite/g++.dg/abi/vague1.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase1.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase10.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase11.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase12.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase13.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase14.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase15.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase8-10.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase8-21.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase8-22.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase8-4.C create mode 100644 gcc/testsuite/g++.dg/abi/vbase9.C create mode 100644 gcc/testsuite/g++.dg/abi/vcall1.C create mode 100644 gcc/testsuite/g++.dg/abi/vthunk1.C create mode 100644 gcc/testsuite/g++.dg/abi/vthunk2.C create mode 100644 gcc/testsuite/g++.dg/abi/vthunk3.C create mode 100644 gcc/testsuite/g++.dg/abi/vtt1.C (limited to 'gcc/testsuite/g++.dg/abi') diff --git a/gcc/testsuite/g++.dg/abi/align1.C b/gcc/testsuite/g++.dg/abi/align1.C new file mode 100644 index 000000000..2a70bce60 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/align1.C @@ -0,0 +1,27 @@ +// This was failuring on powerpc-darwin and powerpc-aix as +// we were taking the embeded type as the first field decl. +// This was PR target/18761. +// { dg-do run } + + +union A { + double d; +}; +union B { + enum E { e }; + double d; +}; +struct AlignA { + char c; + A a; +}; +struct AlignB { + char c; + B b; +}; +extern "C" void abort (); +int main () { + if ( __alignof__ (AlignA) != __alignof__ (AlignB)) + abort (); +} + diff --git a/gcc/testsuite/g++.dg/abi/anon1.C b/gcc/testsuite/g++.dg/abi/anon1.C new file mode 100644 index 000000000..c45917a1b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/anon1.C @@ -0,0 +1,5 @@ +// PR c++/54883 + +namespace { enum E { E1 }; } void f(E e) { } + +// { dg-final { scan-assembler-not "globl" } } diff --git a/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C b/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C new file mode 100644 index 000000000..b681a1fcb --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C @@ -0,0 +1,32 @@ +// Check that __cxa_vec_[c]ctor returns a pointer to the array +// { dg-do run { target arm*-*-* } } + +#include + +#ifdef ___ARM_EABI__ +static void cctor (void * a, void * b) +{ + *(char *) a = *(char *) b +} + +int main() +{ + char data; + char data2; + char *p; + + p = __cxa_vec_ctor (&data, 1, 1, NULL, NULL); + if (p != &data) + return 1; + p = __cxa_vec_cctor (&data2, &data, 1, 1, cctor, NULL); + if (p != &data2) + return 1; + + return 0; +} +#else +int main() +{ + return 0; +} +#endif diff --git a/gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C b/gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C new file mode 100644 index 000000000..76f327aca --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C @@ -0,0 +1,41 @@ +// Check that ARM vector delete functions accept NULL pointers as +// inputs. +// { dg-do run { target arm*-*-* } } + +#ifdef __ARM_EABI__ +#include + +typedef void *(dtor_type)(void *); + +extern "C" { + void abort(); + void *__aeabi_vec_dtor_cookie(void *, dtor_type); + void __aeabi_vec_delete(void *, dtor_type); + void __aeabi_vec_delete3(void *, + dtor_type, + void (*)(void *, __SIZE_TYPE__)); + void __aeabi_vec_delete3_nodtor(void *, + void (*)(void *, __SIZE_TYPE__)); +} + +// These functions should never be called. +void* dtor(void *) +{ + abort (); +} + +void dealloc(void *, size_t) { + abort (); +} + +int main () { + if (__aeabi_vec_dtor_cookie (NULL, &dtor) != NULL) + return 1; + // These do not return values, but should not crash. + __aeabi_vec_delete (NULL, &dtor); + __aeabi_vec_delete3 (NULL, &dtor, &dealloc); + __aeabi_vec_delete3_nodtor (NULL, &dealloc); +} +#else +int main () {} +#endif diff --git a/gcc/testsuite/g++.dg/abi/arm_rtti1.C b/gcc/testsuite/g++.dg/abi/arm_rtti1.C new file mode 100644 index 000000000..a481bdd1f --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/arm_rtti1.C @@ -0,0 +1,14 @@ +// { dg-do compile { target arm*-*-eabi* arm*-*-symbianelf* } } +// { dg-options "-O2" } +// Check that, even when optimizing, we emit an out-of-line call to +// the type-info comparison function. +// { dg-final { scan-assembler _ZNKSt9type_infoeqERKS_ } } + +#include + +extern const std::type_info& t1; +extern const std::type_info& t2; + +bool f() { + return t1 == t2; +} diff --git a/gcc/testsuite/g++.dg/abi/arm_va_list.C b/gcc/testsuite/g++.dg/abi/arm_va_list.C new file mode 100644 index 000000000..45a426a4f --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/arm_va_list.C @@ -0,0 +1,14 @@ +// { dg-do compile } +// { dg-options "-Wno-abi" } +// { dg-require-effective-target arm_eabi } + +// AAPCS \S 7.1.4 requires that va_list be a typedef for "struct +// __va_list". The mangling is as if it were "std::__va_list". +// #include +typedef __builtin_va_list va_list; + +// { dg-final { scan-assembler "\n_Z1fPSt9__va_list:" } } +void f(va_list*) {} + +// { dg-final { scan-assembler "\n_Z1gSt9__va_listS_:" } } +void g(va_list, va_list) {} diff --git a/gcc/testsuite/g++.dg/abi/arm_va_list2.C b/gcc/testsuite/g++.dg/abi/arm_va_list2.C new file mode 100644 index 000000000..f5e4ca43d --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/arm_va_list2.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-Wpsabi" } +// { dg-require-effective-target arm_eabi } + +#include +#include "arm_va_list2.h" + diff --git a/gcc/testsuite/g++.dg/abi/arm_va_list2.h b/gcc/testsuite/g++.dg/abi/arm_va_list2.h new file mode 100644 index 000000000..ebfb2deac --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/arm_va_list2.h @@ -0,0 +1,4 @@ +// The mangling of va_list changed in GCC 4.4. We want to warn about +// that -- but not in a system header. +#pragma GCC system_header +void f(va_list) {} diff --git a/gcc/testsuite/g++.dg/abi/bitfield1.C b/gcc/testsuite/g++.dg/abi/bitfield1.C new file mode 100644 index 000000000..d5d04bcd7 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield1.C @@ -0,0 +1,34 @@ +// { dg-do run } +// { dg-options "-ansi -pedantic-errors -funsigned-bitfields" } + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 15 Dec 2001 + +typedef int Int; +typedef signed int SInt; +typedef unsigned int UInt; + +struct A +{ + SInt bitS : 1; // signed + UInt bitU : 1; // unsigned + Int bit : 1; // signedness by -f{signed,unsigned}-bitfields +}; + +int main () +{ + A a; + + a.bitS = 1; // { dg-warning "overflow" } + a.bitU = 1; + a.bit = 1; + + if (a.bitS != -1) + return 1; + if (a.bitU != 1) + return 2; + if (a.bit != 1) + return 3; + + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/bitfield10.C b/gcc/testsuite/g++.dg/abi/bitfield10.C new file mode 100644 index 000000000..df40fa3f2 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield10.C @@ -0,0 +1,5 @@ +// { dg-options "-w" } + +struct S { + int i : 64; +}; diff --git a/gcc/testsuite/g++.dg/abi/bitfield11.C b/gcc/testsuite/g++.dg/abi/bitfield11.C new file mode 100644 index 000000000..e78ea121d --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield11.C @@ -0,0 +1,14 @@ +// { dg-do run } +// { dg-options "-w -fabi-version=0" } + +struct S { + char c : 1024; +}; + +S s; + +int main () { + s.c = 1; + if (*(char *)&s != 1) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/bitfield12.C b/gcc/testsuite/g++.dg/abi/bitfield12.C new file mode 100644 index 000000000..6cfda5d47 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield12.C @@ -0,0 +1,5 @@ +// { dg-options "-Wabi -fabi-version=1" } + +struct S { // { dg-warning "ABI" } + char c : 1024; // { dg-warning "width" } +}; diff --git a/gcc/testsuite/g++.dg/abi/bitfield2.C b/gcc/testsuite/g++.dg/abi/bitfield2.C new file mode 100644 index 000000000..452861ec2 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield2.C @@ -0,0 +1,34 @@ +// { dg-do run } +// { dg-options "-ansi -pedantic-errors -fsigned-bitfields" } + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 15 Dec 2001 + +typedef int Int; +typedef signed int SInt; +typedef unsigned int UInt; + +struct A +{ + SInt bitS : 1; // signed + UInt bitU : 1; // unsigned + Int bit : 1; // signedness by -f{signed,unsigned}-bitfields +}; + +int main () +{ + A a; + + a.bitS = 1; // { dg-warning "overflow" } + a.bitU = 1; + a.bit = 1; // { dg-warning "overflow" } + + if (a.bitS != -1) + return 1; + if (a.bitU != 1) + return 2; + if (a.bit != -1) + return 3; + + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/bitfield3.C b/gcc/testsuite/g++.dg/abi/bitfield3.C new file mode 100644 index 000000000..b96c9ed8d --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield3.C @@ -0,0 +1,84 @@ +// Test for oversized bitfield alignment in structs on IA-32 +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2" } +// Cygwin and mingw32 default to MASK_ALIGN_DOUBLE. Override to ensure +// 4-byte alignment. +// { dg-options "-mno-align-double" { target i?86-*-cygwin* i?86-*-mingw* } } +// { dg-require-effective-target ilp32 } + +struct A +{ + char a; + int b : 224; // { dg-warning "exceeds its type" "" } + char c; +} a, a4[4]; + +struct B +{ + char d; + A e; + char f; +} b; + +struct C +{ + char g; + long long h : 64; + char i; +} c, c4[4]; + +struct D +{ + char j; + C k; + char l; +} d; + +struct E +{ + char m; + long long n : 160; // { dg-warning "exceeds its type" "" } + char o; +} e, e4[4]; + +struct F +{ + char p; + E q; + char r; +} f; + +int main (void) +{ + if (&a.c - &a.a != 32) + return 1; + if (sizeof (a) != 36) + return 2; + if (sizeof (a4) != 4 * 36) + return 3; + if (sizeof (b) != 2 * 4 + 36) + return 4; + if (__alignof__ (b.e) != 4) + return 5; + if (&c.i - &c.g != 12) + return 6; + if (sizeof (c) != 16) + return 7; + if (sizeof (c4) != 4 * 16) + return 8; + if (sizeof (d) != 2 * 4 + 16) + return 9; + if (__alignof__ (d.k) != 4) + return 10; + if (&e.o - &e.m != 24) + return 11; + if (sizeof (e) != 28) + return 12; + if (sizeof (e4) != 4 * 28) + return 13; + if (sizeof (f) != 2 * 4 + 28) + return 14; + if (__alignof__ (f.q) != 4) + return 15; + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/bitfield4.C b/gcc/testsuite/g++.dg/abi/bitfield4.C new file mode 100644 index 000000000..5434dd973 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield4.C @@ -0,0 +1,41 @@ +/* { dg-do run { target { pcc_bitfield_type_matters || default_packed } } } */ + +/* Check bitfields and non-bitfields are aligned & sized similarly. + + Copyright (C) 2002 Free Software Foundation Inc + Contributed by Nathan Sidwell +*/ + +#include +#include + +static int fail; + +#define CHECK1(N, T) do { \ + typedef struct Field_##N { char c; T f; } Field_##N; \ + typedef struct BitField_##N { char c; T f : sizeof (T) * CHAR_BIT; } BitField_##N; \ + if (sizeof (Field_##N) != sizeof (BitField_##N)) { \ + fail = 1; printf ("sizeof %s failed\n", #T); \ + } \ + if (__alignof__ (Field_##N) != __alignof__ (BitField_##N)) { \ + fail = 1; printf ("__alignof__ %s failed\n", #T); \ + } \ +} while (0) + +#define CHECK(N, T) do { \ + CHECK1(N, T); \ + CHECK1 (s##N, signed T); \ + CHECK1 (u##N, unsigned T); \ +} while (0) + +int main () +{ + + CHECK (c, char); + CHECK (s, short); + CHECK (i, int); + CHECK (l, long); + CHECK (ll, long long); + + return fail; +} diff --git a/gcc/testsuite/g++.dg/abi/bitfield5.C b/gcc/testsuite/g++.dg/abi/bitfield5.C new file mode 100644 index 000000000..531314014 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield5.C @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-Wabi -fabi-version=1" } +// { dg-options "-Wabi -fabi-version=1 -mno-ms-bitfields" { target i?86-*-* x86_64-*-* } } + +struct A { + virtual void f(); + int f1 : 1; +}; + +struct B : public A { + int f2 : 1; // { dg-warning "ABI" } + int : 0; + int f3 : 4; + int f4 : 3; +}; diff --git a/gcc/testsuite/g++.dg/abi/bitfield6.C b/gcc/testsuite/g++.dg/abi/bitfield6.C new file mode 100644 index 000000000..50f76ab82 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield6.C @@ -0,0 +1,14 @@ +// { dg-do run } +// { dg-options "-w -fabi-version=0" } + +#include + +union U { + int i: 4096; +}; + +int main () { + if (sizeof (U) * std::numeric_limits::digits != 4096) + return 1; +} + diff --git a/gcc/testsuite/g++.dg/abi/bitfield7.C b/gcc/testsuite/g++.dg/abi/bitfield7.C new file mode 100644 index 000000000..b5b656ffa --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield7.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-Wabi -fabi-version=1" } + +union U { // { dg-warning "ABI" } + int i: 4096; // { dg-warning "exceeds" } +}; + diff --git a/gcc/testsuite/g++.dg/abi/bitfield8.C b/gcc/testsuite/g++.dg/abi/bitfield8.C new file mode 100644 index 000000000..58e74be08 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield8.C @@ -0,0 +1,22 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-options "-fabi-version=0" } +// { dg-require-effective-target ilp32 } + + +struct A { + virtual void f() {} + int f1 : 1; +}; + +struct B : public A { + int f2 : 31; + int f3 : 4; + int f4 : 3; +}; + +int main () +{ + if (sizeof (B) != 16) + return 1; +} + diff --git a/gcc/testsuite/g++.dg/abi/bitfield9.C b/gcc/testsuite/g++.dg/abi/bitfield9.C new file mode 100644 index 000000000..0d3a8bf89 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield9.C @@ -0,0 +1,12 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options -w } + +struct X { + char : 45; +}; + +int main () { + if (__alignof__ (X) != 4) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/cookie1.C b/gcc/testsuite/g++.dg/abi/cookie1.C new file mode 100644 index 000000000..defc4887b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/cookie1.C @@ -0,0 +1,15 @@ +// { dg-options "-fabi-version=0" } + +void *operator new[](__SIZE_TYPE__, void *); + +struct A { + ~A(){} +}; + +int main() +{ + A * a = (A*) new char[20]; + A * b = new(a) A[3]; + if (a != b) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/cookie2.C b/gcc/testsuite/g++.dg/abi/cookie2.C new file mode 100644 index 000000000..dc180453b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/cookie2.C @@ -0,0 +1,16 @@ +// { dg-options "-fabi-version=1" } + +void *operator new[](__SIZE_TYPE__, void *); + +struct A { + ~A(){} +}; + +int main() +{ + A * a = (A*) new char[20]; + A * b = new(a) A[3]; + // In the 3.2 ABI, a cookie was allocated in this case. + if (a == b) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/covariant1.C b/gcc/testsuite/g++.dg/abi/covariant1.C new file mode 100644 index 000000000..97737ddb9 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/covariant1.C @@ -0,0 +1,26 @@ +// { dg-do compile } +// { dg-options "-w" } + +// If a covariant thunk is overriding a virtual primary base, we have to +// use the vcall offset even though we know it will be 0. + +struct c4 {}; + +struct c6 : c4 { virtual c4* f17(); }; + +c4* c6::f17() { return 0; } + +struct c11 : virtual c6 { int i; }; + +struct c12 : c11 { }; + +struct c14 : + virtual c12, + virtual c11 { virtual void f(); c12* f17(); }; + +void c14::f() { } + +// { dg-final { scan-assembler "_ZTcv0_n12_v0_n16_N3c143f17Ev" { target { ilp32 && { ! { ia64-*-hpux* } } } } } } +// { dg-final { scan-assembler-not "_ZTch0_v0_n16_N3c143f17Ev" } } +// { dg-final { scan-assembler "_ZTcv0_n24_v0_n32_N3c143f17Ev" { target { lp64 || { ia64-*-hpux* } } } } } +// { dg-final { scan-assembler-not "_ZTch0_v0_n32_N3c143f17Ev" } } diff --git a/gcc/testsuite/g++.dg/abi/covariant2.C b/gcc/testsuite/g++.dg/abi/covariant2.C new file mode 100644 index 000000000..3231cc4c8 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/covariant2.C @@ -0,0 +1,32 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 12 Dec 2003 +// Origin: grigory@stl.sarov.ru + +// PR c++/12881. ICE in thunk generation + +struct c1 {}; + +struct c3 : virtual c1 +{ + virtual c1* f6() {} + int i; +}; + +struct c6 : virtual c3 { }; + +struct c7 : c3 +{ + virtual c3* f6() {} +}; + +struct c24 : virtual c7 +{ + virtual c6* f6(); +}; + +c6* c24::f6() { return 0; } + +struct c31 : c24 {}; + diff --git a/gcc/testsuite/g++.dg/abi/covariant3.C b/gcc/testsuite/g++.dg/abi/covariant3.C new file mode 100644 index 000000000..178157c58 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/covariant3.C @@ -0,0 +1,85 @@ +// { dg-do run } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 12 Dec 2003 +// Origin: grigory@stl.sarov.ru + +// PR c++/13118. Missing covariant thunk. + +struct c0 {}; +struct c1 : virtual c0 { + virtual c0* f6(); +}; + +struct c5 { + virtual void foo(); +}; + +struct c10 : virtual c1 { + virtual void foo(); +}; + +struct c1a : c1 {}; // disambiguation + +struct c11 : virtual c10, c1a { + int i; + virtual c1* f6 () = 0; +}; + +struct c18 : c5, virtual c1 { + virtual void bar(); +}; + +struct c28 : virtual c0, virtual c11 { + virtual c18* f6(); +}; + +c0 *c1::f6 () {} +void c5::foo () {} +void c10::foo () {} +void c18::bar () {} + +c18 ret; + +c18 *c28::f6 () +{ + return &ret; +} + +bool check_c1 (c1 *ptr) +{ + c0 *r = ptr->f6 (); + return r != &ret; +} +bool check_c10 (c10 *ptr) +{ + c0 *r = ptr->f6 (); + return r != &ret; +} +bool check_c11 (c11 *ptr) +{ + c1 *r = ptr->f6 (); + return r != &ret; +} +bool check_c28 (c28 *ptr) +{ + c18 *r = ptr->f6 (); + return r != &ret; +} + +int main () +{ + c28 obj; + + if (check_c1 (static_cast (&obj))) + return 1; + if (check_c1 (static_cast (&obj))) + return 2; + if (check_c10 (&obj)) + return 3; + if (check_c11 (&obj)) + return 4; + if (check_c28 (&obj)) + return 5; + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/covariant4.C b/gcc/testsuite/g++.dg/abi/covariant4.C new file mode 100644 index 000000000..942b1686e --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/covariant4.C @@ -0,0 +1,46 @@ +// { dg-do run } + +// Copyright (C) 2005 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 11 Feb 2005 + +// Origin: bredelin@ucla.edu +// Bug 19891: Incorrect covariant vtables + +struct Model { + bool full_tree; + virtual Model* clone() const =0; + virtual const char *name() const =0; + virtual ~Model() {} +}; + +struct R: virtual public Model { + virtual R* clone() const =0; +}; +struct A: virtual public Model { + virtual A* clone() const=0; +}; +struct RA: public R, public A { + virtual RA* clone() const=0; +}; + +static const char *string = "EQU"; + +struct EQU: public RA { + virtual EQU* clone() const {return new EQU(*this);} + const char *name() const {return string;} +}; + +int main() { + Model* M1 = new EQU(); + Model* M2 = M1->clone(); + Model* M3 = M2->clone(); + + if (M1->name () != string) + return 1; + if (M2->name () != string) + return 2; + if (M3->name () != string) + return 3; + + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/covariant5.C b/gcc/testsuite/g++.dg/abi/covariant5.C new file mode 100644 index 000000000..03e55583d --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/covariant5.C @@ -0,0 +1,52 @@ +// Copyright (C) 2005 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 4 Apr 2005 + +// { dg-do run } + +// PR 20746: Covariant return pointer could be null. + +// Origin: yanliu@ca.ibm.com +// nathan@codesourcery.com + +struct A { + virtual void One (); +}; +struct B { + virtual B *Two (); + virtual B &Three (); +}; + +struct C : A, B +{ + virtual C *Two (); + virtual C &Three (); +}; +void A::One () {} +B *B::Two() {return this;} +B &B::Three() {return *this;} +C *C::Two () {return 0;} +C &C::Three () {return *(C *)0;} + +B *Foo (B *b) +{ + return b->Two (); +} + +B &Bar (B *b) +{ + return b->Three (); +} + +int main () +{ + C c; + + /* We should not adjust a null pointer. */ + if (Foo (&c)) + return 1; + /* But we should adjust a (bogus) null reference. */ + if (!&Bar (&c)) + return 2; + + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/covariant6.C b/gcc/testsuite/g++.dg/abi/covariant6.C new file mode 100644 index 000000000..143b4ad36 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/covariant6.C @@ -0,0 +1,34 @@ +struct A +{ + virtual A* f(); +}; + +struct B: virtual A +{ + virtual A* f(); +}; + +struct C: B +{ + virtual C* f(); +}; + +C* C::f() { return 0; } + +// When we emit C::f, we should emit both thunks: one for B and one for A. +// { dg-final { scan-assembler "_ZTch0_v0_n16_N1C1fEv" { target { ilp32 && { ! { ia64-*-hpux* } } } } } } +// { dg-final { scan-assembler "_ZTch0_v0_n32_N1C1fEv" { target { lp64 || { ia64-*-hpux* } } } } } +// { dg-final { scan-assembler "_ZTcv0_n12_v0_n16_N1C1fEv" { target { ilp32 && { ! { ia64-*-hpux* } } } } } } +// { dg-final { scan-assembler "_ZTcv0_n24_v0_n32_N1C1fEv" { target { lp64 || { ia64-*-hpux* } } } } } + +struct D: B +{ + virtual void dummy (); + virtual D* f(); +}; + +void D::dummy() { } + +// When we emit the D vtable, it should refer to the thunk for B. +// { dg-final { scan-assembler "_ZTch0_v0_n16_N1D1fEv" { target { ilp32 && { ! { ia64-*-hpux* } } } } } } +// { dg-final { scan-assembler "_ZTch0_v0_n32_N1D1fEv" { target { lp64 || { ia64-*-hpux* } } } } } diff --git a/gcc/testsuite/g++.dg/abi/dcast1.C b/gcc/testsuite/g++.dg/abi/dcast1.C new file mode 100644 index 000000000..99f678ff3 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/dcast1.C @@ -0,0 +1,29 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 28 Jan 2003 + +// PR 9433. segfault at runtime. + +struct A { virtual void f() {} }; +struct B {int b;}; +struct C : A, B { virtual void f() {} int c;}; +struct D : C {int d;}; +struct E : C {int e;}; +struct F : protected D, E {int f;}; +struct H : virtual F {int h;}; +struct I : H {int i;}; +struct J : H {int j;}; +struct K : I, J { virtual void f() {} int k; }; +struct M : K {int m;}; +struct N : M {int n;}; +struct O : M {int o;}; +struct P : N, O { virtual void f() {} int p;}; + +int main() +{ + P obj; + A* a1 = (D *) (&obj); + H* hp = dynamic_cast(a1); + return hp != 0; +} diff --git a/gcc/testsuite/g++.dg/abi/dtor1.C b/gcc/testsuite/g++.dg/abi/dtor1.C new file mode 100644 index 000000000..f9425e013 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/dtor1.C @@ -0,0 +1,23 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options "-fabi-version=0" } + +struct A { + virtual void a (); +}; + +struct B { + virtual ~B (); +}; + +struct C : public A, public B { + virtual void c (); +}; + +struct D : virtual public C { + virtual void d (); +}; + +void D::d () {} + +// { dg-final { scan-assembler _ZTv0_n20_N1DD1Ev } } diff --git a/gcc/testsuite/g++.dg/abi/dtor2.C b/gcc/testsuite/g++.dg/abi/dtor2.C new file mode 100644 index 000000000..6b89cc8ea --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/dtor2.C @@ -0,0 +1,14 @@ +// { dg-do compile } +// { dg-options "-Wabi -fabi-version=1" } + +struct A { + virtual void a (); +}; + +struct B { + virtual ~B (); +}; + +struct C : public A, public B { // { dg-warning "virtual" } + virtual void c (); +}; diff --git a/gcc/testsuite/g++.dg/abi/empty10.C b/gcc/testsuite/g++.dg/abi/empty10.C new file mode 100644 index 000000000..ae992944d --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty10.C @@ -0,0 +1,28 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options "-fabi-version=0 -w" } + +struct E {}; +struct E2 : public E {}; + +struct A { + int i; +}; + +struct B { + int j; +}; + +struct C : + public E, + public A, + public E2, + virtual public B { +}; + +C c; + +int main () { + if (((char*)(B*)&c - (char*)&c) != 8) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/empty11.C b/gcc/testsuite/g++.dg/abi/empty11.C new file mode 100644 index 000000000..b35363f5b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty11.C @@ -0,0 +1,19 @@ +// { dg-do run } +// { dg-options "-w -fabi-version=0" } + +struct E {}; +struct E2 : public E {}; +struct E3 : public E, public E2 {}; +struct E4 : public E, public E2, public E3 { }; +struct E5 : public E, public E2, public E3, public E4 {}; + +struct S : public virtual E5 { + E e; +}; + +S s; + +int main () { + if ((char*)(E4*)&s - (char*)&s == 0) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/empty4.C b/gcc/testsuite/g++.dg/abi/empty4.C new file mode 100644 index 000000000..d20a55cf7 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty4.C @@ -0,0 +1,86 @@ +// { dg-do run } + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 31 Jul 2001 + +// Bug 3820. We were bit copying empty bases including the +// padding. Which clobbers whatever they overlay. + +struct Empty {}; + +struct Inter : Empty {}; + +long now = 0; + +struct NonPod +{ + long m; + + NonPod () {m = 0x12345678;} + NonPod (long m_) {m = m_;} + NonPod &operator= (NonPod const &src) {now = m; m = src.m; return *this;} + NonPod (NonPod const &src) {m = src.m;} +}; + +struct A : Inter +{ + A (long c) {m = c;} + + NonPod m; +}; + +struct B +{ + Inter empty; + NonPod m; + + B (long c) {m = c;} +}; + +struct C : NonPod, Inter +{ + C (long c) : NonPod (c), Inter () {} +}; + +int main () +{ + A a (0x12131415); + + long was = a.m.m; + + a = 0x22232425; + + if (was != now) + return 1; // we copied the empty base which clobbered a.m.m's + // original value. + + A b (0x32333435); + *(Inter *)&a = *(Inter *)&b; + + if (a.m.m != 0x22232425) + return 2; // we copied padding, which clobbered a.m.m + + A b2 (0x32333435); + (Inter &)b2 = Inter (); + if (b2.m.m != 0x32333435) + return 2; // we copied padding, which clobbered b2.m.m + + B c (0x12131415); + was = c.m.m; + c = 0x22232425; + if (was != now) + return 3; + + B d (0x32333435); + c.empty = d.empty; + + if (c.m.m != 0x22232425) + return 4; + + C e (0x32333435); + + if (e.m != 0x32333435) + return 2; // we copied padding + + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/empty5.C b/gcc/testsuite/g++.dg/abi/empty5.C new file mode 100644 index 000000000..c3717727e --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty5.C @@ -0,0 +1,17 @@ +// { dg-options "-fabi-version=0" } + +struct A {}; + +struct B { + A a; + virtual void f () {} +}; + +struct C : public B, public A {}; + +C c; + +int main () { + if ((void*) (A*) &c != &c) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/empty6.C b/gcc/testsuite/g++.dg/abi/empty6.C new file mode 100644 index 000000000..1b14a6d03 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty6.C @@ -0,0 +1,14 @@ +// { dg-options "-Wabi -fabi-version=1" } + +struct A {}; + +struct B { + A a; // { dg-warning "empty" "" { xfail mmix-*-* } } + virtual void f () {} +} __attribute__((aligned(2 * sizeof (void *)))); +/* The preceding attribute is necessary on targets with + BIGGEST_ALIGNMENT <= POINTER_SIZE to trigger the warning, as + otherwise the offset of 'a' (i.e. POINTER_SIZE) is split into a + non-zero DECL_FIELD_OFFSET and a zero DECL_FIELD_BIT_OFFSET, + and then there is no discrepancy between DECL_FIELD_OFFSET and + byte_position to warn about. */ diff --git a/gcc/testsuite/g++.dg/abi/empty7.C b/gcc/testsuite/g++.dg/abi/empty7.C new file mode 100644 index 000000000..0a665a845 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty7.C @@ -0,0 +1,19 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options "-fabi-version=0" } + +struct S1 {}; +struct S2 { virtual void f () {} S1 s1[4]; }; +struct S3 : virtual public S2 {}; +struct S4 : virtual public S2 { int i; }; +struct S5 : public S3, virtual public S4 {}; +struct S6 { S5 s5; }; +struct S7 { S1 s1[5]; }; +struct S8 : public S1, public S6, virtual public S7 { }; + +S8 s8; + +int main () { + if ((char *)(S7 *)&s8 - (char *)&s8 != 24) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/empty8.C b/gcc/testsuite/g++.dg/abi/empty8.C new file mode 100644 index 000000000..a5287b15f --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty8.C @@ -0,0 +1,14 @@ +// { dg-do run } +// { dg-options "-fabi-version=0" } + +struct E1 {}; +struct E2 : public E1 {}; +struct S1 { int i; }; +struct S2 : public S1, E2 {}; + +S2 s2; + +int main () { + if ((char *)(E2*) &s2 != (char *)&s2) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/empty9.C b/gcc/testsuite/g++.dg/abi/empty9.C new file mode 100644 index 000000000..06e616adb --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty9.C @@ -0,0 +1,17 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options "-w -fabi-version=0" } + +struct E1 {}; +struct E2 : public E1 { + virtual void f (); +}; +struct E3 : virtual public E1 { +}; +struct S : public E2, virtual public E3 { +}; + +int main () { + if (sizeof (S) != 12) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/enum1.C b/gcc/testsuite/g++.dg/abi/enum1.C new file mode 100644 index 000000000..32e52fe0f --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/enum1.C @@ -0,0 +1,16 @@ +// { dg-do run } + +#include + +enum foo +{ + foo1 = 0, + foo2 = 0xffffffffffffffffULL, + foo3 = 0xf0fffffffffffffeULL +}; + +int main () +{ + if (sizeof (enum foo) != sizeof (unsigned long long)) + std::abort (); +} diff --git a/gcc/testsuite/g++.dg/abi/forced.C b/gcc/testsuite/g++.dg/abi/forced.C new file mode 100644 index 000000000..7a9c35964 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/forced.C @@ -0,0 +1,25 @@ +// This test only applies to glibc (NPTL) targets. +// { dg-do run { target *-*-linux* } } +// { dg-options "-pthread" } + +#include +#include +extern "C" int printf (const char *, ...); + +int main() +{ + try + { + pthread_exit (0); + } + catch (abi::__forced_unwind &) + { + printf ("caught forced unwind\n"); + throw; + } + catch (...) + { + printf ("caught ...\n"); + return 1; + } +} diff --git a/gcc/testsuite/g++.dg/abi/guard1.C b/gcc/testsuite/g++.dg/abi/guard1.C new file mode 100644 index 000000000..76b43d30f --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/guard1.C @@ -0,0 +1,10 @@ +// PR c++/41611 +// { dg-final { scan-assembler-not "_ZGVZN1A1fEvE1i" } } + +struct A { + static int f() + { + static int &i = *new int(); + return i; + } +}; diff --git a/gcc/testsuite/g++.dg/abi/guard2.C b/gcc/testsuite/g++.dg/abi/guard2.C new file mode 100644 index 000000000..988fd385b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/guard2.C @@ -0,0 +1,16 @@ +// PR c++/41611 +// Test that the guard gets its own COMDAT group. +// { dg-final { scan-assembler "_ZGVZN1A1fEvE1i,comdat" { target *-*-linux* } } } + +struct A { + static int f() + { + static int &i = *new int(); + return i; + } +}; + +int main() +{ + return A::f(); +} diff --git a/gcc/testsuite/g++.dg/abi/inline1.C b/gcc/testsuite/g++.dg/abi/inline1.C new file mode 100644 index 000000000..97082aa73 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/inline1.C @@ -0,0 +1,6 @@ +struct S { + S() {} + virtual void g() {} +}; + +// { dg-final { scan-assembler-not "_ZTV1S" } } diff --git a/gcc/testsuite/g++.dg/abi/key1.C b/gcc/testsuite/g++.dg/abi/key1.C new file mode 100644 index 000000000..6c0380926 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/key1.C @@ -0,0 +1,26 @@ +// On ARM EABI platforms, key methods may never be inline. +// { dg-do compile { target arm*-*-eabi* arm*-*-symbianelf* } } +// { dg-final { scan-assembler-not _ZTV1S } } +// { dg-final { scan-assembler-not _ZTV1T } } +// { dg-final { scan-assembler _ZTV1U } } + +struct S { + virtual void f(); +}; + +inline void S::f() {} + +struct T { + virtual void g(); + virtual void h(); +}; + +inline void T::g() {} + +struct U { + virtual void i(); + virtual void j(); +}; + +inline void U::i() {} +void U::j () {} diff --git a/gcc/testsuite/g++.dg/abi/key2.C b/gcc/testsuite/g++.dg/abi/key2.C new file mode 100644 index 000000000..0d1347aaa --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/key2.C @@ -0,0 +1,16 @@ +// On Darwin, key methods that are inline result in comdat style things. */ +// PR darwin/25908 + +// { dg-do compile { target *-*-darwin* } } +// { dg-final { scan-assembler ".globl __ZTV1f\\n .weak_definition __ZTV1f(\\n .section __DATA,__const_coal,coalesced)?\\n .align" } } +// { dg-final { scan-assembler ".globl __ZTS1f\\n .weak_definition __ZTS1f\\n .section __TEXT,__const_coal,coalesced" } } +// { dg-final { scan-assembler ".globl __ZTI1f\\n .weak_definition __ZTI1f(\\n .section __DATA,__const_coal,coalesced)?\\n .align" } } + +class f +{ + virtual void g(); + virtual void h(); +} c; +inline void f::g() {} +int sub(void) +{} diff --git a/gcc/testsuite/g++.dg/abi/layout1.C b/gcc/testsuite/g++.dg/abi/layout1.C new file mode 100644 index 000000000..645ed6acf --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/layout1.C @@ -0,0 +1,31 @@ +// Red Hat bugzilla 64535 +// Bug: We are allocationg stuff into the tail padding of POD class "A". +// { dg-do run } + +struct A +{ + int x; + char y; +}; + +struct B : public A { + virtual void f () {} + char z; +}; + +A a = { 21, 42 }; +B b; + +int +main (void) +{ + b.x = 12; + b.y = 24; + b.z = 36; + + A *ap = &b; + + *ap = a; + + return (b.z != 36); +} diff --git a/gcc/testsuite/g++.dg/abi/layout2.C b/gcc/testsuite/g++.dg/abi/layout2.C new file mode 100644 index 000000000..fb4e1e5d9 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/layout2.C @@ -0,0 +1,33 @@ +// Red Hat bugzilla 65210 +// { dg-do run } + +struct A { + int a; +}; + +struct B : public virtual A {}; + +struct C { + long double c; +}; + +struct D : public virtual C { + int d; +}; + +struct E : public B, public D { + int e; +}; + +E e; + +/* The layout of E should begin with the B-in-E vtable pointer, followed by + the D-in-E vtable pointer. The bug was that we used to pad out the D + fields for long double alignment. */ + +int main () +{ + D* dp = &e; + unsigned long d_offset = ((char*)dp) - ((char*) &e); + return (d_offset != sizeof(void *)); +} diff --git a/gcc/testsuite/g++.dg/abi/layout3.C b/gcc/testsuite/g++.dg/abi/layout3.C new file mode 100644 index 000000000..a30a85219 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/layout3.C @@ -0,0 +1,27 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options "-fabi-version=0 -w" } + +struct S { + virtual void f() {} +}; + +struct T : virtual public S { }; + +struct U : public S, virtual public T { + char c[100]; +}; + +struct V : public U, virtual public S {}; + +struct W : public V { + int i; +}; + +int main () { + W w; + + if ((char*) &w.i - (char *) &w != 104) + return 1; +} + diff --git a/gcc/testsuite/g++.dg/abi/layout4.C b/gcc/testsuite/g++.dg/abi/layout4.C new file mode 100644 index 000000000..da3c2f5d8 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/layout4.C @@ -0,0 +1,19 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options "-fabi-version=1" } + +struct C4 +{ + int b:30; + C4(){}; +}; + +struct C1: virtual C4 +{ + int i; +}; + +int main() { + if (sizeof (C1) != 12) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/local1-a.cc b/gcc/testsuite/g++.dg/abi/local1-a.cc new file mode 100644 index 000000000..638479e74 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/local1-a.cc @@ -0,0 +1,14 @@ +struct B { + virtual void b() {} +}; + +static B* f() { + struct D : public B { + }; + + return new D; +} + +B* g() { + return f(); +} diff --git a/gcc/testsuite/g++.dg/abi/local1.C b/gcc/testsuite/g++.dg/abi/local1.C new file mode 100644 index 000000000..518193c89 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/local1.C @@ -0,0 +1,22 @@ +// { dg-do run } +// { dg-additional-sources "local1-a.cc" } + +#include + +struct B { + virtual void b() {} +}; + +static B* f() { + struct D : public B { + }; + + return new D; +} + +extern B* g(); + +int main () { + if (typeid (*f()) == typeid (*g())) + return 1; +} diff --git a/gcc/testsuite/g++.dg/abi/local2.C b/gcc/testsuite/g++.dg/abi/local2.C new file mode 100644 index 000000000..f56701610 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/local2.C @@ -0,0 +1,17 @@ +// PR c++/42010 +// { dg-final { scan-assembler "ZZN1A1fEvE1s" } } + +struct A { + static int f() + { + static struct { + int i; + } s; + return s.i; + } +}; + +int main() +{ + return A::f(); +} diff --git a/gcc/testsuite/g++.dg/abi/macro0.C b/gcc/testsuite/g++.dg/abi/macro0.C new file mode 100644 index 000000000..6c391e689 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/macro0.C @@ -0,0 +1,5 @@ +// { dg-options "-fabi-version=0" } + +#if __GXX_ABI_VERSION != 999999 +#error "Incorrect value of __GXX_ABI_VERSION" +#endif diff --git a/gcc/testsuite/g++.dg/abi/macro1.C b/gcc/testsuite/g++.dg/abi/macro1.C new file mode 100644 index 000000000..871208da3 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/macro1.C @@ -0,0 +1,5 @@ +// { dg-options "-fabi-version=1" } + +#if __GXX_ABI_VERSION != 102 +#error "Incorrect value of __GXX_ABI_VERSION" +#endif diff --git a/gcc/testsuite/g++.dg/abi/macro2.C b/gcc/testsuite/g++.dg/abi/macro2.C new file mode 100644 index 000000000..9f0af9cff --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/macro2.C @@ -0,0 +1,5 @@ +// { dg-options "-fabi-version=2" } + +#if __GXX_ABI_VERSION != 1002 +#error "Incorrect value of __GXX_ABI_VERSION" +#endif diff --git a/gcc/testsuite/g++.dg/abi/mangle-neon.C b/gcc/testsuite/g++.dg/abi/mangle-neon.C new file mode 100644 index 000000000..af1fe49f1 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle-neon.C @@ -0,0 +1,49 @@ +// Test that ARM NEON vector types have their names mangled correctly. + +// { dg-do compile } +// { dg-require-effective-target arm_neon_ok } +// { dg-add-options arm_neon } + +#include + +void f0 (int8x8_t a) {} +void f1 (int16x4_t a) {} +void f2 (int32x2_t a) {} +void f3 (uint8x8_t a) {} +void f4 (uint16x4_t a) {} +void f5 (uint32x2_t a) {} +void f6 (float32x2_t a) {} +void f7 (poly8x8_t a) {} +void f8 (poly16x4_t a) {} + +void f9 (int8x16_t a) {} +void f10 (int16x8_t a) {} +void f11 (int32x4_t a) {} +void f12 (uint8x16_t a) {} +void f13 (uint16x8_t a) {} +void f14 (uint32x4_t a) {} +void f15 (float32x4_t a) {} +void f16 (poly8x16_t a) {} +void f17 (poly16x8_t a) {} + +void f18 (int8x16_t, int8x16_t) {} + +// { dg-final { scan-assembler "_Z2f015__simd64_int8_t:" } } +// { dg-final { scan-assembler "_Z2f116__simd64_int16_t:" } } +// { dg-final { scan-assembler "_Z2f216__simd64_int32_t:" } } +// { dg-final { scan-assembler "_Z2f316__simd64_uint8_t:" } } +// { dg-final { scan-assembler "_Z2f417__simd64_uint16_t:" } } +// { dg-final { scan-assembler "_Z2f517__simd64_uint32_t:" } } +// { dg-final { scan-assembler "_Z2f618__simd64_float32_t:" } } +// { dg-final { scan-assembler "_Z2f716__simd64_poly8_t:" } } +// { dg-final { scan-assembler "_Z2f817__simd64_poly16_t:" } } +// { dg-final { scan-assembler "_Z2f916__simd128_int8_t:" } } +// { dg-final { scan-assembler "_Z3f1017__simd128_int16_t:" } } +// { dg-final { scan-assembler "_Z3f1117__simd128_int32_t:" } } +// { dg-final { scan-assembler "_Z3f1217__simd128_uint8_t:" } } +// { dg-final { scan-assembler "_Z3f1318__simd128_uint16_t:" } } +// { dg-final { scan-assembler "_Z3f1418__simd128_uint32_t:" } } +// { dg-final { scan-assembler "_Z3f1519__simd128_float32_t:" } } +// { dg-final { scan-assembler "_Z3f1617__simd128_poly8_t:" } } +// { dg-final { scan-assembler "_Z3f1718__simd128_poly16_t:" } } +// { dg-final { scan-assembler "_Z3f1816__simd128_int8_tS_:" } } diff --git a/gcc/testsuite/g++.dg/abi/mangle1.C b/gcc/testsuite/g++.dg/abi/mangle1.C new file mode 100644 index 000000000..ab377d13b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle1.C @@ -0,0 +1,28 @@ +// Test for mangling of simple testcase involving construction vtables. + +// { dg-do compile } +// { dg-options "-fno-inline" } + +struct A { + virtual void f () { } +}; + +struct B: public virtual A { }; +struct C: public B { }; + +C c; + +// { dg-final { scan-assembler "\n_?_ZN1A1fEv\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZN1AC2Ev\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZN1BC2Ev\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZN1CC1Ev\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTC1C0_1B\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTI1A\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTI1B\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTI1C\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTS1A\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTS1B\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTS1C\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTT1C\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTV1A\[: \t\n\]" } } +// { dg-final { scan-assembler "\n_?_ZTV1C\[: \t\n\]" } } diff --git a/gcc/testsuite/g++.dg/abi/mangle10.C b/gcc/testsuite/g++.dg/abi/mangle10.C new file mode 100644 index 000000000..d5782ba6d --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle10.C @@ -0,0 +1,13 @@ +// { dg-options "-fabi-version=0" } + +template