summaryrefslogtreecommitdiffstats
path: root/SOURCES/gcc2.95.3-2.95.4vxw55.patch
diff options
context:
space:
mode:
authorJoerg Koenig <jck@techsat.com>2017-11-08 11:14:38 (GMT)
committerJoerg Koenig <jck@techsat.com>2017-11-08 11:14:38 (GMT)
commite4c17a382593714e42171d99d8963f691c3f18b7 (patch)
treea3a15bfff0d049640e5b31f435a72fca4ae8ef56 /SOURCES/gcc2.95.3-2.95.4vxw55.patch
parentd407e09d669cb65287816dbe99b163448452d135 (diff)
downloadcrossppc-e4c17a382593714e42171d99d8963f691c3f18b7.zip
crossppc-e4c17a382593714e42171d99d8963f691c3f18b7.tar.gz
crossppc-e4c17a382593714e42171d99d8963f691c3f18b7.tar.bz2
Switched to working gcc 2.95.4 and binutils 2.10.1; Only 32-Bit Compiler supported
Change-Id: I22a948e77bab02451539a1f5a280420e5e71a8ee
Diffstat (limited to 'SOURCES/gcc2.95.3-2.95.4vxw55.patch')
-rw-r--r--SOURCES/gcc2.95.3-2.95.4vxw55.patch179363
1 files changed, 179363 insertions, 0 deletions
diff --git a/SOURCES/gcc2.95.3-2.95.4vxw55.patch b/SOURCES/gcc2.95.3-2.95.4vxw55.patch
new file mode 100644
index 0000000..2378298
--- /dev/null
+++ b/SOURCES/gcc2.95.3-2.95.4vxw55.patch
@@ -0,0 +1,179363 @@
+diff -ruNb gcc-2.95.3/.brik gcc-2.95.4/.brik
+--- gcc-2.95.3/.brik 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/.brik 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2781 +0,0 @@
+-# Whole file CRCs generated by Brik v2.0. Use "brik -C" to verify them.
+-
+-# CRC-32 filename
+-# ------ --------
+-
+- 40745673b ./ChangeLog
+-2773723724b ./config/ChangeLog
+-4130389924b ./config.guess
+-2969147338b ./config.if
+-3007349820b ./config/mh-a68bsd
+-1442196770b ./config/mh-aix386
+-4076175188b ./config/mh-aix43
+-3054121875b ./config/mh-apollo68
+-3478341494b ./config/mh-armpic
+-1811916229b ./config/mh-cxux
+-3020282061b ./config/mh-cygwin
+-2180612469b ./config/mh-decstation
+- 973727842b ./config/mh-delta88
+-2133351807b ./config/mh-dgux
+- 746894734b ./config/mh-dgux386
+-4215267871b ./config/mh-djgpp
+-3478341494b ./config/mh-elfalphapic
+- 41994544b ./config/mh-hp300
+- 318860404b ./config/mh-hpux
+- 318860404b ./config/mh-hpux8
+-2339341800b ./config/mh-interix
+-3277888801b ./config/mh-irix4
+-1357357208b ./config/mh-irix5
+-1330768880b ./config/mh-irix6
+-2624861245b ./config/mh-lynxos
+-1194372982b ./config/mh-lynxrs6k
+-3265825290b ./config/mh-m68kpic
+-1904254329b ./config/mh-mingw32
+-3317263548b ./config/mh-ncr3000
+-2638893829b ./config/mh-ncrsvr43
+-4287527672b ./config/mh-necv4
+-3478341494b ./config/mh-papic
+-3478341494b ./config/mh-ppcpic
+- 136062744b ./config/mh-riscos
+- 407821128b ./config/mh-sco
+-2015316329b ./config/mh-solaris
+- 203083803b ./config/mh-sparcpic
+- 889431517b ./config/mh-sun3
+-1253937510b ./config/mh-sysv
+-3104599531b ./config/mh-sysv4
+-2519884023b ./config/mh-sysv5
+- 456622165b ./config/mh-vaxult2
+-3265825290b ./config/mh-x86pic
+-3703830219b ./config-ml.in
+-2763692045b ./config/mpw/ChangeLog
+-4005879853b ./config/mpw/forward-include
+- 439409833b ./config/mpw/g-mpw-make.sed
+- 198559626b ./config/mpw-mh-mpw
+-3145098931b ./config/mpw/MoveIfChange
+-2800114792b ./config/mpw/mpw-touch
+-3832565257b ./config/mpw/mpw-true
+- 792347706b ./config/mpw/null-command
+-3439853311b ./config/mpw/open-brace
+-1476422091b ./config/mpw/README
+- 779160003b ./config/mpw/tr-7to8-src
+-3832565257b ./config/mpw/true
+- 536974328b ./config/mt-armpic
+- 536974328b ./config/mt-elfalphapic
+- 690722699b ./config/mt-linux
+- 771382916b ./config/mt-m68kpic
+-2548851201b ./config/mt-netware
+- 971016637b ./config/mt-ospace
+- 536974328b ./config/mt-papic
+- 536974328b ./config/mt-ppcpic
+- 828136936b ./config/mt-sparcpic
+- 787786243b ./config/mt-v810
+- 771382916b ./config/mt-x86pic
+- 372693157b ./config.sub
+- 753136214b ./configure
+-1212521209b ./configure.in
+-2741109168b ./contrib/ChangeLog
+- 550196746b ./contrib/compare_tests
+-3828788345b ./contrib/egcs_update
+-1060321676b ./contrib/gperf-2.7-19981006.pat
+- 904867939b ./contrib/index-prop
+-3040114942b ./contrib/test_installed
+-3207566234b ./contrib/test_summary
+-1176279968b ./contrib/warn_summary
+- 430871781b ./COPYING
+-2637011133b ./COPYING.LIB
+-4237809446b ./.cvsignore
+-1599808887b ./etc/aclocal.m4
+-1997310358b ./etc/ChangeLog
+-2024299803b ./etc/configure
+- 597781507b ./etc/configure.in
+-4027299794b ./etc/Makefile.in
+-1601906984b ./etc/make-stds.texi
+-1110151395b ./etc/standards.texi
+-2012678829b ./FAQ
+-3959848447b ./faq.html
+-2163082026b ./gcc/ABOUT-GCC-NLS
+-1014730298b ./gcc/ABOUT-NLS
+-2199018716b ./gcc/acconfig.h
+-4190083916b ./gcc/aclocal.m4
+-3617713225b ./gcc/alias.c
+-4179046188b ./gcc/assert.h
+-3227020286b ./gcc/basic-block.h
+-2897689365b ./gcc/bitmap.c
+-1092830340b ./gcc/bitmap.h
+-1471330941b ./gcc/BUGS
+-3514329314b ./gcc/build-make
+-1297227555b ./gcc/caller-save.c
+-1105896127b ./gcc/calls.c
+-2833192624b ./gcc/c-aux-info.c
+-1031499251b ./gcc/cccp.1
+-3931978756b ./gcc/cccp.c
+-1769823897b ./gcc/c-common.c
+-3351004599b ./gcc/c-convert.c
+-3097530966b ./gcc/c-decl.c
+-2374568197b ./gcc/cexp.c
+-1259037984b ./gcc/cexp.y
+-3172609301b ./gcc/c-gperf.h
+- 72814584b ./gcc/ch/actions.c
+-3268996754b ./gcc/ch/actions.h
+-1489002859b ./gcc/ChangeLog
+-1908191848b ./gcc/ChangeLog.0
+-1942935930b ./gcc/ChangeLog.lib
+-3896853117b ./gcc/ch/ChangeLog
+-2055591891b ./gcc/ch/chill.brochure
+- 262452143b ./gcc/ch/chill.in
+-1068085425b ./gcc/ch/chill.texi
+-1266350782b ./gcc/ch/ch-tree.def
+-3431963368b ./gcc/ch/ch-tree.h
+- 666006412b ./gcc/ch/config-lang.in
+-3382766792b ./gcc/ch/configure
+-1217043291b ./gcc/ch/convert.c
+- 780342204b ./gcc/ch/decl.c
+-2380641592b ./gcc/ch/except.c
+- 797109334b ./gcc/ch/expr.c
+-3658339269b ./gcc/ch/gperf
+-1763938881b ./gcc/ch/grant.c
+-1554207802b ./gcc/ch/hash.h
+- 455841629b ./gcc/ch/inout.c
+- 916936107b ./gcc/ch/lang.c
+-2818159896b ./gcc/ch/lang-options.h
+-3676798508b ./gcc/ch/lang-specs.h
+- 607676058b ./gcc/ch/lex.c
+- 56655465b ./gcc/ch/lex.h
+-4068433180b ./gcc/ch/loop.c
+-3840952328b ./gcc/ch/Makefile.in
+-3668056982b ./gcc/ch/Make-lang.in
+-1502935023b ./gcc/ch/nloop.c
+- 729034310b ./gcc/ch/parse.c
+- 634606057b ./gcc/ch/parse.h
+- 860743420b ./gcc/ch/README
+-1720320140b ./gcc/ch/satisfy.c
+-1539445801b ./gcc/ch/tasking.c
+-2604102496b ./gcc/ch/tasking.h
+-4069785574b ./gcc/ch/timing.c
+- 272436253b ./gcc/ch/tree.c
+-2688980962b ./gcc/ch/typeck.c
+-4020668406b ./gcc/ch/xtypeck.c
+-3829210531b ./gcc/c-iterate.c
+-1221346333b ./gcc/c-lang.c
+-4038532167b ./gcc/c-lex.c
+-1368444824b ./gcc/c-lex.h
+-1724648154b ./gcc/collect2.c
+-1699818163b ./gcc/collect2.h
+- 495045693b ./gcc/combine.c
+-1434596660b ./gcc/conditions.h
+-4106504689b ./gcc/config/1750a/1750a.c
+-3234129706b ./gcc/config/1750a/1750a.h
+-3095377682b ./gcc/config/1750a/1750a.md
+-2477730384b ./gcc/config/1750a/ms1750.inc
+-1693851368b ./gcc/config/1750a/xm-1750a.h
+-3821624618b ./gcc/config/a29k/a29k.c
+-4174995942b ./gcc/config/a29k/a29k.h
+-3852750578b ./gcc/config/a29k/a29k.md
+-2307933459b ./gcc/config/a29k/t-a29k
+-3566307489b ./gcc/config/a29k/t-a29kbare
+-3165685760b ./gcc/config/a29k/t-vx29k
+-2502433193b ./gcc/config/a29k/udi.h
+-2011164678b ./gcc/config/a29k/unix.h
+-1666542577b ./gcc/config/a29k/vx29k.h
+-2996218177b ./gcc/config/a29k/xm-a29k.h
+-2472430666b ./gcc/config/a29k/xm-unix.h
+- 144752292b ./gcc/config/a29k/x-unix
+- 193538505b ./gcc/config/alpha/alpha32.h
+-1514879972b ./gcc/config/alpha/alpha.c
+-3100261546b ./gcc/config/alpha/alpha.h
+-3742075344b ./gcc/config/alpha/alpha-interix.h
+- 754462921b ./gcc/config/alpha/alpha.md
+- 795597665b ./gcc/config/alpha/config-nt.sed
+-3567833533b ./gcc/config/alpha/crtbegin.asm
+-1312076907b ./gcc/config/alpha/crtend.asm
+-3042700248b ./gcc/config/alpha/elf.h
+-2715664516b ./gcc/config/alpha/lib1funcs.asm
+-1763018017b ./gcc/config/alpha/linux-ecoff.h
+-3273041531b ./gcc/config/alpha/linux-elf.h
+- 812092393b ./gcc/config/alpha/linux.h
+-3777698255b ./gcc/config/alpha/netbsd-elf.h
+- 5367058b ./gcc/config/alpha/netbsd.h
+-4065475375b ./gcc/config/alpha/openbsd.h
+-1792826440b ./gcc/config/alpha/osf12.h
+-1928873630b ./gcc/config/alpha/osf2or3.h
+-1470207174b ./gcc/config/alpha/osf.h
+-2118184540b ./gcc/config/alpha/t-crtbe
+-3128522514b ./gcc/config/alpha/t-ieee
+-3927015616b ./gcc/config/alpha/t-interix
+-1500154793b ./gcc/config/alpha/t-vms
+-3660437230b ./gcc/config/alpha/va_list.h
+-4010999121b ./gcc/config/alpha/vms.h
+-1402142372b ./gcc/config/alpha/vms-tramp.asm
+-1904467114b ./gcc/config/alpha/vxworks.h
+-2487176671b ./gcc/config/alpha/win-nt.h
+-1758618093b ./gcc/config/alpha/x-alpha
+-2339893992b ./gcc/config/alpha/xm-alpha.h
+-4139273463b ./gcc/config/alpha/xm-alpha-interix.h
+-2208381303b ./gcc/config/alpha/xm-openbsd.h
+-2295823330b ./gcc/config/alpha/xm-vms.h
+- 822385833b ./gcc/config/alpha/xm-winnt.h
+- 662120966b ./gcc/config/aoutos.h
+-2898703135b ./gcc/config/arc/arc.c
+-3275327813b ./gcc/config/arc/arc.h
+-4242839641b ./gcc/config/arc/arc.md
+- 631838986b ./gcc/config/arc/initfini.c
+-3301435163b ./gcc/config/arc/lib1funcs.asm
+-2984223315b ./gcc/config/arc/t-arc
+- 819474010b ./gcc/config/arc/xm-arc.h
+-1005732185b ./gcc/config/arm/aof.h
+-2774813096b ./gcc/config/arm/aout.h
+-2860349734b ./gcc/config/arm/arm.c
+-2608240560b ./gcc/config/arm/arm.h
+-4087133611b ./gcc/config/arm/arm.md
+-2488881798b ./gcc/config/arm/coff.h
+-1087283327b ./gcc/config/arm/ecos-elf.h
+-3886798812b ./gcc/config/arm/elf.h
+- 951700778b ./gcc/config/arm/lib1funcs.asm
+- 184992847b ./gcc/config/arm/lib1thumb.asm
+-1327962964b ./gcc/config/arm/linux-aout.h
+-3689484926b ./gcc/config/arm/linux-elf26.h
+-1081224307b ./gcc/config/arm/linux-elf.h
+-1629076541b ./gcc/config/arm/linux-gas.h
+-1687883437b ./gcc/config/arm/linux-oldld.h
+- 309925977b ./gcc/config/arm/netbsd.h
+-2885119589b ./gcc/config/arm/README-interworking
+-2714546048b ./gcc/config/arm/riscix1-1.h
+-2757393750b ./gcc/config/arm/riscix.h
+-1910088041b ./gcc/config/arm/rix-gas.h
+- 211210124b ./gcc/config/arm/semiaof.h
+-3032000292b ./gcc/config/arm/semi.h
+-2293704459b ./gcc/config/arm/t-arm-elf
+- 378848060b ./gcc/config/arm/t-bare
+- 63378260b ./gcc/config/arm/tcoff.h
+- 271105747b ./gcc/config/arm/thumb.c
+-2006315119b ./gcc/config/arm/thumb.h
+-3116482299b ./gcc/config/arm/thumb.md
+-3774122170b ./gcc/config/arm/t-linux
+-2612005796b ./gcc/config/arm/t-netbsd
+-3806050362b ./gcc/config/arm/t-pe
+-1885831441b ./gcc/config/arm/t-riscix
+- 106908213b ./gcc/config/arm/t-semi
+-2293966688b ./gcc/config/arm/t-semiaof
+- 252266176b ./gcc/config/arm/t-thumb
+-3966028695b ./gcc/config/arm/unknown-elf.h
+-3578020456b ./gcc/config/arm/unknown-elf-oabi.h
+-1413665446b ./gcc/config/arm/vxarm.h
+- 125476982b ./gcc/config/arm/xm-arm.h
+-1599844562b ./gcc/config/arm/xm-linux.h
+- 639443881b ./gcc/config/arm/xm-netbsd.h
+-1103633380b ./gcc/config/arm/xm-thumb.h
+-2097180198b ./gcc/config/arm/x-riscix
+-1681095721b ./gcc/config/c4x/c4x.c
+-2648849385b ./gcc/config/c4x/c4x.h
+- 814641753b ./gcc/config/c4x/c4x.md
+-2962364141b ./gcc/config/c4x/libgcc.S
+-1295106107b ./gcc/config/c4x/t-c4x
+-1038140439b ./gcc/config/c4x/xm-c4x.h
+-3174983832b ./gcc/config/clipper/clipper.c
+-2640842176b ./gcc/config/clipper/clipper.h
+-1853885182b ./gcc/config/clipper/clipper.md
+-2762198740b ./gcc/config/clipper/clix.h
+-4019777817b ./gcc/config/clipper/x-clix
+-2301931530b ./gcc/config/clipper/xm-clix.h
+- 584983496b ./gcc/config/convex/convex.c
+-3987576977b ./gcc/config/convex/convex.h
+- 232165835b ./gcc/config/convex/convex.md
+- 861253244b ./gcc/config/convex/fixinc.convex
+-2034360953b ./gcc/config/convex/x-convex
+- 944974965b ./gcc/config/convex/xm-convex.h
+-2118339989b ./gcc/config/dbxcoff.h
+- 719087325b ./gcc/config/dbxelf.h
+- 186717254b ./gcc/config/dbx.h
+-1049830767b ./gcc/config/dsp16xx/dsp16xx.c
+-2057916657b ./gcc/config/dsp16xx/dsp16xx.h
+-2894810547b ./gcc/config/dsp16xx/dsp16xx.md
+-3197918419b ./gcc/config/dsp16xx/xm-dsp16xx.h
+-3235410430b ./gcc/config/elfos.h
+- 462661649b ./gcc/config/elxsi/elxsi.c
+- 228348883b ./gcc/config/elxsi/elxsi.h
+-3851060193b ./gcc/config/elxsi/elxsi.md
+-3748147985b ./gcc/config/elxsi/x-elxsi
+-3591452694b ./gcc/config/elxsi/xm-elxsi.h
+-1167713510b ./gcc/config/float-i128.h
+- 957662487b ./gcc/config/float-i32.h
+-1481742865b ./gcc/config/float-i386.h
+-2712611887b ./gcc/config/float-i64.h
+-3579227961b ./gcc/config/float-m68k.h
+-2467893270b ./gcc/config/float-sh.h
+-4263954902b ./gcc/config/float-vax.h
+-1136609705b ./gcc/config/fp-bit.c
+-1280702759b ./gcc/config/fx80/fx80.c
+-3838483130b ./gcc/config/fx80/fx80.h
+-2305138390b ./gcc/config/fx80/fx80.md
+-1737158293b ./gcc/config/fx80/xm-fx80.h
+- 286920157b ./gcc/config/gmicro/gmicro.c
+- 242691700b ./gcc/config/gmicro/gmicro.h
+- 608028190b ./gcc/config/gmicro/gmicro.md
+- 192108986b ./gcc/config/gnu.h
+-3358057730b ./gcc/config/gofast.h
+-1315260558b ./gcc/config.guess
+- 73377905b ./gcc/config/h8300/h8300.c
+-4067077485b ./gcc/config/h8300/h8300.h
+-1910118754b ./gcc/config/h8300/h8300.md
+- 519828525b ./gcc/config/h8300/lib1funcs.asm
+-3869818599b ./gcc/config/h8300/t-h8300
+-3636250675b ./gcc/config/h8300/xm-h8300.h
+-2978687204b ./gcc/config/i370/i370.c
+-1879962558b ./gcc/config/i370/i370.h
+-2691575732b ./gcc/config/i370/i370.md
+-1901725621b ./gcc/config/i370/t-i370
+-2084959845b ./gcc/config/i370/xm-i370.h
+-1895569515b ./gcc/config/i386/386bsd.h
+-3277790510b ./gcc/config/i386/aix386.h
+-3639481346b ./gcc/config/i386/aix386ng.h
+-2339764147b ./gcc/config/i386/att.h
+-2102389190b ./gcc/config/i386/bsd386.h
+-2582980211b ./gcc/config/i386/bsd.h
+-3010444208b ./gcc/config/i386/config-nt.sed
+-1755486995b ./gcc/config/i386/crtdll.h
+-3943560803b ./gcc/config/i386/cygwin.asm
+-1990906306b ./gcc/config/i386/cygwin.h
+- 72827188b ./gcc/config/i386/dgux.c
+-2430932709b ./gcc/config/i386/dgux.h
+-1357324982b ./gcc/config/i386/djgpp.h
+-3567816533b ./gcc/config/i386/djgpp-rtems.h
+-1265439821b ./gcc/config/i386/freebsd-elf.h
+- 914300508b ./gcc/config/i386/freebsd.h
+-2875212455b ./gcc/config/i386/gas.h
+- 456755261b ./gcc/config/i386/gmon-sol2.c
+-2847664881b ./gcc/config/i386/gnu.h
+- 166489147b ./gcc/config/i386/gstabs.h
+-3985340307b ./gcc/config/i386/i386-aout.h
+-2508343420b ./gcc/config/i386/i386.c
+-4111667020b ./gcc/config/i386/i386-coff.h
+-2250291155b ./gcc/config/i386/i386.h
+-1460528421b ./gcc/config/i386/i386-interix.h
+-1750576911b ./gcc/config/i386/i386.md
+- 736772779b ./gcc/config/i386/interix.c
+-3165191846b ./gcc/config/i386/isccoff.h
+- 231729323b ./gcc/config/i386/iscdbx.h
+-3245573839b ./gcc/config/i386/isc.h
+- 26710255b ./gcc/config/i386/linux-aout.h
+-2953089825b ./gcc/config/i386/linux.h
+-4113338393b ./gcc/config/i386/linux-oldld.h
+-3496788786b ./gcc/config/i386/lynx.h
+-3286906750b ./gcc/config/i386/lynx-ng.h
+- 346786519b ./gcc/config/i386/mach.h
+- 679000007b ./gcc/config/i386/mingw32.h
+- 700471847b ./gcc/config/i386/moss.h
+-1935753147b ./gcc/config/i386/netbsd.h
+-2405970032b ./gcc/config/i386/next.h
+-2030227922b ./gcc/config/i386/openbsd.h
+- 407886013b ./gcc/config/i386/os2.h
+-2999570618b ./gcc/config/i386/osf1-ci.asm
+-2303041887b ./gcc/config/i386/osf1-cn.asm
+-3380650348b ./gcc/config/i386/osf1elfgdb.h
+-3591132822b ./gcc/config/i386/osf1elf.h
+- 779598425b ./gcc/config/i386/osfelf.h
+- 719827043b ./gcc/config/i386/osfrose.h
+-1380319377b ./gcc/config/i386/perform.h
+- 237958676b ./gcc/config/i386/ptx4-i.h
+-1746945386b ./gcc/config/i386/rtemself.h
+-3828816383b ./gcc/config/i386/rtems.h
+-4154426458b ./gcc/config/i386/sco4dbx.h
+- 31982113b ./gcc/config/i386/sco4.h
+- 508494106b ./gcc/config/i386/sco5gas.h
+-1991449500b ./gcc/config/i386/sco5.h
+-2105078551b ./gcc/config/i386/scodbx.h
+-2829001020b ./gcc/config/i386/sco.h
+-1518390266b ./gcc/config/i386/seq2-sysv3.h
+-2260828739b ./gcc/config/i386/seq-gas.h
+- 31216179b ./gcc/config/i386/seq-sysv3.h
+-3863801861b ./gcc/config/i386/sequent.h
+- 892782158b ./gcc/config/i386/sol2-c1.asm
+-1565106149b ./gcc/config/i386/sol2-ci.asm
+-4008317666b ./gcc/config/i386/sol2-cn.asm
+-3651800257b ./gcc/config/i386/sol2gas.h
+-1864202258b ./gcc/config/i386/sol2-gc1.asm
+-4034476801b ./gcc/config/i386/sol2.h
+-1545753253b ./gcc/config/i386/sun386.h
+- 684374459b ./gcc/config/i386/sun.h
+-3556123079b ./gcc/config/i386/svr3dbx.h
+-1910703073b ./gcc/config/i386/svr3gas.h
+-3846064431b ./gcc/config/i386/svr3.ifile
+-1523044645b ./gcc/config/i386/svr3z.ifile
+- 619283818b ./gcc/config/i386/sysv3.h
+-2388432403b ./gcc/config/i386/sysv4.h
+-1735529466b ./gcc/config/i386/sysv5.h
+-2437302600b ./gcc/config/i386/t-crtpic
+-2246944266b ./gcc/config/i386/t-crtstuff
+-2509644115b ./gcc/config/i386/t-cygwin
+-2849008235b ./gcc/config/i386/t-dgux
+- 482628910b ./gcc/config/i386/t-djgpp
+-2949021345b ./gcc/config/i386/t-i386bare
+-3987266175b ./gcc/config/i386/t-interix
+-4056914306b ./gcc/config/i386/t-mingw32
+-3437455964b ./gcc/config/i386/t-next
+-1186749595b ./gcc/config/i386/t-osf
+-1520459705b ./gcc/config/i386/t-osf1elf
+-3439196704b ./gcc/config/i386/t-sco5
+-2010697006b ./gcc/config/i386/t-sco5gas
+-1755709893b ./gcc/config/i386/t-sol2
+-3128852740b ./gcc/config/i386/t-svr3dbx
+-2977164768b ./gcc/config/i386/t-udk
+-1023926647b ./gcc/config/i386/t-uwin
+- 482628910b ./gcc/config/i386/t-vsta
+-1281402728b ./gcc/config/i386/t-winnt
+-2348843648b ./gcc/config/i386/udk.h
+- 524084667b ./gcc/config/i386/unix.h
+-2149794869b ./gcc/config/i386/uwin.asm
+- 470472226b ./gcc/config/i386/uwin.h
+-1243186138b ./gcc/config/i386/v3gas.h
+-2327961737b ./gcc/config/i386/vsta.h
+-2176070711b ./gcc/config/i386/vxi386.h
+-1626352388b ./gcc/config/i386/win32.h
+-3439334875b ./gcc/config/i386/winnt.c
+-2860761703b ./gcc/config/i386/win-nt.h
+-3474740080b ./gcc/config/i386/x-aix
+- 237037873b ./gcc/config/i386/x-cygwin
+- 745721423b ./gcc/config/i386/x-dgux
+- 231807750b ./gcc/config/i386/x-djgpp
+-4175788105b ./gcc/config/i386/x-isc
+-1331677327b ./gcc/config/i386/x-isc3
+- 446547808b ./gcc/config/i386/xm-aix.h
+-4250296631b ./gcc/config/i386/xm-bsd386.h
+-2549976913b ./gcc/config/i386/xm-cygwin.h
+-2515568374b ./gcc/config/i386/xm-dgux.h
+-3764892052b ./gcc/config/i386/xm-djgpp.h
+-3045936467b ./gcc/config/i386/xm-dos.h
+-2787520086b ./gcc/config/i386/xm-freebsd.h
+-2990995265b ./gcc/config/i386/xm-gnu.h
+- 767722837b ./gcc/config/i386/xm-i386.h
+- 256026568b ./gcc/config/i386/xm-i386-interix.h
+-3899420493b ./gcc/config/i386/xm-isc.h
+-3801083047b ./gcc/config/i386/xm-linux.h
+-2830832587b ./gcc/config/i386/xm-lynx.h
+-2453552783b ./gcc/config/i386/xm-mingw32.h
+-3487707401b ./gcc/config/i386/xm-next.h
+-1218154368b ./gcc/config/i386/xm-openbsd.h
+- 587932334b ./gcc/config/i386/xm-os2.h
+- 412013975b ./gcc/config/i386/xm-osf1elf.h
+- 446547808b ./gcc/config/i386/xm-osf.h
+-3701039150b ./gcc/config/i386/xm-sco5.h
+- 262721373b ./gcc/config/i386/xm-sco.h
+-1933101345b ./gcc/config/i386/xm-sun.h
+-1551498273b ./gcc/config/i386/xm-sysv3.h
+-3083140420b ./gcc/config/i386/xm-sysv4.h
+-1404515293b ./gcc/config/i386/xm-vsta.h
+-2531169178b ./gcc/config/i386/xm-winnt.h
+-1612131512b ./gcc/config/i386/x-ncr3000
+-2391387330b ./gcc/config/i386/x-next
+-4245915723b ./gcc/config/i386/x-osf1elf
+- 42414247b ./gcc/config/i386/x-osfrose
+-2268838873b ./gcc/config/i386/x-sco
+-2587996311b ./gcc/config/i386/x-sco4
+-1611173336b ./gcc/config/i386/x-sco5
+-1036967407b ./gcc/config/i386/x-sysv3
+-1769627032b ./gcc/config/i386/x-vsta
+-3691699076b ./gcc/config/i860/bsd-gas.h
+-3097443514b ./gcc/config/i860/bsd.h
+-1268798206b ./gcc/config/i860/fx2800.h
+-2072638444b ./gcc/config/i860/i860.c
+- 39968499b ./gcc/config/i860/i860.h
+-3044441094b ./gcc/config/i860/i860.md
+-1007699151b ./gcc/config/i860/mach.h
+-2175963603b ./gcc/config/i860/paragon.h
+- 697020478b ./gcc/config/i860/sysv3.h
+-2497417089b ./gcc/config/i860/sysv4.h
+- 269024431b ./gcc/config/i860/t-fx2800
+-3969131493b ./gcc/config/i860/x-fx2800
+- 994204119b ./gcc/config/i860/xm-fx2800.h
+-2507432460b ./gcc/config/i860/xm-i860.h
+- 878205655b ./gcc/config/i860/x-sysv3
+-3510916973b ./gcc/config/i860/x-sysv4
+-2802625596b ./gcc/config/i960/i960.c
+-2870836375b ./gcc/config/i960/i960-coff.h
+-2742207675b ./gcc/config/i960/i960.h
+-2585178812b ./gcc/config/i960/i960.md
+-4195280424b ./gcc/config/i960/rtems.h
+- 933294565b ./gcc/config/i960/t-960bare
+-3946187942b ./gcc/config/i960/t-vxworks960
+-2626110515b ./gcc/config/i960/vx960-coff.h
+-1895495318b ./gcc/config/i960/vx960.h
+-2616292576b ./gcc/config/i960/xm-i960.h
+- 411742057b ./gcc/config.in
+-1336130822b ./gcc/config/interix.h
+-3065028535b ./gcc/config/libgloss.h
+-1240514243b ./gcc/config/linux-aout.h
+-1742048094b ./gcc/config/linux.h
+-1209329151b ./gcc/config/lynx.h
+-1966627403b ./gcc/config/lynx-ng.h
+- 620755617b ./gcc/config/m32r/initfini.c
+-2225186460b ./gcc/config/m32r/m32r.c
+-2292829039b ./gcc/config/m32r/m32r.h
+-4221416263b ./gcc/config/m32r/m32r.md
+-4179023172b ./gcc/config/m32r/t-m32r
+-3744202374b ./gcc/config/m32r/xm-m32r.h
+-2069430788b ./gcc/config/m68k/3b1g.h
+- 403759046b ./gcc/config/m68k/3b1.h
+- 656990409b ./gcc/config/m68k/altos3068.h
+-2258908566b ./gcc/config/m68k/amix.h
+-3696604588b ./gcc/config/m68k/apollo68.h
+-3575263056b ./gcc/config/m68k/atari.h
+-2970953465b ./gcc/config/m68k/auxas.h
+- 303618558b ./gcc/config/m68k/aux-crt1.c
+- 189508427b ./gcc/config/m68k/aux-crt2.asm
+- 118144777b ./gcc/config/m68k/aux-crtn.asm
+- 141176279b ./gcc/config/m68k/aux-exit.c
+-1158552592b ./gcc/config/m68k/auxgas.h
+- 922288695b ./gcc/config/m68k/auxgld.h
+-2113609688b ./gcc/config/m68k/a-ux.h
+-2685530303b ./gcc/config/m68k/auxld.h
+-2164284366b ./gcc/config/m68k/aux-low.gld
+-2715416885b ./gcc/config/m68k/aux-mcount.c
+-3169632395b ./gcc/config/m68k/ccur-GAS.h
+- 351312764b ./gcc/config/m68k/coff.h
+- 207482095b ./gcc/config/m68k/crds.h
+-2722243824b ./gcc/config/m68k/ctix.h
+-2770446786b ./gcc/config/m68k/dpx2cdbx.h
+-1165167071b ./gcc/config/m68k/dpx2g.h
+- 603423256b ./gcc/config/m68k/dpx2.h
+-2216029984b ./gcc/config/m68k/dpx2.ifile
+-2518640661b ./gcc/config/m68k/fpgnulib.c
+-1510706425b ./gcc/config/m68k/hp2bsd.h
+-4247760656b ./gcc/config/m68k/hp310g.h
+-1601304406b ./gcc/config/m68k/hp310.h
+-3645108527b ./gcc/config/m68k/hp320g.h
+-4114232317b ./gcc/config/m68k/hp320.h
+-4063375962b ./gcc/config/m68k/hp3bsd44.h
+-1601216299b ./gcc/config/m68k/hp3bsd.h
+-2864047424b ./gcc/config/m68k/hpux7.h
+- 683427592b ./gcc/config/m68k/isi.h
+-3484500543b ./gcc/config/m68k/isi-nfp.h
+-2393398106b ./gcc/config/m68k/lb1sf68.asm
+-1287467488b ./gcc/config/m68k/linux-aout.h
+-2513852382b ./gcc/config/m68k/linux.h
+-1765384748b ./gcc/config/m68k/lynx.h
+-2275885553b ./gcc/config/m68k/lynx-ng.h
+-2810980833b ./gcc/config/m68k/m68020-elf.h
+- 388266224b ./gcc/config/m68k/m68k-aout.h
+-1327340244b ./gcc/config/m68k/m68k.c
+-1018776699b ./gcc/config/m68k/m68k-coff.h
+-3736322150b ./gcc/config/m68k/m68kelf.h
+-2590349266b ./gcc/config/m68k/m68kemb.h
+- 853341913b ./gcc/config/m68k/m68k.h
+- 782535168b ./gcc/config/m68k/m68k.md
+-3855098247b ./gcc/config/m68k/m68k-none.h
+-2991007317b ./gcc/config/m68k/m68k-psos.h
+-2788206253b ./gcc/config/m68k/m68kv4.h
+-4281215928b ./gcc/config/m68k/mot3300-crt0.S
+- 811675754b ./gcc/config/m68k/mot3300.h
+-3413791584b ./gcc/config/m68k/mot3300Mcrt0.S
+-3624312269b ./gcc/config/m68k/netbsd.h
+-2598124463b ./gcc/config/m68k/news3gas.h
+- 895337217b ./gcc/config/m68k/news3.h
+-2644657409b ./gcc/config/m68k/newsgas.h
+-4208572343b ./gcc/config/m68k/news.h
+-1968305925b ./gcc/config/m68k/next21.h
+-2862451568b ./gcc/config/m68k/next.h
+-3770709000b ./gcc/config/m68k/openbsd.h
+- 384160690b ./gcc/config/m68k/pbb.h
+-3798721722b ./gcc/config/m68k/plexus.h
+-3980656405b ./gcc/config/m68k/rtems.h
+-2022844005b ./gcc/config/m68k/sgs.h
+- 608572165b ./gcc/config/m68k/sun2.h
+- 34831333b ./gcc/config/m68k/sun2o4.h
+-2871755703b ./gcc/config/m68k/sun3.h
+-4094912646b ./gcc/config/m68k/sun3mach.h
+- 864417723b ./gcc/config/m68k/sun3n3.h
+- 120628064b ./gcc/config/m68k/sun3n.h
+-2298299278b ./gcc/config/m68k/sun3o3.h
+-2211291190b ./gcc/config/m68k/t-aux
+-1601671577b ./gcc/config/m68k/t-linux
+-1601671577b ./gcc/config/m68k/t-linux-aout
+-1477854374b ./gcc/config/m68k/t-lynx
+- 997035079b ./gcc/config/m68k/t-m68kbare
+-1431188037b ./gcc/config/m68k/t-m68kelf
+-2312371323b ./gcc/config/m68k/t-mot3300
+-1359551415b ./gcc/config/m68k/t-mot3300-gald
+-1936444177b ./gcc/config/m68k/t-mot3300-gas
+-2294965883b ./gcc/config/m68k/t-mot3300-gld
+- 249897538b ./gcc/config/m68k/t-next
+-2026708872b ./gcc/config/m68k/tower-as.h
+- 551679654b ./gcc/config/m68k/tower.h
+-2967405432b ./gcc/config/m68k/t-vxworks68
+-2987165266b ./gcc/config/m68k/vxm68k.h
+- 878205655b ./gcc/config/m68k/x-alloca-c
+-4096453725b ./gcc/config/m68k/x-amix
+-1325510234b ./gcc/config/m68k/x-apollo68
+-4088761460b ./gcc/config/m68k/x-ccur
+-1762620255b ./gcc/config/m68k/x-crds
+-1170864157b ./gcc/config/m68k/x-dpx2
+-1240963087b ./gcc/config/m68k/x-hp2bsd
+-4196102339b ./gcc/config/m68k/x-hp320
+- 59330584b ./gcc/config/m68k/x-hp320g
+-2280950471b ./gcc/config/m68k/xm-3b1.h
+- 832557662b ./gcc/config/m68k/xm-altos3068.h
+-4285982649b ./gcc/config/m68k/xm-amix.h
+-1707292853b ./gcc/config/m68k/xm-atari.h
+-3022058994b ./gcc/config/m68k/xm-aux.h
+- 732179410b ./gcc/config/m68k/xm-crds.h
+- 391190612b ./gcc/config/m68k/xm-hp320.h
+-1829956157b ./gcc/config/m68k/xm-linux.h
+-3417287401b ./gcc/config/m68k/xm-lynx.h
+-1368515139b ./gcc/config/m68k/xm-m68k.h
+- 7692108b ./gcc/config/m68k/xm-m68kv.h
+-2316649618b ./gcc/config/m68k/xm-mot3300.h
+-3626208384b ./gcc/config/m68k/xm-next.h
+-2596148490b ./gcc/config/m68k/xm-openbsd.h
+-3404524005b ./gcc/config/m68k/x-mot3300
+-3170569156b ./gcc/config/m68k/x-mot3300-gas
+-4033365544b ./gcc/config/m68k/xm-plexus.h
+-3728255284b ./gcc/config/m68k/xm-sun3.h
+-1429673665b ./gcc/config/m68k/xm-tower.h
+- 805482102b ./gcc/config/m68k/x-next
+- 263693140b ./gcc/config/m68k/x-tower
+- 559413212b ./gcc/config/m88k/dguxbcs.h
+-1119083995b ./gcc/config/m88k/dgux.h
+-3298414170b ./gcc/config/m88k/dgux.ld
+-2075050065b ./gcc/config/m88k/dolph.h
+-1558967450b ./gcc/config/m88k/dolphin.ld
+-3853566566b ./gcc/config/m88k/luna.h
+-2278453924b ./gcc/config/m88k/m88k-aout.h
+-2203562636b ./gcc/config/m88k/m88k.c
+- 963743779b ./gcc/config/m88k/m88k-coff.h
+- 766388925b ./gcc/config/m88k/m88k.h
+- 462097294b ./gcc/config/m88k/m88k.md
+-2372325319b ./gcc/config/m88k/m88k-move.sh
+- 898184603b ./gcc/config/m88k/sysv3.h
+-1993010118b ./gcc/config/m88k/sysv4.h
+-4060219622b ./gcc/config/m88k/t-bug
+-3683187732b ./gcc/config/m88k/t-dgux
+-4032605278b ./gcc/config/m88k/t-dguxbcs
+-1298890126b ./gcc/config/m88k/t-dgux-gas
+-2796441735b ./gcc/config/m88k/tekXD88.h
+- 173867895b ./gcc/config/m88k/tekXD88.ld
+-3651584303b ./gcc/config/m88k/t-luna
+- 270918189b ./gcc/config/m88k/t-luna-gas
+-4060219622b ./gcc/config/m88k/t-m88k
+-2588594092b ./gcc/config/m88k/t-m88k-gas
+-3886447115b ./gcc/config/m88k/t-sysv4
+-3129976968b ./gcc/config/m88k/x-dgux
+- 487572801b ./gcc/config/m88k/x-dguxbcs
+-3447263593b ./gcc/config/m88k/x-dolph
+- 581988232b ./gcc/config/m88k/xm-m88k.h
+-1950046494b ./gcc/config/m88k/xm-sysv3.h
+- 432446889b ./gcc/config/m88k/x-sysv3
+-2614770624b ./gcc/config/m88k/x-sysv4
+-2762110114b ./gcc/config/m88k/x-tekXD88
+- 962826654b ./gcc/config/mips/abi64.h
+-2723281235b ./gcc/config/mips/bsd-4.h
+- 616617104b ./gcc/config/mips/bsd-5.h
+- 930726788b ./gcc/config/mips/cross64.h
+-2579679484b ./gcc/config/mips/dec-bsd.h
+-3807606487b ./gcc/config/mips/dec-osf1.h
+- 260679193b ./gcc/config/mips/ecoff.h
+-3551974985b ./gcc/config/mips/ecoffl.h
+-4007015481b ./gcc/config/mips/elf64.h
+-3480170287b ./gcc/config/mips/elf.h
+-1175169006b ./gcc/config/mips/elfl64.h
+-4118432176b ./gcc/config/mips/elfl.h
+- 452497001b ./gcc/config/mips/elflorion.h
+-4210328521b ./gcc/config/mips/elforion.h
+-1143331470b ./gcc/config/mips/gnu.h
+-2568626403b ./gcc/config/mips/iris3.h
+- 63757439b ./gcc/config/mips/iris4.h
+-2743944992b ./gcc/config/mips/iris4loser.h
+-3875094584b ./gcc/config/mips/iris5gas.h
+-1976320964b ./gcc/config/mips/iris5.h
+-2588991547b ./gcc/config/mips/iris6.h
+-3852135655b ./gcc/config/mips/linux.h
+-3291569396b ./gcc/config/mips/mips16.S
+-3652751219b ./gcc/config/mips/mips-5.h
+-3997122313b ./gcc/config/mips/mips.c
+- 828076041b ./gcc/config/mips/mips.h
+-2095290633b ./gcc/config/mips/mips.md
+-3494806728b ./gcc/config/mips/netbsd.h
+-1852349798b ./gcc/config/mips/news4.h
+-2469834027b ./gcc/config/mips/news5.h
+- 189783361b ./gcc/config/mips/nws3250v4.h
+-1289842549b ./gcc/config/mips/osfrose.h
+- 858594634b ./gcc/config/mips/r3900.h
+-1769321451b ./gcc/config/mips/rtems64.h
+- 17103592b ./gcc/config/mips/sni-gas.h
+- 714779279b ./gcc/config/mips/sni-svr4.h
+-1455158868b ./gcc/config/mips/svr3-4.h
+-2338194654b ./gcc/config/mips/svr3-5.h
+-1184753564b ./gcc/config/mips/svr4-4.h
+- 896761812b ./gcc/config/mips/svr4-5.h
+-3657782110b ./gcc/config/mips/svr4-t.h
+-2138831918b ./gcc/config/mips/t-bsd
+-2520217533b ./gcc/config/mips/t-bsd-gas
+-3490072647b ./gcc/config/mips/t-cross64
+-3774028077b ./gcc/config/mips/t-ecoff
+-3053489673b ./gcc/config/mips/t-elf
+-1208402514b ./gcc/config/mips/t-iris6
+-4226487252b ./gcc/config/mips/t-mips
+- 491943219b ./gcc/config/mips/t-mips-gas
+-4226487252b ./gcc/config/mips/t-osfrose
+-3302752934b ./gcc/config/mips/t-r3900
+-2969870919b ./gcc/config/mips/t-svr3
+-3458446551b ./gcc/config/mips/t-svr3-gas
+-1830179068b ./gcc/config/mips/t-svr4
+- 745314483b ./gcc/config/mips/t-svr4-gas
+-2170716316b ./gcc/config/mips/t-ultrix
+- 210779045b ./gcc/config/mips/ultrix.h
+-3227136420b ./gcc/config/mips/vxworks.h
+-1093662493b ./gcc/config/mips/x-dec-osf1
+-3056692151b ./gcc/config/mips/x-iris
+- 490324532b ./gcc/config/mips/x-iris3
+- 755414710b ./gcc/config/mips/x-iris6
+-1433979648b ./gcc/config/mips/x-mips
+-2375550941b ./gcc/config/mips/xm-iris3.h
+-3197006010b ./gcc/config/mips/xm-iris4.h
+-3440296848b ./gcc/config/mips/xm-iris5.h
+-1279762689b ./gcc/config/mips/xm-iris6.h
+-1940209380b ./gcc/config/mips/xm-mips.h
+-2988484388b ./gcc/config/mips/xm-news.h
+-1980789011b ./gcc/config/mips/xm-nws3250v4.h
+- 220014071b ./gcc/config/mips/xm-sysv4.h
+-1007989765b ./gcc/config/mips/xm-sysv.h
+-2162788729b ./gcc/config/mips/x-netbsd
+-3800034921b ./gcc/config/mips/x-nws3250v4
+-2621150460b ./gcc/config/mips/x-osfrose
+-4105797367b ./gcc/config/mips/x-sni-svr4
+-2028727147b ./gcc/config/mips/x-sony
+- 823835751b ./gcc/config/mips/x-sysv
+-1093662493b ./gcc/config/mips/x-ultrix
+-4083711028b ./gcc/config/mn10200/divmod.c
+-2305385178b ./gcc/config/mn10200/lib1funcs.asm
+-2755654897b ./gcc/config/mn10200/mn10200.c
+-1559142282b ./gcc/config/mn10200/mn10200.h
+-2370806672b ./gcc/config/mn10200/mn10200.md
+-3225600650b ./gcc/config/mn10200/t-mn10200
+- 937080303b ./gcc/config/mn10200/udivmod.c
+-2590328114b ./gcc/config/mn10200/udivmodsi4.c
+-3653374278b ./gcc/config/mn10200/xm-mn10200.h
+-1173396001b ./gcc/config/mn10300/mn10300.c
+-1638577090b ./gcc/config/mn10300/mn10300.h
+-2317569146b ./gcc/config/mn10300/mn10300.md
+-2469174526b ./gcc/config/mn10300/t-mn10300
+-3653298513b ./gcc/config/mn10300/xm-mn10300.h
+-1434800528b ./gcc/config/msdos/configur.bat
+- 650685154b ./gcc/config/msdos/libgcc.mak
+- 196042059b ./gcc/config/msdos/mklibgcc.c
+-3152790587b ./gcc/config/msdos/top.sed
+-4102769563b ./gcc/config/netbsd.h
+- 669336809b ./gcc/config/nextstep21.h
+-1550360365b ./gcc/config/nextstep.c
+-2540764799b ./gcc/config/nextstep.h
+-3464103330b ./gcc/config/ns32k/encore.h
+-3670330882b ./gcc/config/ns32k/genix.h
+-3696144992b ./gcc/config/ns32k/merlin.h
+-2407747597b ./gcc/config/ns32k/netbsd.h
+-3755726328b ./gcc/config/ns32k/ns32k.c
+-3496268242b ./gcc/config/ns32k/ns32k.h
+-2181731591b ./gcc/config/ns32k/ns32k.md
+-2256914403b ./gcc/config/ns32k/pc532.h
+-3442532179b ./gcc/config/ns32k/pc532-mach.h
+-3083546287b ./gcc/config/ns32k/pc532-min.h
+-2013512481b ./gcc/config/ns32k/sequent.h
+-4197473842b ./gcc/config/ns32k/tek6000.h
+-4027331813b ./gcc/config/ns32k/tek6100.h
+-1177977755b ./gcc/config/ns32k/tek6200.h
+- 605655032b ./gcc/config/ns32k/x-genix
+-1596660922b ./gcc/config/ns32k/xm-genix.h
+-2335084315b ./gcc/config/ns32k/xm-netbsd.h
+-4055093539b ./gcc/config/ns32k/xm-ns32k.h
+- 876936455b ./gcc/config/ns32k/xm-pc532-min.h
+-2430321650b ./gcc/config/openbsd.h
+-1628773348b ./gcc/config/pa/ee.asm
+-2905526493b ./gcc/config/pa/ee_fp.asm
+-2928231280b ./gcc/config/pa/lib1funcs.asm
+- 531910520b ./gcc/config/pa/lib2funcs.asm
+-1025741261b ./gcc/config/pa/pa1.h
+- 509609341b ./gcc/config/pa/pa.c
+-3698457987b ./gcc/config/pa/pa-gas.h
+-3381529477b ./gcc/config/pa/pa.h
+-3488257955b ./gcc/config/pa/pa-hiux.h
+-2717205711b ./gcc/config/pa/pa-hpux10.h
+-3105643464b ./gcc/config/pa/pa-hpux7.h
+-3124002443b ./gcc/config/pa/pa-hpux9.h
+- 642326892b ./gcc/config/pa/pa-hpux.h
+-3791939783b ./gcc/config/pa/pa.md
+-3618123809b ./gcc/config/pa/pa-oldas.h
+- 14614223b ./gcc/config/pa/pa-osf.h
+-4033897959b ./gcc/config/pa/pa-pro-end.h
+-2922201548b ./gcc/config/pa/pa-pro.h
+-3985707980b ./gcc/config/pa/rtems.h
+-1117935804b ./gcc/config/pa/t-dce-thr
+-1863456120b ./gcc/config/pa/t-pa
+-2490743349b ./gcc/config/pa/t-pro
+-4249254077b ./gcc/config/pa/xm-pa.h
+-3466885422b ./gcc/config/pa/xm-pahpux.h
+-2372326382b ./gcc/config/pa/xm-papro.h
+-2143426929b ./gcc/config/pa/x-pa
+-4046545344b ./gcc/config/pa/x-pa-hpux
+- 743608944b ./gcc/config/pdp11/2bsd.h
+-2014002809b ./gcc/config/pdp11/pdp11.c
+-3794653707b ./gcc/config/pdp11/pdp11.h
+-2913094405b ./gcc/config/pdp11/pdp11.md
+-2225205890b ./gcc/config/pdp11/t-pdp11
+-3333372393b ./gcc/config/pdp11/xm-pdp11.h
+-2211300902b ./gcc/config/psos.h
+-3407049614b ./gcc/config/ptx4.h
+-3526974131b ./gcc/config/pyr/pyr.c
+- 339012099b ./gcc/config/pyr/pyr.h
+-2905092864b ./gcc/config/pyr/pyr.md
+-2986118067b ./gcc/config/pyr/xm-pyr.h
+- 840485037b ./gcc/config/pyr/x-pyr
+-3917072699b ./gcc/config/README
+-2499666444b ./gcc/config/romp/romp.c
+-1477332049b ./gcc/config/romp/romp.h
+- 713610882b ./gcc/config/romp/romp.md
+-2880448747b ./gcc/config/romp/x-mach
+-3484447782b ./gcc/config/romp/xm-romp.h
+-2947038505b ./gcc/config/romp/x-romp
+-3112884702b ./gcc/config/rs6000/aix31.h
+-1675087546b ./gcc/config/rs6000/aix3newas.h
+-1494702623b ./gcc/config/rs6000/aix41.h
+-2970024935b ./gcc/config/rs6000/aix43.h
+-3242211636b ./gcc/config/rs6000/beos.h
+-3794273341b ./gcc/config/rs6000/cygwin.h
+- 112343096b ./gcc/config/rs6000/eabiaix.h
+-3043603887b ./gcc/config/rs6000/eabi.asm
+-3373760176b ./gcc/config/rs6000/eabi-ci.asm
+-1240044824b ./gcc/config/rs6000/eabi-cn.asm
+-2033395004b ./gcc/config/rs6000/eabi-ctors.c
+-2983890082b ./gcc/config/rs6000/eabi.h
+-2310432239b ./gcc/config/rs6000/eabile.h
+-4040254220b ./gcc/config/rs6000/eabilesim.h
+-1593983191b ./gcc/config/rs6000/eabisim.h
+-2577382176b ./gcc/config/rs6000/linux.h
+- 751612125b ./gcc/config/rs6000/lynx.h
+-1525754465b ./gcc/config/rs6000/mach.h
+-1820610909b ./gcc/config/rs6000/milli.exp
+-1063992963b ./gcc/config/rs6000/netware.h
+-1545361972b ./gcc/config/rs6000/nt-ci.asm
+-2111607652b ./gcc/config/rs6000/nt-cn.asm
+-3066888831b ./gcc/config/rs6000/ntstack.asm
+-1852442917b ./gcc/config/rs6000/rs6000.c
+-2374964851b ./gcc/config/rs6000/rs6000.h
+-3719637212b ./gcc/config/rs6000/rs6000.md
+-4257252017b ./gcc/config/rs6000/rtems.h
+-3407572927b ./gcc/config/rs6000/sol2.h
+-1289418179b ./gcc/config/rs6000/sol-c0.c
+-1695016479b ./gcc/config/rs6000/sol-ci.asm
+-1927994766b ./gcc/config/rs6000/sol-cn.asm
+-2287335055b ./gcc/config/rs6000/sysv4.h
+-1454776131b ./gcc/config/rs6000/sysv4le.h
+-1059562469b ./gcc/config/rs6000/t-aix43
+-3218787192b ./gcc/config/rs6000/t-beos
+-4097422602b ./gcc/config/rs6000/t-newas
+-3994014594b ./gcc/config/rs6000/t-ppc
+-4272756841b ./gcc/config/rs6000/t-ppccomm
+-2868568113b ./gcc/config/rs6000/t-ppcgas
+-1283581552b ./gcc/config/rs6000/t-ppcos
+-1717019755b ./gcc/config/rs6000/tramp.asm
+-3065325019b ./gcc/config/rs6000/t-rs6000
+-1874501442b ./gcc/config/rs6000/t-winnt
+-1415019668b ./gcc/config/rs6000/t-xnewas
+-3152886293b ./gcc/config/rs6000/t-xrs6000
+-1984878317b ./gcc/config/rs6000/vxppc.h
+-2069671306b ./gcc/config/rs6000/win-nt.h
+- 489691602b ./gcc/config/rs6000/x-aix31
+- 465478449b ./gcc/config/rs6000/x-aix41
+-2206127307b ./gcc/config/rs6000/x-aix41-gld
+-2363753655b ./gcc/config/rs6000/x-aix43
+-1379999620b ./gcc/config/rs6000/x-beos
+-4218694447b ./gcc/config/rs6000/x-cygwin
+- 176036232b ./gcc/config/rs6000/x-lynx
+-1119193055b ./gcc/config/rs6000/x-mach
+-4091924904b ./gcc/config/rs6000/xm-beos.h
+-3277280620b ./gcc/config/rs6000/xm-cygwin.h
+-1387161565b ./gcc/config/rs6000/xm-lynx.h
+-2311049093b ./gcc/config/rs6000/xm-mach.h
+- 277319235b ./gcc/config/rs6000/xm-rs6000.h
+-1198144020b ./gcc/config/rs6000/xm-sysv4.h
+- 443641603b ./gcc/config/rs6000/x-rs6000
+-1861191694b ./gcc/config/rs6000/x-sysv4
+-1070214752b ./gcc/config/sh/elf.h
+-3820397636b ./gcc/config/sh/lib1funcs.asm
+- 859670236b ./gcc/config/sh/rtemself.h
+-1030877040b ./gcc/config/sh/rtems.h
+- 828900658b ./gcc/config/sh/sh.c
+-1962148926b ./gcc/config/sh/sh.h
+- 216149670b ./gcc/config/sh/sh.md
+-3454560745b ./gcc/config/sh/t-sh
+-1840124650b ./gcc/config/sh/xm-sh.h
+-3025821674b ./gcc/config/sparc/aout.h
+-2582541021b ./gcc/config/sparc/bsd.h
+-4145941549b ./gcc/config/sparc/elf.h
+-3649780127b ./gcc/config/sparc/gmon-sol2.c
+-3746795534b ./gcc/config/sparc/hal.h
+- 671302508b ./gcc/config/sparc/lb1spc.asm
+- 892412538b ./gcc/config/sparc/lb1spl.asm
+-3829792761b ./gcc/config/sparc/linux64.h
+-1432771552b ./gcc/config/sparc/linux-aout.h
+- 928257827b ./gcc/config/sparc/linux.h
+-3340219233b ./gcc/config/sparc/litecoff.h
+- 529818954b ./gcc/config/sparc/lite.h
+-3270410192b ./gcc/config/sparc/lynx.h
+-2353689337b ./gcc/config/sparc/lynx-ng.h
+-2136616646b ./gcc/config/sparc/netbsd.h
+-2977280248b ./gcc/config/sparc/openbsd.h
+-1461652436b ./gcc/config/sparc/pbd.h
+-1610828060b ./gcc/config/sparc/rtems.h
+-1463670426b ./gcc/config/sparc/sol2-c1.asm
+-3288323690b ./gcc/config/sparc/sol2-ci.asm
+-2004370404b ./gcc/config/sparc/sol2-cn.asm
+-2182182911b ./gcc/config/sparc/sol2-g1.asm
+-1699311045b ./gcc/config/sparc/sol2.h
+-1938337838b ./gcc/config/sparc/sol2-sld-64.h
+- 407406271b ./gcc/config/sparc/sol2-sld.h
+-2121730699b ./gcc/config/sparc/sp64-aout.h
+- 824364328b ./gcc/config/sparc/sp64-elf.h
+- 8979159b ./gcc/config/sparc/sparc.c
+-1457594704b ./gcc/config/sparc/sparc.h
+-1589963960b ./gcc/config/sparc/sparc.md
+- 703944495b ./gcc/config/sparc/splet.h
+-2679804272b ./gcc/config/sparc/sun4gas.h
+-3455486806b ./gcc/config/sparc/sun4o3.h
+-3455986086b ./gcc/config/sparc/sunos4.h
+-1528721564b ./gcc/config/sparc/sysv4.h
+-2688036523b ./gcc/config/sparc/t-elf
+-1582758741b ./gcc/config/sparc/t-halos
+-3692140246b ./gcc/config/sparc/t-linux64
+-1215655583b ./gcc/config/sparc/t-sol2
+-3160382849b ./gcc/config/sparc/t-sol2-64
+-1887691100b ./gcc/config/sparc/t-sp64
+-3603106515b ./gcc/config/sparc/t-sparcbare
+- 473489933b ./gcc/config/sparc/t-sparclite
+-3724398884b ./gcc/config/sparc/t-splet
+-2014088017b ./gcc/config/sparc/t-sunos40
+-1401640619b ./gcc/config/sparc/t-sunos41
+-2219277944b ./gcc/config/sparc/t-vxsparc
+-1400348246b ./gcc/config/sparc/vxsim.h
+-3525766313b ./gcc/config/sparc/vxsparc.h
+-2878609946b ./gcc/config/sparc/xm-linux.h
+-2943271346b ./gcc/config/sparc/xm-lynx.h
+-1370920631b ./gcc/config/sparc/xm-openbsd.h
+-1348380296b ./gcc/config/sparc/xm-pbd.h
+-1880319471b ./gcc/config/sparc/xm-sol2.h
+-3012493389b ./gcc/config/sparc/xm-sp64.h
+- 859610969b ./gcc/config/sparc/xm-sparc.h
+- 623960805b ./gcc/config/sparc/xm-sysv4-64.h
+-2019316444b ./gcc/config/sparc/xm-sysv4.h
+-1861191694b ./gcc/config/sparc/x-sysv4
+- 931170751b ./gcc/config/spur/spur.c
+-3404301551b ./gcc/config/spur/spur.h
+- 597536974b ./gcc/config/spur/spur.md
+-1910933143b ./gcc/config/spur/xm-spur.h
+-3683970223b ./gcc/config/svr3.h
+- 166319006b ./gcc/config/svr4.h
+- 8262563b ./gcc/config/tahoe/harris.h
+-3522173108b ./gcc/config/tahoe/tahoe.c
+- 144796843b ./gcc/config/tahoe/tahoe.h
+-2208590758b ./gcc/config/tahoe/tahoe.md
+-2537862710b ./gcc/config/tahoe/xm-tahoe.h
+- 613804065b ./gcc/config/t-freebsd
+-1372994999b ./gcc/config/t-gnu
+-3050012299b ./gcc/config/t-install-cpp
+- 64239056b ./gcc/config/t-libc-ok
+-1224602530b ./gcc/config/t-linux
+- 144067535b ./gcc/config/t-linux-aout
+-4111896717b ./gcc/config/t-linux-gnulibc1
+-4220164823b ./gcc/config/tm-dwarf2.h
+-1586139693b ./gcc/config/t-netbsd
+-2947277325b ./gcc/config/t-openbsd
+-2917904648b ./gcc/config/t-openbsd-thread
+-2026867792b ./gcc/config/t-rtems
+- 182724490b ./gcc/config/t-svr4
+- 729030691b ./gcc/configure
+-1467935606b ./gcc/configure.bat
+-3600082583b ./gcc/configure.frag
+-2231754695b ./gcc/configure.in
+-4241351077b ./gcc/configure.lang
+-4096035368b ./gcc/config/v850/lib1funcs.asm
+-3022592642b ./gcc/config/v850/t-v850
+-1702566744b ./gcc/config/v850/v850.c
+-1471160936b ./gcc/config/v850/v850.h
+-1499354909b ./gcc/config/v850/v850.md
+-2933253285b ./gcc/config/v850/xm-v850.h
+-2123647130b ./gcc/config/vax/netbsd.h
+-2401956814b ./gcc/config/vax/ultrix.h
+-3589827963b ./gcc/config/vax/vax.c
+- 365755773b ./gcc/config/vax/vax.h
+-2537275953b ./gcc/config/vax/vax.md
+-1907305315b ./gcc/config/vax/vaxv.h
+- 560554680b ./gcc/config/vax/vms.h
+-4187728168b ./gcc/config/vax/xm-vax.h
+- 542222840b ./gcc/config/vax/xm-vaxv.h
+-3712454462b ./gcc/config/vax/xm-vms.h
+-4031022191b ./gcc/config/vax/x-vax
+- 691896710b ./gcc/config/we32k/we32k.c
+- 780806124b ./gcc/config/we32k/we32k.h
+-1852804001b ./gcc/config/we32k/we32k.md
+- 913664286b ./gcc/config/we32k/xm-we32k.h
+- 878205655b ./gcc/config/we32k/x-we32k
+- 490686036b ./gcc/config/winnt/config-nt.bat
+-3197194599b ./gcc/config/winnt/config-nt.sed
+- 809816903b ./gcc/config/winnt/dirent.c
+-1113635205b ./gcc/config/winnt/dirent.h
+-3250316811b ./gcc/config/winnt/fixinc-nt.c
+-3566040139b ./gcc/config/winnt/headers.mak
+-4109881128b ./gcc/config/winnt/ld.c
+- 417261367b ./gcc/config/winnt/libgcc.mak
+-1908002483b ./gcc/config/winnt/mklibgcc.c
+- 567319218b ./gcc/config/winnt/oldnames.c
+- 82504535b ./gcc/config/winnt/spawnv.c
+-3392973061b ./gcc/config/winnt/win-nt.h
+-4170164852b ./gcc/config/winnt/xm-winnt.h
+-3270923317b ./gcc/config/winnt/x-winnt
+-1670851102b ./gcc/config/x-interix
+-4012259237b ./gcc/config/x-linux
+-1881475236b ./gcc/config/x-linux-aout
+- 462930175b ./gcc/config/x-lynx
+-3779976015b ./gcc/config/xm-alloca.h
+-2675300859b ./gcc/config/xm-freebsd.h
+-4234308852b ./gcc/config/xm-gnu.h
+-4177190957b ./gcc/config/xm-interix.h
+- 462145913b ./gcc/config/xm-linux.h
+-2194049066b ./gcc/config/xm-lynx.h
+-2284065217b ./gcc/config/xm-openbsd.h
+-1897551220b ./gcc/config/xm-siglist.h
+- 802838955b ./gcc/config/xm-std32.h
+-4091214272b ./gcc/config/xm-svr3.h
+-1558379184b ./gcc/config/xm-svr4.h
+-3288074061b ./gcc/config/x-svr4
+-1334832587b ./gcc/convert.c
+-1632185071b ./gcc/convert.h
+- 430871781b ./gcc/COPYING
+-2637011133b ./gcc/COPYING.LIB
+-3899289930b ./gcc/c-parse.c
+-2368083768b ./gcc/c-parse.gperf
+-1926476024b ./gcc/c-parse.h
+- 340564841b ./gcc/c-parse.in
+-3783741055b ./gcc/c-parse.y
+-3190531650b ./gcc/cp/call.c
+-1952182420b ./gcc/cp/ChangeLog
+- 1903584b ./gcc/cp/ChangeLog.1
+-2546444747b ./gcc/cp/ChangeLog.egcs
+- 941182275b ./gcc/cp/class.c
+- 929318629b ./gcc/cp/config-lang.in
+-2143071361b ./gcc/cp/cp-tree.def
+-3069657971b ./gcc/cp/cp-tree.h
+-3745672818b ./gcc/cp/cvt.c
+-3019623049b ./gcc/cp/decl2.c
+-2086595854b ./gcc/cp/decl.c
+-1834949211b ./gcc/cp/decl.h
+-1993063104b ./gcc/cp/errfn.c
+-2668207772b ./gcc/cp/error.c
+- 754102681b ./gcc/cp/except.c
+-2791579071b ./gcc/cp/exception.cc
+- 599886420b ./gcc/cp/expr.c
+-3912802234b ./gcc/cp/friend.c
+- 330559424b ./gcc/cp/g++.1
+- 906886763b ./gcc/cp/g++spec.c
+-2485046839b ./gcc/cp/gxx.gperf
+-3164527837b ./gcc/cp/gxxint.texi
+-3710853552b ./gcc/cp/hash.h
+-2019685383b ./gcc/cp/inc/exception
+-1487179368b ./gcc/cp/inc/new
+-3630756522b ./gcc/cp/inc/new.h
+-3294064502b ./gcc/cp/inc/typeinfo
+- 268408042b ./gcc/cp/init.c
+-2911540108b ./gcc/cp/input.c
+-1403991879b ./gcc/cp/lang-options.h
+-4290678525b ./gcc/cp/lang-specs.h
+-2935609916b ./gcc/cp/lex.c
+-2424823976b ./gcc/cp/lex.h
+- 158340958b ./gcc/cp/Makefile.in
+-3839226273b ./gcc/cp/Make-lang.in
+- 269758178b ./gcc/cp/method.c
+- 701335209b ./gcc/cp/mpw-config.in
+-4041177245b ./gcc/cp/mpw-make.sed
+-1347809285b ./gcc/cp/new1.cc
+- 763929332b ./gcc/cp/new2.cc
+- 119869254b ./gcc/cp/new.cc
+- 138293205b ./gcc/cp/NEWS
+-1051873022b ./gcc/cpp.1
+-1779232657b ./gcc/cppalloc.c
+-3338459664b ./gcc/cp/parse.c
+-3062677783b ./gcc/cp/parse.h
+-2577897311b ./gcc/cp/parse.y
+- 139709880b ./gcc/cpperror.c
+- 648505131b ./gcc/cppexp.c
+-4235899301b ./gcc/cppfiles.c
+- 123396535b ./gcc/cpp.fns
+-1291958784b ./gcc/cpphash.c
+-1865911541b ./gcc/cpphash.h
+-2347217111b ./gcc/cppinit.c
+-1768596306b ./gcc/cpplib.c
+-2418435131b ./gcc/cpplib.h
+-3024485355b ./gcc/cppmain.c
+-3072272242b ./gcc/cppspec.c
+-2750165306b ./gcc/cp/pt.c
+-4208968267b ./gcc/cpp.texi
+- 967651156b ./gcc/cp/ptree.c
+-2516388891b ./gcc/cppulp.c
+- 53358206b ./gcc/c-pragma.c
+-1262846233b ./gcc/c-pragma.h
+-1480301647b ./gcc/cp/repo.c
+-1645340049b ./gcc/cp/rtti.c
+-3565280411b ./gcc/cp/search.c
+-3374588244b ./gcc/cp/semantics.c
+-1746248077b ./gcc/cp/sig.c
+- 779245834b ./gcc/cp/spew.c
+- 16743387b ./gcc/cp/tinfo2.cc
+- 73383706b ./gcc/cp/tinfo.cc
+-3171371984b ./gcc/cp/tinfo.h
+-1418938862b ./gcc/cp/tree.c
+-2135311010b ./gcc/cp/typeck2.c
+- 589534504b ./gcc/cp/typeck.c
+-2393908139b ./gcc/cp/xref.c
+-3116343499b ./gcc/cross-make
+-1382500598b ./gcc/crtstuff.c
+-2173739158b ./gcc/cse.c
+- 216805921b ./gcc/cstamp-h.in
+-2068306093b ./gcc/c-tree.h
+-1582700145b ./gcc/c-typeck.c
+-4133825901b ./gcc/.cvsignore
+-3702737678b ./gcc/dbxout.c
+-2366622993b ./gcc/dbxout.h
+-1104788844b ./gcc/dbxstclass.h
+-1802831352b ./gcc/defaults.h
+-1670301955b ./gcc/doprint.c
+-2791449994b ./gcc/doschk.c
+-3438566628b ./gcc/dostage2
+-1965038258b ./gcc/dostage3
+-1720349471b ./gcc/dwarf2.h
+-1447985163b ./gcc/dwarf2out.c
+-3867635452b ./gcc/dwarf2out.h
+-2763771626b ./gcc/dwarf.h
+- 861331011b ./gcc/dwarfout.c
+- 950151195b ./gcc/dwarfout.h
+- 872252559b ./gcc/dyn-string.c
+-3812644023b ./gcc/dyn-string.h
+-3381131814b ./gcc/eh-common.h
+-2781325359b ./gcc/emit-rtl.c
+-1440444349b ./gcc/enquire.c
+-1291816693b ./gcc/except.c
+-2158248277b ./gcc/except.h
+-2261541831b ./gcc/exgettext
+- 791151591b ./gcc/explow.c
+- 560380472b ./gcc/expmed.c
+-4170598620b ./gcc/expr.c
+-3261810763b ./gcc/expr.h
+-1075776863b ./gcc/extend.texi
+- 217416175b ./gcc/f/ansify.c
+-2726691361b ./gcc/f/assert.j
+- 473141573b ./gcc/f/bad.c
+- 378349261b ./gcc/f/bad.def
+-2944793883b ./gcc/f/bad.h
+-1691322623b ./gcc/f/bit.c
+- 787197484b ./gcc/f/bit.h
+- 535953754b ./gcc/f/bld.c
+- 806295869b ./gcc/f/bld.h
+-2128697889b ./gcc/f/bld-op.def
+-4256541113b ./gcc/f/BUGS
+- 235013049b ./gcc/f/bugs0.texi
+-1622614290b ./gcc/f/bugs.texi
+- 381563979b ./gcc/f/ChangeLog
+-4225493150b ./gcc/f/ChangeLog.0
+- 70432011b ./gcc/f/com.c
+-1897164499b ./gcc/f/com.h
+-1558553523b ./gcc/f/com-rt.def
+-3702808499b ./gcc/f/config.j
+-1975190636b ./gcc/f/config-lang.in
+- 508204516b ./gcc/f/convert.j
+- 618178673b ./gcc/f/data.c
+- 224874956b ./gcc/f/data.h
+-2449531320b ./gcc/f/equiv.c
+- 500183067b ./gcc/f/equiv.h
+- 779312674b ./gcc/f/expr.c
+-2989892382b ./gcc/f/expr.h
+-4214340594b ./gcc/f/ffe.texi
+-3980765198b ./gcc/f/fini.c
+-3358911103b ./gcc/f/flags.j
+-2954450194b ./gcc/f/g77.1
+- 517049530b ./gcc/f/g77install.texi
+- 439964818b ./gcc/f/g77spec.c
+-2370700560b ./gcc/f/g77.texi
+-1124705383b ./gcc/f/glimits.j
+-1736110997b ./gcc/f/global.c
+- 368896602b ./gcc/f/global.h
+-1434858771b ./gcc/f/hconfig.j
+-3914027293b ./gcc/f/implic.c
+-2480459444b ./gcc/f/implic.h
+-2403284330b ./gcc/final.c
+-2287601317b ./gcc/f/info-b.def
+-1125228698b ./gcc/f/info.c
+-3911039718b ./gcc/f/info.h
+-2157151689b ./gcc/f/info-k.def
+-2242176401b ./gcc/f/info-w.def
+-1909977580b ./gcc/f/input.j
+-1052051833b ./gcc/f/INSTALL
+-2706065712b ./gcc/f/install0.texi
+-1553671025b ./gcc/f/intdoc.c
+-2865476752b ./gcc/f/intdoc.in
+-1518221274b ./gcc/f/intdoc.texi
+-1388558014b ./gcc/f/intrin.c
+- 602300071b ./gcc/f/intrin.def
+-1323435971b ./gcc/f/intrin.h
+-3072760907b ./gcc/fixcpp
+-2559193818b ./gcc/fix-header.c
+-1149682325b ./gcc/fixinc/fixinc.dgux
+-3961460258b ./gcc/fixinc/fixinc.interix
+-4036402473b ./gcc/fixinc/fixinc.irix
+- 656477185b ./gcc/fixinc/fixincl.c
+- 895346234b ./gcc/fixinc/fixincl.sh
+-1486812617b ./gcc/fixinc/fixincl.tpl
+-1991057534b ./gcc/fixinc/fixincl.x
+-4278535406b ./gcc/fixinc/fixinc.ptx
+-2691944848b ./gcc/fixinc/fixinc.sco
+-4088989114b ./gcc/fixinc/fixinc.svr4
+-3500071236b ./gcc/fixinc/fixinc.winnt
+-2119627668b ./gcc/fixinc/fixinc.wrap
+-3531147889b ./gcc/fixinc/fixinc.x86-linux-gnu
+-3096339196b ./gcc/fixinc/genfixes
+-3678653058b ./gcc/fixinc/gnu-regex.c
+- 916937206b ./gcc/fixinc/gnu-regex.h
+-1738055537b ./gcc/fixinc/hackshell.tpl
+-1500496790b ./gcc/fixinc/inclhack.def
+-2612327374b ./gcc/fixinc/inclhack.sh
+-1368845910b ./gcc/fixinc/inclhack.tpl
+-3007430561b ./gcc/fixincludes
+- 489448684b ./gcc/fixinc/Makefile.in
+-1847384514b ./gcc/fixinc/mkfixinc.sh
+- 851356889b ./gcc/fixinc-nt.sed
+-1534809572b ./gcc/fixinc/procopen.c
+-1839369333b ./gcc/fixinc/README
+-3334153107b ./gcc/fixinc/server.c
+-2227780997b ./gcc/fixinc/server.h
+-1852958240b ./gcc/fixproto
+-1861938661b ./gcc/f/lab.c
+-1912790643b ./gcc/f/lab.h
+-1510998759b ./gcc/flags.h
+- 371449608b ./gcc/f/lang-options.h
+- 480638506b ./gcc/f/lang-specs.h
+-2754711212b ./gcc/f/lex.c
+-3648980141b ./gcc/f/lex.h
+- 14144180b ./gcc/floatlib.c
+-1901335397b ./gcc/flow.c
+-1081048037b ./gcc/f/Makefile.in
+-3240533767b ./gcc/f/Make-lang.in
+-1427501723b ./gcc/f/malloc.c
+-3829974116b ./gcc/f/malloc.h
+-2687881356b ./gcc/f/name.c
+-2439587488b ./gcc/f/name.h
+-1381266112b ./gcc/f/NEWS
+-3453379674b ./gcc/f/news0.texi
+-2527995912b ./gcc/f/news.texi
+-4151647125b ./gcc/fold-const.c
+-2165020172b ./gcc/f/output.j
+-3852951627b ./gcc/f/parse.c
+- 370126662b ./gcc/f/proj.c
+-1775989584b ./gcc/f/proj.h
+-1074929281b ./gcc/fp-test.c
+-1166799302b ./gcc/frame.c
+-2039949872b ./gcc/frame.h
+- 281424983b ./gcc/f/README
+-2710292864b ./gcc/f/RELEASE-PREP
+- 853676495b ./gcc/f/root.texi
+-4136399389b ./gcc/f/rtl.j
+-3694162803b ./gcc/FSFChangeLog
+- 232745070b ./gcc/FSFChangeLog.10
+-2525829644b ./gcc/FSFChangeLog.11
+-3041074607b ./gcc/f/src.c
+- 95224294b ./gcc/f/src.h
+-3725562111b ./gcc/f/sta.c
+-4016204844b ./gcc/f/sta.h
+- 160388911b ./gcc/f/stb.c
+-2971641335b ./gcc/f/stb.h
+-3466162958b ./gcc/f/st.c
+- 931308304b ./gcc/f/stc.c
+- 495996435b ./gcc/f/stc.h
+-2353122658b ./gcc/f/std.c
+-1726735653b ./gcc/f/std.h
+-2696390307b ./gcc/f/ste.c
+- 480358952b ./gcc/f/ste.h
+-1121987325b ./gcc/f/st.h
+-1100581971b ./gcc/f/storag.c
+-2376153183b ./gcc/f/storag.h
+-2404416327b ./gcc/f/stp.c
+-1012274389b ./gcc/f/stp.h
+-3722860946b ./gcc/f/str-1t.fin
+-2828127862b ./gcc/f/str-2t.fin
+- 920153914b ./gcc/f/str.c
+-4215029898b ./gcc/f/str-fo.fin
+-2319274141b ./gcc/f/str.h
+- 281471485b ./gcc/f/str-io.fin
+-3735910053b ./gcc/f/str-nq.fin
+-3134124633b ./gcc/f/str-op.fin
+-2608567153b ./gcc/f/str-ot.fin
+-1385497101b ./gcc/f/sts.c
+- 776207233b ./gcc/f/sts.h
+- 854662715b ./gcc/f/stt.c
+-3890711200b ./gcc/f/stt.h
+-2668056056b ./gcc/f/stu.c
+-2872877005b ./gcc/f/stu.h
+- 857063390b ./gcc/f/stv.c
+- 939390778b ./gcc/f/stv.h
+-2156320080b ./gcc/f/stw.c
+-1162160075b ./gcc/f/stw.h
+- 589544660b ./gcc/f/symbol.c
+-1323122026b ./gcc/f/symbol.def
+-4185634583b ./gcc/f/symbol.h
+-2622255846b ./gcc/f/system.j
+-1226777705b ./gcc/f/target.c
+- 79936810b ./gcc/f/target.h
+-3340806137b ./gcc/f/tconfig.j
+-1211026091b ./gcc/f/tm.j
+-1216551947b ./gcc/f/top.c
+-1098457131b ./gcc/f/top.h
+- 419208514b ./gcc/f/toplev.j
+- 252823133b ./gcc/f/tree.j
+-3443401298b ./gcc/f/type.c
+-1269043734b ./gcc/f/type.h
+- 931660813b ./gcc/function.c
+-3875594368b ./gcc/function.h
+-1945284764b ./gcc/future.options
+-1685579004b ./gcc/f/version.c
+-1880947867b ./gcc/f/version.h
+- 106965244b ./gcc/f/where.c
+-2325578298b ./gcc/f/where.h
+- 970542118b ./gcc/gansidecl.h
+-2917485219b ./gcc/gbl-ctors.h
+-3430444432b ./gcc/gcc.1
+-1943415070b ./gcc/gcc.c
+-3891935819b ./gcc/gcc.hlp
+-3125776691b ./gcc/gccspec.c
+-3065898977b ./gcc/gcc.texi
+- 664852402b ./gcc/gcov.c
+-2459769831b ./gcc/gcov-io.h
+-3179576637b ./gcc/gcov.texi
+- 294189760b ./gcc/gcse.c
+-3926621640b ./gcc/.gdbinit
+-1025000942b ./gcc/genattr.c
+- 169320310b ./gcc/genattrtab.c
+- 842498962b ./gcc/gencheck.c
+-1894551849b ./gcc/gencodes.c
+- 231213526b ./gcc/genconfig.c
+-1669866800b ./gcc/genemit.c
+- 778908439b ./gcc/genextract.c
+-1659224190b ./gcc/genflags.c
+- 926730582b ./gcc/gengenrtl.c
+-1595340092b ./gcc/genmultilib
+- 310947624b ./gcc/genopinit.c
+-3963015372b ./gcc/genoutput.c
+-3774435322b ./gcc/genpeep.c
+-2750373510b ./gcc/gen-protos.c
+-3049217266b ./gcc/genrecog.c
+- 793444673b ./gcc/getpwd.c
+-3231952244b ./gcc/ginclude/iso646.h
+-2766673945b ./gcc/ginclude/math-3300.h
+-3047408322b ./gcc/ginclude/math-68881.h
+- 460526048b ./gcc/ginclude/ppc-asm.h
+-2576905081b ./gcc/ginclude/proto.h
+-3051986061b ./gcc/ginclude/stdarg.h
+- 415638091b ./gcc/ginclude/stdbool.h
+-2283270051b ./gcc/ginclude/stddef.h
+- 453330149b ./gcc/ginclude/va-alpha.h
+- 933079081b ./gcc/ginclude/va-arc.h
+-3120669586b ./gcc/ginclude/va-c4x.h
+- 236728305b ./gcc/ginclude/va-clipper.h
+-4090551750b ./gcc/ginclude/va-h8300.h
+-3217212262b ./gcc/ginclude/va-i860.h
+-3914487993b ./gcc/ginclude/va-i960.h
+- 575389008b ./gcc/ginclude/va-m32r.h
+-3820174378b ./gcc/ginclude/va-m88k.h
+-3838446084b ./gcc/ginclude/va-mips.h
+-1429231627b ./gcc/ginclude/va-mn10200.h
+-2800466058b ./gcc/ginclude/va-mn10300.h
+-1416963815b ./gcc/ginclude/va-pa.h
+-4212798237b ./gcc/ginclude/va-ppc.h
+- 192835038b ./gcc/ginclude/va-pyr.h
+-1142757302b ./gcc/ginclude/varargs.h
+-2372760626b ./gcc/ginclude/va-sh.h
+- 264710164b ./gcc/ginclude/va-sparc.h
+-3150115362b ./gcc/ginclude/va-spur.h
+-1552889664b ./gcc/ginclude/va-v850.h
+-1634989919b ./gcc/glimits.h
+-2899801624b ./gcc/global.c
+-4118591518b ./gcc/gmon.c
+-1559802185b ./gcc/graph.c
+-2127526719b ./gcc/gstab.h
+-2040904551b ./gcc/gsyms.h
+- 808024354b ./gcc/gsyslimits.h
+-2263169284b ./gcc/gthr-dce.h
+- 157579409b ./gcc/gthr.h
+- 305150265b ./gcc/gthr-posix.h
+-4129564918b ./gcc/gthr-single.h
+- 303295415b ./gcc/gthr-solaris.h
+- 387661304b ./gcc/gthr-vxworks.h
+-3033261248b ./gcc/haifa-sched.c
+-2043477270b ./gcc/halfpic.c
+- 819272895b ./gcc/halfpic.h
+-2507465025b ./gcc/hard-reg-set.h
+-3356619194b ./gcc/hash.c
+- 56239559b ./gcc/hash.h
+-3658640867b ./gcc/hwint.h
+-3443517934b ./gcc/input.h
+- 551406095b ./gcc/INSTALL
+- 462692392b ./gcc/install1.texi
+-2303893284b ./gcc/install.texi
+- 171434603b ./gcc/integrate.c
+- 662482660b ./gcc/integrate.h
+-1855120889b ./gcc/intl/bindtextdom.c
+-1933110400b ./gcc/intl.c
+-2763549264b ./gcc/intl/cat-compat.c
+-3384575285b ./gcc/intl/ChangeLog
+-4073502146b ./gcc/intl/dcgettext.c
+-1792432593b ./gcc/intl/dgettext.c
+-2307224772b ./gcc/intl/explodename.c
+-3238681487b ./gcc/intl/finddomain.c
+-1265937805b ./gcc/intl/gettext.c
+- 789935145b ./gcc/intl/gettext.h
+-3071290636b ./gcc/intl/gettextP.h
+-1326021680b ./gcc/intl.h
+-2389284831b ./gcc/intl/hash-string.h
+-1443767269b ./gcc/intl/intl-compat.c
+- 93883941b ./gcc/intl/l10nflist.c
+-1703356123b ./gcc/intl/libgettext.h
+-3263658828b ./gcc/intl/linux-msg.sed
+-3800232883b ./gcc/intl/loadinfo.h
+-3035183298b ./gcc/intl/loadmsgcat.c
+-2553840489b ./gcc/intl/localealias.c
+- 834956016b ./gcc/intl/Makefile.in
+- 223588995b ./gcc/intl/po2tbl.sed.in
+-4175310706b ./gcc/intl/textdomain.c
+-1035788439b ./gcc/intl/VERSION
+-2960721199b ./gcc/intl/xopen-msg.sed
+-3254236658b ./gcc/invoke.texi
+-2541917855b ./gcc/java/buffer.c
+-4285191557b ./gcc/java/buffer.h
+-2798115754b ./gcc/java/ChangeLog
+-3944613375b ./gcc/java/check-init.c
+-2172553547b ./gcc/java/class.c
+-2150049623b ./gcc/java/config-lang.in
+- 263606155b ./gcc/java/constants.c
+-2645981469b ./gcc/java/convert.h
+-3898411597b ./gcc/java/decl.c
+- 464463881b ./gcc/java/except.c
+- 488529983b ./gcc/java/expr.c
+-2221104313b ./gcc/java/gjavah.c
+-3168623072b ./gcc/java/java-except.h
+-1953641142b ./gcc/java/java-opcodes.h
+-2538410445b ./gcc/java/javaop.def
+-2319028764b ./gcc/java/javaop.h
+-1839221595b ./gcc/java/java-tree.def
+-4020305543b ./gcc/java/java-tree.h
+-2908509252b ./gcc/java/jcf-depend.c
+-2265467689b ./gcc/java/jcf-dump.c
+-3601445887b ./gcc/java/jcf.h
+- 681476223b ./gcc/java/jcf-io.c
+-3801318363b ./gcc/java/jcf-parse.c
+-3550312270b ./gcc/java/jcf-path.c
+-1450387783b ./gcc/java/jcf-reader.c
+-3501416255b ./gcc/java/jcf-write.c
+-1032226897b ./gcc/java/jvgenmain.c
+-4180971331b ./gcc/java/jv-scan.c
+-1757675418b ./gcc/java/jvspec.c
+-2610912080b ./gcc/java/keyword.gperf
+- 566474720b ./gcc/java/keyword.h
+-1163192502b ./gcc/java/lang.c
+-1495202455b ./gcc/java/lang-options.h
+-2734008933b ./gcc/java/lang-specs.h
+-3982191419b ./gcc/java/lex.c
+-1006043234b ./gcc/java/lex.h
+-2987027027b ./gcc/java/Makefile.in
+-1080111953b ./gcc/java/Make-lang.in
+-2197076845b ./gcc/java/mangle.c
+-2978497967b ./gcc/java/parse.c
+-4054432291b ./gcc/java/parse.h
+-2568809376b ./gcc/java/parse-scan.c
+- 753887653b ./gcc/java/parse-scan.y
+-4132497179b ./gcc/java/parse.y
+- 154882617b ./gcc/java/typeck.c
+- 820833694b ./gcc/java/verify.c
+- 617116283b ./gcc/java/xref.c
+-1445939964b ./gcc/java/xref.h
+-2739979461b ./gcc/java/zextract.c
+- 314700945b ./gcc/java/zipfile.h
+-3936538134b ./gcc/jump.c
+-1567003496b ./gcc/just-fixinc
+-2771840517b ./gcc/LANGUAGES
+- 762307283b ./gcc/lcm.c
+-2942334943b ./gcc/libgcc1.c
+- 559083009b ./gcc/libgcc1-test.c
+-1307299979b ./gcc/libgcc2.c
+-2497915666b ./gcc/limitx.h
+-1045880008b ./gcc/limity.h
+-1454959977b ./gcc/listing
+- 189506952b ./gcc/local-alloc.c
+-4192241275b ./gcc/longlong.h
+- 110068666b ./gcc/loop.c
+-2355598769b ./gcc/loop.h
+-3636819710b ./gcc/machmode.def
+-1353109969b ./gcc/machmode.h
+-3645328946b ./gcc/Makefile.in
+-1625899928b ./gcc/makefile.vms
+-1146561233b ./gcc/make-l2.com
+-2334538597b ./gcc/mbchar.c
+-2000151463b ./gcc/mbchar.h
+-1067305904b ./gcc/md.texi
+-2023894356b ./gcc/mips-tdump.c
+-3783103045b ./gcc/mips-tfile.c
+-3743720878b ./gcc/mkinstalldirs
+-1597314052b ./gcc/move-if-change
+-2412572471b ./gcc/NEWS
+-3548094150b ./gcc/objc/config-lang.in
+- 371515603b ./gcc/objc/lang-specs.h
+-3850085860b ./gcc/objc/Makefile.in
+- 484837376b ./gcc/objc/Make-lang.in
+-1845627730b ./gcc/objc/objc-act.c
+-4009484909b ./gcc/objc/objc-act.h
+-1567868913b ./gcc/objc/objc.gperf
+-4217213030b ./gcc/objc/objc-parse.c
+-2333685510b ./gcc/objc/objc-parse.y
+-3294870779b ./gcc/objc/objc-tree.def
+-3823063152b ./gcc/objc/README
+- 406459598b ./gcc/ONEWS
+- 877735055b ./gcc/optabs.c
+- 593950303b ./gcc/output.h
+-1987145824b ./gcc/patch-apollo-includes
+- 520971098b ./gcc/pcp.h
+- 184341727b ./gcc/po/ChangeLog
+-3044528304b ./gcc/po/en_UK.po
+-3859505195b ./gcc/po/gcc.pot
+- 439509068b ./gcc/po/Makefile.in.in
+-3326298473b ./gcc/po/POTFILES.in
+-2074713163b ./gcc/prefix.c
+-3118553823b ./gcc/prefix.h
+-2711262234b ./gcc/print-rtl.c
+-2711231846b ./gcc/print-tree.c
+-4077477563b ./gcc/PROBLEMS
+- 611568329b ./gcc/profile.c
+- 649092178b ./gcc/protoize.c
+-1892787257b ./gcc/pself1.c
+-2107847039b ./gcc/pself2.c
+-3514013187b ./gcc/pself3.c
+- 163393634b ./gcc/pself4.c
+-2951530756b ./gcc/pself5.c
+-2508419394b ./gcc/pself.c
+-4190809404b ./gcc/README
+- 464706846b ./gcc/README.ACORN
+- 963966184b ./gcc/README.ALTOS
+- 712804111b ./gcc/README.APOLLO
+- 722850134b ./gcc/README-bugs
+-3041263538b ./gcc/README.C4X
+-4254837739b ./gcc/README.DWARF
+-3310775363b ./gcc/README-fixinc
+-3034235340b ./gcc/README.FRESCO
+- 317578445b ./gcc/README.gnat
+-1941060778b ./gcc/README.NS32K
+-2420116021b ./gcc/README.RS6000
+-2521272425b ./gcc/README.TRAD
+- 775999928b ./gcc/README.X11
+-2075044355b ./gcc/real.c
+-3281064342b ./gcc/real.h
+-2135251073b ./gcc/recog.c
+-1103677539b ./gcc/recog.h
+-2161752073b ./gcc/regclass.c
+-2098216394b ./gcc/regmove.c
+-1782287297b ./gcc/regs.h
+- 614377713b ./gcc/reg-stack.c
+-1226896505b ./gcc/reload1.c
+- 211835660b ./gcc/reload.c
+-2046817112b ./gcc/reload.h
+- 93997260b ./gcc/reorg.c
+-3017934975b ./gcc/resource.c
+- 209684395b ./gcc/resource.h
+-2790114237b ./gcc/rtlanal.c
+- 719571646b ./gcc/rtl.c
+-1956957925b ./gcc/rtl.def
+- 100697304b ./gcc/rtl.h
+-2287271260b ./gcc/rtl.texi
+-3890804476b ./gcc/sbitmap.c
+-3170034182b ./gcc/sbitmap.h
+-4293978266b ./gcc/scan.c
+-1983543926b ./gcc/scan-decls.c
+- 375975730b ./gcc/scan.h
+-2610884529b ./gcc/scan-types.sh
+- 399300194b ./gcc/sched.c
+-2531824839b ./gcc/sdbout.c
+-1547148728b ./gcc/sdbout.h
+-1427751232b ./gcc/SERVICE
+-3345261950b ./gcc/sort-protos
+-2395322097b ./gcc/stab.def
+-1870121749b ./gcc/stack.h
+-1261167595b ./gcc/stmt.c
+- 173861812b ./gcc/stor-layout.c
+- 430647095b ./gcc/stupid.c
+-4023966855b ./gcc/sys-protos.h
+-1831619866b ./gcc/system.h
+- 482558466b ./gcc/sys-types.h
+-4046804328b ./gcc/TESTS.FLUNK
+-1728175212b ./gcc/texinfo.tex
+-1269566830b ./gcc/tlink.c
+-1961134148b ./gcc/tm.texi
+-3455843440b ./gcc/toplev.c
+-2536770532b ./gcc/toplev.h
+-3851880366b ./gcc/tree.c
+-3657596657b ./gcc/tree.def
+-4277752559b ./gcc/tree.h
+-4139263293b ./gcc/typeclass.h
+- 17641651b ./gcc/unprotoize.c
+-2772721254b ./gcc/unroll.c
+-3475782279b ./gcc/varasm.c
+- 673114644b ./gcc/varray.c
+-3707241117b ./gcc/varray.h
+- 666569016b ./gcc/version.c
+-1040256635b ./gcc/vmsconfig.com
+- 445093373b ./gcc/xcoffout.c
+-4059141961b ./gcc/xcoffout.h
+-3610260853b ./include/ansidecl.h
+-3890668818b ./include/ChangeLog
+- 430871781b ./include/COPYING
+-2114096985b ./include/demangle.h
+-3641253635b ./include/floatformat.h
+-1425556021b ./include/fnmatch.h
+-3749878603b ./include/getopt.h
+-3770801932b ./include/libiberty.h
+- 839668154b ./include/objalloc.h
+-3443875779b ./include/obstack.h
+-2220598482b ./include/splay-tree.h
+-2321237109b ./include/symcat.h
+-3784734542b ./install/BINARIES
+-2297532680b ./install/binaries.html
+- 123155615b ./install/BUILD
+-3075941658b ./install/build.html
+-3259287787b ./install/CONFIGURE
+-3928709946b ./install/configure.html
+-2510304657b ./install/dec-osf-shlibstdc++.patch
+-1331399401b ./install/DOWNLOAD
+-4006568097b ./install/download.html
+-3020510417b ./install/FINALINSTALL
+-4086994534b ./install/finalinstall.html
+-2403531330b ./install/glibc-2.2.patch
+-3275322004b ./install/INDEX
+- 959109429b ./install/index.html
+-1329440059b ./INSTALL/README
+- 274447927b ./install/sco_osr5_g77.patch
+-4171599065b ./install-sh
+-1640823812b ./install/SPECIFIC
+-4183903535b ./install/specific.html
+-1787754765b ./install/TEST
+-4069947514b ./install/test.html
+-4114729160b ./install/x86-sol2-gas.patch
+-3171868308b ./libchill/abstime.c
+-3904980659b ./libchill/allgmem.c
+-1902887353b ./libchill/allmem.c
+-3505518731b ./libchill/allocate.c
+- 822157090b ./libchill/andps.c
+- 800603049b ./libchill/auxtypes.h
+-1044211637b ./libchill/basicio.c
+- 527568579b ./libchill/bitstring.h
+-1098723731b ./libchill/cardps.c
+-3175298237b ./libchill/cause.c
+-3876540257b ./libchill/ChangeLog
+- 816576333b ./libchill/checkcycle.c
+-4091379471b ./libchill/chillrt0.c
+-1548203605b ./libchill/chillstdio.c
+- 855022130b ./libchill/concatps.c
+- 419254841b ./libchill/concatstr.c
+-4223652781b ./libchill/configure
+-3195026521b ./libchill/configure.in
+-1943460260b ./libchill/continue.c
+-2425783790b ./libchill/convdurrtstime.c
+-2756869635b ./libchill/copyps.c
+-1467089154b ./libchill/delaycase.c
+-3580568616b ./libchill/delete.c
+-3133890689b ./libchill/diffps.c
+- 715707191b ./libchill/eoln.c
+-2246896513b ./libchill/eqps.c
+-1537344683b ./libchill/eqstr.c
+-1226508965b ./libchill/exh.c
+- 830920930b ./libchill/exhstack.c
+-1978839637b ./libchill/existing.c
+-2676080997b ./libchill/ffsetclrps.c
+- 939905505b ./libchill/ffsetps.c
+- 238505831b ./libchill/fileio.h
+-1514958735b ./libchill/flsetclrps.c
+-1186569742b ./libchill/flsetps.c
+-1346569743b ./libchill/format.c
+-1728681327b ./libchill/format.h
+-2081313636b ./libchill/getassoc.c
+-1204638380b ./libchill/gettextaccess.c
+-2748004467b ./libchill/gettextindex.c
+- 78624967b ./libchill/gettextrecord.c
+- 805369965b ./libchill/getusage.c
+-1168666024b ./libchill/inbitstr.c
+-3331772244b ./libchill/indexable.c
+-1075116533b ./libchill/inps.c
+-1820846825b ./libchill/inttime.c
+-1677699214b ./libchill/ioerror.c
+-3575771519b ./libchill/ioerror.h
+- 915469248b ./libchill/iomodes.h
+-1863271808b ./libchill/isassociated.c
+-2418302523b ./libchill/leps.c
+-2141063010b ./libchill/ltps.c
+-1416141016b ./libchill/ltstr.c
+-2330930218b ./libchill/Makefile.in
+-4071908131b ./libchill/memmove.c
+- 562316065b ./libchill/neps.c
+-1084460263b ./libchill/notps.c
+-3228934723b ./libchill/orps.c
+-2186942452b ./libchill/outoffile.c
+-1603876353b ./libchill/powerset.h
+-3440385929b ./libchill/printbuffer.c
+- 271798651b ./libchill/printevent.c
+-3017510030b ./libchill/queuelength.c
+-3848215431b ./libchill/readable.c
+-2438603273b ./libchill/readrecord.c
+-3419304553b ./libchill/remaintime.c
+-2537598687b ./libchill/retmem.c
+-2687117950b ./libchill/rtltypes.h
+-4066459225b ./libchill/rts.c
+- 196671519b ./libchill/rtsdummy.c
+- 952062653b ./libchill/rts.h
+-2211921632b ./libchill/sendbuffer.c
+-3570760248b ./libchill/sequencible.c
+-2777336973b ./libchill/setbitps.c
+-3191515968b ./libchill/setbits.c
+-4052531064b ./libchill/settextaccess.c
+- 410359432b ./libchill/settextindex.c
+-4282557843b ./libchill/settextrecord.c
+-1586152978b ./libchill/sliceps.c
+- 204113253b ./libchill/terminate.c
+- 950885582b ./libchill/unhex1.c
+-2533393221b ./libchill/unhex.c
+-3377634007b ./libchill/variable.c
+- 169021687b ./libchill/waitbuffer.c
+-2574094998b ./libchill/waituntil.c
+-2472500066b ./libchill/writeable.c
+-1972501079b ./libchill/writerecord.c
+- 927204991b ./libchill/xorps.c
+-3265611093b ./libf2c/ChangeLog
+-2766136236b ./libf2c/changes.netlib
+- 283485356b ./libf2c/configure
+- 350135098b ./libf2c/configure.in
+-2487502900b ./libf2c/disclaimer.netlib
+- 332556269b ./libf2c/f2cext.c
+- 259100451b ./libf2c/f2c.h
+- 793010571b ./libf2c/g2c.hin
+-1304659322b ./libf2c/libF77/abort_.c
+-2143735092b ./libf2c/libF77/c_abs.c
+-3290078007b ./libf2c/libF77/cabs.c
+-4102372920b ./libf2c/libF77/c_cos.c
+-2262142301b ./libf2c/libF77/c_div.c
+-3847115202b ./libf2c/libF77/c_exp.c
+-2878052462b ./libf2c/libF77/c_log.c
+- 800953737b ./libf2c/libF77/configure
+- 823261841b ./libf2c/libF77/configure.in
+-3389634672b ./libf2c/libF77/c_sin.c
+-1183895118b ./libf2c/libF77/c_sqrt.c
+-3030188690b ./libf2c/libF77/d_abs.c
+-1507325734b ./libf2c/libF77/d_acos.c
+-4159233847b ./libf2c/libF77/d_asin.c
+-2427060621b ./libf2c/libF77/d_atan.c
+-1296492558b ./libf2c/libF77/d_atn2.c
+-3575888780b ./libf2c/libF77/d_cnjg.c
+-4073305831b ./libf2c/libF77/d_cos.c
+-3091338483b ./libf2c/libF77/d_cosh.c
+- 810995689b ./libf2c/libF77/d_dim.c
+-3392851220b ./libf2c/libF77/derf_.c
+-1250156454b ./libf2c/libF77/derfc_.c
+- 858325700b ./libf2c/libF77/d_exp.c
+-2046018081b ./libf2c/libF77/d_imag.c
+-3730554656b ./libf2c/libF77/d_int.c
+-2573277355b ./libf2c/libF77/d_lg10.c
+-2735602877b ./libf2c/libF77/d_log.c
+-2463902440b ./libf2c/libF77/d_mod.c
+-1315838709b ./libf2c/libF77/d_nint.c
+- 865009317b ./libf2c/libF77/d_prod.c
+- 93986231b ./libf2c/libF77/d_sign.c
+-3550952375b ./libf2c/libF77/d_sin.c
+-3529247529b ./libf2c/libF77/d_sinh.c
+- 198362081b ./libf2c/libF77/d_sqrt.c
+- 836556354b ./libf2c/libF77/d_tan.c
+-4186903397b ./libf2c/libF77/d_tanh.c
+- 779737923b ./libf2c/libF77/dtime_.c
+-3387281619b ./libf2c/libF77/ef1asc_.c
+- 49504728b ./libf2c/libF77/ef1cmc_.c
+-2553568528b ./libf2c/libF77/erf_.c
+-1439324285b ./libf2c/libF77/erfc_.c
+-2054149269b ./libf2c/libF77/etime_.c
+-2926211158b ./libf2c/libF77/exit_.c
+-3294101487b ./libf2c/libF77/f2ch.add
+- 317136894b ./libf2c/libF77/F77_aloc.c
+- 262909947b ./libf2c/libF77/getarg_.c
+-1053635766b ./libf2c/libF77/getenv_.c
+-1464793891b ./libf2c/libF77/h_abs.c
+-4172389826b ./libf2c/libF77/h_dim.c
+-4004178848b ./libf2c/libF77/h_dnnt.c
+-4111775146b ./libf2c/libF77/h_indx.c
+-3370033031b ./libf2c/libF77/h_len.c
+- 577774165b ./libf2c/libF77/hl_ge.c
+-1370298730b ./libf2c/libF77/hl_gt.c
+-1915814870b ./libf2c/libF77/hl_le.c
+- 368944666b ./libf2c/libF77/hl_lt.c
+-2764887666b ./libf2c/libF77/h_mod.c
+-3401291699b ./libf2c/libF77/h_nint.c
+-1347560191b ./libf2c/libF77/h_sign.c
+-2473169636b ./libf2c/libF77/i_abs.c
+-1210543358b ./libf2c/libF77/iargc_.c
+-4060206463b ./libf2c/libF77/i_dim.c
+-2964212421b ./libf2c/libF77/i_dnnt.c
+-2958321828b ./libf2c/libF77/i_indx.c
+-1478370784b ./libf2c/libF77/i_len.c
+-1964370981b ./libf2c/libF77/i_mod.c
+- 956761106b ./libf2c/libF77/i_nint.c
+-3590616869b ./libf2c/libF77/i_sign.c
+- 443393905b ./libf2c/libF77/lbitbits.c
+-3575626916b ./libf2c/libF77/lbitshft.c
+-4105379815b ./libf2c/libF77/l_ge.c
+-4110886289b ./libf2c/libF77/l_gt.c
+-1122360099b ./libf2c/libF77/l_le.c
+-3320765614b ./libf2c/libF77/l_lt.c
+-1531755714b ./libf2c/libF77/main.c
+-1147257543b ./libf2c/libF77/Makefile.in
+-1177519321b ./libf2c/libF77/makefile.netlib
+-1384146782b ./libf2c/libF77/Notice
+-3561723582b ./libf2c/libF77/pow_ci.c
+- 80946260b ./libf2c/libF77/pow_dd.c
+-1800535765b ./libf2c/libF77/pow_di.c
+-3408442423b ./libf2c/libF77/pow_hh.c
+-4238680779b ./libf2c/libF77/pow_ii.c
+- 483795003b ./libf2c/libF77/pow_qq.c
+-2828214001b ./libf2c/libF77/pow_ri.c
+-1113537371b ./libf2c/libF77/pow_zi.c
+-1192551031b ./libf2c/libF77/pow_zz.c
+-1528868299b ./libf2c/libF77/qbitbits.c
+-2508152427b ./libf2c/libF77/qbitshft.c
+-3223994220b ./libf2c/libF77/r_abs.c
+-3352864098b ./libf2c/libF77/r_acos.c
+-3384723664b ./libf2c/libF77/r_asin.c
+-1988008783b ./libf2c/libF77/r_atan.c
+- 713014287b ./libf2c/libF77/r_atn2.c
+- 823683848b ./libf2c/libF77/r_cnjg.c
+- 186941398b ./libf2c/libF77/r_cos.c
+-3322305540b ./libf2c/libF77/r_cosh.c
+-3466251772b ./libf2c/libF77/r_dim.c
+-3594711912b ./libf2c/libF77/README.netlib
+-3655480343b ./libf2c/libF77/r_exp.c
+- 457367872b ./libf2c/libF77/r_imag.c
+-1964745019b ./libf2c/libF77/r_int.c
+- 361396536b ./libf2c/libF77/r_lg10.c
+-2577838016b ./libf2c/libF77/r_log.c
+-3015829361b ./libf2c/libF77/r_mod.c
+-1801353496b ./libf2c/libF77/r_nint.c
+- 617376052b ./libf2c/libF77/r_sign.c
+-1330225769b ./libf2c/libF77/r_sin.c
+-3815237833b ./libf2c/libF77/r_sinh.c
+-3405603649b ./libf2c/libF77/r_sqrt.c
+- 948857700b ./libf2c/libF77/r_tan.c
+-2204673615b ./libf2c/libF77/r_tanh.c
+-3673888216b ./libf2c/libF77/s_cat.c
+-1366254496b ./libf2c/libF77/s_cmp.c
+-3500695330b ./libf2c/libF77/s_copy.c
+-3467937994b ./libf2c/libF77/setarg.c
+- 273280446b ./libf2c/libF77/setsig.c
+- 199330663b ./libf2c/libF77/sig_die.c
+-1302607324b ./libf2c/libF77/signal1.h
+-3496496096b ./libf2c/libF77/signal1.h0
+-4121880197b ./libf2c/libF77/signal_.c
+-2017948720b ./libf2c/libF77/s_paus.c
+-3826238395b ./libf2c/libF77/s_rnge.c
+-3862265148b ./libf2c/libF77/s_stop.c
+- 113341864b ./libf2c/libF77/system_.c
+-2870764345b ./libf2c/libF77/Version.c
+-1937893648b ./libf2c/libF77/z_abs.c
+-2431309812b ./libf2c/libF77/z_cos.c
+-3601348733b ./libf2c/libF77/z_div.c
+- 654537628b ./libf2c/libF77/z_exp.c
+-2915672930b ./libf2c/libF77/z_log.c
+-2332417514b ./libf2c/libF77/z_sin.c
+-4013824581b ./libf2c/libF77/z_sqrt.c
+-1048680171b ./libf2c/libI77/backspace.c
+-1402319189b ./libf2c/libI77/close.c
+-3948477753b ./libf2c/libI77/configure
+-2121845408b ./libf2c/libI77/configure.in
+-1818051790b ./libf2c/libI77/dfe.c
+-2808657081b ./libf2c/libI77/dolio.c
+- 488413691b ./libf2c/libI77/due.c
+-2943116808b ./libf2c/libI77/endfile.c
+-4043373154b ./libf2c/libI77/err.c
+-3294101487b ./libf2c/libI77/f2ch.add
+-3487746107b ./libf2c/libI77/fio.h
+-3915324911b ./libf2c/libI77/fmt.c
+-4101507712b ./libf2c/libI77/fmt.h
+-3758039267b ./libf2c/libI77/fmtlib.c
+-1409031309b ./libf2c/libI77/fp.h
+-1972443625b ./libf2c/libI77/ftell_.c
+-1917699485b ./libf2c/libI77/iio.c
+-2169344007b ./libf2c/libI77/ilnw.c
+-1661250890b ./libf2c/libI77/inquire.c
+- 771509778b ./libf2c/libI77/lio.h
+-1189129125b ./libf2c/libI77/lread.c
+-2727021368b ./libf2c/libI77/lwrite.c
+-1536499154b ./libf2c/libI77/Makefile.in
+-2636902289b ./libf2c/libI77/makefile.netlib
+-1384146782b ./libf2c/libI77/Notice
+-3695991855b ./libf2c/libI77/open.c
+-2618650127b ./libf2c/libI77/rawio.h
+-4237552624b ./libf2c/libI77/rdfmt.c
+-3744878144b ./libf2c/libI77/README.netlib
+-1734468511b ./libf2c/libI77/rewind.c
+- 20341661b ./libf2c/libI77/rsfe.c
+- 27319661b ./libf2c/libI77/rsli.c
+-2441103295b ./libf2c/libI77/rsne.c
+-3949468975b ./libf2c/libI77/sfe.c
+-1382669245b ./libf2c/libI77/sue.c
+-1986314725b ./libf2c/libI77/typesize.c
+-2487538082b ./libf2c/libI77/uio.c
+-3600895104b ./libf2c/libI77/util.c
+-1438637311b ./libf2c/libI77/Version.c
+-3746777128b ./libf2c/libI77/wref.c
+-4089060144b ./libf2c/libI77/wrtfmt.c
+-4073830155b ./libf2c/libI77/wsfe.c
+-1149823364b ./libf2c/libI77/wsle.c
+-3647229305b ./libf2c/libI77/wsne.c
+-2417005419b ./libf2c/libI77/xwsne.c
+-1842933802b ./libf2c/libU77/access_.c
+-3277701818b ./libf2c/libU77/acconfig.h
+-4189124123b ./libf2c/libU77/aclocal.m4
+-2803246243b ./libf2c/libU77/alarm_.c
+- 481185218b ./libf2c/libU77/bes.c
+-3531718858b ./libf2c/libU77/chdir_.c
+-3571215248b ./libf2c/libU77/chmod_.c
+-1946347792b ./libf2c/libU77/config.hin
+-2761696709b ./libf2c/libU77/configure
+-1049590455b ./libf2c/libU77/configure.in
+-2637011133b ./libf2c/libU77/COPYING.LIB
+-2938494220b ./libf2c/libU77/ctime_.c
+-1581466296b ./libf2c/libU77/date_.c
+-1509989013b ./libf2c/libU77/datetime_.c
+-1344682531b ./libf2c/libU77/dbes.c
+-1624711756b ./libf2c/libU77/dtime_.c
+-3399203491b ./libf2c/libU77/etime_.c
+-3155590370b ./libf2c/libU77/fdate_.c
+-2936845924b ./libf2c/libU77/fgetc_.c
+-1262136923b ./libf2c/libU77/flush1_.c
+- 55475392b ./libf2c/libU77/fnum_.c
+-1786809239b ./libf2c/libU77/fputc_.c
+-3903452909b ./libf2c/libU77/fstat_.c
+-3782463129b ./libf2c/libU77/gerror_.c
+-1443084591b ./libf2c/libU77/getcwd_.c
+-2258536089b ./libf2c/libU77/getgid_.c
+-2010909588b ./libf2c/libU77/getlog_.c
+-3431059629b ./libf2c/libU77/getpid_.c
+- 72289587b ./libf2c/libU77/getuid_.c
+-4086135446b ./libf2c/libU77/gmtime_.c
+-2490508241b ./libf2c/libU77/hostnm_.c
+-2769123674b ./libf2c/libU77/idate_.c
+-1177948837b ./libf2c/libU77/ierrno_.c
+-2294075352b ./libf2c/libU77/irand_.c
+-1142470864b ./libf2c/libU77/isatty_.c
+-2247164056b ./libf2c/libU77/itime_.c
+-3704802748b ./libf2c/libU77/kill_.c
+- 910885406b ./libf2c/libU77/link_.c
+-1995276793b ./libf2c/libU77/lnblnk_.c
+-3149128167b ./libf2c/libU77/lstat_.c
+-2950191035b ./libf2c/libU77/ltime_.c
+-2747046004b ./libf2c/libU77/Makefile.in
+-2455391013b ./libf2c/libU77/mclock_.c
+-4183902576b ./libf2c/libU77/perror_.c
+- 572996563b ./libf2c/libU77/PROJECTS
+-3798879256b ./libf2c/libU77/rand_.c
+-2980229902b ./libf2c/libU77/README
+-2297401196b ./libf2c/libU77/rename_.c
+- 91467825b ./libf2c/libU77/secnds_.c
+-3426498280b ./libf2c/libU77/second_.c
+-1721102323b ./libf2c/libU77/sleep_.c
+- 366913838b ./libf2c/libU77/srand_.c
+- 216805921b ./libf2c/libU77/stamp-h.in
+-1858264400b ./libf2c/libU77/stat_.c
+- 398713372b ./libf2c/libU77/symlnk_.c
+-2953563607b ./libf2c/libU77/sys_clock_.c
+-4060599200b ./libf2c/libU77/time_.c
+-3517906143b ./libf2c/libU77/ttynam_.c
+-4227662958b ./libf2c/libU77/u77-test.f
+- 387772730b ./libf2c/libU77/umask_.c
+-1230596654b ./libf2c/libU77/unlink_.c
+- 653953726b ./libf2c/libU77/Version.c
+-2130799769b ./libf2c/libU77/vxtidate_.c
+- 225869800b ./libf2c/libU77/vxttime_.c
+- 481075804b ./libf2c/Makefile.in
+-1384146782b ./libf2c/permission.netlib
+-3111321221b ./libf2c/README
+- 49125193b ./libf2c/readme.netlib
+- 308226469b ./libf2c/TODO
+-2735281877b ./libiberty/acconfig.h
+-3328478890b ./libiberty/alloca.c
+-4130347236b ./libiberty/alloca-conf.h
+- 33013553b ./libiberty/argv.c
+-4095921893b ./libiberty/asprintf.c
+- 244715449b ./libiberty/atexit.c
+-1980547224b ./libiberty/basename.c
+-2078733360b ./libiberty/bcmp.c
+-4095628943b ./libiberty/bcopy.c
+-1355398667b ./libiberty/bzero.c
+-2815379139b ./libiberty/calloc.c
+-2736256076b ./libiberty/ChangeLog
+- 354698691b ./libiberty/choose-temp.c
+- 169448073b ./libiberty/clock.c
+- 876083662b ./libiberty/concat.c
+-1987387424b ./libiberty/config.h-vms
+-2697801398b ./libiberty/config.in
+-3500529335b ./libiberty/config/mh-aix
+-3476234501b ./libiberty/config/mh-cxux7
+-1235651640b ./libiberty/config/mh-fbsd21
+-2131807358b ./libiberty/config/mh-windows
+-3328594913b ./libiberty/config.table
+-3518308570b ./libiberty/configure
+-3679856537b ./libiberty/configure.bat
+-2017474005b ./libiberty/configure.in
+-2637011133b ./libiberty/COPYING.LIB
+-3602665671b ./libiberty/copysign.c
+-2264740542b ./libiberty/cplus-dem.c
+-2375131771b ./libiberty/fdmatch.c
+-1271920426b ./libiberty/floatformat.c
+-2785383756b ./libiberty/fnmatch.c
+-3219909843b ./libiberty/getcwd.c
+-1831129985b ./libiberty/getopt1.c
+-3178082722b ./libiberty/getopt.c
+-3222194456b ./libiberty/getpagesize.c
+-3642701231b ./libiberty/getruntime.c
+-2427662967b ./libiberty/hex.c
+-2509113063b ./libiberty/index.c
+-3649773387b ./libiberty/insque.c
+-2735028791b ./libiberty/makefile.dos
+-4017752505b ./libiberty/Makefile.in
+-2646805026b ./libiberty/makefile.vms
+-3878644027b ./libiberty/memchr.c
+- 621344439b ./libiberty/memcmp.c
+-1234981574b ./libiberty/memcpy.c
+- 453125218b ./libiberty/memmove.c
+-3145829545b ./libiberty/memset.c
+-2904718272b ./libiberty/mkstemps.c
+-3930704547b ./libiberty/mpw.c
+-2010995764b ./libiberty/mpw-config.in
+-1580171809b ./libiberty/mpw-make.sed
+-2503648631b ./libiberty/msdos.c
+-2705348313b ./libiberty/objalloc.c
+- 800431187b ./libiberty/obstack.c
+-2232921109b ./libiberty/pexecute.c
+- 298749640b ./libiberty/putenv.c
+-1572495658b ./libiberty/random.c
+-4016047250b ./libiberty/README
+-2669806012b ./libiberty/rename.c
+-2259647700b ./libiberty/rindex.c
+-4196068288b ./libiberty/setenv.c
+- 749341367b ./libiberty/sigsetmask.c
+-2608485555b ./libiberty/spaces.c
+-2202950326b ./libiberty/splay-tree.c
+-1006482148b ./libiberty/strcasecmp.c
+-3230937814b ./libiberty/strchr.c
+-3756692660b ./libiberty/strdup.c
+-2298840991b ./libiberty/strerror.c
+-1880128423b ./libiberty/strncasecmp.c
+-3749439866b ./libiberty/strrchr.c
+- 661356859b ./libiberty/strsignal.c
+-2094027097b ./libiberty/strstr.c
+-1897243725b ./libiberty/strtod.c
+- 343411197b ./libiberty/strtol.c
+- 294867931b ./libiberty/strtoul.c
+-1321572716b ./libiberty/testsuite/demangle-expected
+-2389145348b ./libiberty/testsuite/Makefile.in
+-1847764436b ./libiberty/testsuite/regress-demangle
+-1688081427b ./libiberty/tmpnam.c
+-2297185157b ./libiberty/vasprintf.c
+- 863918326b ./libiberty/vfork.c
+-3556593952b ./libiberty/vfprintf.c
+- 690268404b ./libiberty/vmsbuild.com
+-1198002722b ./libiberty/vprintf.c
+-3353261530b ./libiberty/vsprintf.c
+-1877317883b ./libiberty/waitpid.c
+-1616442733b ./libiberty/xatexit.c
+-2523832509b ./libiberty/xexit.c
+-2377368504b ./libiberty/xmalloc.c
+-1724714742b ./libiberty/xstrdup.c
+-2509140929b ./libiberty/xstrerror.c
+-4194376285b ./libio/builtinbuf.cc
+- 147728042b ./libio/builtinbuf.h
+-3296701766b ./libio/ChangeLog
+-2265331360b ./libio/cleanup.c
+- 863075231b ./libio/config/hpux.mt
+-3958419758b ./libio/config/isc.mt
+-3136700900b ./libio/config/linuxaxp1-libc-lock.h
+-2386386160b ./libio/config/linuxaxp1.mt
+-1351029660b ./libio/config/linuxaxp1-stdio-lock.h
+-3553940929b ./libio/config/linuxlibc1.mt
+-2009606708b ./libio/config/linux.mt
+- 736046846b ./libio/config/mn10200.mt
+-2337390500b ./libio/config/mtsafe.mt
+-1967085932b ./libio/config/netware.mt
+-3613302931b ./libio/config/sco4.mt
+-3647155764b ./libio/config.shared
+-3532200497b ./libio/configure.in
+-1278171427b ./libio/dbz/altbytes
+-3280508850b ./libio/dbz/byteflip.c
+-3075099010b ./libio/dbz/case.c
+-1151199141b ./libio/dbz/case.h
+-1960818444b ./libio/dbz/configure.in
+-1043385008b ./libio/dbz/dbz.1
+-2630996878b ./libio/dbz/dbz.3z
+-3463957916b ./libio/dbz/dbz.c
+- 72284668b ./libio/dbz/dbz.h
+-3391491881b ./libio/dbz/dbzmain.c
+-3639610345b ./libio/dbz/fake.c
+-2606687708b ./libio/dbz/firstlast25
+-1509228428b ./libio/dbz/getmap
+-2075241739b ./libio/dbz/Makefile.in
+-3634181569b ./libio/dbz/random.c
+-2356064683b ./libio/dbz/README
+-2555759418b ./libio/dbz/revbytes
+-3569928888b ./libio/dbz/stdio.h
+-1279672359b ./libio/depend
+-2948230925b ./libio/editbuf.cc
+-3226618890b ./libio/editbuf.h
+-3860799107b ./libio/filebuf.cc
+-1392841754b ./libio/filedoalloc.c
+-4138112945b ./libio/fileops.c
+-2898387812b ./libio/floatconv.c
+-1816553001b ./libio/floatio.h
+-3592543552b ./libio/fstream.cc
+-1169730972b ./libio/fstream.h
+- 748297484b ./libio/genops.c
+- 757482856b ./libio/gen-params
+-2773979595b ./libio/include/empty.h
+-4123879326b ./libio/indstream.cc
+-4294052401b ./libio/indstream.h
+- 347427047b ./libio/ioassign.cc
+-3302132735b ./libio/ioextend.cc
+-1805925285b ./libio/iofclose.c
+-1236674438b ./libio/iofdopen.c
+-1488023096b ./libio/iofeof.c
+-2860719054b ./libio/ioferror.c
+- 242305084b ./libio/iofflush.c
+-3823517296b ./libio/iofflush_u.c
+- 237511526b ./libio/iofgetpos.c
+-3756840924b ./libio/iofgets.c
+- 632513053b ./libio/iofopen.c
+- 123538350b ./libio/iofprintf.c
+-3233629075b ./libio/iofputs.c
+-2772900682b ./libio/iofread.c
+-1398668655b ./libio/iofscanf.c
+-2099649424b ./libio/iofsetpos.c
+-3733163483b ./libio/ioftell.c
+-2084222776b ./libio/iofwrite.c
+-2575879849b ./libio/iogetc.c
+- 976413790b ./libio/iogetdelim.c
+-1970748550b ./libio/iogetline.c
+-1120049602b ./libio/iogets.c
+-2058656960b ./libio/ioignore.c
+-3189700616b ./libio/iolibio.h
+- 773210395b ./libio/iomanip.cc
+-3321477813b ./libio/iomanip.h
+- 168010012b ./libio/iopadn.c
+- 676804209b ./libio/ioperror.c
+-1561025893b ./libio/iopopen.c
+-2346730076b ./libio/ioprims.c
+-3336570520b ./libio/ioprintf.c
+-3919423487b ./libio/ioputc.c
+-2614366366b ./libio/ioputs.c
+-4211169173b ./libio/ioscanf.c
+- 52814081b ./libio/ioseekoff.c
+-2391164294b ./libio/ioseekpos.c
+-1321290154b ./libio/iosetbuffer.c
+-2898378357b ./libio/iosetvbuf.c
+-4197952251b ./libio/iosprintf.c
+- 684845505b ./libio/iosscanf.c
+- 126884166b ./libio/iostdio.h
+-4003502161b ./libio/iostream.cc
+-1367738252b ./libio/iostream.h
+- 724185980b ./libio/iostreamP.h
+- 900394632b ./libio/iostream.texi
+-2266620976b ./libio/iostrerror.c
+-1504845341b ./libio/ioungetc.c
+-3172078371b ./libio/iovfprintf.c
+-3899460915b ./libio/iovfscanf.c
+-1002493619b ./libio/iovsprintf.c
+- 506959745b ./libio/iovsscanf.c
+- 381264573b ./libio/isgetline.cc
+- 105613686b ./libio/isgetsb.cc
+-2661167259b ./libio/isscan.cc
+- 206584630b ./libio/istream.h
+-3623270479b ./libio/libio.h
+-3509602408b ./libio/libioP.h
+-2390345359b ./libio/Makefile.in
+-2778177928b ./libio/NEWS
+-4004983993b ./libio/osform.cc
+- 206584630b ./libio/ostream.h
+-3277082473b ./libio/outfloat.c
+-3994216106b ./libio/parsestream.cc
+- 166126510b ./libio/parsestream.h
+-3469115631b ./libio/peekc.c
+-2293291193b ./libio/pfstream.cc
+-1224814660b ./libio/pfstream.h
+-1839206347b ./libio/PlotFile.cc
+-1734473134b ./libio/PlotFile.h
+-3165888289b ./libio/procbuf.cc
+-3903586123b ./libio/procbuf.h
+-3745289928b ./libio/README
+-3862518594b ./libio/sbform.cc
+- 814340336b ./libio/sbgetline.cc
+-2309658982b ./libio/sbscan.cc
+-2365119821b ./libio/SFile.cc
+-3862997842b ./libio/SFile.h
+-1179188179b ./libio/stdfiles.c
+- 796114288b ./libio/stdio/ChangeLog
+- 531444633b ./libio/stdio/ChangeLog.old
+-4223233278b ./libio/stdio/clearerr.c
+-1555657474b ./libio/stdio/clearerr_u.c
+-3561044537b ./libio/stdio/configure.in
+- 360978561b ./libio/stdio/fdopen.c
+-3984519143b ./libio/stdio/feof.c
+-4247933869b ./libio/stdio/feof_u.c
+-4003086051b ./libio/stdio/ferror.c
+-3066036848b ./libio/stdio/ferror_u.c
+-2473833036b ./libio/stdio/fgetc.c
+-1707295330b ./libio/stdio/fileno.c
+- 90519259b ./libio/stdio/fputc.c
+-2190671019b ./libio/stdio/fputc_u.c
+-2481547413b ./libio/stdio/freopen.c
+-4038328411b ./libio/stdio/fseek.c
+-2790088986b ./libio/stdio/getc.c
+-1650054989b ./libio/stdio/getchar.c
+- 682966141b ./libio/stdio/getchar_u.c
+-1140857223b ./libio/stdio/getc_u.c
+-2544604936b ./libio/stdio/getline.c
+- 981141110b ./libio/stdio/getw.c
+-2580375189b ./libio/stdio/Makefile.in
+- 536637384b ./libio/stdio/obprintf.c
+-2215262105b ./libio/stdio/popen.c
+- 547858581b ./libio/stdio/putc.c
+- 694997692b ./libio/stdio/putchar.c
+- 295167963b ./libio/stdio/putchar_u.c
+-3689915525b ./libio/stdio/putc_u.c
+-3810456385b ./libio/stdio/putw.c
+-1412052881b ./libio/stdio/rewind.c
+-1529208793b ./libio/stdio/setbuf.c
+- 344764949b ./libio/stdio/setfileno.c
+-1504325380b ./libio/stdio/setlinebuf.c
+-3239397115b ./libio/stdio/snprintf.c
+- 364120565b ./libio/stdio/stdio.h
+- 640251772b ./libio/stdiostream.cc
+- 317477001b ./libio/stdiostream.h
+-4097646286b ./libio/stdio/vasprintf.c
+-4012743512b ./libio/stdio/vfprintf.c
+-1548696338b ./libio/stdio/vfscanf.c
+- 242032189b ./libio/stdio/vprintf.c
+-4163559183b ./libio/stdio/vscanf.c
+-2656367363b ./libio/stdio/vsnprintf.c
+-3925396300b ./libio/stdstrbufs.cc
+-1143821051b ./libio/stdstreams.cc
+-3859541986b ./libio/streambuf.cc
+- 17859617b ./libio/streambuf.h
+-3657918999b ./libio/stream.cc
+- 173908312b ./libio/stream.h
+-1995951033b ./libio/strfile.h
+- 512029605b ./libio/strops.c
+-1165036966b ./libio/strstream.cc
+-2990392982b ./libio/strstream.h
+-2702125204b ./libio/tests/ChangeLog
+-4275790996b ./libio/tests/configure.in
+-3590880906b ./libio/tests/hounddog.cc
+-3674844182b ./libio/tests/hounddog.exp
+-1475148939b ./libio/tests/hounddog.inp
+-3161360046b ./libio/tests/Makefile.in
+-1907782383b ./libio/tests/putbackdog.cc
+-2806477238b ./libio/tests/tfformat.c
+-2094676083b ./libio/tests/tFile.cc
+-1203674425b ./libio/tests/tFile.exp
+-2833248335b ./libio/tests/tFile.inp
+-3956955633b ./libio/tests/tiformat.c
+-2723761625b ./libio/tests/tiomanip.cc
+- 612490440b ./libio/tests/tiomanip.exp
+-2560574599b ./libio/tests/tiomisc.cc
+-1660016937b ./libio/tests/tiomisc.exp
+-2914030173b ./libio/tests/tstdiomisc.c
+-3284359901b ./libio/tests/tstdiomisc.exp
+-3879134172b ./libio/testsuite/ChangeLog
+-1230501773b ./libio/testsuite/config/default.exp
+-3169562340b ./libio/testsuite/configure.in
+-2483970923b ./libio/testsuite/libio.tests/hounddog.exp
+-2416624286b ./libio/testsuite/libio.tests/putbackdog.exp
+- 191043273b ./libio/testsuite/libio.tests/tfformat.exp
+-2904490330b ./libio/testsuite/libio.tests/tFile.exp
+-2848159500b ./libio/testsuite/libio.tests/tiformat.exp
+- 883822692b ./libio/testsuite/libio.tests/tiomanip.exp
+-1658003010b ./libio/testsuite/libio.tests/tiomisc.exp
+-3206451440b ./libio/testsuite/libio.tests/tstdiomisc.exp
+- 19817386b ./libio/testsuite/lib/libio.exp
+-2566597489b ./libio/testsuite/Makefile.in
+- 605856870b ./libobjc/archive.c
+-2985718156b ./libobjc/ChangeLog
+-3067716864b ./libobjc/class.c
+-3378798923b ./libobjc/configure
+-3677824557b ./libobjc/configure.in
+-4111966841b ./libobjc/encoding.c
+-2195769577b ./libobjc/gc.c
+-1761713542b ./libobjc/hash.c
+- 978848199b ./libobjc/init.c
+-1153982666b ./libobjc/libobjc.def
+-4072125181b ./libobjc/libobjc_entry.c
+-4260228535b ./libobjc/linking.m
+-2398517524b ./libobjc/makefile.dos
+-4035593071b ./libobjc/Makefile.in
+- 687879051b ./libobjc/misc.c
+-1752870170b ./libobjc/nil_method.c
+- 638422313b ./libobjc/NXConstStr.m
+-1692177559b ./libobjc/objc/encoding.h
+-1940424288b ./libobjc/objc-features.texi
+- 991318077b ./libobjc/objc/hash.h
+-1937854528b ./libobjc/objc/NXConstStr.h
+-3584280142b ./libobjc/objc/objc-api.h
+-2946018502b ./libobjc/objc/objc.h
+-1569406371b ./libobjc/objc/objc-list.h
+-1680445531b ./libobjc/objc/Object.h
+- 226797930b ./libobjc/objc/Protocol.h
+-1775267864b ./libobjc/objc/runtime.h
+-1609667340b ./libobjc/objc/sarray.h
+-3991042429b ./libobjc/objc/thr.h
+-2746948162b ./libobjc/objc/typedstream.h
+-1526865132b ./libobjc/Object.m
+-2760949240b ./libobjc/objects.c
+-3962273975b ./libobjc/Protocol.m
+-3823063152b ./libobjc/README
+- 749035591b ./libobjc/README.threads
+-3373133429b ./libobjc/sarray.c
+- 791617547b ./libobjc/selector.c
+-1001444343b ./libobjc/sendmsg.c
+-1809950502b ./libobjc/thr.c
+-3414327023b ./libobjc/thr-dce.c
+-2193934747b ./libobjc/thr-decosf1.c
+-1199102574b ./libobjc/THREADS
+-4055902911b ./libobjc/THREADS.MACH
+- 570456722b ./libobjc/thr-irix.c
+-1715842563b ./libobjc/thr-mach.c
+-2841374444b ./libobjc/thr-os2.c
+- 634920197b ./libobjc/thr-posix.c
+- 938980526b ./libobjc/thr-pthreads.c
+-2005277748b ./libobjc/thr-single.c
+- 60531382b ./libobjc/thr-solaris.c
+-2005277748b ./libobjc/thr-vxworks.c
+-2963027857b ./libobjc/thr-win32.c
+-2516576725b ./libstdc++/cassert
+-3909388294b ./libstdc++/cctype
+- 739562956b ./libstdc++/cerrno
+-2797999855b ./libstdc++/cfloat
+-1284523235b ./libstdc++/ChangeLog
+-3987604938b ./libstdc++/cinst.cc
+-3501589610b ./libstdc++/ciso646
+-2331350423b ./libstdc++/climits
+- 465638440b ./libstdc++/clocale
+-4030032747b ./libstdc++/cmath
+- 264446968b ./libstdc++/cmathi.cc
+-3558667222b ./libstdc++/complex
+-2619764512b ./libstdc++/complex.h
+-3829974099b ./libstdc++/config/aix.ml
+-2732747599b ./libstdc++/config/dec-osf.ml
+-2265189895b ./libstdc++/config/delta.mt
+-2745989692b ./libstdc++/config/elf.ml
+-4027891460b ./libstdc++/config/elfshlibm.ml
+- 198478647b ./libstdc++/config/freebsd.ml
+-3926744931b ./libstdc++/config/gnu.ml
+-1670841350b ./libstdc++/config/hpux.ml
+- 304253918b ./libstdc++/config/irix5.ml
+-1737000939b ./libstdc++/config/linux.ml
+-2337390500b ./libstdc++/config/linux.mt
+-2426283874b ./libstdc++/config/openbsd.ml
+-3272088979b ./libstdc++/config/openbsd.mt
+- 235193045b ./libstdc++/config/posix.mt
+- 235193045b ./libstdc++/config/sol2pth.mt
+-4096894018b ./libstdc++/config/sol2shm.ml
+-2091399237b ./libstdc++/config/sol2solth.mt
+-1502161104b ./libstdc++/config/sunos4.ml
+-1032496632b ./libstdc++/configure.in
+-1755727990b ./libstdc++/config/x86-interix.ml
+-2303897588b ./libstdc++/csetjmp
+-1186041650b ./libstdc++/csignal
+-2162743197b ./libstdc++/cstdarg
+-1745992687b ./libstdc++/cstddef
+-3133738908b ./libstdc++/cstdio
+-1860252484b ./libstdc++/cstdlib
+- 986418601b ./libstdc++/cstdlibi.cc
+-1967465692b ./libstdc++/cstring
+-2144403978b ./libstdc++/cstringi.cc
+-2537513367b ./libstdc++/ctime
+- 146070935b ./libstdc++/cwchar
+- 817779820b ./libstdc++/cwctype
+-1879621210b ./libstdc++/fstream
+-1848554462b ./libstdc++/iomanip
+-4252037106b ./libstdc++/iosfwd
+-3612241682b ./libstdc++/iostream
+-2732344053b ./libstdc++/Makefile.in
+-3677480652b ./libstdc++/NEWS
+-2249942730b ./libstdc++/sinst.cc
+-3946235411b ./libstdc++/sstream
+-1561088521b ./libstdc++/std/bastring.cc
+- 103173366b ./libstdc++/std/bastring.h
+- 554430013b ./libstdc++/std/complext.cc
+- 348511172b ./libstdc++/std/complext.h
+-2664934083b ./libstdc++/std/dcomplex.h
+-1325247176b ./libstdc++/stdexcept
+-3656768290b ./libstdc++/stdexcepti.cc
+-3424942577b ./libstdc++/std/fcomplex.h
+-2214556284b ./libstdc++/std/gslice_array.h
+-1351514047b ./libstdc++/std/gslice.h
+- 57436398b ./libstdc++/std/indirect_array.h
+-3263662379b ./libstdc++/std/ldcomplex.h
+-3552880930b ./libstdc++/std/mask_array.h
+-3062835292b ./libstdc++/std/slice_array.h
+-1042140122b ./libstdc++/std/slice.h
+-1391859698b ./libstdc++/std/std_valarray.h
+-2661359535b ./libstdc++/std/straits.h
+-3843151591b ./libstdc++/std/valarray_array.h
+- 71019618b ./libstdc++/std/valarray_array.tcc
+-1491824696b ./libstdc++/std/valarray_meta.h
+-1793430325b ./libstdc++/stl/algobase.h
+- 337637047b ./libstdc++/stl/algo.h
+-1239456689b ./libstdc++/stl/algorithm
+-2123302443b ./libstdc++/stl/alloc.h
+-1564384875b ./libstdc++/stl/bitset
+-3916268080b ./libstdc++/stl/bvector.h
+-1080389581b ./libstdc++/stl/ChangeLog
+- 449078902b ./libstdc++/stl/defalloc.h
+-3178480764b ./libstdc++/stl/deque
+-3808147062b ./libstdc++/stl/deque.h
+-2654535795b ./libstdc++/stl/functional
+-2545358141b ./libstdc++/stl/function.h
+-3655692358b ./libstdc++/stl.h
+-1295672411b ./libstdc++/stl/hash_map
+- 50968967b ./libstdc++/stl/hash_map.h
+-3082728694b ./libstdc++/stl/hash_set
+- 262670658b ./libstdc++/stl/hash_set.h
+-3336988491b ./libstdc++/stl/hashtable.h
+- 93866534b ./libstdc++/stl/heap.h
+-2351835854b ./libstdc++/stlinst.cc
+-2130955697b ./libstdc++/stl/iterator
+-3615188542b ./libstdc++/stl/iterator.h
+-1371453800b ./libstdc++/stl/list
+-1771088805b ./libstdc++/stl/list.h
+-3736216087b ./libstdc++/stl/map
+- 495476693b ./libstdc++/stl/map.h
+-1520299132b ./libstdc++/stl/memory
+-1422547465b ./libstdc++/stl/multimap.h
+-3784936539b ./libstdc++/stl/multiset.h
+-1186511904b ./libstdc++/stl/numeric
+-2882722351b ./libstdc++/stl/pair.h
+- 629893259b ./libstdc++/stl/pthread_alloc
+- 360022506b ./libstdc++/stl/pthread_alloc.h
+-2009114277b ./libstdc++/stl/queue
+-1771543811b ./libstdc++/stl/README
+- 919894984b ./libstdc++/stl/rope
+- 650690078b ./libstdc++/stl/rope.h
+- 971050590b ./libstdc++/stl/ropeimpl.h
+-3485834952b ./libstdc++/stl/set
+-3261147361b ./libstdc++/stl/set.h
+-1660581899b ./libstdc++/stl/slist
+- 364531500b ./libstdc++/stl/slist.h
+- 772005731b ./libstdc++/stl/stack
+- 963570706b ./libstdc++/stl/stack.h
+-2334578217b ./libstdc++/stl/stl_algobase.h
+-1835781933b ./libstdc++/stl/stl_algo.h
+-2862923138b ./libstdc++/stl/stl_alloc.h
+- 131893617b ./libstdc++/stl/stl_bvector.h
+-1795298057b ./libstdc++/stl/stl_config.h
+-3337345269b ./libstdc++/stl/stl_construct.h
+-4019276960b ./libstdc++/stl/stl_deque.h
+-1800258908b ./libstdc++/stl/stl_function.h
+-1040773216b ./libstdc++/stl/stl_hash_fun.h
+-4278535125b ./libstdc++/stl/stl_hash_map.h
+- 310116663b ./libstdc++/stl/stl_hash_set.h
+-3162216421b ./libstdc++/stl/stl_hashtable.h
+-3889126782b ./libstdc++/stl/stl_heap.h
+-3766937461b ./libstdc++/stl/stl_iterator.h
+-1821622705b ./libstdc++/stl/stl_list.h
+-4011155360b ./libstdc++/stl/stl_map.h
+-2277711706b ./libstdc++/stl/stl_multimap.h
+-3218206970b ./libstdc++/stl/stl_multiset.h
+-2760914362b ./libstdc++/stl/stl_numeric.h
+- 18446022b ./libstdc++/stl/stl_pair.h
+- 864968925b ./libstdc++/stl/stl_queue.h
+-3312484350b ./libstdc++/stl/stl_raw_storage_iter.h
+-2384091075b ./libstdc++/stl/stl_relops.h
+-2597643485b ./libstdc++/stl/stl_rope.h
+-4176745833b ./libstdc++/stl/stl_set.h
+-1375936906b ./libstdc++/stl/stl_slist.h
+-4249437084b ./libstdc++/stl/stl_stack.h
+-2864163398b ./libstdc++/stl/stl_tempbuf.h
+-1017051646b ./libstdc++/stl/stl_tree.h
+-3890164582b ./libstdc++/stl/stl_uninitialized.h
+-3995524520b ./libstdc++/stl/stl_vector.h
+-1504340996b ./libstdc++/stl/tempbuf.h
+- 409279379b ./libstdc++/stl/tree.h
+-1293888323b ./libstdc++/stl/type_traits.h
+-1758410924b ./libstdc++/stl/utility
+-1313796109b ./libstdc++/stl/vector
+-3931466599b ./libstdc++/stl/vector.h
+-3905981553b ./libstdc++/string
+-4274952910b ./libstdc++/strstream
+-2595671692b ./libstdc++/tests/ChangeLog
+-3722269248b ./libstdc++/tests/configure.in
+-1190480729b ./libstdc++/tests/Makefile.in
+- 932490928b ./libstdc++/tests/tcomplex.cc
+-2256442937b ./libstdc++/tests/tcomplex.exp
+-4047639851b ./libstdc++/tests/tcomplex.inp
+- 621011550b ./libstdc++/tests/tlist.cc
+-3132042690b ./libstdc++/tests/tlist.exp
+-1145205079b ./libstdc++/tests/tmap.cc
+-3201421553b ./libstdc++/tests/tmap.exp
+-3358903814b ./libstdc++/tests/tstring.cc
+- 445588679b ./libstdc++/tests/tstring.exp
+-2025066765b ./libstdc++/tests/tstring.inp
+- 236450600b ./libstdc++/tests/tvector.cc
+-2833371777b ./libstdc++/tests/tvector.exp
+-2272344875b ./libstdc++/testsuite/ChangeLog
+-1230501773b ./libstdc++/testsuite/config/default.exp
+- 305406486b ./libstdc++/testsuite/configure.in
+-2971477386b ./libstdc++/testsuite/lib/libstdc++.exp
+- 631859611b ./libstdc++/testsuite/libstdc++.tests/test.exp
+- 53069919b ./libstdc++/testsuite/Makefile.in
+-3097225277b ./libstdc++/valarray
+- 422203026b ./libstdc++/valarray.cc
+-4225874335b ./ltconfig
+- 23768362b ./ltmain.sh
+- 104875702b ./MAINTAINERS
+-3026518559b ./Makefile.in
+-4162842036b ./missing
+-4236112450b ./mkinstalldirs
+- 902556840b ./move-if-change
+-1935170490b ./README
+-3014264078b ./symlink-tree
+- 422488038b ./texinfo/ABOUT-NLS
+-4092622231b ./texinfo/acconfig.h
+-3892192340b ./texinfo/acinclude.m4
+-1818562438b ./texinfo/aclocal.m4
+-2274278886b ./texinfo/AUTHORS
+-3309356478b ./texinfo/ChangeLog
+-1315260558b ./texinfo/config.guess
+-3200477370b ./texinfo/config.h.in
+-3966557687b ./texinfo/config.sub
+-3304182169b ./texinfo/configure
+-2081586187b ./texinfo/configure.in
+- 430871781b ./texinfo/COPYING
+- 326028421b ./texinfo/cygnus/Makefile.in
+-1315037385b ./texinfo/cygnus/texinfo.tex
+-2593571507b ./texinfo/cygnus/texiplus.tex
+-2396995287b ./texinfo/cygnus/tocfix
+- 792184885b ./texinfo/dir
+-3304044212b ./texinfo/dir-example
+-2139861464b ./texinfo/dir.info-template
+-3826213895b ./texinfo/doc/epsf.tex
+- 660998107b ./texinfo/doc/info-stnd.texi
+-1533813456b ./texinfo/doc/info.texi
+-4047996362b ./texinfo/doc/macro.texi
+-3198634674b ./texinfo/doc/Makefile.am
+- 713005243b ./texinfo/doc/Makefile.in
+-2740653009b ./texinfo/doc/README
+-1143415264b ./texinfo/doc/texinfo.tex
+- 729519619b ./texinfo/doc/texinfo.texi
+-2717651420b ./texinfo/doc/texinfo.txi
+-3664971266b ./texinfo/doc/userdoc.texi
+-1580887266b ./texinfo/emacs/detexinfo.el
+-3301909409b ./texinfo/emacs/elisp-comp
+-4267905953b ./texinfo/emacs/info.el
+- 883633766b ./texinfo/emacs/informat.el
+-3268267971b ./texinfo/emacs/Makefile.am
+-3903021574b ./texinfo/emacs/Makefile.in
+-2618083764b ./texinfo/emacs/makeinfo.el
+-3318259411b ./texinfo/emacs/new-useful-setqs
+-2833836046b ./texinfo/emacs/README
+-1035294818b ./texinfo/emacs/texinfmt.el
+-3899145430b ./texinfo/emacs/texinfo.el
+-2114576468b ./texinfo/emacs/texnfo-tex.el
+-1830205302b ./texinfo/emacs/texnfo-upd.el
+- 735767552b ./texinfo/gen-info-dir
+-1807174244b ./texinfo/gpl.texinfo
+-1419012559b ./texinfo/info/clib.c
+-1702191134b ./texinfo/info/clib.h
+-2482141158b ./texinfo/info/dir.c
+- 685818533b ./texinfo/info/display.c
+-2364277320b ./texinfo/info/display.h
+-3138649698b ./texinfo/info/doc.c
+-3312314068b ./texinfo/info/doc.h
+- 95508657b ./texinfo/info/dribble.c
+-1429936122b ./texinfo/info/dribble.h
+- 52394048b ./texinfo/info/echo_area.c
+-3383747464b ./texinfo/info/echo-area.c
+-3360125135b ./texinfo/info/echo_area.h
+- 802630900b ./texinfo/info/echo-area.h
+-1681484123b ./texinfo/info/filesys.c
+-3085693604b ./texinfo/info/filesys.h
+-3611999168b ./texinfo/info/footnotes.c
+-1303449683b ./texinfo/info/footnotes.h
+- 962559755b ./texinfo/info/funs.h
+-1317496397b ./texinfo/info/gc.c
+- 606512762b ./texinfo/info/gc.h
+-2880943096b ./texinfo/info/general.h
+-1643769032b ./texinfo/info/indices.c
+-1625766310b ./texinfo/info/indices.h
+-4190102428b ./texinfo/info/info.1
+-3200602615b ./texinfo/info/info.c
+- 737516417b ./texinfo/info/infodoc.c
+-1499645712b ./texinfo/info/info.h
+-3704362534b ./texinfo/info/infomap.c
+-4254631691b ./texinfo/info/infomap.h
+- 439078129b ./texinfo/info/info-stnd.texi
+-3517783883b ./texinfo/info/info.texi
+-1134986012b ./texinfo/info/info-utils.c
+-2729648091b ./texinfo/info/info-utils.h
+- 919307228b ./texinfo/info/makedoc.c
+-1741855739b ./texinfo/info/Makefile.am
+-1618175998b ./texinfo/info/Makefile.in
+- 123396366b ./texinfo/info/man.c
+-4282569250b ./texinfo/info/man.h
+-1477971895b ./texinfo/info/m-x.c
+-3752294279b ./texinfo/info/NEWS
+-2288239572b ./texinfo/info/nodemenu.c
+-1960187995b ./texinfo/info/nodes.c
+-2110822275b ./texinfo/info/nodes.h
+-2275896429b ./texinfo/info/README
+-3360605566b ./texinfo/info/search.c
+-3609449595b ./texinfo/info/search.h
+-3868216836b ./texinfo/info/session.c
+-3347159602b ./texinfo/info/session.h
+-1271567004b ./texinfo/info/signals.c
+- 589399415b ./texinfo/info/signals.h
+-1341202787b ./texinfo/info/termdep.h
+-3939402493b ./texinfo/info/terminal.c
+- 844882397b ./texinfo/info/terminal.h
+-1013252653b ./texinfo/info/tilde.c
+-1882006797b ./texinfo/info/tilde.h
+-3700878213b ./texinfo/info/userdoc.texi
+-1787997028b ./texinfo/info/variables.c
+-2194951675b ./texinfo/info/variables.h
+-1592164980b ./texinfo/info/window.c
+-3828547314b ./texinfo/info/window.h
+-1950621923b ./texinfo/info/xmalloc.c
+-3932743515b ./texinfo/INSTALL
+-4095961629b ./texinfo/intl/bindtextdom.c
+-2763549264b ./texinfo/intl/cat-compat.c
+-4268110712b ./texinfo/intl/ChangeLog
+- 757126972b ./texinfo/intl/dcgettext.c
+-4105193222b ./texinfo/intl/dgettext.c
+-3003979503b ./texinfo/intl/explodename.c
+-3930007107b ./texinfo/intl/finddomain.c
+-3120376831b ./texinfo/intl/gettext.c
+-3984116293b ./texinfo/intl/gettext.h
+-3445198552b ./texinfo/intl/gettextP.h
+- 687736092b ./texinfo/intl/hash-string.h
+-1443767269b ./texinfo/intl/intl-compat.c
+-2902945940b ./texinfo/intl/l10nflist.c
+-4133992265b ./texinfo/intl/libgettext.h
+-3263658828b ./texinfo/intl/linux-msg.sed
+-4102842040b ./texinfo/intl/loadinfo.h
+-3403967159b ./texinfo/intl/loadmsgcat.c
+- 527988159b ./texinfo/intl/localealias.c
+-3457291048b ./texinfo/intl/Makefile.in
+- 223588995b ./texinfo/intl/po2tbl.sed.in
+-1958438848b ./texinfo/intl/textdomain.c
+-1929213520b ./texinfo/intl/VERSION
+-2960721199b ./texinfo/intl/xopen-msg.sed
+-1670374630b ./texinfo/INTRODUCTION
+- 46787189b ./texinfo/lgpl.texinfo
+- 222849122b ./texinfo/lib/alloca.c
+-3947434763b ./texinfo/lib/getopt1.c
+- 9654218b ./texinfo/lib/getopt.c
+-1914093633b ./texinfo/lib/getopt.h
+-3377823797b ./texinfo/liblic.texi
+-3402766507b ./texinfo/lib/Makefile.am
+-3580984504b ./texinfo/lib/Makefile.in
+-3055303734b ./texinfo/lib/memcpy.c
+- 446691847b ./texinfo/lib/memmove.c
+- 560910069b ./texinfo/lib/README
+-3540664704b ./texinfo/lib/strdup.c
+-4235360416b ./texinfo/lib/strerror.c
+-2384235250b ./texinfo/lib/system.h
+- 222849122b ./texinfo/libtxi/alloca.c
+- 288219538b ./texinfo/libtxi/bzero.c
+- 19488452b ./texinfo/libtxi/getopt1.c
+-1512252428b ./texinfo/libtxi/getopt.c
+-3508337656b ./texinfo/libtxi/getopt.h
+- 306023120b ./texinfo/libtxi/Makefile.in
+-3055303734b ./texinfo/libtxi/memcpy.c
+- 446691847b ./texinfo/libtxi/memmove.c
+-3540664704b ./texinfo/libtxi/strdup.c
+-1950621923b ./texinfo/lib/xmalloc.c
+-4069599781b ./texinfo/lib/xstrdup.c
+-3295260160b ./texinfo/license.texi
+- 20997403b ./texinfo/Makefile.am
+-2667709874b ./texinfo/Makefile.in
+-1231574645b ./texinfo/makeinfo/macros/example.texi
+-3207519225b ./texinfo/makeinfo/macros/html.texi
+-2763193877b ./texinfo/makeinfo/macros/multifmt.texi
+-1454209901b ./texinfo/makeinfo/macros/res-samp.texi
+- 70035262b ./texinfo/makeinfo/macros/resume.texi
+-2057724373b ./texinfo/makeinfo/macros/simpledoc.texi
+-4047996362b ./texinfo/makeinfo/macro.texi
+-3843067758b ./texinfo/makeinfo/Makefile.am
+-4148293928b ./texinfo/makeinfo/Makefile.in
+-1703235527b ./texinfo/makeinfo/makeinfo.c
+-1062648373b ./texinfo/makeinfo/makeinfo.h
+-1604761989b ./texinfo/makeinfo/makeinfo.texi
+-3801376154b ./texinfo/makeinfo/multi.c
+-1664776300b ./texinfo/makeinfo/multiformat.texi
+-2934759165b ./texinfo/makeinfo/README
+-1592681024b ./texinfo/missing
+- 457782489b ./texinfo/mkinstalldirs
+-2456883787b ./texinfo/NEWS
+- 640461845b ./texinfo/po/cat-id-tbl.c
+-3867968187b ./texinfo/po/ChangeLog
+-1830096572b ./texinfo/po/de.gmo
+-2282914256b ./texinfo/po/de.po
+-3608177378b ./texinfo/po/fr.gmo
+-1085842507b ./texinfo/po/fr.po
+-3928520230b ./texinfo/po/Makefile.in.in
+- 649172625b ./texinfo/po/POTFILES.in
+- 216805921b ./texinfo/po/stamp-cat-id
+-1114231122b ./texinfo/po/texinfo.pot
+- 939039628b ./texinfo/README
+-4194708969b ./texinfo/README-alpha
+- 216805921b ./texinfo/stamp-h.in
+- 685158172b ./texinfo/testsuite/ChangeLog
+- 222616344b ./texinfo/testsuite/config/unix.exp
+-3864106305b ./texinfo/testsuite/configure
+-3337486704b ./texinfo/testsuite/configure.in
+- 672434007b ./texinfo/testsuite/lib/utils.exp
+-2017219379b ./texinfo/testsuite/Makefile.in
+-4036806020b ./texinfo/testsuite/makeinfo.0/atnode.exp
+-1007825826b ./texinfo/testsuite/makeinfo.0/conditions.exp
+- 805816595b ./texinfo/testsuite/makeinfo.0/mini.exp
+-3124225236b ./texinfo/testsuite/makeinfo.0/missnode.exp
+-4170863792b ./texinfo/testsuite/makeinfo.0/nonsense.exp
+-2178978844b ./texinfo/testsuite/makeinfo.0/not.exp
+-4230035996b ./texinfo/testsuite/makeinfo.0/smstruct.exp
+-1671662405b ./texinfo/testsuite/text/atnode.texi
+- 414043974b ./texinfo/testsuite/text/conditions.texi
+-3508612395b ./texinfo/testsuite/text/dfltnode.texi
+-2081462941b ./texinfo/testsuite/text/minimal.texi
+-2807880644b ./texinfo/testsuite/text/missnode.texi
+-1701929320b ./texinfo/testsuite/text/nonsense.texi
+- 297791510b ./texinfo/testsuite/text/not.texi
+-3270708249b ./texinfo/testsuite/text/smstruct.texi
+-3089520793b ./texinfo/texinfo.tex
+-1799609944b ./texinfo/texinfo.texi
+-2013250676b ./texinfo/THANKS
+-2313364795b ./texinfo/TODO
+- 568966261b ./texinfo/util/deref.c
+-3384224904b ./texinfo/util/fixfonts
+-3110536827b ./texinfo/util/gen-dir-node
+-3397578435b ./texinfo/util/install-info.c
+-1734451117b ./texinfo/util/Makefile.am
+-4256544479b ./texinfo/util/Makefile.in
+-2282426066b ./texinfo/util/mkinstalldirs
+- 201553857b ./texinfo/util/README
+-2525518952b ./texinfo/util/tex3patch
+- 320949218b ./texinfo/util/texi2dvi
+-2063597529b ./texinfo/util/texindex.c
+-3973838018b ./texinfo/util/update-info
+-1370970362b ./ylwrap
+diff -ruNb gcc-2.95.3/build2.log gcc-2.95.4/build2.log
+--- gcc-2.95.3/build2.log 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/build2.log 2017-11-07 22:10:13.000000000 +0100
+@@ -0,0 +1 @@
++make: *** No rule to make target `all'. Stop.
+diff -ruNb gcc-2.95.3/configure gcc-2.95.4/configure
+--- gcc-2.95.3/configure 1999-04-02 16:17:40.000000000 +0200
++++ gcc-2.95.4/configure 2017-11-07 22:10:12.000000000 +0100
+@@ -86,7 +86,7 @@
+ target_alias=NOTARGET
+ target_makefile_frag=
+ undefs=NOUNDEFS
+-version="$Revision: 1.22 $"
++version="$Revision: 1.23 $"
+ x11=default
+ bindir='${exec_prefix}/bin'
+ sbindir='${exec_prefix}/sbin'
+diff -ruNb gcc-2.95.3/FAQ gcc-2.95.4/FAQ
+--- gcc-2.95.3/FAQ 2001-03-16 15:15:42.000000000 +0100
++++ gcc-2.95.4/FAQ 1970-01-01 01:00:00.000000000 +0100
+@@ -1,1130 +0,0 @@
+-
+- GCC Frequently Asked Questions
+-
+- The latest version of this document is always available at
+- [1]http://www.gnu.org/software/gcc/faq.html.
+-
+- This FAQ tries to answer specific questions concerning GCC. For
+- general information regarding C, C++, resp. Fortran please check the
+- [2]comp.lang.c FAQ, [3]comp.lang.c++ FAQ, [4]comp.std.c++ FAQ, and the
+- [5]Fortran Information page.
+- _________________________________________________________________
+-
+- Questions
+-
+- 1. [6]General information
+- 1. [7]What is the relationship between GCC and EGCS
+- 2. [8]What is the relationship between GCC and Cygnus
+- 3. [9]What is an open development model?
+- 4. [10]How to report bugs
+- 5. [11]How do I get a bug fixed or a feature added?
+- 2. [12]Installation
+- 1. [13]Problems building the Fortran compiler
+- 2. [14]How to install multiple versions of GCC
+- 3. [15]Dynamic linker is unable to find GCC libraries
+- 4. [16]libstdc++/libio tests fail badly with --enable-shared
+- 5. [17]GCC can not find GNU as/GNU ld
+- 6. [18]cpp: Usage:... Error
+- 3. [19]Testsuite problems
+- 1. [20]Why is there no testsuite in GCC 2.95
+- 2. [21]Unable to run the testsuite
+- 3. [22]How do I pass flags like -fnew-abi to the testsuite?
+- 4. [23]How can I run the test suite with multiple options?
+- 4. [24]Platform-specific issues
+- 1. [25]Problems with exception handling on x86 platforms
+- 2. [26]Problems with Invalid `asm' statements
+- 3. [27]Building Linux kernels
+- 4. [28]How do I compile X11 headers with g++
+- 5. [29]How to build a cross compiler
+- 5. [30]Bugs and Non-Bugs
+- 1. [31]FD_ZERO macro
+- 2. [32]Octave 2.0.13 does not compile
+- 3. [33]Why can't I initialize a static variable with stdin?
+- 4. [34]Why can't I use #if here?
+- 6. [35]Miscellaneous
+- 1. [36]Virtual memory exhausted
+- 2. [37]Snapshots, how, when, why
+- 3. [38]Friend Templates
+- 4. [39]Where to find libg++
+- 5. [40]Why do I need autoconf, bison, xgettext, automake, etc
+- 6. [41]Problems debugging GCC code
+- 7. [42]Conflicts when using cvs update
+- 8. [43]Using GCC with GNAT/Ada
+- 9. [44]Using GCC with GNU Pascal
+- 10. [45]Using CVS to download snapshots
+- 11. [46]Why can't I build a shared library?
+- 12. [47]Dealing with spam on the lists
+- 13. [48]How to work around too long C++ symbol names?
+- (-fsquangle)
+- 14. [49]When building from CVS sources, I see 'gperf: invalid
+- option -- F', even with the most current version of gperf.
+- 15. [50]When building C++, the linker says my constructors,
+- destructors or virtual tables are undefined, but I defined
+- them
+- 16. [51]What is libstdc++-v3 and how can I use it with g++?
+- _________________________________________________________________
+-
+- General information
+-
+-What is the relationship between GCC and EGCS
+-
+- In 1990/1991 gcc version 1 had reached a point of stability. For the
+- targets it could support, it worked well. It had limitations inherent
+- in its design that would be difficult to resolve, so a major effort
+- was made to resolve those limitiations and gcc version 2 was the
+- result.
+-
+- When we had gcc2 in a useful state, development efforts on gcc1
+- stopped and we all concentrated on making gcc2 better than gcc1 could
+- ever be. This is the kind of step forward we wanted to make with the
+- EGCS project when it was formed in 1997.
+-
+- In April 1999 the Free Software Foundation officially halted
+- development on the gcc2 compiler and appointed the EGCS project as the
+- official GCC maintainers.
+-
+- We are in the process of merging GCC and EGCS, which will take some
+- time. The net result will be a single project which will carry forward
+- GCC development under the ultimate control of the [52]GCC Steering
+- Committee.
+- _________________________________________________________________
+-
+-What is the relationship between GCC and Cygnus
+-
+- It is a common mis-conception that Cygnus controls either directly or
+- indirectly GCC.
+-
+- While Cygnus does donate hardware, network connections, code and
+- developer time to GCC development, Cygnus does not control GCC.
+-
+- Overall control of GCC is in the hands of the [53]GCC Steering
+- Committee which includes people from a variety of different
+- organizations and backgrounds. The purpose of the steering committee
+- is to make decisions in the best interest of GCC and to help ensure
+- that no individual or company has control over the project.
+-
+- To summarize, Cygnus contributes to GCCproject, but does not exert a
+- controlling influence over GCC.
+- _________________________________________________________________
+-
+-What is an open development model?
+-
+- With GCC, we are going to try a bazaar style[54][1] approach to its
+- development: We make snapshots publicly available to anyone who wants
+- to try them; we're going to welcome anyone to join the development
+- mailing list. All of the discussions on the development mailing list
+- are available via the web. We're going to be making releases with a
+- much higher frequency than they have been made in the past.
+-
+- In addition to weekly snapshots of the GCC development sources, we
+- have the sources readable from a CVS server by anyone. Furthermore we
+- are using remote CVS to allow remote maintainers write access to the
+- sources.
+-
+- There have been many potential gcc developers who were not able to
+- participate in gcc development in the past. We want these people to
+- help in any way they can; we ultimately want GCC to be the best
+- compiler in the world.
+-
+- A compiler is a complicated piece of software, there will still be
+- strong central maintainers who will reject patches, who will demand
+- documentation of implementations, and who will keep the level of
+- quality as high as it is today. Code that could use wider testing may
+- be integrated--code that is simply ill-conceived won't be.
+-
+- GCC is not the first piece of software to use this open development
+- process; FreeBSD, the Emacs lisp repository, and the Linux kernel are
+- a few examples of the bazaar style of development.
+-
+- With GCC, we will be adding new features and optimizations at a rate
+- that has not been done since the creation of gcc2; these additions
+- will inevitably have a temporarily destabilizing effect. With the help
+- of developers working together with this bazaar style development, the
+- resulting stability and quality levels will be better than we've had
+- before.
+-
+- _[1]_ We've been discussing different development models a lot over
+- the past few months. The paper which started all of this introduced
+- two terms: A _cathedral_ development model versus a _bazaar_
+- development model. The paper is written by Eric S. Raymond, it is
+- called ``[55]The Cathedral and the Bazaar''. The paper is a useful
+- starting point for discussions.
+- _________________________________________________________________
+-
+-How to report bugs
+-
+- There are complete instructions in the [56]gcc info manual, section
+- Bugs. The manual can also be read using `_M-x info_' in Emacs, or if
+- the GNU info program is installed on your system by `info --node
+- "(gcc)Bugs"'. Or see the file [57]BUGS included with the GCC source
+- code.
+-
+- Before you report a bug for the _C++ compiler_, please check the
+- [58]list of well-known bugs. If you want to report a bug with _egcs
+- 1.0.x_ or _egcs 1.1.x_, we strongly recommend upgrading to the current
+- release first.
+-
+- In short, if GCC says Internal compiler error (or any other error that
+- you'd like us to be able to reproduce, for that matter), please mail a
+- bug report to [59]gcc-bugs@gcc.gnu.org or [60]bug-gcc@gnu.org
+- including:
+- * The GCC version
+- * The system type
+- * All options you passed to the compiler
+- * Preprocessed output of the source file that caused the compiler
+- error
+-
+- All this can normally be accomplished by mailing the command line, the
+- output of the command, and the resulting `_your-file_.i' for C, or
+- `_your-file_.ii' for C++, corresponding to:
+-
+- gcc -v --save-temps _all-your-options_ _your-file_.c
+-
+- Typically the CPP output (extension .i for C or .ii for C++) will be
+- large, so please compress the resulting file with one of the popular
+- compression programs such as bzip2, gzip, zip, pkzip or compress (in
+- decreasing order of preference). Use maximum compression (-9) if
+- available. Please include the compressed CPP output in your bug
+- report.
+-
+- Since we're supposed to be able to re-create the assembly output
+- (extension .s), you usually don't have to include it in the bug
+- report, although you may want to post parts of it to point out
+- assembly code you consider to be wrong.
+-
+- Whether to use MIME attachments or uuencode is up to you. In any case,
+- make sure the compiler command line, version and error output are in
+- plain text, so that we don't have to decode the bug report in order to
+- tell who should take care of it. A meaningful subject indicating
+- language and platform also helps.
+-
+- The gcc lists have message size limits (100 kbytes) and bug reports
+- over those limits will currently be bounced. We're trying to find a
+- way to allow larger bug reports to be posted, but this is currently
+- impossible (unless you use MIME partials, which most people are unable
+- to handle anyway, so you'd better avoid them for now). So, although we
+- prefer to have complete bug reports archived, if you cannot reduce the
+- bug report below the limit, please make it available for ftp or http
+- and post the URL. Another alternative is to break the preprocessed
+- output in multiple files (using split, for example) and post them in
+- separate messages, but we prefer to have self-contained bug reports in
+- single messages.
+-
+- If you fail to supply enough information for a bug report to be
+- reproduced, someone will probably ask you to post additional
+- information (or just ignore your bug report, if they're in a bad day,
+- so try to get it right on the first posting :-). In this case, please
+- post the additional information to the bug reporting mailing list, not
+- just to the person who requested it, unless explicitly told so. If
+- possible, please include in this follow-up all the information you had
+- supplied in the incomplete bug report (including the preprocessor
+- output), so that the new bug report is self-contained.
+- _________________________________________________________________
+-
+-How do I get a bug fixed or a feature added?
+-
+- There are lots of ways to get something fixed. The list below may be
+- incomplete, but it covers many of the common cases. These are listed
+- roughly in order of increasing difficulty for the average GCC user,
+- meaning someone who is not skilled in the internals of GCC, and where
+- difficulty is measured in terms of the time required to fix the bug.
+- No alternative is better than any other; each has it's benefits and
+- disadvantages.
+- * Hire someone to fix it for you. There are various companies and
+- individuals providing support for GCC. This alternative costs
+- money, but is relatively likely to get results.
+- * Report the problem to gcc-bugs and hope that someone will be kind
+- enough to fix it for you. While this is certainly possible, and
+- often happens, there is no guarantee that it will. You should not
+- expect the same response from gcc-bugs that you would see from a
+- commercial support organization since the people who read
+- gcc-bugs, if they choose to help you, will be volunteering their
+- time. This alternative will work best if you follow the directions
+- on [61]submitting bugreports.
+- * Fix it yourself. This alternative will probably bring results, if
+- you work hard enough, but will probably take a lot of time, and,
+- depending on the quality of your work and the perceived benefits
+- of your changes, your code may or may not ever make it into an
+- official release of GCC.
+- _________________________________________________________________
+-
+- Installation
+-
+-Problems building the Fortran compiler
+-
+- The Fortran front end can not be built with most vendor compilers; it
+- must be built with gcc. As a result, you may get an error if you do
+- not follow the install instructions carefully.
+-
+- In particular, instead of using "make" to build GCC, you should use
+- "make bootstrap" if you are building a native compiler or "make cross"
+- if you are building a cross compiler.
+-
+- It has also been reported that the Fortran compiler can not be built
+- on Red Hat 4.X GNU/Linux for the Alpha. Fixing this may require
+- upgrading binutils or to Red Hat 5.0; we'll provide more information
+- as it becomes available.
+- _________________________________________________________________
+-
+-How to install multiple versions of gcc
+-
+- It may be desirable to install multiple versions of the compiler on
+- the same system. This can be done by using different prefix paths at
+- configure time and a few symlinks.
+-
+- Basically, configure the two compilers with different --prefix
+- options, then build and install each compiler. Assume you want "gcc"
+- to be the latest compiler and available in /usr/local/bin; also assume
+- that you want "gcc2" to be the older gcc2 compiler and also available
+- in /usr/local/bin.
+-
+- The easiest way to do this is to configure the new GCC with
+- --prefix=/usr/local/gcc and the older gcc2 with
+- --prefix=/usr/local/gcc2. Build and install both compilers. Then make
+- a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from
+- /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links
+- for the "g++", "c++" and "g77" compiler drivers.
+-
+- An alternative to using symlinks is to configure with a
+- --program-transform-name option. This option specifies a sed command
+- to process installed program names with. Using it you can, for
+- instance, have all the new GCC programs installed as "new-gcc" and the
+- like. You will still have to specify different --prefix options for
+- new GCC and old GCC, because it is only the executable program names
+- that are transformed. The difference is that you (as administrator) do
+- not have to set up symlinks, but must specify additional directories
+- in your (as a user) PATH. A complication with --program-transform-name
+- is that the sed command invariably contains characters significant to
+- the shell, and these have to be escaped correctly, also it is not
+- possible to use "^" or "$" in the command. Here is the option to
+- prefix "new-" to the new GCC installed programs
+- "--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'". With the above
+- --prefix option, that will install the new GCC programs into
+- /usr/local/gcc/bin with names prefixed by "new-". You can use
+- --program-transform-name if you have multiple versions of GCC, and
+- wish to be sure about which version you are invoking.
+-
+- If you use --prefix, GCC may have difficulty locating a GNU assembler
+- or linker on your system, [62]GCC can not find GNU as/GNU ld explains
+- how to deal with this.
+- _________________________________________________________________
+-
+-Dynamic linker is unable to find GCC libraries
+-
+- This problem manifests itself by programs not finding shared libraries
+- they depend on when the programs are started. Note this problem often
+- manifests itself with failures in the libio/libstdc++ tests after
+- configuring with --enable-shared and building GCC.
+-
+- GCC does not specify a runpath so that the dynamic linker can find
+- dynamic libraries at runtime.
+-
+- The short explanation is that if you always pass a -R option to the
+- linker, then your programs become dependent on directories which may
+- be NFS mounted, and programs may hang unnecessarily when an NFS server
+- goes down.
+-
+- The problem is not programs that do require the directories; those
+- programs are going to hang no matter what you do. The problem is
+- programs that do not require the directories.
+-
+- SunOS effectively always passed a -R option for every -L option; this
+- was a bad idea, and so it was removed for Solaris. We should not
+- recreate it.
+-
+- However, if you feel you really need such an option to be passed
+- automatically to the linker, you may add it to the gcc specs file.
+- This file can be found in the same directory that contains cc1 (run
+- gcc -print-prog-name=cc1 to find it). You may add linker flags such as
+- -R or -rpath, depending on platform and linker, to the *link or *lib
+- specs.
+-
+- Another alterative is to install a wrapper script around gcc, g++ or
+- ld that adds the appropriate directory to the environment variable
+- LD_RUN_PATH or equivalent (again, it's platform-dependent).
+-
+- Yet another option, that works on a few platforms, is to hard-code the
+- full pathname of the library into its soname. This can only be
+- accomplished by modifying the appropriate .ml file within
+- libstdc++/config (and also libg++/config, if you are building libg++),
+- so that $(libdir)/ appears just before the library name in -soname or
+- -h options.
+- _________________________________________________________________
+-
+-GCC can not find GNU as/GNU ld
+-
+- GCC searches the PATH for an assembler and a loader, but it only does
+- so after searching a directory list hard-coded in the gcc executables.
+- Since, on most platforms, the hard-coded list includes directories in
+- which the system asembler and loader can be found, you may have to
+- take one of the following actions to arrange that gcc uses the GNU
+- versions of those programs.
+-
+- To ensure that GCC finds the GNU assembler (the GNU loader), which are
+- required by [63]some configurations, you should configure these with
+- the same --prefix option as you used for GCC. Then build & install GNU
+- as (GNU ld) and proceed with building GCC.
+-
+- Another alternative is to create links to GNU as and ld in any of the
+- directories printed by the command `gcc -print-search-dirs | grep
+- '^programs:''. The link to `ld' should be named `real-ld' if `ld'
+- already exists. If such links do not exist while you're compiling GCC,
+- you may have to create them in the build directories too, within the
+- gcc directory _and_ in all the gcc/stage* subdirectories.
+-
+- GCC 2.95 allows you to specify the full pathname of the assembler and
+- the linker to use. The configure flags are `--with-as=/path/to/as' and
+- `--with-ld=/path/to/ld'. GCC will try to use these pathnames before
+- looking for `as' or `(real-)ld' in the standard search dirs. If, at
+- configure-time, the specified programs are found to be GNU utilities,
+- `--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will
+- be auto-detected. One drawback of this option is that it won't allow
+- you to override the search path for assembler and linker with
+- command-line options -B/path/ if the specified filenames exist.
+- _________________________________________________________________
+-
+-cpp: Usage:... Error
+-
+- If you get an error like this when building GCC (particularly when
+- building __mulsi3), then you likely have a problem with your
+- environment variables.
+- cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp
+- [switches] input output
+-
+- First look for an explicit '.' in either LIBRARY_PATH or
+- GCC_EXEC_PREFIX from your environment. If you do not find an explicit
+- '.', look for an empty pathname in those variables. Note that ':' at
+- either the start or end of these variables is an implicit '.' and will
+- cause problems.
+-
+- Also note '::' in these paths will also cause similar problems.
+- _________________________________________________________________
+-
+- Testsuite problems
+-
+-Why is there no testsuite in GCC 2.95
+-
+- The GCC testsuite is not included in the GCC 2.95 release due to the
+- uncertain copyright status of some tests.
+-
+- The GCC team will be reviewing the entire testsuite to find and remove
+- any tests with uncertain copyright status. Once those tests are
+- removed from the testsuite, the testsuite as a whole will be
+- copyrighted under the terms of the GPL and included in future GCC
+- releases.
+-
+- It is believed that only a few tests have uncertain copyright status
+- and thus only a few tests will need to be removed from the testsuite.
+- _________________________________________________________________
+-
+-Unable to run the testsuite
+-
+- If you get a message about unable to find "standard.exp" when trying
+- to run the GCC testsuites, then your dejagnu is too old to run the GCC
+- tests. You will need to get a newer version of dejagnu; we've made a
+- [64]dejagnu snapshot available until a new version of dejagnu can be
+- released.
+- _________________________________________________________________
+-
+-How do I pass flags like -fnew-abi to the testsuite?
+-
+- If you invoke runtest directly, you can use the --tool_opts option,
+- e.g:
+- runtest --tool_opts "-fnew-abi -fno-honor-std" <other options>
+-
+- Or, if you use make check you can use the make variable RUNTESTFLAGS,
+- e.g:
+- make RUNTESTFLAGS='--tool_opts "-fnew-abi -fno-honor-std"' check-g++
+- _________________________________________________________________
+-
+-How can I run the test suite with multiple options?
+-
+- If you invoke runtest directly, you can use the --target_board option,
+- e.g:
+- runtest --target_board "unix{-fPIC,-fpic,}" <other options>
+-
+- Or, if you use make check you can use the make variable RUNTESTFLAGS,
+- e.g:
+- make RUNTESTFLAGS='--target_board "unix{-fPIC,-fpic,}"' check-gcc
+-
+- Either of these examples will run the tests three times. Once with
+- -fPIC, once with -fpic, and once with no additional flags.
+-
+- This technique is particularly useful on multilibbed targets.
+- _________________________________________________________________
+-
+- Platform-specific issues
+-
+- Please read the [65]host/target specific installation notes, too.
+-
+-Problems with exception handling on x86 platforms
+-
+- If you are using the GNU assembler (aka gas) on an x86 platform and
+- exception handling is not working correctly, then odds are you're
+- using a buggy assembler. Releases of binutils prior to 2.9 are known
+- to assemble exception handling code incorrectly.
+-
+- We recommend binutils-2.9.1 or newer. Some post-2.9.1 snapshots of
+- binutils fix some subtle bugs, particularly on x86 and alpha. They are
+- available at [66]ftp://tsx-11.mit.edu/pub/linux/packages/GCC/. The
+- 2.9.1.0.15 snapshot is known to work fine on those platforms; other
+- than that, be aware that snapshots are in general untested and may not
+- work (or even build). Use them at your own risk.
+- _________________________________________________________________
+-
+-Problems with invalid `asm' statements
+-
+- Previous releases of GCC (for example, GCC 2.7.2 or EGCS 1.1.2) did
+- not detect as invalid a clobber specifier that clobbered an operand.
+- Instead, it could spuriously and silently generate incorrect code for
+- certain non-obvious cases of source code. Even more unfortunately, the
+- manual (Using and Porting GCC, section Extended Asm, see the [67]bug
+- report entry) did not explicitly say that it was invalid to specify
+- clobber registers that were destined to overlap operands; it could
+- arguably be interpreted that it was correct to clobber an input
+- operand to mark it as not holding a usable value after the asm.
+-
+- For the general case, there is no way to tell whether a specified
+- clobber is _intended_ to overlap with a specific (input) operand or is
+- a program error, where the choice of actual register for operands
+- failed to _avoid_ the clobbered register. Such unavoidable overlap is
+- detected by versions GCC 2.95 and newer, and flagged as an error
+- rather than accepted. An error message is given, such as:
+- foo.c: In function `foo':
+- foo.c:7: Invalid `asm' statement:
+- foo.c:7: fixed or forbidden register 0 (ax) was spilled for class AREG.
+-
+- Unfortunately, a lot of existing software, for example the [68]Linux
+- kernel version 2.0.35 for the Intel x86, has constructs where input
+- operands are marked as clobbered.
+-
+- The manual now describes how to write constructs with operands that
+- are modified by the construct, but not actually used. To write an asm
+- which modifies an input operand but does not output anything usable,
+- specify that operand as an _output operand_ outputting to an _unused
+- dummy variable_.
+-
+- In the following example for the x86 architecture (taken from the
+- Linux 2.0.35 kernel -- include/asm-i386/delay.h), the register-class
+- constraint "a" denotes a register class containing the single register
+- "ax" (aka. "eax"). It is therefore invalid to clobber "ax"; this
+- operand has to be specified as an output as well as an input. The
+- following code is therefore _invalid_:
+-extern __inline__ void
+-__delay (int loops)
+-{
+- __asm__ __volatile__
+- (".align 2,0x90\n1:\tdecl %0\n\tjns 1b"
+- : /* no outputs */
+- : "a" (loops)
+- : "ax");
+-}
+-
+- It could be argued that since the register class for "a" contains only
+- a single register, this could be detected as an "obvious" intended
+- clobber of the input operand. While that is feasible, it opens up for
+- further "obvious" cases, where the level of obviousness changes from
+- person to person. As there is a correct way to write such asm
+- constructs, this obviousness-detection is not needed other than for
+- reasons of compatibility with an existing code-base, and that code
+- base can be corrected.
+-
+- This corrected and clobber-less version, is _valid_ for GCC 2.95 as
+- well as for previous versions of GCC and EGCS:
+-extern __inline__ void
+-__delay (int loops)
+-{
+- int dummy;
+-
+- __asm__ __volatile__
+- (".align 2,0x90\n1:\tdecl %0\n\tjns 1b"
+- : "=a" (dummy)
+- : "0" (loops));
+-}
+-
+- Note that the asm construct now has an output operand, but it is
+- unused. Normally asm constructs with only unused output operands may
+- be removed by gcc, unless marked volatile as above.
+- _________________________________________________________________
+-
+-Building Linux kernels
+-
+- The linux kernel violates certain aliasing rules specified in the
+- ANSI/ISO standard. Starting with GCC 2.95, the gcc optimizer by
+- default relies on these rules to produce more efficient code and thus
+- will produce malfunctioning kernels. To work around this problem, the
+- flag -fno-strict-aliasing must be added to the CFLAGS variable in the
+- main kernel Makefile.
+-
+- If you try to build a 2.0.x kernel for Intel machines with any
+- compiler other than GCC 2.7.2, then you are on your own. The 2.0.x
+- kernels are to be built only with gcc 2.7.2. They use certain asm
+- constructs which are incorrect, but (by accident) happen to work with
+- gcc 2.7.2. If you insist on building 2.0.x kernels with egcs, you may
+- be interested in this [69]patch which fixes some of the asm problems.
+- You will also want to change asm constructs to [70]avoid clobbering
+- their input operands.
+-
+- If you installed a recent binutils/gas snapshot on your GNU/Linux
+- system, you may not be able to build the kernel because objdump does
+- not understand the "-k" switch. The solution for this problem is to
+- remove /usr/bin/encaps. (This is an obsolete program that was part of
+- older binutils distributions; the Linux kernel's Makefile looks for
+- this program to decide if you have an old or a new binutils. Problems
+- occur if you installed a new binutils but haven't removed encaps,
+- because the Makefile thinks you have the old one.)
+-
+- Finally, you may get errors with the X driver of the form
+- _X11TransSocketUNIXConnect: Can't connect: errno = 111
+-
+- This is a kernel bug. The function sys_iopl in
+- arch/i386/kernel/ioport.c does an illegal hack which used to work but
+- is now broken since GCC optimizes more aggressively . The newer 2.1.x
+- kernels already have a fix which should also work in 2.0.32.
+- _________________________________________________________________
+-
+-How do I compile X11 headers with g++
+-
+- When compiling X11 headers with a GCC 2.95 or newer, g++ will complain
+- that types are missing. These headers assume that omitting the type
+- means 'int'; this assumption is wrong for C++.
+-
+- g++ accepts such (illegal) constructs with the option -fpermissive; it
+- will assume that missing type is 'int' (as defined by the C89
+- standard).
+-
+- Since the upcoming C99 standard also obsoletes the implicit type
+- assumptions, the X11 headers have to get fixed eventually.
+- _________________________________________________________________
+-
+-How to build a cross compiler
+-
+- Building cross compilers is a rather complex undertaking because they
+- usually need additional software (cross assembler, cross linker,
+- target libraries, target include files, etc).
+-
+- We recommend reading the [71]crossgcc FAQ for information about
+- building cross compilers.
+-
+- If you have all the pieces available, then `make cross' should build a
+- cross compiler. `make LANGUAGES="c c++" install' will install the
+- cross compiler.
+-
+- Note that if you're trying to build a cross compiler in a tree which
+- includes binutils-2.8 in addition to GCC, then you're going to need to
+- make a couple minor tweaks so that the cross assembler, linker and nm
+- utilities will be found.
+-
+- binutils-2.8 builds those files as gas.new, ld.new and nm.new; GCC
+- looks for them using gas-new, ld-new and nm-new, so you may have to
+- arrange for any symlinks which point to <file>.new to be changed to
+- <file>-new.
+- _________________________________________________________________
+-
+- Bugs and Non-Bugs
+-
+- Unfortunately, improvements in tools that are widely used are sooner
+- or later bound to break _something_. Sometimes, the code that breaks
+- was wrong, and then that code should be fixed, even if it works for
+- earlier versions of gcc or other compilers. The following problems
+- with some releases of widely used packages have been identified:
+-
+- There is a separate [72]list of well-known bugs describing known
+- deficiencies. Naturally we'd like that list to be of zero length.
+-
+- To report a bug, see [73]How to report bugs.
+- _________________________________________________________________
+-
+-FD_ZERO macro
+-
+- The FD_ZERO macro in (e.g.) libc-5.4.46 is incorrect. It uses
+- [74]invalid asm clobbers. The following rewrite by Ulrich Drepper
+- <drepper@cygnus.com> should fix this for glibc 2.0:
+- # define __FD_ZERO(fdsetp) \
+- do { \
+- int __d0, __d1; \
+- __asm__ __volatile__ ("cld; rep; stosl" \
+- : "=m" (((__fd_mask *) \
+- (fdsetp))[__FDELT (__FD_SETSIZE)]), \
+- "=&c" (__d0), "=&D" (__d1) \
+- : "a" (0), "1" (sizeof (__fd_set) \
+- / sizeof (__fd_mask)), \
+- "2" ((__fd_mask *) (fdsetp)) \
+- : "memory"); \
+- } while (0)
+- _________________________________________________________________
+-
+-Octave 2.0.13 does not compile
+-
+- Apparently Octave 2.0.13 uses some C++ features which have been
+- obsoleted and thus fails to build with EGCS 1.1 and later. This
+- [75]patch to Octave should fix this.
+-
+- Octave 2.0.13.96, a test release, has been compiled without patches by
+- egcs 1.1.2. It is available at
+- [76]ftp://ftp.che.wisc.edu/pub/octave/test-releases/.
+- _________________________________________________________________
+-
+-Why can't I initialize a static variable with stdin?
+-
+- This has nothing to do with gcc, but people ask us about it a lot.
+- Code like this:
+- #include <stdio.h>
+-
+- FILE *yyin = stdin;
+-
+- will not compile with GNU libc (Linux libc6), because stdin is not a
+- constant. This was done deliberately, in order for there to be no
+- limit on the number of open FILE objects. It is surprising for people
+- used to traditional Unix C libraries, but it is permitted by the C
+- standard.
+-
+- This construct commonly occurs in code generated by old versions of
+- lex or yacc. We suggest you try regenerating the parser with a current
+- version of flex or bison, respectively. In your own code, the
+- appropriate fix is to move the initialization to the beginning of
+- main.
+-
+- There is a common misconception that the GCC developers are
+- responsible for GNU libc. These are in fact two entirely separate
+- projects. The appropriate place to ask questions relating to GNU libc
+- is [77]libc-alpha@sourceware.cygnus.com.
+- _________________________________________________________________
+-
+-Why can't I use #if here?
+-
+- Let me guess... you wrote code that looks something like this:
+- memcpy(dest, src,
+-#ifdef PLATFORM1
+- 12
+-#else
+- 24
+-#endif
+- );
+-
+- and you got a whole pile of error messages:
+-test.c:11: warning: preprocessing directive not recognized within macro arg
+-test.c:11: warning: preprocessing directive not recognized within macro arg
+-test.c:11: warning: preprocessing directive not recognized within macro arg
+-test.c: In function `foo':
+-test.c:6: undefined or invalid # directive
+-test.c:8: undefined or invalid # directive
+-test.c:9: parse error before `24'
+-test.c:10: undefined or invalid # directive
+-test.c:11: parse error before `#'
+-
+- The problem, simply put, is that GCC's preprocessor does not allow you
+- to put #ifdef (or any other directive) inside the arguments of a
+- macro. Your C library's string.h happens to define memcpy as a macro -
+- this is perfectly legitimate. The code therefore will not compile.
+-
+- We have two good reasons for not allowing directives inside macro
+- arguments. First, it is not portable. It is "undefined behavior"
+- according to the C standard; that means different compilers will do
+- different things with it. Some will give you errors. Some will dump
+- core. Some will silently mangle your code - you could get the
+- equivalent of
+- memcpy(dest, src, 1224);
+-
+- from the above example. A very few might do what you expected it to.
+- We therefore feel it is most useful for GCC to reject this construct
+- immediately so that it is found and fixed.
+-
+- Second, it is extraordinarily difficult to implement the preprocessor
+- such that it does what you would expect for every possible directive
+- found inside a macro argument. The best example is perhaps
+-#define foo(arg) ... arg ...
+-foo(blah
+-#undef foo
+-blah)
+-
+- which is impossible to implement in portable C without leaking memory.
+- Allowing only a subset of directives would be confusing.
+-
+- It is always possible to rewrite code which uses conditionals inside
+- macros so that it doesn't. You could write the above example
+-#ifdef PLATFORM1
+- memcpy(dest, src, 12);
+-#else
+- memcpy(dest, src, 24);
+-#endif
+-
+- This is a bit more typing, but I personally think it's better style in
+- addition to being more portable.
+- _________________________________________________________________
+-
+- Miscellaneous
+-
+-Virtual memory exhausted error
+-
+- This error means your system ran out of memory; this can happen for
+- large files, particularly when optimizing. If you're getting this
+- error you should consider trying to simplify your files or reducing
+- the optimization level.
+-
+- Note that using -pedantic or -Wreturn-type can cause an explosion in
+- the amount of memory needed for template-heavy C++ code, such as code
+- that uses STL. Also note that -Wall includes -Wreturn-type, so if you
+- use -Wall you will need to specify -Wno-return-type to turn it off.
+- _________________________________________________________________
+-
+-Snapshots, how, when, why
+-
+- We make snapshots of the GCC sources about once a week; there is no
+- predetermined schedule. These snapshots are intended to give everyone
+- access to work in progress. Any given snapshot may generate incorrect
+- code or even fail to build.
+-
+- If you plan on downloading and using snapshots, we highly recommend
+- you subscribe to the GCC mailing lists. See [78]mailing lists on the
+- main GCC page for instructions on how to subscribe.
+-
+- When using the diff files to update from older snapshots to newer
+- snapshots, make sure to use "-E" and "-p" arguments to patch so that
+- empty files are deleted and full pathnames are provided to patch. If
+- your version of patch does not support "-E", you'll need to get a
+- newer version. Also note that you may need autoconf, autoheader and
+- various other programs if you use diff files to update from one
+- snapshot to the next.
+- _________________________________________________________________
+-
+-Friend Templates
+-
+- In order to make a specialization of a template function a friend of a
+- (possibly template) class, you must explicitly state that the friend
+- function is a template, by appending angle brackets to its name, and
+- this template function must have been declared already. Here's an
+- example:
+-template <typename T> class foo {
+- friend void bar(foo<T>);
+-}
+-
+- The above declaration declares a non-template function named bar, so
+- it must be explicitly defined for _each_ specialization of foo. A
+- template definition of bar won't do, because it is unrelated with the
+- non-template declaration above. So you'd have to end up writing:
+-void bar(foo<int>) { /* ... */ }
+-void bar(foo<void>) { /* ... */ }
+-
+- If you meant bar to be a template function, you should have
+- forward-declared it as follows. Note that, since the template function
+- declaration refers to the template class, the template class must be
+- forward-declared too:
+-template <typename T>
+-class foo;
+-
+-template <typename T>
+-void bar(foo<T>);
+-
+-template <typename T>
+-class foo {
+- friend void bar<>(foo<T>);
+-};
+-
+-template <typename T>
+-void bar(foo<T>) { /* ... */ }
+-
+- In this case, the template argument list could be left empty, because
+- it can be implicitly deduced from the function arguments, but the
+- angle brackets must be present, otherwise the declaration will be
+- taken as a non-template function. Furthermore, in some cases, you may
+- have to explicitly specify the template arguments, to remove
+- ambiguity.
+-
+- An error in the last public comment draft of the ANSI/ISO C++ Standard
+- and the fact that previous releases of gcc would accept such friend
+- declarations as template declarations has led people to believe that
+- the forward declaration was not necessary, but, according to the final
+- version of the Standard, it is.
+- _________________________________________________________________
+-
+-Where to find libg++
+-
+- Many folks have been asking where to find libg++ for GCC. First we
+- should point out that few programs actually need libg++; most only
+- need libstdc++/libio which are included in the GCC distribution.
+-
+- If you do need libg++ you can get a libg++ release that works with GCC
+- from [79]ftp://egcs.cygnus.com/pub/egcs/infrastructure/. Note that the
+- 2.8.2 snapshot pre-dates the 2.8.1.2 release.
+- _________________________________________________________________
+-
+-autoconf, bison, xgettext, automake, etc
+-
+- If you're using diffs up dated from one snapshot to the next, or if
+- you're using the CVS repository, you may need several additional
+- programs to build GCC.
+-
+- These include, but are not necessarily limited to autoconf, automake,
+- bison, and xgettext.
+-
+- This is necessary because neither diff nor cvs keep timestamps
+- correct. This causes problems for generated files as "make" may think
+- those generated files are out of date and try to regenerate them.
+-
+- An easy way to work around this problem is to use the gcc_update
+- script in the contrib subdirectory of GCC, which handles this
+- transparently without requiring installation of any additional tools.
+- (Note: Up to and including GCC 2.95 this script was called egcs_update
+- .)
+-
+- When building from diffs or CVS or if you modified some sources, you
+- may also need to obtain development versions of some GNU tools, as the
+- production versions do not necessarily handle all features needed to
+- rebuild GCC.
+-
+- Autoconf is available from [80]http://sourceware.cygnus.com/autoconf/;
+- have a look at [81]ftp://egcs.cygnus.com/pub/egcs/infrastructure/ for
+- the other packages.
+- _________________________________________________________________
+-
+-Conflicts when using cvs update
+-
+- It is not uncommon to get CVS conflict messages for some generated
+- files when updating your local sources from the CVS repository.
+- Typically such conflicts occur with bison or autoconf generated files.
+-
+- As long as you haven't been making modifications to the generated
+- files or the generator files, it is safe to delete the offending file,
+- then run cvs update again to get a new copy.
+- _________________________________________________________________
+-
+-Problems debugging GCC code
+-
+- On some systems GCC will produce dwarf debug records by default;
+- however the gdb-4.16 release may not be able to read such debug
+- records.
+-
+- You can either use the argument "-gstabs" instead of "-g" or pick up a
+- copy of gdb-4.17 to work around the problem.
+- _________________________________________________________________
+-
+-Using GCC with GNAT/Ada
+-
+- The GNU Ada front-end is not currently supported by GCC; however, it
+- is possible to build the GNAT compiler with a little work.
+-
+- First, retrieve the gnat-3.10p sources. The sources for the Ada front
+- end and runtime all live in the "ada" subdirectory. Move that
+- subdirectory to egcs/gcc/ada.
+-
+- Second, apply the patch found in egcs/gcc/README.gnat.
+-
+- Finally, rebuild per the GNAT build instructions.
+- _________________________________________________________________
+-
+-Using GCC with GNU Pascal
+-
+- The [82]GNU Pascal front-end does work with EGCS 1.1 It does not work
+- with EGCS 1.0.x and the main branch of the CVS repository. A tarball
+- can be found at
+- [83]ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/beta/.
+- _________________________________________________________________
+-
+-Using CVS to download snapshots
+-
+- It is possible to checkout specific snapshots with CVS or to check out
+- the latest snapshot.
+-
+- We use CVS tags to identify each snapshot we make. Snapshot tags have
+- the form "egcs_ss_YYYYMMDD". In addition, the latest official snapshot
+- always has the tag "gcc_latest_snapshot".
+- _________________________________________________________________
+-
+-Why can't I build a shared library?
+-
+- When building a shared library you may get an error message from the
+- linker like `assert pure-text failed:' or `DP relative code in file'.
+-
+- This kind of error occurs when you've failed to provide proper flags
+- to gcc when linking the shared library.
+-
+- You can get this error even if all the .o files for the shared library
+- were compiled with the proper PIC option. When building a shared
+- library, gcc will compile additional code to be included in the
+- library. That additional code must also be compiled with the proper
+- PIC option.
+-
+- Adding the proper PIC option (-fpic or -fPIC) to the link line which
+- creates the shared library will fix this problem on targets that
+- support PIC in this manner. For example:
+- gcc -c -fPIC myfile.c
+- gcc -shared -o libmyfile.so -fPIC myfile.o
+- _________________________________________________________________
+-
+-How to work around too long C++ symbol names? (-fsquangle)
+-
+- If the standard assembler of your platform can't cope with the large
+- symbol names that the default g++ name mangling mechanism produces,
+- your best bet is to use GNU as, from the GNU binutils package.
+-
+- Unfortunately, GNU as does not support all platforms supported by
+- egcs, so you may have to use an experimental work-around: the
+- -fsquangle option, that enables compression of symbol names.
+-
+- Note that this option is still under development, and subject to
+- change. Since it modifies the name mangling mechanism, you'll need to
+- build libstdc++ and any other C++ libraries with this option enabled.
+- Furthermore, if this option changes its behavior in the future, you'll
+- have to rebuild them all again. :-(
+-
+- This option can be enabled by default by initializing
+- `flag_do_squangling' with `1' in `gcc/cp/decl2.c' (it is not
+- initialized by default), then rebuilding egcs and any C++ libraries.
+- _________________________________________________________________
+-
+-When building from CVS sources, I see 'gperf: invalid option -- F', even with
+-the most current version of gperf.
+-
+- The current version of gperf (v2.7) does not support the -F flag which
+- is used when building egcs from CVS sources. You will need to obtain a
+- patch for gperf and rebuild the program; this patch is available at
+- [84]ftp://egcs.cygnus.com/pub/egcs/infrastructure/
+-
+- Patches for other tools, particularly autoconf, may also be necessary
+- if you're building from CVS sources. Please see the [85]FAQ entry
+- regarding these tools to determine if anything else is needed.
+-
+- These patched utilities should _only_ be required if you are building
+- from CVS sources. For example, gperf is used to generate C code for a
+- perfect hash function given an input file. Distributions of egcs
+- already contain the generated C code, while the CVS sources will
+- provide only the gperf input file. So gperf should only be necessary
+- if you are building anything obtained from CVS.
+- _________________________________________________________________
+-
+-When building C++, the linker says my constructors, destructors or virtual
+-tables are undefined, but I defined them
+-
+- The ISO C++ Standard specifies that all virtual methods of a class
+- that are not pure-virtual must be defined, but does not require any
+- diagnostic for violations of this rule [class.virtual]/8. Based on
+- this assumption, egcs will only emit the implicitly defined
+- constructors, the assignment operator, the destructor and the virtual
+- table of a class in the translation unit that defines its first such
+- non-inline method.
+-
+- Therefore, if you fail to define this particular method, the linker
+- may complain about the lack of definitions for apparently unrelated
+- symbols. Unfortunately, in order to improve this error message, it
+- might be necessary to change the linker, and this can't always be
+- done.
+-
+- The solution is to ensure that all virtual methods that are not pure
+- are defined. Note that a destructor must be defined even if it is
+- declared pure-virtual [class.dtor]/7.
+- _________________________________________________________________
+-
+-What is libstdc++-v3 and how can I use it with g++?
+-
+- From the [86]libstdc++-FAQ: "The EGCS Standard C++ Library v3, or
+- libstdc++-2.90.x, is an ongoing project to implement the ISO 14882
+- Standard C++ library as described in chapters 17 through 27 and annex
+- D."
+-
+- At the moment the libstdc++-v3 is no "drop in replacement" for GCC's
+- libstdc++. The best way to use it is as follows:
+- 1. Build and install GCC
+- 2. Build and install libstdc++-v3
+- 3. Use compiler flags to use the new libstdc++
+-
+- Please note that the libstdc++-v3 is not yet complete and should only
+- be used by experienced programmers.
+-
+- For more information please refer to the [87]libstdc++-v3 homepage
+- _________________________________________________________________
+-
+- [88]Return to the GCC home page
+-
+- _Last modified: October 19, 1999_
+-
+-References
+-
+- 1. http://www.gnu.org/software/gcc/faq.html
+- 2. http://www.eskimo.com/~scs/C-faq/top.html
+- 3. http://www.cerfnet.com/~mpcline/On-Line-C++-FAQs/
+- 4. http://reality.sgi.com/austern_mti/std-c++/faq.html
+- 5. http://www.fortran.com/fortran/info.html
+- 6. http://gcc.gnu.org/faq.html#general
+- 7. http://gcc.gnu.org/faq.html#gcc
+- 8. http://gcc.gnu.org/faq.html#cygnus
+- 9. http://gcc.gnu.org/faq.html#open-development
+- 10. http://gcc.gnu.org/faq.html#bugreport
+- 11. http://gcc.gnu.org/faq.html#support
+- 12. http://gcc.gnu.org/faq.html#installation
+- 13. http://gcc.gnu.org/faq.html#fortran
+- 14. http://gcc.gnu.org/faq.html#multiple
+- 15. http://gcc.gnu.org/faq.html#rpath
+- 16. http://gcc.gnu.org/faq.html#rpath
+- 17. http://gcc.gnu.org/faq.html#gas
+- 18. http://gcc.gnu.org/faq.html#environ
+- 19. http://gcc.gnu.org/faq.html#testsuite
+- 20. http://gcc.gnu.org/faq.html#testsuite
+- 21. http://gcc.gnu.org/faq.html#dejagnu
+- 22. http://gcc.gnu.org/faq.html#testoptions
+- 23. http://gcc.gnu.org/faq.html#multipletests
+- 24. http://gcc.gnu.org/faq.html#platform
+- 25. http://gcc.gnu.org/faq.html#x86eh
+- 26. http://gcc.gnu.org/faq.html#asmclobber
+- 27. http://gcc.gnu.org/faq.html#linuxkernel
+- 28. http://gcc.gnu.org/faq.html#X11R6
+- 29. http://gcc.gnu.org/faq.html#cross
+- 30. http://gcc.gnu.org/faq.html#bugs
+- 31. http://gcc.gnu.org/faq.html#fdzero
+- 32. http://gcc.gnu.org/faq.html#octave
+- 33. http://gcc.gnu.org/faq.html#stdin
+- 34. http://gcc.gnu.org/faq.html#macarg
+- 35. http://gcc.gnu.org/faq.html#misc
+- 36. http://gcc.gnu.org/faq.html#memexhausted
+- 37. http://gcc.gnu.org/faq.html#snapshot
+- 38. http://gcc.gnu.org/faq.html#friend
+- 39. http://gcc.gnu.org/faq.html#libg++
+- 40. http://gcc.gnu.org/faq.html#generated_files
+- 41. http://gcc.gnu.org/faq.html#gdb
+- 42. http://gcc.gnu.org/faq.html#conflicts
+- 43. http://gcc.gnu.org/faq.html#gnat
+- 44. http://gcc.gnu.org/faq.html#gpc
+- 45. http://gcc.gnu.org/faq.html#cvssnapshots
+- 46. http://gcc.gnu.org/faq.html#picflag-needed
+- 47. http://gcc.gnu.org/spam.html
+- 48. http://gcc.gnu.org/faq.html#squangle
+- 49. http://gcc.gnu.org/faq.html#gperf
+- 50. http://gcc.gnu.org/faq.html#vtables
+- 51. http://gcc.gnu.org/faq.html#libstdc++
+- 52. http://gcc.gnu.org/steering.html
+- 53. http://gcc.gnu.org/steering.html
+- 54. http://gcc.gnu.org/faq.html#cathedral-vs-bazaar
+- 55. http://locke.ccil.org/~esr/writings/cathedral.html
+- 56. http://gcc.gnu.org/onlinedocs/
+- 57. http://egcs.cygnus.com/cgi-bin/cvsweb.cgi/~checkout~/egcs/gcc/BUGS?content-type=text/plain&only_with_tag=HEAD
+- 58. http://gcc.gnu.org/bugs.html
+- 59. mailto:gcc-bugs@gcc.gnu.org
+- 60. mailto:bug-gcc@gnu.org
+- 61. http://gcc.gnu.org/faq.html#bugreport
+- 62. http://gcc.gnu.org/faq.html#gas
+- 63. http://gcc.gnu.org/install/specific.html
+- 64. ftp://egcs.cygnus.com/pub/egcs/infrastructure/dejagnu-19981026.tar.gz
+- 65. http://gcc.gnu.org/install/specific.html
+- 66. ftp://tsx-11.mit.edu/pub/linux/packages/GCC/
+- 67. http://gcc.gnu.org/faq.html#bugreport
+- 68. http://gcc.gnu.org/faq.html#linuxkernel
+- 69. http://www.suse.de/~florian/kernel+egcs.html
+- 70. http://gcc.gnu.org/faq.html#asmclobber
+- 71. http://www.objsw.com/CrossGCC/
+- 72. http://gcc.gnu.org/bugs.html
+- 73. http://gcc.gnu.org/faq.html#bugreport
+- 74. http://gcc.gnu.org/faq.html#asmclobber
+- 75. http://www.che.wisc.edu/octave/mailing-lists/bug-octave/1998/270
+- 76. ftp://ftp.che.wisc.edu/pub/octave/test-releases/
+- 77. mailto:libc-alpha@sourceware.cygnus.com
+- 78. http://gcc.gnu.org/index.html#mailinglists
+- 79. ftp://egcs.cygnus.com/pub/egcs/infrastructure/
+- 80. http://sourceware.cygnus.com/autoconf/
+- 81. ftp://egcs.cygnus.com/pub/egcs/infrastructure/
+- 82. http://home.pages.de/~GNU-Pascal/
+- 83. ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/beta/
+- 84. ftp://egcs.cygnus.com/pub/egcs/infrastructure
+- 85. http://gcc.gnu.org/faq.html#generated_files
+- 86. http://sourceware.cygnus.com/libstdc++/faq/
+- 87. http://sourceware.cygnus.com/libstdc++/
+- 88. http://gcc.gnu.org/index.html
+diff -ruNb gcc-2.95.3/faq.html gcc-2.95.4/faq.html
+--- gcc-2.95.3/faq.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/faq.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,1145 +0,0 @@
+-<html>
+-<head>
+-<title>GCC Frequently Asked Questions</title>
+-</head>
+-<body>
+-
+-<h1 align="center">GCC Frequently Asked Questions</h1>
+-
+-<p>The latest version of this document is always available at <a href="
+-http://www.gnu.org/software/gcc/faq.html">http://www.gnu.org/software/gcc/faq.html</a>.</p>
+-
+-<p>This FAQ tries to answer specific questions concerning GCC. For
+-general information regarding C, C++, resp. Fortran please check the
+-<a href="http://www.eskimo.com/~scs/C-faq/top.html">comp.lang.c FAQ</a>,
+-<a href="http://www.cerfnet.com/~mpcline/On-Line-C++-FAQs/">
+-comp.lang.c++ FAQ</a>,
+-<a href="http://reality.sgi.com/austern_mti/std-c++/faq.html">
+-comp.std.c++ FAQ</a>, and the <a
+-href="http://www.fortran.com/fortran/info.html">Fortran Information
+-page</a>.</p>
+-
+-<hr>
+-
+-<h1>Questions</h1>
+-<ol>
+- <li><a href="#general">General information</a>
+- <ol>
+- <li><a href="#gcc">What is the relationship between GCC and EGCS</a></li>
+- <li><a href="#cygnus">What is the relationship between GCC and Cygnus</a></li>
+- <li><a href="#open-development">What is an open development model?</a></li>
+- <li><a href="#bugreport">How to report bugs</a></li>
+- <li><a href="#support">How do I get a bug fixed or a feature added?</a></li>
+- </ol></li>
+-
+- <li><a href="#installation">Installation</a>
+- <ol>
+- <li><a href="#fortran">Problems building the Fortran compiler</a></li>
+- <li><a href="#multiple">How to install multiple versions of GCC</a></li>
+- <li><a href="#rpath">Dynamic linker is unable to find GCC libraries</a></li>
+- <li><a href="#rpath">libstdc++/libio tests fail badly with --enable-shared</a></li>
+- <li><a href="#gas">GCC can not find GNU as/GNU ld</a></li>
+- <li><a href="#environ">cpp: Usage:... Error</a></li>
+- </ol></li>
+-
+- <li><a href="#testsuite">Testsuite problems</a>
+- <ol>
+- <li><a href="#testsuite">Why is there no testsuite in GCC 2.95</a></li>
+- <li><a href="#dejagnu">Unable to run the testsuite</a></li>
+- <li><a href="#testoptions">How do I pass flags like
+- <code>-fnew-abi</code> to the testsuite?</a></li>
+- <li><a href="#multipletests">How can I run the test suite with multiple options?</a></li>
+- </ol></li>
+-
+- <li><a href="#platform">Platform-specific issues</a>
+- <ol>
+- <li><a href="#x86eh">Problems with exception handling on x86 platforms</a></li>
+- <li><a href="#asmclobber">Problems with <tt>Invalid `asm' statement</tt>s</a></li>
+- <li><a href="#linuxkernel">Building Linux kernels</a> </li>
+- <li><a href="#X11R6">How do I compile X11 headers with g++</a> </li>
+- <li><a href="#cross">How to build a cross compiler</a></li>
+- </ol></li>
+-
+- <li><a href="#bugs">Bugs and Non-Bugs</a>
+- <ol>
+- <li><a href="#fdzero">FD_ZERO macro</a></li>
+- <li><a href="#octave">Octave 2.0.13 does not compile</a></li>
+- <li><a href="#stdin">Why can't I initialize a static variable with <tt>stdin</tt>?</a></li>
+- <li><a href="#macarg">Why can't I use #if here?</a></li>
+- </ol></li>
+-
+- <li><a href="#misc">Miscellaneous</a>
+- <ol>
+- <li><a href="#memexhausted">Virtual memory exhausted</a></li>
+- <li><a href="#snapshot">Snapshots, how, when, why</a></li>
+- <li><a href="#friend">Friend Templates</a></li>
+- <li><a href="#libg++">Where to find libg++</a></li>
+- <li><a href="#generated_files">Why do I need autoconf, bison, xgettext, automake, etc </a></li>
+- <li><a href="#gdb">Problems debugging GCC code</a></li>
+- <li><a href="#conflicts">Conflicts when using cvs update </a></li>
+- <li><a href="#gnat">Using GCC with GNAT/Ada</a></li>
+- <li><a href="#gpc">Using GCC with GNU Pascal</a></li>
+- <li><a href="#cvssnapshots">Using CVS to download snapshots </a></li>
+- <li><a href="#picflag-needed">Why can't I build a shared library?</a></li>
+- <li><a href="spam.html">Dealing with spam on the lists</a></li>
+- <li><a href="#squangle">How to work around too long C++ symbol names?
+- (<tt>-fsquangle</tt>)</a></li>
+- <li><a href="#gperf">When building from CVS sources, I see 'gperf: invalid option -- F',
+- even with the most current version of gperf.</a></li>
+- <li><a href="#vtables">When building C++, the linker says my constructors, destructors or virtual tables are undefined, but I defined them</a></li>
+- <li><a href="#libstdc++">What is libstdc++-v3 and how can I use it with g++?</a></li>
+- </ol></li>
+-</ol>
+-
+-
+-<hr>
+-<a name="general"></a>
+-<h1>General information</h1>
+-
+-<h2><a name="gcc">What is the relationship between GCC and EGCS</a></h2>
+-
+-<p>In 1990/1991 gcc version 1 had reached a point of stability. For the
+-targets it could support, it worked well. It had limitations inherent in
+-its design that would be difficult to resolve, so a major effort was made
+-to resolve those limitiations and gcc version 2 was the result.</p>
+-
+-<p>When we had gcc2 in a useful state, development efforts on gcc1 stopped
+-and we all concentrated on making gcc2 better than gcc1 could ever be. This
+-is the kind of step forward we wanted to make with the EGCS project when it
+-was formed in 1997.</p>
+-
+-<p>In April 1999 the Free Software Foundation officially halted development
+-on the gcc2 compiler and appointed the EGCS project as the official GCC
+-maintainers.</p>
+-
+-<p>We are in the process of merging GCC and EGCS, which will take some time.
+-The net result will be a single project which will carry forward GCC development
+-under the ultimate control of the
+-<a href="steering.html">GCC Steering Committee</a>.</p>
+-
+-<hr>
+-<h2><a name="cygnus">What is the relationship between GCC and Cygnus</a></h2>
+-
+-<p>It is a common mis-conception that Cygnus controls either directly or
+-indirectly GCC.</p>
+-
+-<p>While Cygnus does donate hardware, network connections, code and
+-developer time to GCC development, Cygnus does not control GCC.
+-
+-<p>Overall control of GCC is in the hands of the
+-<a href="steering.html">GCC Steering Committee</a>
+-which includes people from a variety of different organizations and
+-backgrounds. The purpose of the steering committee is to make decisions in
+-the best interest of GCC and to help ensure that no individual or company
+-has control over the project.</p>
+-
+-<p>To summarize, Cygnus contributes to GCCproject, but does not exert
+-a controlling influence over GCC.</p>
+-
+-<hr>
+-<h2><a name="open-development">What is an open development model?</a></h2>
+-
+-<p>With GCC, we are going to try a bazaar style<a
+-href="#cathedral-vs-bazaar"><b>[1]</b></a> approach to its
+-development: We make snapshots publicly available to anyone who wants to
+-try them; we're going to welcome anyone to join the development mailing list.
+-All of the discussions on the development mailing list are available via the
+-web. We're going to be making releases with a much higher frequency than
+-they have been made in the past.</p>
+-
+-<p>In addition to weekly snapshots of the GCC development sources, we
+-have the sources readable from a CVS server by anyone. Furthermore we
+-are using remote CVS to allow remote maintainers write access to the sources.</p>
+-
+-<p>There have been many potential gcc developers who were not able to
+-participate in gcc development in the past. We want these people to
+-help in any way they can; we ultimately want GCC to be the best compiler
+-in the world.</p>
+-
+-<p>A compiler is a complicated piece of software, there will still be
+-strong central maintainers who will reject patches, who will demand
+-documentation of implementations, and who will keep the level of
+-quality as high as it is today. Code that could use wider testing may
+-be integrated--code that is simply ill-conceived won't be.</p>
+-
+-<p>GCC is not the first piece of software to use this open development
+-process; FreeBSD, the Emacs lisp repository, and the Linux kernel are a
+-few examples of the bazaar style of development.</p>
+-
+-<p>With GCC, we will be adding new features and optimizations at a
+-rate that has not been done since the creation of gcc2; these additions
+-will inevitably have a temporarily destabilizing effect. With the help
+-of developers working together with this bazaar style development, the
+-resulting stability and quality levels will be better than we've had
+-before.</p>
+-
+-<blockquote>
+-<a name="cathedral-vs-bazaar"><b>[1]</b></a>
+- We've been discussing different development models a lot over the
+- past few months. The paper which started all of this introduced two
+- terms: A <b>cathedral</b> development model versus a <b>bazaar</b>
+- development model. The paper is written by Eric S. Raymond, it is
+- called ``<a
+- href="http://locke.ccil.org/~esr/writings/cathedral.html">The
+- Cathedral and the Bazaar</a>''. The paper is a useful starting point
+- for discussions.
+-</blockquote>
+-
+-<hr>
+-<h2><a name="bugreport">How to report bugs</a></h2>
+-
+-<p>There are complete instructions in the
+-<a href="onlinedocs/">gcc info manual</a>, section Bugs.
+-The manual can also be read using `<i>M-x <tt>info</tt></i>' in Emacs, or if
+-the GNU <tt>info</tt> program is installed on your system by `<tt>info --node
+-"(gcc)Bugs"</tt>'. Or see the file
+-<a href="http://egcs.cygnus.com/cgi-bin/cvsweb.cgi/~checkout~/egcs/gcc/BUGS?content-type=text/plain&only_with_tag=HEAD">BUGS</a>
+-included with the GCC source code.</p>
+-
+-<p>Before you report a bug for the <em>C++ compiler</em>, please check
+-the <a href="bugs.html">list of well-known bugs</a>. If you want to
+-report a bug with <em>egcs 1.0.x</em> or <em>egcs 1.1.x</em>, we
+-strongly recommend upgrading to the current release first.</p>
+-
+-<p>In short, if GCC says <tt>Internal compiler error</tt> (or any
+-other error that you'd like us to be able to reproduce, for that
+-matter), please mail a bug report to <a
+-href="mailto:gcc-bugs@gcc.gnu.org">gcc-bugs@gcc.gnu.org</a> or
+-<a href="mailto:bug-gcc@gnu.org">bug-gcc@gnu.org</a> including:</p>
+-
+-<ul>
+- <li>The GCC version</li>
+- <li>The system type</li>
+- <li>All options you passed to the compiler</li>
+- <li>Preprocessed output of the source file that caused the compiler error</li>
+-</ul>
+-
+-<p>All this can normally be accomplished by mailing the command line, the
+-output of the command, and the resulting `<tt><i>your-file</i>.i</tt>' for C,
+-or `<tt><i>your-file</i>.ii</tt>' for C++, corresponding to:</p>
+-
+-<p><tt>gcc -v --save-temps <i>all-your-options</i> <i>your-file</i>.c</tt></p>
+-
+-<p>Typically the CPP output (extension <code>.i</code> for C or
+-<code>.ii</code> for C++) will be large, so please compress the
+-resulting file with one of the popular compression programs such as
+-<tt>bzip2</tt>, <tt>gzip</tt>, <tt>zip</tt>, <tt>pkzip</tt> or
+-<tt>compress</tt> (in decreasing order of preference). Use maximum
+-compression (<code>-9</code>) if available. Please include the
+-compressed CPP output in your bug report.</p>
+-
+-<p>Since we're supposed to be able to re-create the assembly output
+-(extension <code>.s</code>), you usually don't have to include it in
+-the bug report, although you may want to post parts of it to point out
+-assembly code you consider to be wrong.</p>
+-
+-<p>Whether to use MIME attachments or <code>uuencode</code> is up to
+-you. In any case, make sure the compiler command line, version and
+-error output are in plain text, so that we don't have to decode the
+-bug report in order to tell who should take care of it. A meaningful
+-subject indicating language and platform also helps.</p>
+-
+-<p>The gcc lists have message size limits (100 kbytes) and bug reports
+-over those limits will currently be bounced. We're trying to find a
+-way to allow larger bug reports to be posted, but this is currently
+-impossible (unless you use MIME partials, which most people are unable
+-to handle anyway, so you'd better avoid them for now). So, although
+-we prefer to have complete bug reports archived, if you cannot reduce
+-the bug report below the limit, please make it available for ftp or
+-http and post the URL. Another alternative is to break the
+-preprocessed output in multiple files (using <code>split</code>, for
+-example) and post them in separate messages, but we prefer to have
+-self-contained bug reports in single messages.</p>
+-
+-<p>If you fail to supply enough information for a bug report to be
+-reproduced, someone will probably ask you to post additional
+-information (or just ignore your bug report, if they're in a bad day,
+-so try to get it right on the first posting :-). In this case, please
+-post the additional information to the bug reporting mailing list, not
+-just to the person who requested it, unless explicitly told so. If
+-possible, please include in this follow-up all the information you had
+-supplied in the incomplete bug report (including the preprocessor
+-output), so that the new bug report is self-contained.</p>
+-
+-<hr>
+-<h2><a name="support">How do I get a bug fixed or a feature added?</a></h2>
+-
+-<p>There are lots of ways to get something fixed. The list below may be
+-incomplete, but it covers many of the common cases. These are listed
+-roughly in order of increasing difficulty for the average GCC user,
+-meaning someone who is not skilled in the internals of GCC, and where
+-difficulty is measured in terms of the time required to fix the bug.
+-No alternative is better than any other; each has it's benefits and
+-disadvantages.</p>
+-
+-<ul>
+-<li>Hire someone to fix it for you. There are various companies and
+- individuals providing support for GCC. This alternative costs
+- money, but is relatively likely to get results.</li>
+-
+-<li>Report the problem to gcc-bugs and hope that someone will be kind
+- enough to fix it for you. While this is certainly possible, and
+- often happens, there is no guarantee that it will. You should
+- not expect the same response from gcc-bugs that you would see
+- from a commercial support organization since the people who read
+- gcc-bugs, if they choose to help you, will be volunteering their
+- time. This alternative will work best if you follow the directions
+- on <a href="#bugreport">submitting bugreports</a>.</li>
+-
+-<li>Fix it yourself. This alternative will probably bring results,
+- if you work hard enough, but will probably take a lot of time,
+- and, depending on the quality of your work and the perceived
+- benefits of your changes, your code may or may not ever make it
+- into an official release of GCC.</li>
+-</ul>
+-
+-<hr>
+-<a name="installation"></a>
+-<h1>Installation</h1>
+-
+-<h2><a name="fortran">Problems building the Fortran compiler</a></h2>
+-
+-<p>The Fortran front end can not be built with most vendor compilers; it must
+-be built with gcc. As a result, you may get an error if you do not follow
+-the install instructions carefully.</p>
+-
+-<p>In particular, instead of using "make" to build GCC, you should use
+-"make bootstrap" if you are building a native compiler or "make cross"
+-if you are building a cross compiler.</p>
+-
+-<p>It has also been reported that the Fortran compiler can not be built
+-on Red Hat 4.X GNU/Linux for the Alpha. Fixing this may require upgrading
+-binutils or to Red Hat 5.0; we'll provide more information as it becomes
+-available.</p>
+-
+-<hr>
+-<h2><a name="multiple">How to install multiple versions of gcc</a></h2>
+-
+-<p>It may be desirable to install multiple versions of the compiler on
+-the same system. This can be done by using different prefix paths at
+-configure time and a few symlinks.</p>
+-
+-<p>Basically, configure the two compilers with different --prefix options,
+-then build and install each compiler. Assume you want "gcc" to be the latest
+-compiler and available in /usr/local/bin; also assume that you want "gcc2"
+-to be the older gcc2 compiler and also available in /usr/local/bin.</p>
+-
+-<p>The easiest way to do this is to configure the new GCC with
+---prefix=/usr/local/gcc
+-and the older gcc2 with --prefix=/usr/local/gcc2. Build and install both
+-compilers. Then make a symlink from /usr/local/bin/gcc to
+-/usr/local/gcc/bin/gcc and from /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc.
+-Create similar links for the "g++", "c++" and "g77" compiler drivers.</p>
+-
+-<p>An alternative to using symlinks is to configure with a
+---program-transform-name option. This option specifies a sed command to
+-process installed program names with. Using it you can, for instance,
+-have all the new GCC programs installed as "new-gcc" and the like. You
+-will still have to specify different --prefix options for new GCC and
+-old GCC, because it is only the executable program names that are
+-transformed. The difference is that you (as administrator) do not have
+-to set up symlinks, but must specify additional directories in your (as
+-a user) PATH. A complication with --program-transform-name is that the
+-sed command invariably contains characters significant to the shell,
+-and these have to be escaped correctly, also it is not possible to use
+-"^" or "$" in the command. Here is the option to prefix "new-" to the
+-new GCC installed programs
+-"--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'". With the above
+---prefix option, that will install the new GCC programs into
+-/usr/local/gcc/bin with names prefixed by "new-". You can use
+---program-transform-name if you have multiple versions of GCC, and
+-wish to be sure about which version you are invoking.</p>
+-
+-<p>If you use --prefix, GCC may have difficulty locating a GNU
+-assembler or linker on your system, <a href="#gas">GCC can not find GNU
+-as/GNU ld</a> explains how to deal with this.</p>
+-
+-<hr>
+-<h2><a name="rpath">Dynamic linker is unable to find GCC libraries</a></h2>
+-
+-<p>This problem manifests itself by programs not finding shared libraries
+-they depend on when the programs are started. Note this problem often manifests
+-itself with failures in the libio/libstdc++ tests after configuring with
+---enable-shared and building GCC.</p>
+-
+-<p>GCC does not specify a runpath so that the dynamic linker can find dynamic
+-libraries at runtime.</p>
+-
+-<p>The short explanation is that if you always pass a -R option to the
+-linker, then your programs become dependent on directories which
+-may be NFS mounted, and programs may hang unnecessarily when an
+-NFS server goes down.</p>
+-
+-<p>The problem is not programs that do require the directories; those
+-programs are going to hang no matter what you do. The problem is
+-programs that do not require the directories.</p>
+-
+-<p>SunOS effectively always passed a -R option for every -L option;
+-this was a bad idea, and so it was removed for Solaris. We should
+-not recreate it.</p>
+-
+-<p>However, if you feel you really need such an option to be passed
+-automatically to the linker, you may add it to the gcc specs file.
+-This file can be found in the same directory that contains cc1 (run
+-<code>gcc -print-prog-name=cc1</code> to find it). You may add linker
+-flags such as <code>-R</code> or <code>-rpath</code>, depending on
+-platform and linker, to the <code>*link</code> or <code>*lib</code>
+-specs.</p>
+-
+-<p>Another alterative is to install a wrapper script around gcc, g++
+-or ld that adds the appropriate directory to the environment variable
+-<code>LD_RUN_PATH</code> or equivalent (again, it's
+-platform-dependent).</p>
+-
+-<p>Yet another option, that works on a few platforms, is to hard-code
+-the full pathname of the library into its soname. This can only be
+-accomplished by modifying the appropriate <tt>.ml</tt> file within
+-<tt>libstdc++/config</tt> (and also <tt>libg++/config</tt>, if you are
+-building libg++), so that <code>$(libdir)/</code> appears just before
+-the library name in <code>-soname</code> or <code>-h</code> options.</p>
+-
+-<hr>
+-<h2><a name="gas">GCC can not find GNU as/GNU ld</a></h2>
+-<p>GCC searches the PATH for an assembler and a loader, but it only
+-does so after searching a directory list hard-coded in the gcc
+-executables. Since, on most platforms, the hard-coded list includes
+-directories in which the system asembler and loader can be found, you
+-may have to take one of the following actions to arrange that gcc uses
+-the GNU versions of those programs.</p>
+-
+-<p>To ensure that GCC finds the GNU assembler (the GNU loader), which
+-are required by <a href="install/specific.html">some configurations</A>,
+-you should configure these with the same --prefix option as you used
+-for GCC. Then build & install GNU as (GNU ld) and proceed with
+-building GCC.</p>
+-
+-<p>Another alternative is to create links to GNU as and ld in any of
+-the directories printed by the command `<tt>gcc -print-search-dirs |
+-grep '^programs:'</tt>'. The link to `<tt>ld</tt>' should be named
+-`<tt>real-ld</tt>' if `<tt>ld</tt>' already exists. If such links do
+-not exist while you're compiling GCC, you may have to create them in
+-the build directories too, within the <tt>gcc</tt> directory
+-<em>and</em> in all the <tt>gcc/stage*</tt> subdirectories.</p>
+-
+-<p>GCC 2.95 allows you to specify the full pathname of the assembler
+-and the linker to use. The configure flags are
+-`<tt>--with-as=/path/to/as</tt>' and `<tt>--with-ld=/path/to/ld</tt>'.
+-GCC will try to use these pathnames before looking for `<tt>as</tt>'
+-or `<tt>(real-)ld</tt>' in the standard search dirs. If, at
+-configure-time, the specified programs are found to be GNU utilities,
+-`<tt>--with-gnu-as</tt>' and `<tt>--with-gnu-ld</tt>' need not be
+-used; these flags will be auto-detected. One drawback of this option
+-is that it won't allow you to override the search path for assembler
+-and linker with command-line options <tt>-B/path/</tt> if the
+-specified filenames exist.</p>
+-
+-<hr>
+-<h2><a name="environ">cpp: Usage:... Error</a></h2>
+-
+-<p>If you get an error like this when building GCC (particularly when building
+-__mulsi3), then you likely have a problem with your environment variables.</p>
+-<pre>
+- cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp
+- [switches] input output
+-</pre>
+-<p>First look for an explicit '.' in either LIBRARY_PATH or GCC_EXEC_PREFIX
+-from your environment. If you do not find an explicit '.', look for
+-an empty pathname in those variables. Note that ':' at either the start
+-or end of these variables is an implicit '.' and will cause problems.</p>
+-
+-<p>Also note '::' in these paths will also cause similar problems.</p>
+-
+-
+-<hr>
+-<a name="testsuite"></a>
+-<h1>Testsuite problems</h1>
+-
+-<h2><a name="testsuite">Why is there no testsuite in GCC 2.95</a></h2>
+-
+-<p>The GCC testsuite is not included in the GCC 2.95 release due to the
+-uncertain copyright status of some tests.</p>
+-
+-<p>The GCC team will be reviewing the entire testsuite to find and remove
+-any tests with uncertain copyright status. Once those tests are removed
+-from the testsuite, the testsuite as a whole will be copyrighted under the
+-terms of the GPL and included in future GCC releases.</p>
+-
+-<p>It is believed that only a few tests have uncertain copyright status and
+-thus only a few tests will need to be removed from the testsuite.</p>
+-
+-
+-<hr>
+-<h2><a name="dejagnu">Unable to run the testsuite</a></h2>
+-
+-<p>If you get a message about unable to find "standard.exp" when trying to
+-run the GCC testsuites, then your dejagnu is too old to run the GCC tests.
+-You will need to get a newer version of dejagnu; we've made a
+-<a href="ftp://egcs.cygnus.com/pub/egcs/infrastructure/dejagnu-19981026.tar.gz">
+-dejagnu snapshot</a> available until a new version of dejagnu can be released.</p>
+-
+-<hr>
+-<h2><a name="testoptions">How do I pass flags like
+- <code>-fnew-abi</code> to the testsuite?</a></h2>
+-
+-<p>If you invoke <code>runtest</code> directly, you can use the
+-<code>--tool_opts</code> option, e.g:</p>
+-<pre>
+- runtest --tool_opts "-fnew-abi -fno-honor-std" &lt;other options&gt;
+-</pre>
+-<p>Or, if you use <code>make check</code> you can use the
+-<code>make</code> variable <code>RUNTESTFLAGS</code>, e.g:</p>
+-<pre>
+- make RUNTESTFLAGS='--tool_opts "-fnew-abi -fno-honor-std"' check-g++
+-</pre>
+-
+-<hr>
+-<h2><a name="multipletests"> How can I run the test suite with multiple options? </a></h2>
+-
+-<p>If you invoke <code>runtest</code> directly, you can use the
+-<code>--target_board</code> option, e.g:</p>
+-<pre>
+- runtest --target_board "unix{-fPIC,-fpic,}" &lt;other options&gt;
+-</pre>
+-<p>Or, if you use <code>make check</code> you can use the
+-<code>make</code> variable <code>RUNTESTFLAGS</code>, e.g:</p>
+-<pre>
+- make RUNTESTFLAGS='--target_board "unix{-fPIC,-fpic,}"' check-gcc
+-</pre>
+-<p>Either of these examples will run the tests three times. Once
+-with <code>-fPIC</code>, once with <code>-fpic</code>, and once with
+-no additional flags.</p>
+-
+-<p>This technique is particularly useful on multilibbed targets.</p>
+-
+-
+-<hr>
+-<a name="platform"></a>
+-<h1>Platform-specific issues</h1>
+-
+-<p>Please read the <a href="install/specific.html">host/target specific installation</a> notes, too.</p>
+-
+-<h2><a name="x86eh">Problems with exception handling on x86 platforms</a></h2>
+-
+-<p>If you are using the GNU assembler (aka gas) on an x86 platform and
+-exception handling is not working correctly, then odds are you're using a
+-buggy assembler. Releases of binutils prior to 2.9 are known to
+-assemble exception handling code incorrectly.</p>
+-
+-<p>We recommend binutils-2.9.1 or newer. Some post-2.9.1 snapshots of
+-binutils fix some subtle bugs, particularly on x86 and alpha. They
+-are available at <a href="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">
+-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/</A>. The 2.9.1.0.15
+-snapshot is known to work fine on those platforms; other than that, be
+-aware that snapshots are in general untested and may not work (or even
+-build). Use them at your own risk.</p>
+-
+-
+-<hr>
+-<h2><a name="asmclobber">Problems with invalid `asm' statements</a></h2>
+-
+-<p>Previous releases of GCC (for example, GCC 2.7.2 or EGCS 1.1.2)
+-did not detect as invalid a clobber specifier that clobbered an operand.
+-Instead, it could spuriously and silently generate incorrect code for
+-certain non-obvious cases of source code. Even more unfortunately, the
+-manual (Using and Porting GCC, section Extended Asm, see the
+-<a href="#bugreport"> bug report entry</a>) did not explicitly say that it was invalid to specify clobber registers that were destined to overlap
+-operands; it could arguably be interpreted that it was correct to clobber
+-an input operand to mark it as not holding a usable value after the asm.</p>
+-
+-<p>For the general case, there is no way to tell whether a specified
+-clobber is <i>intended</i> to overlap with a specific (input) operand or
+-is a program error, where the choice of actual register for operands
+-failed to <i>avoid</i> the clobbered register. Such unavoidable overlap
+-is detected by versions GCC 2.95 and newer, and flagged
+-as an error rather than accepted. An error message is given, such as:</p>
+-<pre>
+- foo.c: In function `foo':
+- foo.c:7: Invalid `asm' statement:
+- foo.c:7: fixed or forbidden register 0 (ax) was spilled for class AREG.
+-</pre>
+-<p>Unfortunately, a lot of existing software, for example the
+-<a href="#linuxkernel">Linux kernel</a> version 2.0.35 for the Intel x86,
+-has constructs where input operands are marked as clobbered.</p>
+-
+-<p>The manual now describes how to write constructs with operands that
+-are modified by the construct, but not actually used. To write an asm
+-which modifies an input operand but does not output anything usable,
+-specify that operand as an <b>output operand</b> outputting to an
+-<b>unused dummy variable</b>.</p>
+-
+-<p>In the following example for the x86 architecture (taken from the Linux
+-2.0.35 kernel -- <tt>include/asm-i386/delay.h</tt>), the register-class
+-constraint <tt>"a"</tt> denotes a register class containing the single
+-register <tt>"ax"</tt> (aka. <tt>"eax"</tt>). It is therefore invalid
+-to clobber <tt>"ax"</tt>; this operand has to be specified as an output
+-as well as an input. The following code is therefore <b>invalid</b>:</p>
+-<pre>
+-extern __inline__ void
+-__delay (int loops)
+-{
+- __asm__ __volatile__
+- (".align 2,0x90\n1:\tdecl %0\n\tjns 1b"
+- : /* no outputs */
+- : "a" (loops)
+- : "ax");
+-}
+-</pre>
+-<p>It could be argued that since the register class for <tt>"a"</tt> contains
+-only a single register, this could be detected as an "obvious" intended
+-clobber of the input operand. While that is feasible, it opens up for
+-further "obvious" cases, where the level of obviousness changes from
+-person to person. As there is a correct way to write such asm constructs,
+-this obviousness-detection is not needed other than for reasons of
+-compatibility with an existing code-base, and that code base can be
+-corrected.</p>
+-<p>This corrected and clobber-less version, is <b>valid</b> for GCC 2.95
+-as well as for previous versions of GCC and EGCS:</p>
+-<pre>
+-extern __inline__ void
+-__delay (int loops)
+-{
+- int dummy;
+-
+- __asm__ __volatile__
+- (".align 2,0x90\n1:\tdecl %0\n\tjns 1b"
+- : "=a" (dummy)
+- : "0" (loops));
+-}
+-</pre>
+-<p>Note that the asm construct now has an output operand, but it is unused.
+-Normally asm constructs with only unused output operands may be removed by
+-gcc, unless marked <tt>volatile</tt> as above.</p>
+-
+-
+-<hr>
+-<h2><a name="linuxkernel">Building Linux kernels</a></h2>
+-
+-<p>The linux kernel violates certain aliasing rules specified in the
+-ANSI/ISO standard. Starting with GCC 2.95, the gcc optimizer
+-by default relies on these rules to produce more efficient code and thus
+-will produce malfunctioning kernels.
+-To work around this problem, the flag <CODE>-fno-strict-aliasing</CODE>
+-must be added to the <CODE>CFLAGS</CODE> variable in the main kernel Makefile.</p>
+-
+-<p>If you try to build a 2.0.x kernel for Intel machines with any compiler
+-other than GCC 2.7.2, then you are on your own.
+-The 2.0.x kernels are to be built only with
+-gcc 2.7.2. They use certain <code>asm</code> constructs which are
+-incorrect, but (by accident) happen to work with gcc 2.7.2. If you
+-insist on building 2.0.x kernels with egcs, you may be interested in
+-this <a href="http://www.suse.de/~florian/kernel+egcs.html">patch</a>
+-which fixes some of the asm problems. You will also want to change
+-asm constructs to <a href="#asmclobber">avoid clobbering their input
+-operands</a>.</p>
+-
+-<p>If you installed a recent binutils/gas snapshot on your GNU/Linux
+-system, you may not be able to build the kernel because objdump does
+-not understand the "-k" switch. The solution for this problem is to
+-remove /usr/bin/encaps. (This is an obsolete program that was part of
+-older binutils distributions; the Linux kernel's Makefile looks for
+-this program to decide if you have an old or a new binutils. Problems
+-occur if you installed a new binutils but haven't removed encaps,
+-because the Makefile thinks you have the old one.)</p>
+-
+-<p>Finally, you may get errors with the X driver of the form </p>
+-<pre>
+- _X11TransSocketUNIXConnect: Can't connect: errno = 111
+-</pre>
+-
+-<p>This is a kernel bug. The function sys_iopl in arch/i386/kernel/ioport.c
+-does an illegal hack which used to work but is now broken since GCC optimizes
+-more aggressively . The newer 2.1.x kernels already have a fix which should
+-also work in 2.0.32.</p>
+-
+-<hr>
+-<h2><a name="X11R6">How do I compile X11 headers with g++</a></h2>
+-
+-<p>When compiling X11 headers with a GCC 2.95 or newer, g++ will
+-complain that types are missing. These headers assume that omitting
+-the type means 'int'; this assumption is wrong for C++.</p>
+-
+-<p>g++ accepts such (illegal) constructs with the option -fpermissive;
+-it will assume that missing type is 'int' (as defined by the C89
+-standard).</p>
+-
+-<p>Since the upcoming C99 standard also obsoletes the implicit type
+-assumptions, the X11 headers have to get fixed eventually.</p>
+-
+-<hr>
+-<h2><a name="cross">How to build a cross compiler</a></h2>
+-
+-<p> Building cross compilers is a rather complex undertaking because they
+-usually need additional software (cross assembler, cross linker, target
+-libraries, target include files, etc).</p>
+-
+-<p>We recommend reading the <a href="http://www.objsw.com/CrossGCC/">
+-crossgcc FAQ</a> for information about building cross compilers.</p>
+-
+-<p>If you have all the pieces available, then `make cross' should build a
+-cross compiler. `make LANGUAGES="c c++" install' will install the cross
+-compiler.</p>
+-
+-<p>Note that if you're trying to build a cross compiler in a tree which
+-includes binutils-2.8 in addition to GCC, then you're going to need to
+-make a couple minor tweaks so that the cross assembler, linker and
+-nm utilities will be found.</p>
+-
+-<p>binutils-2.8 builds those files as gas.new, ld.new and nm.new; GCC
+-looks for them using gas-new, ld-new and nm-new, so you may have to arrange
+-for any symlinks which point to &lt;file&gt;.new to be changed to &lt;file&gt;-new.</p>
+-
+-
+-<hr>
+-<a name="bugs"></a>
+-<h1>Bugs and Non-Bugs</h1>
+-
+-<p>Unfortunately, improvements in tools that are widely used are
+-sooner or later bound to break <em>something</em>. Sometimes, the
+-code that breaks was wrong, and then that code should be fixed, even
+-if it works for earlier versions of gcc or other compilers. The
+-following problems with some releases of widely used packages have
+-been identified:</p>
+-
+-<p>There is a separate <a href="bugs.html">list of well-known bugs</a>
+-describing known deficiencies. Naturally we'd like that list to be of
+-zero length.</p>
+-
+-<p>To report a bug, see <a href="#bugreport">How to report bugs</a>.</p>
+-
+-<hr>
+-<h2><a name="fdzero">FD_ZERO macro</a></h2>
+-
+-<p>The FD_ZERO macro in (e.g.) libc-5.4.46 is incorrect. It uses <a
+-href="#asmclobber">invalid asm clobbers</a>. The following rewrite by
+-Ulrich Drepper &lt;drepper@cygnus.com&gt; should fix this for glibc
+-2.0:</p>
+-
+-<pre>
+- # define __FD_ZERO(fdsetp) \
+- do { \
+- int __d0, __d1; \
+- __asm__ __volatile__ ("cld; rep; stosl" \
+- : "=m" (((__fd_mask *) \
+- (fdsetp))[__FDELT (__FD_SETSIZE)]), \
+- "=&amp;c" (__d0), "=&amp;D" (__d1) \
+- : "a" (0), "1" (sizeof (__fd_set) \
+- / sizeof (__fd_mask)), \
+- "2" ((__fd_mask *) (fdsetp)) \
+- : "memory"); \
+- } while (0)
+-</pre>
+-
+-<hr>
+-<h2><a name="octave">Octave 2.0.13 does not compile</a></h2>
+-
+-<p>Apparently Octave 2.0.13 uses some C++ features which have been
+-obsoleted and thus fails to build with EGCS 1.1 and later. This <a
+-href="http://www.che.wisc.edu/octave/mailing-lists/bug-octave/1998/270">patch
+-to Octave</a> should fix this.</p>
+-
+-<p>Octave 2.0.13.96, a test release, has been compiled without patches by
+-egcs 1.1.2. It is available at
+-<a href="ftp://ftp.che.wisc.edu/pub/octave/test-releases/">
+-ftp://ftp.che.wisc.edu/pub/octave/test-releases/</a>.</p>
+-
+-<hr>
+-<h2><a name="stdin">Why can't I initialize a static variable with <tt>stdin</tt>?</a></h2>
+-
+-<p>This has nothing to do with gcc, but people ask us about it a
+-lot. Code like this:</p>
+-
+-<pre>
+- #include &lt;stdio.h&gt;
+-
+- FILE *yyin = stdin;
+-</pre>
+-
+-<p>will not compile with GNU libc (Linux libc6), because
+-<tt>stdin</tt> is not a constant. This was done deliberately, in
+-order for there to be no limit on the number of open FILE objects. It
+-is surprising for people used to traditional Unix C libraries, but it
+-is permitted by the C standard.</p>
+-
+-<p>This construct commonly occurs in code generated by old versions of
+-lex or yacc. We suggest you try regenerating the parser with a
+-current version of flex or bison, respectively. In your own code, the
+-appropriate fix is to move the initialization to the beginning of
+-main.</p>
+-
+-<p>There is a common misconception that the GCC developers are
+-responsible for GNU libc. These are in fact two entirely separate
+-projects. The appropriate place to ask questions relating to GNU libc
+-is <a href="mailto:libc-alpha@sourceware.cygnus.com">libc-alpha@sourceware.cygnus.com</a>.
+-</p>
+-
+-<hr>
+-<h2><a name="macarg">Why can't I use #if here?</a></h2>
+-
+-<p>Let me guess... you wrote code that looks something like this:</p>
+-<pre>
+- memcpy(dest, src,
+-#ifdef PLATFORM1
+- 12
+-#else
+- 24
+-#endif
+- );
+-</pre>
+-<p>and you got a whole pile of error messages:</p>
+-<pre>
+-test.c:11: warning: preprocessing directive not recognized within macro arg
+-test.c:11: warning: preprocessing directive not recognized within macro arg
+-test.c:11: warning: preprocessing directive not recognized within macro arg
+-test.c: In function `foo':
+-test.c:6: undefined or invalid # directive
+-test.c:8: undefined or invalid # directive
+-test.c:9: parse error before `24'
+-test.c:10: undefined or invalid # directive
+-test.c:11: parse error before `#'
+-</pre>
+-
+-<p>The problem, simply put, is that GCC's preprocessor does not allow
+-you to put #ifdef (or any other directive) inside the arguments of a
+-macro. Your C library's <tt>string.h</tt> happens to define
+-<tt>memcpy</tt> as a macro - this is perfectly legitimate. The code
+-therefore will not compile.</p>
+-
+-<p>We have two good reasons for not allowing directives inside
+-macro arguments. First, it is not portable. It is "undefined
+-behavior" according to the C standard; that means different
+-compilers will do different things with it. Some will give you
+-errors. Some will dump core. Some will silently mangle your code -
+-you could get the equivalent of</p>
+-<pre>
+- memcpy(dest, src, 1224);
+-</pre>
+-<p>from the above example. A very few might do what you expected it
+-to. We therefore feel it is most useful for GCC to reject this
+-construct immediately so that it is found and fixed.</p>
+-
+-<p>Second, it is extraordinarily difficult to implement the
+-preprocessor such that it does what you would expect for every
+-possible directive found inside a macro argument. The best example is
+-perhaps</p>
+-<pre>
+-#define foo(arg) ... arg ...
+-foo(blah
+-#undef foo
+-blah)
+-</pre>
+-<p>which is <emph>impossible</emph> to implement in portable C without
+-leaking memory. Allowing only a subset of directives would be
+-confusing.</p>
+-
+-<p>It is always possible to rewrite code which uses conditionals
+-inside macros so that it doesn't. You could write the above
+-example</p>
+-<pre>
+-#ifdef PLATFORM1
+- memcpy(dest, src, 12);
+-#else
+- memcpy(dest, src, 24);
+-#endif
+-</pre>
+-<p>This is a bit more typing, but I personally think it's better style
+-in addition to being more portable.
+-
+-<hr>
+-<a name="misc"></a>
+-<h1>Miscellaneous</h1>
+-
+-<h2><a name="memexhausted">Virtual memory exhausted error</a></h2>
+-
+-<p> This error means your system ran out of memory; this can happen for large
+-files, particularly when optimizing. If you're getting this error you should
+-consider trying to simplify your files or reducing the optimization level.</p>
+-
+-<p>Note that using -pedantic or -Wreturn-type can cause an explosion in the
+-amount of memory needed for template-heavy C++ code, such as code that uses
+-STL. Also note that -Wall includes -Wreturn-type, so if you use -Wall you
+-will need to specify -Wno-return-type to turn it off.</p>
+-
+-<hr>
+-<h2><a name="snapshot">Snapshots, how, when, why</a></h2>
+-
+-<p> We make snapshots of the GCC sources about once a week; there is no
+-predetermined schedule. These snapshots are intended to give everyone
+-access to work in progress. Any given snapshot may generate incorrect code
+-or even fail to build.</p>
+-
+-<p>If you plan on downloading and using snapshots, we highly recommend you
+-subscribe to the GCC mailing lists. See <a href="index.html#mailinglists">
+-mailing lists</a> on the main GCC page for instructions on how to subscribe.</p>
+-
+-<p>When using the diff files to update from older snapshots to newer snapshots,
+-make sure to use "-E" and "-p" arguments to patch so that empty files are
+-deleted and full pathnames are provided to patch. If your version of
+-patch does not support "-E", you'll need to get a newer version. Also note
+-that you may need autoconf, autoheader and various other programs if you use
+-diff files to update from one snapshot to the next.</p>
+-
+-
+-<hr>
+-<h2><a name="friend">Friend Templates</a></h2>
+-
+-<p>In order to make a specialization of a template function a friend
+-of a (possibly template) class, you must explicitly state that the
+-friend function is a template, by appending angle brackets to its
+-name, and this template function must have been declared already.
+-Here's an example:</p>
+-<pre>
+-template &lt;typename T&gt; class foo {
+- friend void bar(foo&lt;T&gt;);
+-}
+-</pre>
+-<p>The above declaration declares a non-template function named
+-<TT>bar</TT>, so it must be explicitly defined for <B>each</B>
+-specialization of <TT>foo</TT>. A template definition of <TT>bar</TT>
+-won't do, because it is unrelated with the non-template declaration
+-above. So you'd have to end up writing:</p>
+-<pre>
+-void bar(foo&lt;int&gt;) { /* ... */ }
+-void bar(foo&lt;void&gt;) { /* ... */ }
+-</pre>
+-<p>If you meant <TT>bar</TT> to be a template function, you should
+-have forward-declared it as follows. Note that, since the template
+-function declaration refers to the template class, the template class
+-must be forward-declared too:</p>
+-<pre>
+-template &lt;typename T&gt;
+-class foo;
+-
+-template &lt;typename T&gt;
+-void bar(foo&lt;T&gt;);
+-
+-template &lt;typename T&gt;
+-class foo {
+- friend void bar&lt;&gt;(foo&lt;T&gt;);
+-};
+-
+-template &lt;typename T&gt;
+-void bar(foo&lt;T&gt;) { /* ... */ }
+-</pre>
+-<p>In this case, the template argument list could be left empty,
+-because it can be implicitly deduced from the function arguments, but
+-the angle brackets must be present, otherwise the declaration will be
+-taken as a non-template function. Furthermore, in some cases, you may
+-have to explicitly specify the template arguments, to remove
+-ambiguity.</p>
+-
+-<p>An error in the last public comment draft of the ANSI/ISO C++
+-Standard and the fact that previous releases of gcc would accept such
+-friend declarations as template declarations has led people to believe
+-that the forward declaration was not necessary, but, according to the
+-final version of the Standard, it is.</p>
+-
+-<hr>
+-<h2><a name="libg++">Where to find libg++</a></h2>
+-
+-<p>Many folks have been asking where to find libg++ for GCC. First we
+-should point out that few programs actually need libg++; most only need
+-libstdc++/libio which are included in the GCC distribution.</p>
+-
+-<p>If you do need libg++ you can get a libg++ release that works with
+-GCC from <a
+-href="ftp://egcs.cygnus.com/pub/egcs/infrastructure/">ftp://egcs.cygnus.com/pub/egcs/infrastructure/</a>.
+-Note that the 2.8.2 snapshot pre-dates the 2.8.1.2 release.</p>
+-
+-<hr>
+-<h2><a name="generated_files">autoconf, bison, xgettext, automake, etc</a></h2>
+-
+-<p>If you're using diffs up dated from one snapshot to the next, or
+-if you're using the CVS repository, you may need several additional programs
+-to build GCC.</p>
+-
+-<p>These include, but are not necessarily limited to autoconf, automake,
+-bison, and xgettext.</p>
+-
+-<p>This is necessary because neither diff nor cvs keep timestamps
+-correct. This causes problems for generated files as "make" may think
+-those generated files are out of date and try to regenerate them.</p>
+-
+-<p>An easy way to work around this problem is to use the <CODE>gcc_update
+-</CODE> script in the contrib subdirectory of GCC, which handles this
+-transparently without requiring installation of any additional tools.
+-(Note: Up to and including GCC 2.95 this script was called <CODE>egcs_update
+-</CODE>.)</p>
+-
+-
+-<p>When building from diffs or CVS or if you modified some sources,
+-you may also need to obtain development versions of some GNU tools, as
+-the production versions do not necessarily handle all features needed
+-to rebuild GCC.</p>
+-
+-<p>Autoconf is available from
+-<a href="http://sourceware.cygnus.com/autoconf/">
+-http://sourceware.cygnus.com/autoconf/</a>; have a look at
+-<a href="ftp://egcs.cygnus.com/pub/egcs/infrastructure/">
+-ftp://egcs.cygnus.com/pub/egcs/infrastructure/</a> for the other packages.
+-</p>
+-
+-<hr>
+-<h2><a name="conflicts">Conflicts when using cvs update</a></h2>
+-
+-<p>It is not uncommon to get CVS conflict messages for some generated files
+-when updating your local sources from the CVS repository. Typically such
+-conflicts occur with bison or autoconf generated files.</p>
+-
+-<p>As long as you haven't been making modifications to the generated files
+-or the generator files, it is safe to delete the offending file, then run
+-cvs update again to get a new copy.</p>
+-
+-<hr>
+-<h2><a name="gdb">Problems debugging GCC code</a></h2>
+-
+-<p>On some systems GCC will produce dwarf debug records by default; however
+-the gdb-4.16 release may not be able to read such debug records.</p>
+-
+-<p>You can either use the argument "-gstabs" instead of "-g" or pick up
+-a copy of gdb-4.17 to work around the problem.
+-
+-<hr>
+-<h2><a name="gnat">Using GCC with GNAT/Ada </a></h2>
+-<p>The GNU Ada front-end is not currently supported by GCC; however, it is
+-possible to build the GNAT compiler with a little work.</p>
+-
+-<p>First, retrieve the gnat-3.10p sources. The sources for the Ada front
+-end and runtime all live in the "ada" subdirectory. Move that subdirectory
+-to egcs/gcc/ada.</p>
+-
+-<p>Second, apply the patch found in egcs/gcc/README.gnat.</p>
+-
+-<p>Finally, rebuild per the GNAT build instructions.</p>
+-
+-<hr>
+-<h2><a name="gpc">Using GCC with GNU Pascal</a></h2>
+-
+-<p>The <a href="http://home.pages.de/~GNU-Pascal/">GNU Pascal</a>
+-front-end does work with EGCS 1.1 It does not work with EGCS 1.0.x and
+-the main branch of the CVS repository. A tarball can be found at
+-<A HREF="ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/beta/">
+-ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/beta/</A>.</p>
+-
+-<hr>
+-<h2><a name="cvssnapshots">Using CVS to download snapshots</a></h2>
+-
+-<p>It is possible to checkout specific snapshots with CVS or to check
+-out the latest snapshot.</p>
+-
+-<p>We use CVS tags to identify each snapshot we make. Snapshot tags have
+-the form "egcs_ss_YYYYMMDD". In addition, the latest official snapshot always
+-has the tag "gcc_latest_snapshot".</p>
+-
+-
+-<hr>
+-<h2><a name="picflag-needed">Why can't I build a shared library?</a></h2>
+-
+-<p>When building a shared library you may get an error message from the
+-linker like `assert pure-text failed:' or `DP relative code in file'.</p>
+-
+-<p>This kind of error occurs when you've failed to provide proper flags
+-to gcc when linking the shared library. </p>
+-
+-<p>You can get this error even if all the .o files for the shared library were
+-compiled with the proper PIC option. When building a shared library, gcc will
+-compile additional code to be included in the library. That additional code
+-must also be compiled with the proper PIC option.</p>
+-
+-<p>Adding the proper PIC option (<tt>-fpic</tt> or <tt>-fPIC</tt>) to the link
+-line which creates the shared library will fix this problem on targets that
+-support PIC in this manner. For example:</p>
+-<pre>
+- gcc -c -fPIC myfile.c
+- gcc -shared -o libmyfile.so -fPIC myfile.o
+-</pre>
+-
+-
+-<hr>
+-<h2><a name="squangle">How to work around too long C++ symbol names?
+-(<tt>-fsquangle</tt>)</a></h2>
+-
+-<p>If the standard assembler of your platform can't cope with the
+-large symbol names that the default g++ name mangling mechanism
+-produces, your best bet is to use GNU as, from the GNU binutils
+-package.</p>
+-
+-<p>Unfortunately, GNU as does not support all platforms supported by
+-egcs, so you may have to use an experimental work-around: the
+-<tt>-fsquangle</tt> option, that enables compression of symbol names.</p>
+-
+-<p>Note that this option is still under development, and subject to
+-change. Since it modifies the name mangling mechanism, you'll need to
+-build libstdc++ and any other C++ libraries with this option enabled.
+-Furthermore, if this option changes its behavior in the future, you'll
+-have to rebuild them all again. :-(</p>
+-
+-<p>This option can be enabled by default by initializing
+-`flag_do_squangling' with `1' in `gcc/cp/decl2.c' (it is not
+-initialized by default), then rebuilding egcs and any C++ libraries.</p>
+-
+-<hr>
+-<h2><a name="gperf">When building from CVS sources, I see 'gperf:
+-invalid option -- F', even with the most current version of gperf.
+-</a></h2>
+-
+-<p>The current version of gperf (v2.7) does not support the -F flag
+-which is used when building egcs from CVS sources. You will need to
+-obtain a patch for gperf and rebuild the program; this patch is available
+-at <a href="ftp://egcs.cygnus.com/pub/egcs/infrastructure">
+-ftp://egcs.cygnus.com/pub/egcs/infrastructure/</a></p>
+-
+-<p>Patches for other tools, particularly autoconf, may also be necessary
+-if you're building from CVS sources. Please see the
+-<a href="#generated_files">FAQ entry</a> regarding these tools to
+-determine if anything else is needed.</p>
+-
+-<p>These patched utilities should <strong>only</strong> be required if
+-you are building from CVS sources. For example, gperf is used to
+-generate C code for a perfect hash function given an input file.
+-Distributions of egcs already contain the generated C code, while the
+-CVS sources will provide only the gperf input file. So gperf should
+-only be necessary if you are building anything obtained from CVS.</p>
+-
+-<hr>
+-<h2><a name="vtables">When building C++, the linker says my constructors, destructors or virtual tables are undefined, but I defined them</a></h2>
+-
+-<p>The ISO C++ Standard specifies that all virtual methods of a class
+-that are not pure-virtual must be defined, but does not require any
+-diagnostic for violations of this rule [class.virtual]/8. Based on
+-this assumption, egcs will only emit the implicitly defined
+-constructors, the assignment operator, the destructor and the virtual
+-table of a class in the translation unit that defines its first such
+-non-inline method.</p>
+-
+-<p>Therefore, if you fail to define this particular method, the linker
+-may complain about the lack of definitions for apparently unrelated
+-symbols. Unfortunately, in order to improve this error message, it
+-might be necessary to change the linker, and this can't always be
+-done.</p>
+-
+-<p>The solution is to ensure that all virtual methods that are not
+-pure are defined. Note that a destructor must be defined even if it
+-is declared pure-virtual [class.dtor]/7.</p>
+-
+-<hr>
+-<h2><a name="libstdc++">What is libstdc++-v3 and how can I use it with g++?</a></h2>
+-
+-<p>From the <a href="http://sourceware.cygnus.com/libstdc++/faq/">libstdc++-FAQ</a>: "The EGCS Standard C++ Library v3, or libstdc++-2.90.x, is an ongoing project to implement the ISO 14882 Standard C++ library as described in chapters 17 through 27 and annex D."</p>
+-
+-<p>At the moment the libstdc++-v3 is no "drop in replacement" for GCC's libstdc++. The best way to use it is as follows:</p>
+-<ol>
+- <li>Build and install GCC</li>
+- <li>Build and install libstdc++-v3</li>
+- <li>Use compiler flags to use the new libstdc++</li>
+-</ol>
+-<p>Please note that the libstdc++-v3 is not yet complete and should only be used by experienced programmers.</p>
+-
+-<p>For more information please refer to the <a href="http://sourceware.cygnus.com/libstdc++/">libstdc++-v3 homepage</a></p>
+-
+-<hr>
+-
+-<p><a href="index.html">Return to the GCC home page</a></p>
+-<p><i>Last modified: October 19, 1999</i></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/gcc/cccp.c gcc-2.95.4/gcc/cccp.c
+--- gcc-2.95.3/gcc/cccp.c 2001-01-25 15:03:00.000000000 +0100
++++ gcc-2.95.4/gcc/cccp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* C Compatible Compiler Preprocessor (CCCP)
+ Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+- 1999, 2000 Free Software Foundation, Inc.
++ 1999, 2000, 2001 Free Software Foundation, Inc.
+ Written by Paul Rubin, June 1986
+ Adapted to ANSI C, Richard Stallman, Jan 1987
+
+@@ -58,10 +58,10 @@
+ #endif
+
+ /* By default, the suffix for object files is ".o". */
+-#ifdef OBJECT_SUFFIX
+-# define HAVE_OBJECT_SUFFIX
++#ifdef TARGET_OBJECT_SUFFIX
++# define HAVE_TARGET_OBJECT_SUFFIX
+ #else
+-# define OBJECT_SUFFIX ".o"
++# define TARGET_OBJECT_SUFFIX ".o"
+ #endif
+
+ /* VMS-specific definitions */
+@@ -2028,7 +2028,7 @@
+ q = p + (len - 4);
+
+ /* Supply our own suffix. */
+- strcpy (q, OBJECT_SUFFIX);
++ strcpy (q, TARGET_OBJECT_SUFFIX);
+
+ deps_output (p, ':');
+ deps_output (in_fname, ' ');
+diff -ruNb gcc-2.95.3/gcc/c-common.c gcc-2.95.4/gcc/c-common.c
+--- gcc-2.95.3/gcc/c-common.c 1999-09-07 10:11:16.000000000 +0200
++++ gcc-2.95.4/gcc/c-common.c 2017-11-07 22:10:12.000000000 +0100
+@@ -965,6 +965,15 @@
+ {
+ tree t, s, a, next, specs, attrs;
+
++ /* This can happen after an __extension__ in pedantic mode. */
++ if (specs_attrs != NULL_TREE
++ && TREE_CODE (specs_attrs) == INTEGER_CST)
++ {
++ *declspecs = NULL_TREE;
++ *prefix_attributes = NULL_TREE;
++ return;
++ }
++
+ /* This can happen in c++ (eg: decl: typespec initdecls ';'). */
+ if (specs_attrs != NULL_TREE
+ && TREE_CODE (specs_attrs) != TREE_LIST)
+diff -ruNb gcc-2.95.3/gcc/ChangeLog gcc-2.95.4/gcc/ChangeLog
+--- gcc-2.95.3/gcc/ChangeLog 2001-03-16 13:52:02.000000000 +0100
++++ gcc-2.95.4/gcc/ChangeLog 2017-11-07 22:10:12.000000000 +0100
+@@ -1,3 +1,129 @@
++2001-04-06 Bernd Schmidt <bernds@redhat.com>
++
++ 2000-10-17 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
++ * function.c (locate_and_pad_parm): Don't align stack unconditionally.
++
++ Thu Oct 28 10:20:02 1999 Geoffrey Keating <geoffk@cygnus.com>
++ * config/rs6000/rs6000.md (movsf): Don't convert a SUBREG
++ of the function return register into a plain REG until
++ after function inlining is done.
++
++2001-04-04 Bernd Schmidt <bernds@redhat.com>
++
++ Fri Nov 5 10:07:25 1999 Nick Clifton <nickc@cygnus.com>
++ * function.c (is_addressof): New function. Returns true if
++ the given piece of RTL is an ADDRESSOF.
++ (purge_addressof_1): Make boolean. Return false if the
++ ADDRESSOFs could not be purged.
++ (purge_addressof): If ADDRESSOFs could not be purged from the
++ notes attached to an insn, remove the offending note(s),
++ unless they are attached to a libcall.
++
++2001-04-03 Bernd Schmidt <bernds@redhat.com>
++
++ 2001-03-16 Jakub Jelinek <jakub@redhat.com>
++ * crtstuff.c (init_dummy): Use CRT_END_INIT_DUMMY if defined.
++ Remove ia32 linux PIC kludge and move it...
++ * config/i386/linux.h (CRT_END_INIT_DUMMY): ...here.
++
++ * loop.c (combine_movables): Restrict combinations of constants with
++ different modes so that we don't introduce SUBREGs into memory
++ addresses.
++
++ 2001-02-02 Philip Blundell <philb@gnu.org>
++ * arm/linux-elf.h (MAKE_DECL_ONE_ONLY, UNIQUE_SECTION_P): Define.
++ (UNIQUE_SECTION): Define.
++
++ Wed Aug 25 15:27:22 1999 Gavin Romig-Koch <gavin@cygnus.com>
++ * combine.c (nonzero_bits) : Allow single-ly set registers to be
++ anywere in the function only if they are pseudos and set before
++ being used (not live at the start of the function).
++ (num_sign_bit_copies) : Same.
++ (get_last_value_validate) : Same.
++ (get_last_value) : Same.
++
++ Fri Mar 3 12:49:28 2000 J"orn Rennecke <amylaar@cygnus.co.uk>
++ * reload1.c (reload_combine_note_use): Handle return register USEs.
++ REG case: Handle multi-hard-register hard regs.
++
++2001-03-30 Bernd Schmidt <bernds@redhat.com>
++
++ * jump.c (delete_barrier_successors): Fix error in last change.
++
++ * reload1.c (delete_output_reload): Call eliminate_regs on substed.
++ (reload_as_needed): Call update_eliminable_offsets a bit later.
++
++ * final.c (cleanup_subreg_operands): Also clean up inside MEMs.
++
++ Mon Oct 4 02:31:20 1999 Mark Mitchell <mark@codesourcery.com>
++ * mips.md: Define conditional move patterns for floating point
++ operands and DI mode conditions.
++
++ 2000-11-25 Jakub Jelinek <jakub@redhat.com>
++ * config/sparc/sparc.md (muldi3_v8plus): Remove H constraint.
++ Handle CONST_INT as second argument.
++
++2001-03-28 Bernd Schmidt <bernds@redhat.com>
++
++ * flow.c (propagate_block): When trying to delete a case vector, cope
++ if its label has LABEL_PRESERVE_P set.
++ * jump.c (jump_optimize_1): Move call to delete_barrier_successors to
++ a point where JUMP_LABELS and LABEL_NUSES are set up properly.
++ (delete_barrier_successors): If deleting a table jump, delete the case
++ vector as well.
++ * varasm.c (force_const_mem): If we have a label, set LABEL_PRESERVE_P
++ so it won't get deleted.
++
++Tue Mar 20 18:31:48 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
++
++ 1999-11-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
++ * c-lex.c (yylex): With -Wtraditional, when the ANSI type of an
++ integer constant does not match the traditional type, limit the
++ warnings to cases where the base of the type is ten.
++
++ * invoke.texi (-Wtraditional): Document it.
++
++2001-03-20 David O'Brien <obrien@FreeBSD.org>
++
++ from 2000-07-12 Zack Weinberg <zack@wolery.cumb.org>
++ * final.c (profile_function): Do not emit profile counters in
++ the data section, if NO_PROFILE_COUNTERS is defined.
++ * tm.texi: Document NO_PROFILE_COUNTERS. Update doc for
++ FUNCTION_PROFILER.
++
++ from 2000-10-02 David O'Brien <obrien@dragon.nuxi.com>
++ * config/i386/freebsd.h (NO_PROFILE_COUNTERS): Define.
++
++2001-03-19 Bernd Schmidt <bernds@redhat.com>
++
++ * version.c: Bump.
++
++ 2000-01-18 Martin v. Löwis <loewis@informatik.hu-berlin.de>
++ * c-parse.in (SAVE_WARN_FLAGS): Create an INTEGER_CST.
++ (RESTORE_WARN_FLAGS): Unpack it.
++ Change semantic type of extension to ttype.
++ * c-common.c (split_specs_attrs): Expect an INTEGER_CST.
++ * c-parse.y, c-parse.c, objc/objc-parse.y,
++ objc/objc-parse.c: Regenerate.
++
++ Wed Sep 1 09:12:02 1999 Jim Kingdon <http://developer.redhat.com>
++ * c-parse.in: save and restore warn_pointer_arith on __extension__
++ along with pedantic.
++ (SAVE_WARN_FLAGS, RESTORE_WARN_FLAGS): Added.
++ Set the type of extension to itype rather than $<itype>1 kludge.
++ * extend.texi (Alternate Keywords): Adjust documentation.
++
++ Bring back the sjlj eh fixes.
++ * expr.c (expand_builtin_setjmp_setup): New.
++ (expand_builtin_setjmp_receiver): New.
++ (expand_builtin_setjmp): Split out _setup and _receiver functions.
++ Move argument parsing in from ...
++ (expand_builtin): ... here.
++ * except.c (receive_exception_label): Branch around receiver
++ unless new-style exceptions. Call expand_builtin_setjmp_receiver.
++ (start_dynamic_handler): Call expand_builtin_setjmp_setup.
++ * expr.h: Update builtin setjmp decls.
++
+ Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
+
+ * gcc-2.95.3 Released.
+diff -ruNb gcc-2.95.3/gcc/c-lex.c gcc-2.95.4/gcc/c-lex.c
+--- gcc-2.95.3/gcc/c-lex.c 1999-03-20 20:21:23.000000000 +0100
++++ gcc-2.95.4/gcc/c-lex.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1812,7 +1812,11 @@
+
+ type = flag_traditional ? traditional_type : ansi_type;
+
+- if (warn_traditional && traditional_type != ansi_type)
++ /* We assume that constants specified in a non-decimal
++ base are bit patterns, and that the programmer really
++ meant what they wrote. */
++ if (warn_traditional && base == 10
++ && traditional_type != ansi_type)
+ {
+ if (TYPE_PRECISION (traditional_type)
+ != TYPE_PRECISION (ansi_type))
+diff -ruNb gcc-2.95.3/gcc/collect2.c gcc-2.95.4/gcc/collect2.c
+--- gcc-2.95.3/gcc/collect2.c 2001-01-25 15:03:01.000000000 +0100
++++ gcc-2.95.4/gcc/collect2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,7 +1,7 @@
+ /* Collect static initialization info into data structures that can be
+ traversed by C++ initialization and finalization routines.
+- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+- Free Software Foundation, Inc.
++ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
++ 2001 Free Software Foundation, Inc.
+ Contributed by Chris Smith (csmith@convex.com).
+ Heavily modified by Michael Meissner (meissner@cygnus.com),
+ Per Bothner (bothner@cygnus.com), and John Gilmore (gnu@cygnus.com).
+@@ -815,8 +815,8 @@
+ if (debug)
+ fprintf (stderr, "Looking for '%s'\n", name);
+
+-#ifdef EXECUTABLE_SUFFIX
+- len += strlen (EXECUTABLE_SUFFIX);
++#ifdef HOST_EXECUTABLE_SUFFIX
++ len += strlen (HOST_EXECUTABLE_SUFFIX);
+ #endif
+
+ temp = xmalloc (len);
+@@ -839,11 +839,11 @@
+ return temp;
+ }
+
+-#ifdef EXECUTABLE_SUFFIX
++#ifdef HOST_EXECUTABLE_SUFFIX
+ /* Some systems have a suffix for executable files.
+ So try appending that. */
+ strcpy (temp, name);
+- strcat (temp, EXECUTABLE_SUFFIX);
++ strcat (temp, HOST_EXECUTABLE_SUFFIX);
+
+ if (access (temp, X_OK) == 0)
+ return temp;
+@@ -861,10 +861,10 @@
+ if (access (temp, X_OK) == 0)
+ return temp;
+
+-#ifdef EXECUTABLE_SUFFIX
++#ifdef HOST_EXECUTABLE_SUFFIX
+ /* Some systems have a suffix for executable files.
+ So try appending that. */
+- strcat (temp, EXECUTABLE_SUFFIX);
++ strcat (temp, HOST_EXECUTABLE_SUFFIX);
+
+ if (access (temp, X_OK) == 0)
+ return temp;
+diff -ruNb gcc-2.95.3/gcc/combine.c gcc-2.95.4/gcc/combine.c
+--- gcc-2.95.3/gcc/combine.c 2001-01-25 15:03:01.000000000 +0100
++++ gcc-2.95.4/gcc/combine.c 2017-11-07 22:10:12.000000000 +0100
+@@ -7580,8 +7580,11 @@
+
+ if (reg_last_set_value[REGNO (x)] != 0
+ && reg_last_set_mode[REGNO (x)] == mode
+- && (REG_N_SETS (REGNO (x)) == 1
+- || reg_last_set_label[REGNO (x)] == label_tick)
++ && (reg_last_set_label[REGNO (x)] == label_tick
++ || (REGNO (x) >= FIRST_PSEUDO_REGISTER
++ && REG_N_SETS (REGNO (x)) == 1
++ && ! REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start,
++ REGNO (x))))
+ && INSN_CUID (reg_last_set[REGNO (x)]) < subst_low_cuid)
+ return reg_last_set_nonzero_bits[REGNO (x)];
+
+@@ -7970,8 +7973,11 @@
+
+ if (reg_last_set_value[REGNO (x)] != 0
+ && reg_last_set_mode[REGNO (x)] == mode
+- && (REG_N_SETS (REGNO (x)) == 1
+- || reg_last_set_label[REGNO (x)] == label_tick)
++ && (reg_last_set_label[REGNO (x)] == label_tick
++ || (REGNO (x) >= FIRST_PSEUDO_REGISTER
++ && REG_N_SETS (REGNO (x)) == 1
++ && ! REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start,
++ REGNO (x))))
+ && INSN_CUID (reg_last_set[REGNO (x)]) < subst_low_cuid)
+ return reg_last_set_sign_bit_copies[REGNO (x)];
+
+@@ -10819,9 +10825,11 @@
+
+ for (j = regno; j < endregno; j++)
+ if (reg_last_set_invalid[j]
+- /* If this is a pseudo-register that was only set once, it is
+- always valid. */
+- || (! (regno >= FIRST_PSEUDO_REGISTER && REG_N_SETS (regno) == 1)
++ /* If this is a pseudo-register that was only set once and not
++ live at the beginning of the function, it is always valid. */
++ || (! (regno >= FIRST_PSEUDO_REGISTER
++ && REG_N_SETS (regno) == 1
++ && ! REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno))
+ && reg_last_set_label[j] > tick))
+ {
+ if (replace)
+@@ -10880,12 +10888,21 @@
+ regno = REGNO (x);
+ value = reg_last_set_value[regno];
+
+- /* If we don't have a value or if it isn't for this basic block,
+- return 0. */
++ /* If we don't have a value, or if it isn't for this basic block and
++ it's either a hard register, set more than once, or it's a live
++ at the beginning of the function, return 0.
++
++ Because if it's not live at the beginnning of the function then the reg
++ is always set before being used (is never used without being set).
++ And, if it's set only once, and it's always set before use, then all
++ uses must have the same last value, even if it's not from this basic
++ block. */
+
+ if (value == 0
+- || (REG_N_SETS (regno) != 1
+- && reg_last_set_label[regno] != label_tick))
++ || (reg_last_set_label[regno] != label_tick
++ && (regno < FIRST_PSEUDO_REGISTER
++ || REG_N_SETS (regno) != 1
++ || REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno))))
+ return 0;
+
+ /* If the value was set in a later insn than the ones we are processing,
+diff -ruNb gcc-2.95.3/gcc/config/alpha/vms.h gcc-2.95.4/gcc/config/alpha/vms.h
+--- gcc-2.95.3/gcc/config/alpha/vms.h 1999-06-21 22:15:14.000000000 +0200
++++ gcc-2.95.4/gcc/config/alpha/vms.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Output variables, constants and external declarations, for GNU compiler.
+- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
++ Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -20,6 +20,9 @@
+
+ #define OPEN_VMS 1
+
++#define TARGET_OBJECT_SUFFIX ".obj"
++#define TARGET_EXECUTABLE_SUFFIX ".exe"
++
+ /* This enables certain macros in alpha.h, which will make an indirect
+ reference to an external symbol an invalid address. This needs to be
+ defined before we include alpha.h, since it determines which macros
+diff -ruNb gcc-2.95.3/gcc/config/alpha/xm-vms.h gcc-2.95.4/gcc/config/alpha/xm-vms.h
+--- gcc-2.95.3/gcc/config/alpha/xm-vms.h 1998-12-16 22:01:15.000000000 +0100
++++ gcc-2.95.4/gcc/config/alpha/xm-vms.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Configuration for GNU C-compiler for openVMS/Alpha.
+- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
++ Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
+ Contributed by Klaus Kaempf (kkaempf@progis.de).
+
+ This file is part of GNU CC.
+@@ -89,5 +89,5 @@
+ extern char *alloca (unsigned int);
+ #endif
+
+-#define OBJECT_SUFFIX ".obj"
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_OBJECT_SUFFIX ".obj"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+diff -ruNb gcc-2.95.3/gcc/config/arm/linux-elf.h gcc-2.95.4/gcc/config/arm/linux-elf.h
+--- gcc-2.95.3/gcc/config/arm/linux-elf.h 2001-01-25 15:03:29.000000000 +0100
++++ gcc-2.95.4/gcc/config/arm/linux-elf.h 2017-11-07 22:10:12.000000000 +0100
+@@ -223,6 +223,44 @@
+ go into the const section. */
+ #define SELECT_RTX_SECTION(MODE,RTX) const_section ()
+
++#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
++#define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL))
++
++#define UNIQUE_SECTION(DECL, RELOC) \
++ do \
++ { \
++ int len; \
++ char *name; \
++ char *string; \
++ char *prefix; \
++ \
++ name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
++ \
++ if (! DECL_ONE_ONLY (DECL)) \
++ { \
++ prefix = "."; \
++ if (TREE_CODE (DECL) == FUNCTION_DECL) \
++ prefix = ".text."; \
++ else if (DECL_READONLY_SECTION (DECL, RELOC)) \
++ prefix = ".rodata."; \
++ else \
++ prefix = ".data."; \
++ } \
++ else if (TREE_CODE (DECL) == FUNCTION_DECL) \
++ prefix = ".gnu.linkonce.t."; \
++ else if (DECL_READONLY_SECTION (DECL, RELOC)) \
++ prefix = ".gnu.linkonce.r."; \
++ else \
++ prefix = ".gnu.linkonce.d."; \
++ \
++ len = strlen (name) + strlen (prefix); \
++ string = alloca (len + 1); \
++ sprintf (string, "%s%s", prefix, name); \
++ \
++ DECL_SECTION_NAME (DECL) = build_string (len, string); \
++ } \
++ while (0)
++
+ /* On svr4, we *do* have support for the .init and .fini sections, and we
+ can put stuff in there to be executed before and after `main'. We let
+ crtstuff.c and other files know this by defining the following symbols.
+diff -ruNb gcc-2.95.3/gcc/config/i386/cygwin.h gcc-2.95.4/gcc/config/i386/cygwin.h
+--- gcc-2.95.3/gcc/config/i386/cygwin.h 1999-06-21 06:54:43.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/cygwin.h 2017-11-07 22:10:12.000000000 +0100
+@@ -2,7 +2,8 @@
+ hosting on Windows NT 3.x, using a Unix style C library and tools,
+ as distinct from winnt.h, which is used to build GCC for use with a
+ windows style library and tool set and uses the Microsoft tools.
+- Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2001 Free Software
++ Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -27,6 +28,8 @@
+ #define SDB_DEBUGGING_INFO
+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
++#define TARGET_EXECUTABLE_SUFFIX ".exe"
++
+ #include "i386/gas.h"
+ #include "dbxcoff.h"
+
+diff -ruNb gcc-2.95.3/gcc/config/i386/freebsd-elf.h gcc-2.95.4/gcc/config/i386/freebsd-elf.h
+--- gcc-2.95.3/gcc/config/i386/freebsd-elf.h 2000-12-18 15:05:58.000000000 +0100
++++ gcc-2.95.4/gcc/config/i386/freebsd-elf.h 2017-11-07 22:10:12.000000000 +0100
+@@ -135,6 +135,9 @@
+ : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
+ : (-1))
+
++#undef NO_PROFILE_COUNTERS
++#define NO_PROFILE_COUNTERS
++
+ /* Tell final.c that we don't need a label passed to mcount. */
+
+ #undef FUNCTION_PROFILER
+diff -ruNb gcc-2.95.3/gcc/config/i386/linux.h gcc-2.95.4/gcc/config/i386/linux.h
+--- gcc-2.95.3/gcc/config/i386/linux.h 1999-04-08 02:32:13.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/linux.h 2017-11-07 22:10:12.000000000 +0100
+@@ -234,3 +234,21 @@
+ } \
+ } while (0)
+ #endif
++
++#if defined(__PIC__) && defined (USE_GNULIBC_1)
++/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr,
++ __environ and atexit (). We have to make sure they are in the .dynsym
++ section. We accomplish it by making a dummy call here. This
++ code is never reached. */
++
++#define CRT_END_INIT_DUMMY \
++ do \
++ { \
++ extern void *___brk_addr; \
++ extern char **__environ; \
++ \
++ ___brk_addr = __environ; \
++ atexit (0); \
++ } \
++ while (0)
++#endif
+diff -ruNb gcc-2.95.3/gcc/config/i386/mingw32.h gcc-2.95.4/gcc/config/i386/mingw32.h
+--- gcc-2.95.3/gcc/config/i386/mingw32.h 1999-04-12 20:18:06.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/mingw32.h 2017-11-07 22:10:12.000000000 +0100
+@@ -2,7 +2,7 @@
+ hosting on Windows32, using GNU tools and the Windows32 API Library,
+ as distinct from winnt.h, which is used to build GCC for use with a
+ windows style library and tool set and uses the Microsoft tools.
+- Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -26,6 +26,8 @@
+
+ #include "i386/cygwin.h"
+
++#define TARGET_EXECUTABLE_SUFFIX ".exe"
++
+ /* Please keep changes to CPP_PREDEFINES in sync with i386/crtdll. The
+ only difference between the two should be __MSVCRT__ needed to
+ distinguish MSVC from CRTDLL runtime in mingw headers. */
+diff -ruNb gcc-2.95.3/gcc/config/i386/xm-cygwin.h gcc-2.95.4/gcc/config/i386/xm-cygwin.h
+--- gcc-2.95.3/gcc/config/i386/xm-cygwin.h 1999-04-22 16:40:55.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/xm-cygwin.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,7 @@
+ /* Configuration for GNU C-compiler for hosting on Windows NT.
+ using a unix style C library.
+- Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2001 Free Software
++ Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -19,7 +20,7 @@
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+ #define NO_SYS_SIGLIST 1
+
+ /* We support both "/" and "\" since everybody tests both but we
+@@ -31,26 +32,126 @@
+ #define DIR_SEPARATOR '/'
+ #define DIR_SEPARATOR_2 '\\'
+
+-/* Convert win32 style path lists to POSIX style for consistency. */
++/* Get path lists and convert it to Posix or Win32 style. */
++/* Posix is default unless FORCE_DOS_PATH_STYLE defined. */
++
++#ifdef CYGWIN_USES_DOS_PATHS
++#define HAVE_DOS_BASED_FILESYSTEM
++#define FORCE_DOS_PATH_STYLE 1
++#endif
++#ifdef CYGWIN_VXWORKS_PATHS
++#define SYNTHETIC_VXWORKS_PREFIXES
++#endif
++
++
++#ifdef FORCE_DOS_PATH_STYLE
++
++#define PATH_SEPARATOR ';'
++
++#else
++
++#define FORCE_DOS_PATH_STYLE 0
++#define PATH_SEPARATOR ':'
++
++#endif
++
+ #undef GET_ENV_PATH_LIST
++#ifdef __CYGWIN32__
++
++#define CONVERT_PATH(VAR,NAME) \
++do { \
++ char *_epath; \
++ char *_resultepath; \
++ _epath = _resultepath = NAME; \
++ if (_epath != NULL && *_epath != 0) \
++ if (FORCE_DOS_PATH_STYLE) { \
++ if ( cygwin32_posix_path_list_p (_epath)) \
++ { \
++ _resultepath = (char *) xmalloc \
++ (cygwin32_posix_to_win32_path_list_buf_size (_epath)); \
++ cygwin32_posix_to_win32_path_list (_epath, _resultepath); \
++ } \
++ } else \
++ if ( !cygwin32_posix_path_list_p (_epath)) \
++ { \
++ _resultepath = (char *) xmalloc \
++ (cygwin32_win32_to_posix_path_list_buf_size (_epath)); \
++ cygwin32_win32_to_posix_path_list (_epath, _resultepath); \
++ } \
++ (VAR) = _resultepath; \
++} while (0)
++
+ #define GET_ENV_PATH_LIST(VAR,NAME) \
+ do { \
+ char *_epath; \
+- char *_posixepath; \
+- _epath = _posixepath = getenv (NAME); \
+- /* if we have a posix path list, convert to posix path list */ \
+- if (_epath != NULL && *_epath != 0 \
+- && ! cygwin_posix_path_list_p (_epath)) \
++ char *_resultepath; \
++ _epath = _resultepath = getenv (NAME); \
++ if (_epath != NULL && *_epath != 0) \
++ if (FORCE_DOS_PATH_STYLE) { \
++ if ( cygwin32_posix_path_list_p (_epath)) \
++ { \
++ _resultepath = (char *) xmalloc \
++ (cygwin32_posix_to_win32_path_list_buf_size (_epath)); \
++ cygwin32_posix_to_win32_path_list (_epath, _resultepath); \
++ } \
++ } else \
++ if ( !cygwin32_posix_path_list_p (_epath)) \
+ { \
+- char *p; \
+- _posixepath = (char *) xmalloc \
++ _resultepath = (char *) xmalloc \
++ (cygwin32_win32_to_posix_path_list_buf_size (_epath)); \
++ cygwin32_win32_to_posix_path_list (_epath, _resultepath); \
++ } \
++ (VAR) = _resultepath; \
++} while (0)
++
++#else
++
++#define CONVERT_PATH(VAR,NAME)\
++do { \
++ char *_epath; \
++ char *_resultepath; \
++ _epath = _resultepath = NAME; \
++ if (_epath != NULL && *_epath != 0) \
++ if (FORCE_DOS_PATH_STYLE) { \
++ if ( cygwin_posix_path_list_p (_epath)) \
++ { \
++ _resultepath = (char *) xmalloc \
++ (cygwin_posix_to_win32_path_list_buf_size (_epath)); \
++ cygwin_posix_to_win32_path_list (_epath, _resultepath); \
++ } \
++ } else \
++ if ( !cygwin_posix_path_list_p (_epath)) \
++ { \
++ _resultepath = (char *) xmalloc \
+ (cygwin_win32_to_posix_path_list_buf_size (_epath)); \
+- cygwin_win32_to_posix_path_list (_epath, _posixepath); \
++ cygwin_win32_to_posix_path_list (_epath, _resultepath); \
+ } \
+- (VAR) = _posixepath; \
++ (VAR) = _resultepath; \
+ } while (0)
+
+-#define PATH_SEPARATOR ':'
++#define GET_ENV_PATH_LIST(VAR,NAME) \
++do { \
++ char *_epath; \
++ char *_resultepath; \
++ _epath = _resultepath = getenv (NAME); \
++ if (_epath != NULL && *_epath != 0) \
++ if (FORCE_DOS_PATH_STYLE) { \
++ if ( cygwin_posix_path_list_p (_epath)) \
++ { \
++ _resultepath = (char *) xmalloc \
++ (cygwin_posix_to_win32_path_list_buf_size (_epath)); \
++ cygwin_posix_to_win32_path_list (_epath, _resultepath); \
++ } \
++ } else \
++ if ( !cygwin_posix_path_list_p (_epath)) \
++ { \
++ _resultepath = (char *) xmalloc \
++ (cygwin_win32_to_posix_path_list_buf_size (_epath)); \
++ cygwin_win32_to_posix_path_list (_epath, _resultepath); \
++ } \
++ (VAR) = _resultepath; \
++} while (0)
++#endif
+
+ /* This is needed so that protoize will compile. */
+ #ifndef POSIX
+diff -ruNb gcc-2.95.3/gcc/config/i386/xm-djgpp.h gcc-2.95.4/gcc/config/i386/xm-djgpp.h
+--- gcc-2.95.3/gcc/config/i386/xm-djgpp.h 1999-06-21 07:24:33.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/xm-djgpp.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Configuration for GNU C-compiler for Intel 80386 running DJGPP.
+- Copyright (C) 1988, 1996, 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1988, 1996, 1998, 1999, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -25,7 +25,7 @@
+ /* Use semicolons to separate elements of a path. */
+ #define PATH_SEPARATOR ';'
+
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+
+ /* Even though we support "/", allow "\" since everybody tests both. */
+ #define DIR_SEPARATOR '/'
+diff -ruNb gcc-2.95.3/gcc/config/i386/xm-dos.h gcc-2.95.4/gcc/config/i386/xm-dos.h
+--- gcc-2.95.3/gcc/config/i386/xm-dos.h 1999-04-10 06:27:12.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/xm-dos.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Configuration for GNU C-compiler for Intel 80386 running DOS.
+- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -31,7 +31,7 @@
+ #define HAVE_DOS_BASED_FILE_SYSTEM
+
+ /* Suffix for executable file names. */
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+
+ #define MKTEMP_EACH_FILE 1
+
+diff -ruNb gcc-2.95.3/gcc/config/i386/xm-mingw32.h gcc-2.95.4/gcc/config/i386/xm-mingw32.h
+--- gcc-2.95.3/gcc/config/i386/xm-mingw32.h 1999-04-10 06:27:13.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/xm-mingw32.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* Configuration for GNU C-compiler for hosting on Windows32.
+ using GNU tools and the Windows32 API Library.
+- Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -42,7 +42,7 @@
+ like Cygwin does. */
+ #define HAVE_DOS_BASED_FILE_SYSTEM
+
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+
+ #undef PATH_SEPARATOR
+ #define PATH_SEPARATOR ';'
+diff -ruNb gcc-2.95.3/gcc/config/i386/xm-os2.h gcc-2.95.4/gcc/config/i386/xm-os2.h
+--- gcc-2.95.3/gcc/config/i386/xm-os2.h 1999-04-10 06:27:14.000000000 +0200
++++ gcc-2.95.4/gcc/config/i386/xm-os2.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,7 @@
+ /* Configuration for GNU compiler
+ for an Intel i386 or later processor running OS/2 2.x.
+- Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999, 2001 Free Software
++ Foundation, Inc.
+ Contributed by Samuel Figueroa (figueroa@apple.com)
+
+ This file is part of GNU CC.
+@@ -61,11 +62,11 @@
+ /* Allow handling of drive names. */
+ #define HAVE_DOS_BASED_FILE_SYSTEM
+
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+
+ /* The EMX compiler uses regular .o files */
+ #ifndef __EMX__
+-#define OBJECT_SUFFIX ".obj"
++#define HOST_OBJECT_SUFFIX ".obj"
+ #endif
+
+ /* This is required to make temporary file names unique on file
+diff -ruNb gcc-2.95.3/gcc/config/m68k/mot3300-crt0.S gcc-2.95.4/gcc/config/m68k/mot3300-crt0.S
+--- gcc-2.95.3/gcc/config/m68k/mot3300-crt0.S 1998-12-16 22:07:03.000000000 +0100
++++ gcc-2.95.4/gcc/config/m68k/mot3300-crt0.S 2017-11-07 22:10:12.000000000 +0100
+@@ -93,6 +93,6 @@
+ COMM splimit%,4
+ COMM environ,4
+
+- IDENT ("$Id: mot3300-crt0.S,v 1.1.1.2 1998/01/14 19:39:06 law Exp $")
++ IDENT ("$Id: mot3300-crt0.S,v 1.2 1998/12/16 21:07:03 law Exp $")
+ IDENT ("Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de)")
+ IDENT ("Corrections by Philippe De Muyter (phdm@macqel.be)")
+diff -ruNb gcc-2.95.3/gcc/config/m68k/mot3300Mcrt0.S gcc-2.95.4/gcc/config/m68k/mot3300Mcrt0.S
+--- gcc-2.95.3/gcc/config/m68k/mot3300Mcrt0.S 1998-12-16 22:07:05.000000000 +0100
++++ gcc-2.95.4/gcc/config/m68k/mot3300Mcrt0.S 2017-11-07 22:10:12.000000000 +0100
+@@ -137,6 +137,6 @@
+ COMM environ,4
+ COMM _countbase,4
+
+- IDENT ("$Id: mot3300Mcrt0.S,v 1.1.1.2 1998/01/14 19:39:08 law Exp $")
++ IDENT ("$Id: mot3300Mcrt0.S,v 1.2 1998/12/16 21:07:05 law Exp $")
+ IDENT ("Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de)")
+ IDENT ("Corrections by Philippe De Muyter (phdm@macqel.be)")
+diff -ruNb gcc-2.95.3/gcc/config/m88k/dgux.h gcc-2.95.4/gcc/config/m88k/dgux.h
+--- gcc-2.95.3/gcc/config/m88k/dgux.h 1998-12-16 22:08:12.000000000 +0100
++++ gcc-2.95.4/gcc/config/m88k/dgux.h 2017-11-07 22:10:12.000000000 +0100
+@@ -30,7 +30,7 @@
+ (TARGET_SVR4 ? DWARF_DEBUG : SDB_DEBUG)
+
+ #ifndef VERSION_INFO2
+-#define VERSION_INFO2 "$Revision: 1.3 $"
++#define VERSION_INFO2 "$Revision: 1.4 $"
+ #endif
+ #ifndef NO_BUGS
+ #define AS_BUG_IMMEDIATE_LABEL
+diff -ruNb gcc-2.95.3/gcc/config/m88k/m88k.h gcc-2.95.4/gcc/config/m88k/m88k.h
+--- gcc-2.95.3/gcc/config/m88k/m88k.h 1998-12-16 22:08:23.000000000 +0100
++++ gcc-2.95.4/gcc/config/m88k/m88k.h 2017-11-07 22:10:12.000000000 +0100
+@@ -198,13 +198,13 @@
+ Redefined in sysv4.h, and luna.h. */
+ #define VERSION_INFO1 "m88k, "
+ #ifndef VERSION_INFO2
+-#define VERSION_INFO2 "$Revision: 1.11 $"
++#define VERSION_INFO2 "$Revision: 1.12 $"
+ #endif
+
+ #ifndef VERSION_STRING
+ #define VERSION_STRING version_string
+ #ifdef __STDC__
+-#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.11 $ " __DATE__
++#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.12 $ " __DATE__
+ #else
+ #define TM_RCS_ID "$What: <@(#) m88k.h,v 1.1.1.2.2.2> $"
+ #endif /* __STDC__ */
+diff -ruNb gcc-2.95.3/gcc/config/mips/mips.md gcc-2.95.4/gcc/config/mips/mips.md
+--- gcc-2.95.3/gcc/config/mips/mips.md 1999-06-29 03:59:20.000000000 +0200
++++ gcc-2.95.4/gcc/config/mips/mips.md 2017-11-07 22:10:12.000000000 +0100
+@@ -10086,6 +10086,21 @@
+ (define_insn ""
+ [(set (match_operand:SF 0 "register_operand" "=f,f")
+ (if_then_else:SF
++ (match_operator 4 "equality_op"
++ [(match_operand:DI 1 "se_register_operand" "d,d")
++ (const_int 0)])
++ (match_operand:SF 2 "register_operand" "f,0")
++ (match_operand:SF 3 "register_operand" "0,f")))]
++ "mips_isa >= 4 && TARGET_HARD_FLOAT"
++ "@
++ mov%B4.s\\t%0,%2,%1
++ mov%b4.s\\t%0,%3,%1"
++ [(set_attr "type" "move")
++ (set_attr "mode" "SF")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "register_operand" "=f,f")
++ (if_then_else:SF
+ (match_operator 3 "equality_op" [(match_operand:CC 4
+ "register_operand"
+ "z,z")
+@@ -10107,6 +10122,21 @@
+ (const_int 0)])
+ (match_operand:DF 2 "register_operand" "f,0")
+ (match_operand:DF 3 "register_operand" "0,f")))]
++ "mips_isa >= 4 && TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
++ "@
++ mov%B4.d\\t%0,%2,%1
++ mov%b4.d\\t%0,%3,%1"
++ [(set_attr "type" "move")
++ (set_attr "mode" "DF")])
++
++(define_insn ""
++ [(set (match_operand:DF 0 "register_operand" "=f,f")
++ (if_then_else:DF
++ (match_operator 4 "equality_op"
++ [(match_operand:DI 1 "se_register_operand" "d,d")
++ (const_int 0)])
++ (match_operand:DF 2 "register_operand" "f,0")
++ (match_operand:DF 3 "register_operand" "0,f")))]
+ "mips_isa >= 4 && TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
+ "@
+ mov%B4.d\\t%0,%2,%1
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/rs6000.c gcc-2.95.4/gcc/config/rs6000/rs6000.c
+--- gcc-2.95.3/gcc/config/rs6000/rs6000.c 2001-01-25 15:03:34.000000000 +0100
++++ gcc-2.95.4/gcc/config/rs6000/rs6000.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* Subroutines used for code generation on IBM RS/6000.
+- Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+- Free Software Foundation, Inc.
++ Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
++ 2001 Free Software Foundation, Inc.
+ Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ This file is part of GNU CC.
+@@ -1193,7 +1193,6 @@
+ || (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER));
+ }
+
+-
+ /* Return 1 if the operand is a SYMBOL_REF for a function known to be in
+ this file and the function is not weakly defined. */
+
+@@ -1202,12 +1201,18 @@
+ register rtx op;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
+ {
+- return (GET_CODE (op) == SYMBOL_REF
+- && (SYMBOL_REF_FLAG (op)
+- || (op == XEXP (DECL_RTL (current_function_decl), 0)
+- && !DECL_WEAK (current_function_decl))));
+-}
++ if (GET_CODE(op) != SYMBOL_REF)
++ return 0;
++
++ if (op == XEXP (DECL_RTL (current_function_decl), 0)
++ && !DECL_WEAK (current_function_decl))
++ {
++ SYMBOL_REF_FLAG(op) = 1;
++ return 1;
++ }
+
++ return SYMBOL_REF_FLAG (op) != 0;
++}
+
+ /* Return 1 if this operand is a valid input for a move insn. */
+
+@@ -1381,6 +1386,9 @@
+ if (cum->call_cookie & CALL_LONG)
+ fprintf (stderr, " longcall,");
+
++ if (cum->call_cookie & CALL_SHORT)
++ fprintf (stderr, " shortcall,");
++
+ fprintf (stderr, " proto = %d, nargs = %d\n",
+ cum->prototype, cum->nargs_prototype);
+ }
+@@ -1419,7 +1427,8 @@
+
+ Windows NT wants anything >= 8 bytes to be double word aligned.
+
+- V.4 wants long longs to be double word aligned. */
++ V.4 wants long longs to be double word aligned.
++ WRS272 does not align DFmode to 64 */
+
+ int
+ function_arg_boundary (mode, type)
+@@ -1427,7 +1436,7 @@
+ tree type;
+ {
+ if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
+- && (mode == DImode || mode == DFmode))
++ && (mode == DImode || ((!TARGET_VXCOMPAT272) && mode == DFmode)))
+ return 64;
+
+ if (DEFAULT_ABI != ABI_NT || TARGET_64BIT)
+@@ -1461,7 +1470,8 @@
+ cum->fregno++;
+ else
+ {
+- if (mode == DFmode)
++ /* DFmode is 32-, not 64- aligned on stack in 272 abi */
++ if (mode == DFmode && (!TARGET_VXCOMPAT272))
+ cum->words += cum->words & 1;
+ cum->words += RS6000_ARG_SIZE (mode, type, 1);
+ }
+@@ -5676,6 +5686,10 @@
+ if (is_attribute_p ("longcall", identifier))
+ return (args == NULL_TREE);
+
++ /* Shortcall overrides implicit longcalls */
++ if (is_attribute_p ("shortcall", identifier))
++ return (args == NULL_TREE);
++
+ if (DEFAULT_ABI == ABI_NT)
+ {
+ /* Stdcall attribute says callee is responsible for popping arguments
+@@ -5775,6 +5789,28 @@
+ return reg2;
+ }
+
++/* A C expression whose value is nonzero if a 32 bit "longcall" should be
++ generated for this call. We generate a longcall if the function
++ is not declared __attribute__ ((shortcall), AND:
++ (i) the function is declared __attribute__ ((longcall)), or
++ (ii) -mlongcall is enabled and we don't know for sure that the target
++ function is declared in this file
++ This function will typically be called by C fragments in the machine
++ description file. call_ref and call_cookie will correspond to
++ matched rtl operands.
++*/
++
++int
++rs6000_is_longcall_p (call_ref, call_cookie)
++ rtx call_ref;
++ int call_cookie;
++{
++ return !(call_cookie & CALL_SHORT) &&
++ ((call_cookie & CALL_LONG) ||
++ (TARGET_LONGCALL &&
++ !current_file_function_operand (call_ref, VOIDmode)));
++}
++
+ /* Return a reference suitable for calling a function with the longcall attribute. */
+ struct rtx_def *
+ rs6000_longcall_ref (call_ref)
+@@ -5890,6 +5926,7 @@
+ if (TREE_CODE (decl) == FUNCTION_DECL)
+ {
+ rtx sym_ref = XEXP (DECL_RTL (decl), 0);
++
+ if ((TREE_ASM_WRITTEN (decl) || ! TREE_PUBLIC (decl))
+ && !DECL_WEAK (decl))
+ SYMBOL_REF_FLAG (sym_ref) = 1;
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/rs6000.h gcc-2.95.4/gcc/config/rs6000/rs6000.h
+--- gcc-2.95.3/gcc/config/rs6000/rs6000.h 2000-03-22 19:54:05.000000000 +0100
++++ gcc-2.95.4/gcc/config/rs6000/rs6000.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Definitions of target machine for GNU compiler, for IBM RS/6000.
+- Copyright (C) 1992, 93-8, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1992, 93-8, 1999, 2001 Free Software Foundation, Inc.
+ Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ This file is part of GNU CC.
+@@ -52,7 +52,7 @@
+
+ #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_cpu)"
+
+-/* Common CPP definitions used by CPP_SPEC among the various targets
++/* Common CPP definitions used by CPP_SPEC amongst the various targets
+ for handling -mcpu=xxx switches. */
+ #define CPP_CPU_SPEC \
+ "%{!mcpu*: \
+@@ -108,7 +108,7 @@
+ #define CPP_SYSV_DEFAULT_SPEC ""
+ #endif
+
+-/* Common ASM definitions used by ASM_SPEC among the various targets
++/* Common ASM definitions used by ASM_SPEC amongst the various targets
+ for handling -mcpu=xxx switches. */
+ #define ASM_CPU_SPEC \
+ "%{!mcpu*: \
+@@ -279,6 +279,16 @@
+ /* Disable fused multiply/add operations */
+ #define MASK_NO_FUSED_MADD 0x00020000
+
++/* Use a conservative heuristic to determine whether to
++ make a direct (26 bit) call or an indirect (32 bit) call:
++ We make a longcall unless the target function is declared
++ static, or its definition has already been seen, or
++ it is declared with the attribute "shortcall" .
++ An underlying assumption is that individual translation
++ units span less than 32MB so that it is always safe
++ to make direct calls to functions in the same module. */
++#define MASK_LONGCALL 0x00080000
++
+ #define TARGET_POWER (target_flags & MASK_POWER)
+ #define TARGET_POWER2 (target_flags & MASK_POWER2)
+ #define TARGET_POWERPC (target_flags & MASK_POWERPC)
+@@ -297,11 +307,13 @@
+ #define TARGET_STRING_SET (target_flags & MASK_STRING_SET)
+ #define TARGET_NO_UPDATE (target_flags & MASK_NO_UPDATE)
+ #define TARGET_NO_FUSED_MADD (target_flags & MASK_NO_FUSED_MADD)
++#define TARGET_VXCOMPAT272 (FALSE)
+
+ #define TARGET_32BIT (! TARGET_64BIT)
+ #define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT)
+ #define TARGET_UPDATE (! TARGET_NO_UPDATE)
+ #define TARGET_FUSED_MADD (! TARGET_NO_FUSED_MADD)
++#define TARGET_LONGCALL (target_flags & MASK_LONGCALL)
+
+ /* Pseudo target to indicate whether the object format is ELF
+ (to get around not having conditional compilation in the md file) */
+@@ -390,6 +402,8 @@
+ {"no-update", MASK_NO_UPDATE}, \
+ {"fused-madd", - MASK_NO_FUSED_MADD}, \
+ {"no-fused-madd", MASK_NO_FUSED_MADD}, \
++ {"longcall", MASK_LONGCALL}, \
++ {"no-longcall", - MASK_LONGCALL}, \
+ SUBTARGET_SWITCHES \
+ {"", TARGET_DEFAULT}}
+
+@@ -1407,6 +1421,7 @@
+ #define CALL_V4_CLEAR_FP_ARGS 0x00000002 /* V.4, no FP args passed */
+ #define CALL_V4_SET_FP_ARGS 0x00000004 /* V.4, FP args were passed */
+ #define CALL_LONG 0x00000008 /* always call indirect */
++#define CALL_SHORT 0x00000010 /* always call direct */
+
+ /* Define cutoff for using external functions to save floating point */
+ #define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) == 62 || (FIRST_REG) == 63)
+@@ -2620,12 +2635,20 @@
+
+ The csect for the function will have already been created by the
+ `text_section' call previously done. We do have to go back to that
+- csect, however. */
++ csect, however.
++
++ We also record the fact that the function exists in the current
++ compilation unit and so can be reached by a short branch by
++ setting SYMBOL_REF_FLAG. */
+
+ /* ??? What do the 16 and 044 in the .function line really mean? */
+
+ #define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
+-{ if (TREE_PUBLIC (DECL)) \
++{ \
++ rtx sym_ref = XEXP (DECL_RTL (DECL), 0); \
++ if (!DECL_WEAK (DECL)) \
++ SYMBOL_REF_FLAG (sym_ref) = 1; \
++ if (TREE_PUBLIC (DECL)) \
+ { \
+ fputs ("\t.globl .", FILE); \
+ RS6000_OUTPUT_BASENAME (FILE, NAME); \
+@@ -3326,6 +3349,7 @@
+ extern int rs6000_valid_type_attribute_p ();
+ extern void rs6000_set_default_type_attributes ();
+ extern struct rtx_def *rs6000_dll_import_ref ();
++extern int rs6000_is_longcall_p ();
+ extern struct rtx_def *rs6000_longcall_ref ();
+ extern int function_arg_padding ();
+ extern void toc_section ();
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/rs6000.md gcc-2.95.4/gcc/config/rs6000/rs6000.md
+--- gcc-2.95.3/gcc/config/rs6000/rs6000.md 2001-01-25 15:03:35.000000000 +0100
++++ gcc-2.95.4/gcc/config/rs6000/rs6000.md 2017-11-07 22:10:12.000000000 +0100
+@@ -6184,7 +6184,9 @@
+ reg. So expand it. */
+ if (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+- && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER)
++ && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER
++ && (! REG_FUNCTION_VALUE_P (SUBREG_REG (operands[0]))
++ || ! rtx_equal_function_value_matters))
+ operands[0] = alter_subreg (operands[0]);
+ if (GET_CODE (operands[1]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[1])) == REG
+@@ -8048,6 +8050,8 @@
+ ""
+ "
+ {
++int is_longcall;
++
+ if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != CONST_INT)
+ abort ();
+
+@@ -8061,10 +8065,11 @@
+ operands[2] = GEN_INT ((int)CALL_NORMAL);
+ }
+
+- if (GET_CODE (operands[0]) != SYMBOL_REF
+- || (INTVAL (operands[2]) & CALL_LONG) != 0)
++ is_longcall = rs6000_is_longcall_p(operands[0], INTVAL(operands[2]));
++
++ if (GET_CODE (operands[0]) != SYMBOL_REF || is_longcall)
+ {
+- if (INTVAL (operands[2]) & CALL_LONG)
++ if (is_longcall)
+ operands[0] = rs6000_longcall_ref (operands[0]);
+
+ if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_SOLARIS)
+@@ -8110,6 +8115,8 @@
+ ""
+ "
+ {
++int is_longcall;
++
+ if (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != CONST_INT)
+ abort ();
+
+@@ -8123,10 +8130,11 @@
+ operands[3] = GEN_INT ((int)CALL_NORMAL);
+ }
+
+- if (GET_CODE (operands[1]) != SYMBOL_REF
+- || (INTVAL (operands[3]) & CALL_LONG) != 0)
++ is_longcall = rs6000_is_longcall_p(operands[1], INTVAL(operands[3]));
++
++ if (GET_CODE (operands[1]) != SYMBOL_REF || is_longcall)
+ {
+- if (INTVAL (operands[3]) & CALL_LONG)
++ if (is_longcall)
+ operands[1] = rs6000_longcall_ref (operands[1]);
+
+ if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_SOLARIS)
+@@ -8177,7 +8185,7 @@
+ (match_operand 1 "" "g,g"))
+ (use (match_operand:SI 2 "immediate_operand" "O,n"))
+ (clobber (match_scratch:SI 3 "=l,l"))]
+- "(INTVAL (operands[2]) & CALL_LONG) == 0"
++ "!rs6000_is_longcall_p(operands[0], INTVAL (operands[2]))"
+ "*
+ {
+ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
+@@ -8196,7 +8204,7 @@
+ (match_operand 1 "" "g,g"))
+ (use (match_operand:SI 2 "immediate_operand" "O,n"))
+ (clobber (match_scratch:SI 3 "=l,l"))]
+- "TARGET_64BIT && (INTVAL (operands[2]) & CALL_LONG) == 0"
++ "TARGET_64BIT && !rs6000_is_longcall_p(operands[0], INTVAL (operands[2]))"
+ "*
+ {
+ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
+@@ -8216,7 +8224,7 @@
+ (match_operand 2 "" "g,g")))
+ (use (match_operand:SI 3 "immediate_operand" "O,n"))
+ (clobber (match_scratch:SI 4 "=l,l"))]
+- "(INTVAL (operands[3]) & CALL_LONG) == 0"
++ "!rs6000_is_longcall_p(operands[1], INTVAL (operands[3]))"
+ "*
+ {
+ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
+@@ -8237,7 +8245,7 @@
+ (match_operand 2 "" "g,g")))
+ (use (match_operand:SI 3 "immediate_operand" "O,n"))
+ (clobber (match_scratch:SI 4 "=l,l"))]
+- "TARGET_64BIT && (INTVAL (operands[3]) & CALL_LONG) == 0"
++ "TARGET_64BIT && !rs6000_is_longcall_p(operands[1], INTVAL (operands[3]))"
+ "*
+ {
+ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
+@@ -8312,7 +8320,7 @@
+ (use (match_operand:SI 2 "immediate_operand" "O,n"))
+ (clobber (match_scratch:SI 3 "=l,l"))]
+ "(DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
+- && (INTVAL (operands[2]) & CALL_LONG) == 0"
++ && !rs6000_is_longcall_p(operands[0], INTVAL (operands[2]))"
+ "*
+ {
+ /* Indirect calls should go through call_indirect */
+@@ -8387,7 +8395,7 @@
+ (use (match_operand:SI 3 "immediate_operand" "O,n"))
+ (clobber (match_scratch:SI 4 "=l,l"))]
+ "(DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
+- && (INTVAL (operands[3]) & CALL_LONG) == 0"
++ && !rs6000_is_longcall_p(operands[1], INTVAL (operands[3]))"
+ "*
+ {
+ /* This should be handled by call_value_indirect */
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/.#rs6000.md.1.55.4.17 gcc-2.95.4/gcc/config/rs6000/.#rs6000.md.1.55.4.17
+--- gcc-2.95.3/gcc/config/rs6000/.#rs6000.md.1.55.4.17 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/config/rs6000/.#rs6000.md.1.55.4.17 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11014 @@
++;; Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
++;; Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
++;; 2000, 2001 Free Software Foundation, Inc.
++;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
++
++;; This file is part of GNU CC.
++
++;; GNU CC is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 2, or (at your option)
++;; any later version.
++
++;; GNU CC is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++;; GNU General Public License for more details.
++
++;; You should have received a copy of the GNU General Public License
++;; along with GNU CC; see the file COPYING. If not, write to
++;; the Free Software Foundation, 59 Temple Place - Suite 330,
++;; Boston, MA 02111-1307, USA.
++
++;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
++
++;; Define an insn type attribute. This is used in function unit delay
++;; computations.
++(define_attr "type" "integer,load,store,fpload,fpstore,imul,idiv,branch,compare,delayed_compare,fpcompare,mtjmpr,fp,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg"
++ (const_string "integer"))
++
++;; Length (in bytes).
++; '(pc)' in the following doesn't include the instruction itself; it is
++; calculated as if the instruction had zero size.
++(define_attr "length" ""
++ (if_then_else (eq_attr "type" "branch")
++ (if_then_else (and (ge (minus (match_dup 0) (pc))
++ (const_int -32768))
++ (lt (minus (match_dup 0) (pc))
++ (const_int 32764)))
++ (const_int 8)
++ (const_int 12))
++ (const_int 4)))
++
++;; Processor type -- this attribute must exactly match the processor_type
++;; enumeration in rs6000.h.
++
++(define_attr "cpu" "rios1,rios2,mpccore,ppc403,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"
++ (const (symbol_ref "rs6000_cpu_attr")))
++
++; (define_function_unit NAME MULTIPLICITY SIMULTANEITY
++; TEST READY-DELAY ISSUE-DELAY [CONFLICT-LIST])
++
++; Load/Store Unit -- pure PowerPC only
++; (POWER and 601 use Integer Unit)
++(define_function_unit "lsu" 1 0
++ (and (eq_attr "type" "load")
++ (eq_attr "cpu" "mpccore,ppc603,ppc604,ppc604e,ppc620,ppc750"))
++ 2 1)
++
++(define_function_unit "lsu" 1 0
++ (and (eq_attr "type" "store,fpstore")
++ (eq_attr "cpu" "mpccore,ppc603,ppc604,ppc604e,ppc620,ppc750"))
++ 1 1)
++
++(define_function_unit "lsu" 1 0
++ (and (eq_attr "type" "fpload")
++ (eq_attr "cpu" "mpccore,ppc603,ppc750"))
++ 2 1)
++
++(define_function_unit "lsu" 1 0
++ (and (eq_attr "type" "fpload")
++ (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
++ 3 1)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "load")
++ (eq_attr "cpu" "rios1,ppc403,ppc601"))
++ 2 1)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "store,fpstore")
++ (eq_attr "cpu" "rios1,ppc403,ppc601"))
++ 1 1)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fpstore")
++ (eq_attr "cpu" "rios1,ppc601"))
++ 0 1)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "fpload")
++ (eq_attr "cpu" "rios1"))
++ 2 1)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "fpload")
++ (eq_attr "cpu" "ppc601"))
++ 3 1)
++
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "load,fpload")
++ (eq_attr "cpu" "rios2"))
++ 2 1)
++
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "store,fpstore")
++ (eq_attr "cpu" "rios2"))
++ 1 1)
++
++; Integer Unit (RIOS1, PPC601, PPC603)
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "integer")
++ (eq_attr "cpu" "rios1,mpccore,ppc403,ppc601,ppc603"))
++ 1 1)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "ppc403"))
++ 4 4)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "rios1,ppc601,ppc603"))
++ 5 5)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "rios1"))
++ 19 19)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "ppc403"))
++ 33 33)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "ppc601"))
++ 36 36)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "ppc603"))
++ 37 36)
++
++; RIOS2 has two integer units: a primary one which can perform all
++; operations and a secondary one which is fed in lock step with the first
++; and can perform "simple" integer operations.
++; To catch this we define a 'dummy' imuldiv-unit that is also needed
++; for the complex insns.
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "integer")
++ (eq_attr "cpu" "rios2"))
++ 1 1)
++
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "rios2"))
++ 2 2)
++
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "rios2"))
++ 13 13)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "rios2"))
++ 2 2)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "rios2"))
++ 13 13)
++
++; MPCCORE has separate IMUL/IDIV unit for multicycle instructions
++; Divide latency varies greatly from 2-11, use 6 as average
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "mpccore"))
++ 2 1)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "mpccore"))
++ 6 6)
++
++; PPC604{,e} has two units that perform integer operations
++; and one unit for divide/multiply operations (and move
++; from/to spr).
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "integer")
++ (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
++ 1 1)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "ppc604,ppc620"))
++ 4 2)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "ppc604e"))
++ 2 1)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
++ 20 19)
++
++; PPC750 has two integer units: a primary one which can perform all
++; operations and a secondary one which is fed in lock step with the first
++; and can perform "simple" integer operations.
++; To catch this we define a 'dummy' imuldiv-unit that is also needed
++; for the complex insns.
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "integer")
++ (eq_attr "cpu" "ppc750"))
++ 1 1)
++
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "ppc750"))
++ 4 2)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "imul")
++ (eq_attr "cpu" "ppc750"))
++ 4 2)
++
++(define_function_unit "imuldiv" 1 0
++ (and (eq_attr "type" "idiv")
++ (eq_attr "cpu" "ppc750"))
++ 19 19)
++
++; compare is done on integer unit, but feeds insns which
++; execute on the branch unit.
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "compare")
++ (eq_attr "cpu" "rios1"))
++ 4 1)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "delayed_compare")
++ (eq_attr "cpu" "rios1"))
++ 5 1)
++
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "compare,delayed_compare")
++ (eq_attr "cpu" "mpccore,ppc403,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"))
++ 3 1)
++
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "compare,delayed_compare")
++ (eq_attr "cpu" "rios2"))
++ 3 1)
++
++(define_function_unit "iu2" 2 0
++ (and (eq_attr "type" "compare,delayed_compare")
++ (eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc750"))
++ 1 1)
++
++; fp compare uses fp unit
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fpcompare")
++ (eq_attr "cpu" "rios1"))
++ 9 1)
++
++; rios1 and rios2 have different fpcompare delays
++(define_function_unit "fpu2" 2 0
++ (and (eq_attr "type" "fpcompare")
++ (eq_attr "cpu" "rios2"))
++ 5 1)
++
++; on ppc601 and ppc603, fpcompare takes also 2 cycles from
++; the integer unit
++; here we do not define delays, just occupy the unit. The dependencies
++; will be assigned by the fpcompare definition in the fpu.
++(define_function_unit "iu" 1 0
++ (and (eq_attr "type" "fpcompare")
++ (eq_attr "cpu" "ppc601,ppc603"))
++ 0 2)
++
++; fp compare uses fp unit
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fpcompare")
++ (eq_attr "cpu" "ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"))
++ 5 1)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fpcompare")
++ (eq_attr "cpu" "mpccore"))
++ 1 1)
++
++(define_function_unit "bpu" 1 0
++ (and (eq_attr "type" "mtjmpr")
++ (eq_attr "cpu" "rios1,rios2"))
++ 5 1)
++
++(define_function_unit "bpu" 1 0
++ (and (eq_attr "type" "mtjmpr")
++ (eq_attr "cpu" "mpccore,ppc403,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"))
++ 4 1)
++
++; all jumps/branches are executing on the bpu, in 1 cycle, for all machines.
++(define_function_unit "bpu" 1 0
++ (eq_attr "type" "jmpreg")
++ 1 1)
++
++(define_function_unit "bpu" 1 0
++ (eq_attr "type" "branch")
++ 1 1)
++
++; Floating Point Unit
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fp,dmul")
++ (eq_attr "cpu" "rios1"))
++ 2 1)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fp")
++ (eq_attr "cpu" "mpccore"))
++ 4 4)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fp")
++ (eq_attr "cpu" "ppc601"))
++ 4 1)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "fp")
++ (eq_attr "cpu" "ppc603,ppc604,ppc604e,ppc620,ppc750"))
++ 3 1)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "dmul")
++ (eq_attr "cpu" "mpccore"))
++ 5 5)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "dmul")
++ (eq_attr "cpu" "ppc601"))
++ 5 2)
++
++; is this true?
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "dmul")
++ (eq_attr "cpu" "ppc603,ppc750"))
++ 4 2)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "dmul")
++ (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
++ 3 1)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "sdiv,ddiv")
++ (eq_attr "cpu" "rios1"))
++ 19 19)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "sdiv")
++ (eq_attr "cpu" "ppc601"))
++ 17 17)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "sdiv")
++ (eq_attr "cpu" "mpccore"))
++ 10 10)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "sdiv")
++ (eq_attr "cpu" "ppc603,ppc604,ppc604e,ppc620"))
++ 18 18)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "ddiv")
++ (eq_attr "cpu" "mpccore"))
++ 17 17)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "ddiv")
++ (eq_attr "cpu" "ppc601,ppc604,ppc604e,ppc620,ppc750"))
++ 31 31)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "ddiv")
++ (eq_attr "cpu" "ppc603"))
++ 33 33)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "ssqrt")
++ (eq_attr "cpu" "ppc620"))
++ 31 31)
++
++(define_function_unit "fpu" 1 0
++ (and (eq_attr "type" "dsqrt")
++ (eq_attr "cpu" "ppc620"))
++ 31 31)
++
++; RIOS2 has two symmetric FPUs.
++(define_function_unit "fpu2" 2 0
++ (and (eq_attr "type" "fp")
++ (eq_attr "cpu" "rios2"))
++ 2 1)
++
++(define_function_unit "fpu2" 2 0
++ (and (eq_attr "type" "dmul")
++ (eq_attr "cpu" "rios2"))
++ 2 1)
++
++(define_function_unit "fpu2" 2 0
++ (and (eq_attr "type" "sdiv,ddiv")
++ (eq_attr "cpu" "rios2"))
++ 17 17)
++
++(define_function_unit "fpu2" 2 0
++ (and (eq_attr "type" "ssqrt,dsqrt")
++ (eq_attr "cpu" "rios2"))
++ 26 26)
++
++
++;; Start with fixed-point load and store insns. Here we put only the more
++;; complex forms. Basic data transfer is done later.
++
++(define_expand "zero_extendqidi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (zero_extend:DI (match_operand:QI 1 "gpc_reg_operand" "")))]
++ "TARGET_POWERPC64"
++ "")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (zero_extend:DI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
++ "TARGET_POWERPC64"
++ "@
++ lbz%U1%X1 %0,%1
++ rldicl %0,%1,0,56"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "rldicl. %2,%1,0,56"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "rldicl. %0,%1,0,56"
++ [(set_attr "type" "compare")])
++
++(define_insn "extendqidi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (sign_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "extsb %0,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "extsb. %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (sign_extend:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "extsb. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_expand "zero_extendhidi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (zero_extend:DI (match_operand:HI 1 "gpc_reg_operand" "")))]
++ "TARGET_POWERPC64"
++ "")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (zero_extend:DI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
++ "TARGET_POWERPC64"
++ "@
++ lhz%U1%X1 %0,%1
++ rldicl %0,%1,0,48"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "rldicl. %2,%1,0,48"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "rldicl. %0,%1,0,48"
++ [(set_attr "type" "compare")])
++
++(define_expand "extendhidi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (sign_extend:DI (match_operand:HI 1 "gpc_reg_operand" "")))]
++ "TARGET_POWERPC64"
++ "")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (sign_extend:DI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
++ "TARGET_POWERPC64"
++ "@
++ lha%U1%X1 %0,%1
++ extsh %0,%1"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "extsh. %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (sign_extend:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "extsh. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_expand "zero_extendsidi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "")))]
++ "TARGET_POWERPC64"
++ "")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (zero_extend:DI (match_operand:SI 1 "reg_or_mem_operand" "m,r")))]
++ "TARGET_POWERPC64"
++ "@
++ lwz%U1%X1 %0,%1
++ rldicl %0,%1,0,32"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "rldicl. %2,%1,0,32"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "rldicl. %0,%1,0,32"
++ [(set_attr "type" "compare")])
++
++(define_expand "extendsidi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "")))]
++ "TARGET_POWERPC64"
++ "")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r")))]
++ "TARGET_POWERPC64"
++ "@
++ lwa%U1%X1 %0,%1
++ extsw %0,%1"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "extsw. %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (sign_extend:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "extsw. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_expand "zero_extendqisi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "")))]
++ ""
++ "")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (zero_extend:SI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
++ ""
++ "@
++ lbz%U1%X1 %0,%1
++ {rlinm|rlwinm} %0,%1,0,0xff"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 2 "=r"))]
++ ""
++ "{andil.|andi.} %2,%1,0xff"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI (match_dup 1)))]
++ ""
++ "{andil.|andi.} %0,%1,0xff"
++ [(set_attr "type" "compare")])
++
++(define_expand "extendqisi2"
++ [(use (match_operand:SI 0 "gpc_reg_operand" ""))
++ (use (match_operand:QI 1 "gpc_reg_operand" ""))]
++ ""
++ "
++{
++ if (TARGET_POWERPC)
++ emit_insn (gen_extendqisi2_ppc (operands[0], operands[1]));
++ else if (TARGET_POWER)
++ emit_insn (gen_extendqisi2_power (operands[0], operands[1]));
++ else
++ emit_insn (gen_extendqisi2_no_power (operands[0], operands[1]));
++ DONE;
++}")
++
++(define_insn "extendqisi2_ppc"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (sign_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC"
++ "extsb %0,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 2 "=r"))]
++ "TARGET_POWERPC"
++ "extsb. %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (sign_extend:SI (match_dup 1)))]
++ "TARGET_POWERPC"
++ "extsb. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_expand "extendqisi2_power"
++ [(parallel [(set (match_dup 2)
++ (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
++ (const_int 24)))
++ (clobber (scratch:SI))])
++ (parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ashiftrt:SI (match_dup 2)
++ (const_int 24)))
++ (clobber (scratch:SI))])]
++ "TARGET_POWER"
++ "
++{ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[2] = gen_reg_rtx (SImode); }")
++
++(define_expand "extendqisi2_no_power"
++ [(set (match_dup 2)
++ (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
++ (const_int 24)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ashiftrt:SI (match_dup 2)
++ (const_int 24)))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "
++{ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[2] = gen_reg_rtx (SImode); }")
++
++(define_expand "zero_extendqihi2"
++ [(set (match_operand:HI 0 "gpc_reg_operand" "")
++ (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "")))]
++ ""
++ "")
++
++(define_insn ""
++ [(set (match_operand:HI 0 "gpc_reg_operand" "=r,r")
++ (zero_extend:HI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
++ ""
++ "@
++ lbz%U1%X1 %0,%1
++ {rlinm|rlwinm} %0,%1,0,0xff"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:HI 2 "=r"))]
++ ""
++ "{andil.|andi.} %2,%1,0xff"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:HI 0 "gpc_reg_operand" "=r")
++ (zero_extend:HI (match_dup 1)))]
++ ""
++ "{andil.|andi.} %0,%1,0xff"
++ [(set_attr "type" "compare")])
++
++(define_expand "extendqihi2"
++ [(use (match_operand:HI 0 "gpc_reg_operand" ""))
++ (use (match_operand:QI 1 "gpc_reg_operand" ""))]
++ ""
++ "
++{
++ if (TARGET_POWERPC)
++ emit_insn (gen_extendqihi2_ppc (operands[0], operands[1]));
++ else if (TARGET_POWER)
++ emit_insn (gen_extendqihi2_power (operands[0], operands[1]));
++ else
++ emit_insn (gen_extendqihi2_no_power (operands[0], operands[1]));
++ DONE;
++}")
++
++(define_insn "extendqihi2_ppc"
++ [(set (match_operand:HI 0 "gpc_reg_operand" "=r")
++ (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC"
++ "extsb %0,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:HI 2 "=r"))]
++ "TARGET_POWERPC"
++ "extsb. %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:HI 0 "gpc_reg_operand" "=r")
++ (sign_extend:HI (match_dup 1)))]
++ "TARGET_POWERPC"
++ "extsb. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_expand "extendqihi2_power"
++ [(parallel [(set (match_dup 2)
++ (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
++ (const_int 24)))
++ (clobber (scratch:SI))])
++ (parallel [(set (match_operand:HI 0 "gpc_reg_operand" "")
++ (ashiftrt:SI (match_dup 2)
++ (const_int 24)))
++ (clobber (scratch:SI))])]
++ "TARGET_POWER"
++ "
++{ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[2] = gen_reg_rtx (SImode); }")
++
++(define_expand "extendqihi2_no_power"
++ [(set (match_dup 2)
++ (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
++ (const_int 24)))
++ (set (match_operand:HI 0 "gpc_reg_operand" "")
++ (ashiftrt:SI (match_dup 2)
++ (const_int 24)))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "
++{ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[2] = gen_reg_rtx (SImode); }")
++
++(define_expand "zero_extendhisi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "")))]
++ ""
++ "")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (zero_extend:SI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
++ ""
++ "@
++ lhz%U1%X1 %0,%1
++ {rlinm|rlwinm} %0,%1,0,0xffff"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 2 "=r"))]
++ ""
++ "{andil.|andi.} %2,%1,0xffff"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI (match_dup 1)))]
++ ""
++ "{andil.|andi.} %0,%1,0xffff"
++ [(set_attr "type" "compare")])
++
++(define_expand "extendhisi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (sign_extend:SI (match_operand:HI 1 "gpc_reg_operand" "")))]
++ ""
++ "")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (sign_extend:SI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
++ ""
++ "@
++ lha%U1%X1 %0,%1
++ {exts|extsh} %0,%1"
++ [(set_attr "type" "load,*")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 2 "=r"))]
++ ""
++ "{exts.|extsh.} %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (sign_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (sign_extend:SI (match_dup 1)))]
++ ""
++ "{exts.|extsh.} %0,%1"
++ [(set_attr "type" "compare")])
++
++;; Fixed-point arithmetic insns.
++
++;; Discourage ai/addic because of carry but provide it in an alternative
++;; allowing register zero as source.
++(define_expand "addsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT
++ && ! add_operand (operands[2], SImode))
++ {
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (SImode));
++
++ HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
++ HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
++
++ if (low & 0x8000)
++ high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
++
++ emit_insn (gen_addsi3 (tmp, operands[1], GEN_INT (high)));
++ emit_insn (gen_addsi3 (operands[0], tmp, GEN_INT (low)));
++ DONE;
++ }
++}")
++
++(define_insn "*addsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,?r,r")
++ (plus:SI (match_operand:SI 1 "gpc_reg_operand" "%r,b,r,b")
++ (match_operand:SI 2 "add_operand" "r,I,I,L")))]
++ ""
++ "@
++ {cax|add} %0,%1,%2
++ {cal %0,%2(%1)|addi %0,%1,%2}
++ {ai|addic} %0,%1,%2
++ {cau|addis} %0,%1,%v2"
++ [(set_attr "length" "4,4,4,4")])
++
++(define_insn "*addsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
++ (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I,r,I"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r,r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {cax.|add.} %3,%1,%2
++ {ai.|addic.} %3,%1,%2
++ #
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,4,8,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_short_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (plus:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*addsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
++ (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I,r,I"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
++ (plus:SI (match_dup 1)
++ (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "@
++ {cax.|add.} %0,%1,%2
++ {ai.|addic.} %0,%1,%2
++ #
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,4,8,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_short_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (plus:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++;; Split an add that we can't do in one insn into two insns, each of which
++;; does one 16-bit part. This is used by combine. Note that the low-order
++;; add should be last in case the result gets used in an address.
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "non_add_cint_operand" "")))]
++ ""
++ [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
++ (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
++"
++{
++ HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
++ HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
++
++ if (low & 0x8000)
++ high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
++
++ operands[3] = GEN_INT (high);
++ operands[4] = GEN_INT (low);
++}")
++
++(define_insn "one_cmplsi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (not:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
++ ""
++ "nor %0,%1,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 2 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ nor. %2,%1,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 2 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 2)
++ (not:SI (match_dup 1)))
++ (set (match_dup 0)
++ (compare:CC (match_dup 2)
++ (const_int 0)))]
++ "")
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
++ (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (not:SI (match_dup 1)))]
++ "! TARGET_POWERPC64"
++ "@
++ nor. %0,%1,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 2 "cc_reg_not_cr0_operand" "")
++ (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (not:SI (match_dup 1)))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (not:SI (match_dup 1)))
++ (set (match_dup 2)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (minus:SI (match_operand:SI 1 "reg_or_short_operand" "rI")
++ (match_operand:SI 2 "gpc_reg_operand" "r")))]
++ "! TARGET_POWERPC"
++ "{sf%I1|subf%I1c} %0,%2,%1")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (minus:SI (match_operand:SI 1 "reg_or_short_operand" "r,I")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r")))]
++ "TARGET_POWERPC"
++ "@
++ subf %0,%2,%1
++ subfic %0,%2,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC"
++ "@
++ {sf.|subfc.} %3,%2,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "TARGET_POWERPC && ! TARGET_POWERPC64"
++ "@
++ subf. %3,%2,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (minus:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (minus:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC"
++ "@
++ {sf.|subfc.} %0,%2,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (minus:SI (match_dup 1)
++ (match_dup 2)))]
++ "TARGET_POWERPC && ! TARGET_POWERPC64"
++ "@
++ subf. %0,%2,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (minus:SI (match_dup 1)
++ (match_dup 2)))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (minus:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++(define_expand "subsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (minus:SI (match_operand:SI 1 "reg_or_short_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT)
++ {
++ emit_insn (gen_addsi3 (operands[0], operands[1],
++ negate_rtx (SImode, operands[2])));
++ DONE;
++ }
++}")
++
++;; For SMIN, SMAX, UMIN, and UMAX, we use DEFINE_EXPAND's that involve a doz[i]
++;; instruction and some auxiliary computations. Then we just have a single
++;; DEFINE_INSN for doz[i] and the define_splits to make them if made by
++;; combine.
++
++(define_expand "sminsi3"
++ [(set (match_dup 3)
++ (if_then_else:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_short_operand" ""))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (minus:SI (match_dup 2) (match_dup 3)))]
++ "TARGET_POWER"
++ "
++{ operands[3] = gen_reg_rtx (SImode); }")
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (smin:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_short_operand" "")))
++ (clobber (match_operand:SI 3 "gpc_reg_operand" ""))]
++ "TARGET_POWER"
++ [(set (match_dup 3)
++ (if_then_else:SI (gt:SI (match_dup 1) (match_dup 2))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1))))
++ (set (match_dup 0) (minus:SI (match_dup 2) (match_dup 3)))]
++ "")
++
++(define_expand "smaxsi3"
++ [(set (match_dup 3)
++ (if_then_else:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_short_operand" ""))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_dup 3) (match_dup 1)))]
++ "TARGET_POWER"
++ "
++{ operands[3] = gen_reg_rtx (SImode); }")
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (smax:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_short_operand" "")))
++ (clobber (match_operand:SI 3 "gpc_reg_operand" ""))]
++ "TARGET_POWER"
++ [(set (match_dup 3)
++ (if_then_else:SI (gt:SI (match_dup 1) (match_dup 2))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1))))
++ (set (match_dup 0) (plus:SI (match_dup 3) (match_dup 1)))]
++ "")
++
++(define_expand "uminsi3"
++ [(set (match_dup 3) (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_dup 5)))
++ (set (match_dup 4) (xor:SI (match_operand:SI 2 "gpc_reg_operand" "")
++ (match_dup 5)))
++ (set (match_dup 3) (if_then_else:SI (gt (match_dup 3) (match_dup 4))
++ (const_int 0)
++ (minus:SI (match_dup 4) (match_dup 3))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (minus:SI (match_dup 2) (match_dup 3)))]
++ "TARGET_POWER"
++ "
++{
++ operands[3] = gen_reg_rtx (SImode);
++ operands[4] = gen_reg_rtx (SImode);
++ operands[5] = GEN_INT (-2147483647 - 1);
++}")
++
++(define_expand "umaxsi3"
++ [(set (match_dup 3) (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_dup 5)))
++ (set (match_dup 4) (xor:SI (match_operand:SI 2 "gpc_reg_operand" "")
++ (match_dup 5)))
++ (set (match_dup 3) (if_then_else:SI (gt (match_dup 3) (match_dup 4))
++ (const_int 0)
++ (minus:SI (match_dup 4) (match_dup 3))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_dup 3) (match_dup 1)))]
++ "TARGET_POWER"
++ "
++{
++ operands[3] = gen_reg_rtx (SImode);
++ operands[4] = gen_reg_rtx (SImode);
++ operands[5] = GEN_INT (-2147483647 - 1);
++}")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (if_then_else:SI (gt (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1))))]
++ "TARGET_POWER"
++ "doz%I2 %0,%1,%2")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (if_then_else:SI (gt (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1)))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "TARGET_POWER"
++ "doz%I2. %3,%1,%2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (if_then_else:SI (gt (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1)))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (if_then_else:SI (gt (match_dup 1) (match_dup 2))
++ (const_int 0)
++ (minus:SI (match_dup 2) (match_dup 1))))]
++ "TARGET_POWER"
++ "doz%I2. %0,%1,%2"
++ [(set_attr "type" "delayed_compare")])
++
++;; We don't need abs with condition code because such comparisons should
++;; never be done.
++(define_expand "abssi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (abs:SI (match_operand:SI 1 "gpc_reg_operand" "")))]
++ ""
++ "
++{
++ if (! TARGET_POWER)
++ {
++ emit_insn (gen_abssi2_nopower (operands[0], operands[1]));
++ DONE;
++ }
++}")
++
++(define_insn "abssi2_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
++ "TARGET_POWER"
++ "abs %0,%1")
++
++(define_insn "abssi2_nopower"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
++ (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0")))
++ (clobber (match_scratch:SI 2 "=&r,&r"))]
++ "! TARGET_POWER"
++ "*
++{
++ return (TARGET_POWERPC)
++ ? \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;subf %0,%2,%0\"
++ : \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;{sf|subfc} %0,%2,%0\";
++}"
++ [(set_attr "length" "12")])
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
++ (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0")))
++ (clobber (match_scratch:SI 2 "=&r,&r"))]
++ "! TARGET_POWER && reload_completed"
++ [(set (match_dup 2) (ashiftrt:SI (match_dup 1) (const_int 31)))
++ (set (match_dup 0) (xor:SI (match_dup 2) (match_dup 1)))
++ (set (match_dup 0) (minus:SI (match_dup 0) (match_dup 2)))]
++ "")
++
++(define_insn "*nabs_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r"))))]
++ "TARGET_POWER"
++ "nabs %0,%1")
++
++(define_insn "*nabs_no_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
++ (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0"))))
++ (clobber (match_scratch:SI 2 "=&r,&r"))]
++ "! TARGET_POWER"
++ "*
++{
++ return (TARGET_POWERPC)
++ ? \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;subf %0,%0,%2\"
++ : \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;{sf|subfc} %0,%0,%2\";
++}"
++ [(set_attr "length" "12")])
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
++ (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0"))))
++ (clobber (match_scratch:SI 2 "=&r,&r"))]
++ "! TARGET_POWER && reload_completed"
++ [(set (match_dup 2) (ashiftrt:SI (match_dup 1) (const_int 31)))
++ (set (match_dup 0) (xor:SI (match_dup 2) (match_dup 1)))
++ (set (match_dup 0) (minus:SI (match_dup 2) (match_dup 0)))]
++ "")
++
++(define_insn "negsi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
++ ""
++ "neg %0,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 2 "=r"))]
++ "! TARGET_POWERPC64"
++ "neg. %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (match_dup 1)))]
++ "! TARGET_POWERPC64"
++ "neg. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn "ffssi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
++ (ffs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
++ ""
++ "neg %0,%1\;and %0,%0,%1\;{cntlz|cntlzw} %0,%0\;{sfi|subfic} %0,%0,32"
++ [(set_attr "length" "16")])
++
++(define_expand "mulsi3"
++ [(use (match_operand:SI 0 "gpc_reg_operand" ""))
++ (use (match_operand:SI 1 "gpc_reg_operand" ""))
++ (use (match_operand:SI 2 "reg_or_short_operand" ""))]
++ ""
++ "
++{
++ if (TARGET_POWER)
++ emit_insn (gen_mulsi3_mq (operands[0], operands[1], operands[2]));
++ else
++ emit_insn (gen_mulsi3_no_mq (operands[0], operands[1], operands[2]));
++ DONE;
++}")
++
++(define_insn "mulsi3_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))
++ (clobber (match_scratch:SI 3 "=q,q"))]
++ "TARGET_POWER"
++ "@
++ {muls|mullw} %0,%1,%2
++ {muli|mulli} %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_insn "mulsi3_no_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))]
++ "! TARGET_POWER"
++ "@
++ {muls|mullw} %0,%1,%2
++ {muli|mulli} %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))
++ (clobber (match_scratch:SI 4 "=q"))]
++ "TARGET_POWER"
++ "{muls.|mullw.} %3,%1,%2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "! TARGET_POWER"
++ "{muls.|mullw.} %3,%1,%2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (mult:SI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:SI 4 "=q"))]
++ "TARGET_POWER"
++ "{muls.|mullw.} %0,%1,%2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (mult:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWER"
++ "{muls.|mullw.} %0,%1,%2"
++ [(set_attr "type" "delayed_compare")])
++
++;; Operand 1 is divided by operand 2; quotient goes to operand
++;; 0 and remainder to operand 3.
++;; ??? At some point, see what, if anything, we can do about if (x % y == 0).
++
++(define_expand "divmodsi4"
++ [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (div:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" "")))
++ (set (match_operand:SI 3 "gpc_reg_operand" "")
++ (mod:SI (match_dup 1) (match_dup 2)))])]
++ "TARGET_POWER || (! TARGET_POWER && ! TARGET_POWERPC)"
++ "
++{
++ if (! TARGET_POWER && ! TARGET_POWERPC)
++ {
++ emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
++ emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
++ emit_insn (gen_divss_call ());
++ emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
++ emit_move_insn (operands[3], gen_rtx_REG (SImode, 4));
++ DONE;
++ }
++}")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (set (match_operand:SI 3 "gpc_reg_operand" "=q")
++ (mod:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWER"
++ "divs %0,%1,%2"
++ [(set_attr "type" "idiv")])
++
++(define_expand "udivsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" "")))]
++ "TARGET_POWERPC || (! TARGET_POWER && ! TARGET_POWERPC)"
++ "
++{
++ if (! TARGET_POWER && ! TARGET_POWERPC)
++ {
++ emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
++ emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
++ emit_insn (gen_quous_call ());
++ emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
++ DONE;
++ }
++ else if (TARGET_POWER)
++ {
++ emit_insn (gen_udivsi3_mq (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++}")
++
++(define_insn "udivsi3_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 3 "=q"))]
++ "TARGET_POWERPC && TARGET_POWER"
++ "divwu %0,%1,%2"
++ [(set_attr "type" "idiv")])
++
++(define_insn "*udivsi3_no_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC && ! TARGET_POWER"
++ "divwu %0,%1,%2"
++ [(set_attr "type" "idiv")])
++
++;; For powers of two we can do srai/aze for divide and then adjust for
++;; modulus. If it isn't a power of two, FAIL on POWER so divmodsi4 will be
++;; used; for PowerPC, force operands into register and do a normal divide;
++;; for AIX common-mode, use quoss call on register operands.
++(define_expand "divsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (div:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT
++ && exact_log2 (INTVAL (operands[2])) >= 0)
++ ;
++ else if (TARGET_POWERPC)
++ {
++ operands[2] = force_reg (SImode, operands[2]);
++ if (TARGET_POWER)
++ {
++ emit_insn (gen_divsi3_mq (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++ }
++ else if (TARGET_POWER)
++ FAIL;
++ else
++ {
++ emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
++ emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
++ emit_insn (gen_quoss_call ());
++ emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
++ DONE;
++ }
++}")
++
++(define_insn "divsi3_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 3 "=q"))]
++ "TARGET_POWERPC && TARGET_POWER"
++ "divw %0,%1,%2"
++ [(set_attr "type" "idiv")])
++
++(define_insn "*divsi3_no_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC && ! TARGET_POWER"
++ "divw %0,%1,%2"
++ [(set_attr "type" "idiv")])
++
++(define_expand "modsi3"
++ [(use (match_operand:SI 0 "gpc_reg_operand" ""))
++ (use (match_operand:SI 1 "gpc_reg_operand" ""))
++ (use (match_operand:SI 2 "reg_or_cint_operand" ""))]
++ ""
++ "
++{
++ int i = exact_log2 (INTVAL (operands[2]));
++ rtx temp1;
++ rtx temp2;
++
++ if (GET_CODE (operands[2]) != CONST_INT || i < 0)
++ FAIL;
++
++ temp1 = gen_reg_rtx (SImode);
++ temp2 = gen_reg_rtx (SImode);
++
++ emit_insn (gen_divsi3 (temp1, operands[1], operands[2]));
++ emit_insn (gen_ashlsi3 (temp2, temp1, GEN_INT (i)));
++ emit_insn (gen_subsi3 (operands[0], operands[1], temp2));
++ DONE;
++}")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "N")))]
++ "exact_log2 (INTVAL (operands[2])) >= 0"
++ "{srai|srawi} %0,%1,%p2\;{aze|addze} %0,%0"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "N"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "exact_log2 (INTVAL (operands[2])) >= 0"
++ "{srai|srawi} %3,%1,%p2\;{aze.|addze.} %3,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "N"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (div:SI (match_dup 1) (match_dup 2)))]
++ "exact_log2 (INTVAL (operands[2])) >= 0"
++ "{srai|srawi} %0,%1,%p2\;{aze.|addze.} %0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (udiv:SI
++ (plus:DI (ashift:DI
++ (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 32))
++ (zero_extend:DI (match_operand:SI 4 "register_operand" "2")))
++ (match_operand:SI 3 "gpc_reg_operand" "r")))
++ (set (match_operand:SI 2 "register_operand" "=*q")
++ (umod:SI
++ (plus:DI (ashift:DI
++ (zero_extend:DI (match_dup 1)) (const_int 32))
++ (zero_extend:DI (match_dup 4)))
++ (match_dup 3)))]
++ "TARGET_POWER"
++ "div %0,%1,%3"
++ [(set_attr "type" "idiv")])
++
++;; To do unsigned divide we handle the cases of the divisor looking like a
++;; negative number. If it is a constant that is less than 2**31, we don't
++;; have to worry about the branches. So make a few subroutines here.
++;;
++;; First comes the normal case.
++(define_expand "udivmodsi4_normal"
++ [(set (match_dup 4) (const_int 0))
++ (parallel [(set (match_operand:SI 0 "" "")
++ (udiv:SI (plus:DI (ashift:DI (zero_extend:DI (match_dup 4))
++ (const_int 32))
++ (zero_extend:DI (match_operand:SI 1 "" "")))
++ (match_operand:SI 2 "" "")))
++ (set (match_operand:SI 3 "" "")
++ (umod:SI (plus:DI (ashift:DI (zero_extend:DI (match_dup 4))
++ (const_int 32))
++ (zero_extend:DI (match_dup 1)))
++ (match_dup 2)))])]
++ "TARGET_POWER"
++ "
++{ operands[4] = gen_reg_rtx (SImode); }")
++
++;; This handles the branches.
++(define_expand "udivmodsi4_tests"
++ [(set (match_operand:SI 0 "" "") (const_int 0))
++ (set (match_operand:SI 3 "" "") (match_operand:SI 1 "" ""))
++ (set (match_dup 5) (compare:CCUNS (match_dup 1) (match_operand:SI 2 "" "")))
++ (set (pc) (if_then_else (ltu (match_dup 5) (const_int 0))
++ (label_ref (match_operand:SI 4 "" "")) (pc)))
++ (set (match_dup 0) (const_int 1))
++ (set (match_dup 3) (minus:SI (match_dup 1) (match_dup 2)))
++ (set (match_dup 6) (compare:CC (match_dup 2) (const_int 0)))
++ (set (pc) (if_then_else (lt (match_dup 6) (const_int 0))
++ (label_ref (match_dup 4)) (pc)))]
++ "TARGET_POWER"
++ "
++{ operands[5] = gen_reg_rtx (CCUNSmode);
++ operands[6] = gen_reg_rtx (CCmode);
++}")
++
++(define_expand "udivmodsi4"
++ [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))
++ (set (match_operand:SI 3 "gpc_reg_operand" "")
++ (umod:SI (match_dup 1) (match_dup 2)))])]
++ ""
++ "
++{
++ rtx label = 0;
++
++ if (! TARGET_POWER)
++ {
++ if (! TARGET_POWERPC)
++ {
++ emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
++ emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
++ emit_insn (gen_divus_call ());
++ emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
++ emit_move_insn (operands[3], gen_rtx_REG (SImode, 4));
++ DONE;
++ }
++ else
++ FAIL;
++ }
++
++ if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) < 0)
++ {
++ operands[2] = force_reg (SImode, operands[2]);
++ label = gen_label_rtx ();
++ emit (gen_udivmodsi4_tests (operands[0], operands[1], operands[2],
++ operands[3], label));
++ }
++ else
++ operands[2] = force_reg (SImode, operands[2]);
++
++ emit (gen_udivmodsi4_normal (operands[0], operands[1], operands[2],
++ operands[3]));
++ if (label)
++ emit_label (label);
++
++ DONE;
++}")
++
++;; AIX architecture-independent common-mode multiply (DImode),
++;; divide/modulus, and quotient subroutine calls. Input operands in R3 and
++;; R4; results in R3 and sometimes R4; link register always clobbered by bla
++;; instruction; R0 sometimes clobbered; also, MQ sometimes clobbered but
++;; assumed unused if generating common-mode, so ignore.
++(define_insn "mulh_call"
++ [(set (reg:SI 3)
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (sign_extend:DI (reg:SI 3))
++ (sign_extend:DI (reg:SI 4)))
++ (const_int 32))))
++ (clobber (match_scratch:SI 0 "=l"))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "bla __mulh"
++ [(set_attr "type" "imul")])
++
++(define_insn "mull_call"
++ [(set (reg:DI 3)
++ (mult:DI (sign_extend:DI (reg:SI 3))
++ (sign_extend:DI (reg:SI 4))))
++ (clobber (match_scratch:SI 0 "=l"))
++ (clobber (reg:SI 0))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "bla __mull"
++ [(set_attr "type" "imul")])
++
++(define_insn "divss_call"
++ [(set (reg:SI 3)
++ (div:SI (reg:SI 3) (reg:SI 4)))
++ (set (reg:SI 4)
++ (mod:SI (reg:SI 3) (reg:SI 4)))
++ (clobber (match_scratch:SI 0 "=l"))
++ (clobber (reg:SI 0))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "bla __divss"
++ [(set_attr "type" "idiv")])
++
++(define_insn "divus_call"
++ [(set (reg:SI 3)
++ (udiv:SI (reg:SI 3) (reg:SI 4)))
++ (set (reg:SI 4)
++ (umod:SI (reg:SI 3) (reg:SI 4)))
++ (clobber (match_scratch:SI 0 "=l"))
++ (clobber (reg:SI 0))
++ (clobber (match_scratch:CC 1 "=x"))
++ (clobber (reg:CC 69))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "bla __divus"
++ [(set_attr "type" "idiv")])
++
++(define_insn "quoss_call"
++ [(set (reg:SI 3)
++ (div:SI (reg:SI 3) (reg:SI 4)))
++ (clobber (match_scratch:SI 0 "=l"))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "bla __quoss"
++ [(set_attr "type" "idiv")])
++
++(define_insn "quous_call"
++ [(set (reg:SI 3)
++ (udiv:SI (reg:SI 3) (reg:SI 4)))
++ (clobber (match_scratch:SI 0 "=l"))
++ (clobber (reg:SI 0))
++ (clobber (match_scratch:CC 1 "=x"))
++ (clobber (reg:CC 69))]
++ "! TARGET_POWER && ! TARGET_POWERPC"
++ "bla __quous"
++ [(set_attr "type" "idiv")])
++
++;; Logical instructions
++(define_insn "andsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
++ (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r")
++ (match_operand:SI 2 "and_operand" "?r,T,K,J")))
++ (clobber (match_scratch:CC 3 "=X,X,x,x"))]
++ ""
++ "@
++ and %0,%1,%2
++ {rlinm|rlwinm} %0,%1,0,%m2,%M2
++ {andil.|andi.} %0,%1,%b2
++ {andiu.|andis.} %0,%1,%u2"
++ [(set_attr "length" "4")])
++
++;; Note to set cr's other than cr0 we do the and immediate and then
++;; the test again -- this avoids a mcrf which on the higher end
++;; machines causes an execution serialization
++
++(define_insn "*andsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x,?y,??y,??y,?y")
++ (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r,r,r,r")
++ (match_operand:SI 2 "and_operand" "r,K,J,T,r,K,J,T"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r,r,r,r,r,r,r"))
++ (clobber (match_scratch:CC 4 "=X,X,X,X,X,x,x,X"))]
++ "! TARGET_POWERPC64"
++ "@
++ and. %3,%1,%2
++ {andil.|andi.} %3,%1,%b2
++ {andiu.|andis.} %3,%1,%u2
++ {rlinm.|rlwinm.} %3,%1,0,%m2,%M2
++ #
++ #
++ #
++ #"
++ [(set_attr "type" "compare,compare,compare,delayed_compare,compare,compare,compare,compare")
++ (set_attr "length" "4,4,4,4,8,8,8,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "and_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))
++ (clobber (match_scratch:CC 4 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(parallel [(set (match_dup 3)
++ (and:SI (match_dup 1)
++ (match_dup 2)))
++ (clobber (match_dup 4))])
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*andsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,x,x,?y,??y,??y,?y")
++ (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r,r,r,r")
++ (match_operand:SI 2 "and_operand" "r,K,J,T,r,K,J,T"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r,r,r,r")
++ (and:SI (match_dup 1)
++ (match_dup 2)))
++ (clobber (match_scratch:CC 4 "=X,X,X,X,X,x,x,X"))]
++ "! TARGET_POWERPC64"
++ "@
++ and. %0,%1,%2
++ {andil.|andi.} %0,%1,%b2
++ {andiu.|andis.} %0,%1,%u2
++ {rlinm.|rlwinm.} %0,%1,0,%m2,%M2
++ #
++ #
++ #
++ #"
++ [(set_attr "type" "compare,compare,compare,delayed_compare,compare,compare,compare,compare")
++ (set_attr "length" "4,4,4,4,8,8,8,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "and_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (and:SI (match_dup 1)
++ (match_dup 2)))
++ (clobber (match_scratch:CC 4 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(parallel [(set (match_dup 0)
++ (and:SI (match_dup 1)
++ (match_dup 2)))
++ (clobber (match_dup 4))])
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++(define_expand "iorsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT
++ && ! logical_operand (operands[2], SImode))
++ {
++ HOST_WIDE_INT value = INTVAL (operands[2]);
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (SImode));
++
++ emit_insn (gen_iorsi3 (tmp, operands[1],
++ GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
++ emit_insn (gen_iorsi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
++ DONE;
++ }
++}")
++
++(define_insn "*iorsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
++ (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r")
++ (match_operand:SI 2 "logical_operand" "r,K,J")))]
++ ""
++ "@
++ or %0,%1,%2
++ {oril|ori} %0,%1,%b2
++ {oriu|oris} %0,%1,%u2"
++ [(set_attr "length" "4,4,4")])
++
++(define_insn "*iorsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ or. %3,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (ior:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*iorsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ior:SI (match_dup 1)
++ (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "@
++ or. %0,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ior:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (ior:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++;; Split an IOR that we can't do in one insn into two insns, each of which
++;; does one 16-bit part. This is used by combine.
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "non_logical_cint_operand" "")))]
++ ""
++ [(set (match_dup 0) (ior:SI (match_dup 1) (match_dup 3)))
++ (set (match_dup 0) (ior:SI (match_dup 0) (match_dup 4)))]
++"
++{
++ operands[3] = GEN_INT (INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff));
++ operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
++}")
++
++(define_expand "xorsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT
++ && ! logical_operand (operands[2], SImode))
++ {
++ HOST_WIDE_INT value = INTVAL (operands[2]);
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (SImode));
++
++ emit_insn (gen_xorsi3 (tmp, operands[1],
++ GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
++ emit_insn (gen_xorsi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
++ DONE;
++ }
++}")
++
++(define_insn "*xorsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
++ (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r")
++ (match_operand:SI 2 "logical_operand" "r,K,J")))]
++ ""
++ "@
++ xor %0,%1,%2
++ {xoril|xori} %0,%1,%b2
++ {xoriu|xoris} %0,%1,%u2"
++ [(set_attr "length" "4,4,4")])
++
++(define_insn "*xorsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ xor. %3,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (xor:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*xorsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (xor:SI (match_dup 1)
++ (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "@
++ xor. %0,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (xor:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (xor:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++;; Split an XOR that we can't do in one insn into two insns, each of which
++;; does one 16-bit part. This is used by combine.
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "non_logical_cint_operand" "")))]
++ ""
++ [(set (match_dup 0) (xor:SI (match_dup 1) (match_dup 3)))
++ (set (match_dup 0) (xor:SI (match_dup 0) (match_dup 4)))]
++"
++{
++ operands[3] = GEN_INT (INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff));
++ operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
++}")
++
++(define_insn "*eqvsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))))]
++ ""
++ "eqv %0,%1,%2")
++
++(define_insn "*eqvsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r")))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ eqv. %3,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" "")))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (not:SI (xor:SI (match_dup 1)
++ (match_dup 2))))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*eqvsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:SI 2 "gpc_reg_operand" "r,r")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (not:SI (xor:SI (match_dup 1) (match_dup 2))))]
++ "! TARGET_POWERPC64"
++ "@
++ eqv. %0,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_short_operand" "")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (not:SI (xor:SI (match_dup 1)
++ (match_dup 2))))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (not:SI (xor:SI (match_dup 1)
++ (match_dup 2))))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++(define_insn "*andcsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (match_operand:SI 2 "gpc_reg_operand" "r")))]
++ ""
++ "andc %0,%2,%1")
++
++(define_insn "*andcsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ andc. %3,%2,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (and:SI (not:SI (match_dup 1))
++ (match_dup 2)))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*andcsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (and:SI (not:SI (match_dup 1))
++ (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "@
++ andc. %0,%2,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (and:SI (not:SI (match_dup 1))
++ (match_dup 2)))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (and:SI (not:SI (match_dup 1))
++ (match_dup 2)))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++(define_insn "*iorcsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (match_operand:SI 2 "gpc_reg_operand" "r")))]
++ ""
++ "orc %0,%2,%1")
++
++(define_insn "*iorcsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ orc. %3,%2,%1
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (ior:SI (not:SI (match_dup 1))
++ (match_dup 2)))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*iorcsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
++ (match_operand:SI 2 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ior:SI (not:SI (match_dup 1)) (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "@
++ orc. %0,%2,%1
++ #"
++ [(set_attr "type" "compare")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (match_operand:SI 2 "gpc_reg_operand" ""))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ior:SI (not:SI (match_dup 1))
++ (match_dup 2)))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (ior:SI (not:SI (match_dup 1))
++ (match_dup 2)))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++(define_insn "*nandsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
++ ""
++ "nand %0,%1,%2")
++
++(define_insn "*nandsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ nand. %3,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (ior:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*nandsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ior:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))]
++ "! TARGET_POWERPC64"
++ "@
++ nand. %0,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ior:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (ior:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++(define_insn "*norsi3_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
++ ""
++ "nor %0,%1,%2")
++
++(define_insn "*norsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ nor. %3,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (and:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))
++ (set (match_dup 0)
++ (compare:CC (match_dup 3)
++ (const_int 0)))]
++ "")
++
++(define_insn "*norsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (and:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))]
++ "! TARGET_POWERPC64"
++ "@
++ nor. %0,%1,%2
++ #"
++ [(set_attr "type" "compare")
++ (set_attr "length" "4,8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
++ (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (and:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 0)
++ (and:SI (not:SI (match_dup 1))
++ (not:SI (match_dup 2))))
++ (set (match_dup 3)
++ (compare:CC (match_dup 0)
++ (const_int 0)))]
++ "")
++
++;; maskir insn. We need four forms because things might be in arbitrary
++;; orders. Don't define forms that only set CR fields because these
++;; would modify an input register.
++
++(define_insn "*maskir_internal1"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (match_operand:SI 1 "gpc_reg_operand" "0"))
++ (and:SI (match_dup 2)
++ (match_operand:SI 3 "gpc_reg_operand" "r"))))]
++ "TARGET_POWER"
++ "maskir %0,%3,%2")
++
++(define_insn "*maskir_internal2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (match_operand:SI 1 "gpc_reg_operand" "0"))
++ (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_dup 2))))]
++ "TARGET_POWER"
++ "maskir %0,%3,%2")
++
++(define_insn "*maskir_internal3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (match_operand:SI 2 "gpc_reg_operand" "r")
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (and:SI (not:SI (match_dup 2))
++ (match_operand:SI 1 "gpc_reg_operand" "0"))))]
++ "TARGET_POWER"
++ "maskir %0,%3,%2")
++
++(define_insn "*maskir_internal4"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (and:SI (not:SI (match_dup 2))
++ (match_operand:SI 1 "gpc_reg_operand" "0"))))]
++ "TARGET_POWER"
++ "maskir %0,%3,%2")
++
++(define_insn "*maskir_internal5"
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (match_operand:SI 1 "gpc_reg_operand" "0"))
++ (and:SI (match_dup 2)
++ (match_operand:SI 3 "gpc_reg_operand" "r")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (not:SI (match_dup 2)) (match_dup 1))
++ (and:SI (match_dup 2) (match_dup 3))))]
++ "TARGET_POWER"
++ "maskir. %0,%3,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*maskir_internal6"
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (match_operand:SI 1 "gpc_reg_operand" "0"))
++ (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_dup 2)))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (not:SI (match_dup 2)) (match_dup 1))
++ (and:SI (match_dup 3) (match_dup 2))))]
++ "TARGET_POWER"
++ "maskir. %0,%3,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*maskir_internal7"
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (ior:SI (and:SI (match_operand:SI 2 "gpc_reg_operand" "r")
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (and:SI (not:SI (match_dup 2))
++ (match_operand:SI 1 "gpc_reg_operand" "0")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (match_dup 2) (match_dup 3))
++ (and:SI (not:SI (match_dup 2)) (match_dup 1))))]
++ "TARGET_POWER"
++ "maskir. %0,%3,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*maskir_internal8"
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (ior:SI (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (and:SI (not:SI (match_dup 2))
++ (match_operand:SI 1 "gpc_reg_operand" "0")))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ior:SI (and:SI (match_dup 3) (match_dup 2))
++ (and:SI (not:SI (match_dup 2)) (match_dup 1))))]
++ "TARGET_POWER"
++ "maskir. %0,%3,%2"
++ [(set_attr "type" "compare")])
++
++;; Rotate and shift insns, in all their variants. These support shifts,
++;; field inserts and extracts, and various combinations thereof.
++(define_expand "insv"
++ [(set (zero_extract (match_operand 0 "gpc_reg_operand" "")
++ (match_operand:SI 1 "const_int_operand" "")
++ (match_operand:SI 2 "const_int_operand" ""))
++ (match_operand 3 "gpc_reg_operand" ""))]
++ ""
++ "
++{
++ /* Do not handle 16/8 bit structures that fit in HI/QI modes directly, since
++ the (SUBREG:SI (REG:HI xxx)) that is otherwise generated can confuse the
++ compiler if the address of the structure is taken later. */
++ if (GET_CODE (operands[0]) == SUBREG
++ && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[0]))) < UNITS_PER_WORD))
++ FAIL;
++
++ if (TARGET_POWERPC64 && GET_MODE (operands[0]) == DImode)
++ emit_insn (gen_insvdi (operands[0], operands[1], operands[2], operands[3]));
++ else
++ emit_insn (gen_insvsi (operands[0], operands[1], operands[2], operands[3]));
++ DONE;
++}")
++
++(define_insn "insvsi"
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (match_operand:SI 1 "const_int_operand" "i")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))]
++ ""
++ "*
++{
++ int start = INTVAL (operands[2]) & 31;
++ int size = INTVAL (operands[1]) & 31;
++
++ operands[4] = GEN_INT (32 - start - size);
++ operands[1] = GEN_INT (start + size - 1);
++ return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
++}")
++
++(define_insn "*insvsi_internal1"
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (match_operand:SI 1 "const_int_operand" "i")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (ashift:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_operand:SI 4 "const_int_operand" "i")))]
++ "(32 - (INTVAL (operands[4]) & 31)) >= INTVAL (operands[1])"
++ "*
++{
++ int shift = INTVAL (operands[4]) & 31;
++ int start = INTVAL (operands[2]) & 31;
++ int size = INTVAL (operands[1]) & 31;
++
++ operands[4] = GEN_INT (shift - start - size);
++ operands[1] = GEN_INT (start + size - 1);
++ return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
++}")
++
++(define_insn "*insvsi_internal2"
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (match_operand:SI 1 "const_int_operand" "i")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (ashiftrt:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_operand:SI 4 "const_int_operand" "i")))]
++ "(32 - (INTVAL (operands[4]) & 31)) >= INTVAL (operands[1])"
++ "*
++{
++ int shift = INTVAL (operands[4]) & 31;
++ int start = INTVAL (operands[2]) & 31;
++ int size = INTVAL (operands[1]) & 31;
++
++ operands[4] = GEN_INT (32 - shift - start - size);
++ operands[1] = GEN_INT (start + size - 1);
++ return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
++}")
++
++(define_insn "*insvsi_internal3"
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (match_operand:SI 1 "const_int_operand" "i")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (lshiftrt:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_operand:SI 4 "const_int_operand" "i")))]
++ "(32 - (INTVAL (operands[4]) & 31)) >= INTVAL (operands[1])"
++ "*
++{
++ int shift = INTVAL (operands[4]) & 31;
++ int start = INTVAL (operands[2]) & 31;
++ int size = INTVAL (operands[1]) & 31;
++
++ operands[4] = GEN_INT (32 - shift - start - size);
++ operands[1] = GEN_INT (start + size - 1);
++ return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
++}")
++
++(define_insn "*insvsi_internal4"
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (match_operand:SI 1 "const_int_operand" "i")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (zero_extract:SI (match_operand:SI 3 "gpc_reg_operand" "r")
++ (match_operand:SI 4 "const_int_operand" "i")
++ (match_operand:SI 5 "const_int_operand" "i")))]
++ "INTVAL (operands[4]) >= INTVAL (operands[1])"
++ "*
++{
++ int extract_start = INTVAL (operands[5]) & 31;
++ int extract_size = INTVAL (operands[4]) & 31;
++ int insert_start = INTVAL (operands[2]) & 31;
++ int insert_size = INTVAL (operands[1]) & 31;
++
++/* Align extract field with insert field */
++ operands[5] = GEN_INT (extract_start + extract_size - insert_start - insert_size);
++ operands[1] = GEN_INT (insert_start + insert_size - 1);
++ return \"{rlimi|rlwimi} %0,%3,%h5,%h2,%h1\";
++}")
++
++(define_insn "insvdi"
++ [(set (zero_extract:DI (match_operand:DI 0 "gpc_reg_operand" "+r")
++ (match_operand:SI 1 "const_int_operand" "i")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:DI 3 "gpc_reg_operand" "r"))]
++ "TARGET_POWERPC64"
++ "*
++{
++ int start = INTVAL (operands[2]) & 63;
++ int size = INTVAL (operands[1]) & 63;
++
++ operands[1] = GEN_INT (64 - start - size);
++ return \"rldimi %0,%3,%H1,%H2\";
++}")
++
++(define_expand "extzv"
++ [(set (match_operand 0 "gpc_reg_operand" "")
++ (zero_extract (match_operand 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "const_int_operand" "")
++ (match_operand:SI 3 "const_int_operand" "")))]
++ ""
++ "
++{
++ /* Do not handle 16/8 bit structures that fit in HI/QI modes directly, since
++ the (SUBREG:SI (REG:HI xxx)) that is otherwise generated can confuse the
++ compiler if the address of the structure is taken later. */
++ if (GET_CODE (operands[0]) == SUBREG
++ && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[0]))) < UNITS_PER_WORD))
++ FAIL;
++
++ if (TARGET_POWERPC64 && GET_MODE (operands[1]) == DImode)
++ emit_insn (gen_extzvdi (operands[0], operands[1], operands[2], operands[3]));
++ else
++ emit_insn (gen_extzvsi (operands[0], operands[1], operands[2], operands[3]));
++ DONE;
++}")
++
++(define_insn "extzvsi"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")
++ (match_operand:SI 3 "const_int_operand" "i")))]
++ ""
++ "*
++{
++ int start = INTVAL (operands[3]) & 31;
++ int size = INTVAL (operands[2]) & 31;
++
++ if (start + size >= 32)
++ operands[3] = const0_rtx;
++ else
++ operands[3] = GEN_INT (start + size);
++ return \"{rlinm|rlwinm} %0,%1,%3,%s2,31\";
++}")
++
++(define_insn "*extzvsi_internal1"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")
++ (match_operand:SI 3 "const_int_operand" "i"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=r"))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ int start = INTVAL (operands[3]) & 31;
++ int size = INTVAL (operands[2]) & 31;
++
++ /* If the bitfield being tested fits in the upper or lower half of a
++ word, it is possible to use andiu. or andil. to test it. This is
++ useful because the condition register set-use delay is smaller for
++ andi[ul]. than for rlinm. This doesn't work when the starting bit
++ position is 0 because the LT and GT bits may be set wrong. */
++
++ if ((start > 0 && start + size <= 16) || start >= 16)
++ {
++ operands[3] = GEN_INT (((1 << (16 - (start & 15)))
++ - (1 << (16 - (start & 15) - size))));
++ if (start < 16)
++ return \"{andiu.|andis.} %4,%1,%3\";
++ else
++ return \"{andil.|andi.} %4,%1,%3\";
++ }
++
++ if (start + size >= 32)
++ operands[3] = const0_rtx;
++ else
++ operands[3] = GEN_INT (start + size);
++ return \"{rlinm.|rlwinm.} %4,%1,%3,%s2,31\";
++}"
++ [(set_attr "type" "compare")])
++
++(define_insn "*extzvsi_internal2"
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")
++ (match_operand:SI 3 "const_int_operand" "i"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extract:SI (match_dup 1) (match_dup 2) (match_dup 3)))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ int start = INTVAL (operands[3]) & 31;
++ int size = INTVAL (operands[2]) & 31;
++
++ if (start >= 16 && start + size == 32)
++ {
++ operands[3] = GEN_INT ((1 << (32 - start)) - 1);
++ return \"{andil.|andi.} %0,%1,%3\";
++ }
++
++ if (start + size >= 32)
++ operands[3] = const0_rtx;
++ else
++ operands[3] = GEN_INT (start + size);
++ return \"{rlinm.|rlwinm.} %0,%1,%3,%s2,31\";
++}"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "extzvdi"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extract:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")
++ (match_operand:SI 3 "const_int_operand" "i")))]
++ "TARGET_POWERPC64"
++ "*
++{
++ int start = INTVAL (operands[3]) & 63;
++ int size = INTVAL (operands[2]) & 63;
++
++ if (start + size >= 64)
++ operands[3] = const0_rtx;
++ else
++ operands[3] = GEN_INT (start + size);
++ operands[2] = GEN_INT (64 - size);
++ return \"rldicl %0,%1,%3,%2\";
++}")
++
++(define_insn "*extzvdi_internal1"
++ [(set (match_operand:CC 0 "gpc_reg_operand" "=x")
++ (compare:CC (zero_extract:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")
++ (match_operand:SI 3 "const_int_operand" "i"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 4 "=r"))]
++ "TARGET_POWERPC64"
++ "*
++{
++ int start = INTVAL (operands[3]) & 63;
++ int size = INTVAL (operands[2]) & 63;
++
++ if (start + size >= 64)
++ operands[3] = const0_rtx;
++ else
++ operands[3] = GEN_INT (start + size);
++ operands[2] = GEN_INT (64 - size);
++ return \"rldicl. %4,%1,%3,%2\";
++}")
++
++(define_insn "*extzvdi_internal2"
++ [(set (match_operand:CC 4 "gpc_reg_operand" "=x")
++ (compare:CC (zero_extract:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")
++ (match_operand:SI 3 "const_int_operand" "i"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extract:DI (match_dup 1) (match_dup 2) (match_dup 3)))]
++ "TARGET_POWERPC64"
++ "*
++{
++ int start = INTVAL (operands[3]) & 63;
++ int size = INTVAL (operands[2]) & 63;
++
++ if (start + size >= 64)
++ operands[3] = const0_rtx;
++ else
++ operands[3] = GEN_INT (start + size);
++ operands[2] = GEN_INT (64 - size);
++ return \"rldicl. %0,%1,%3,%2\";
++}")
++
++(define_insn "rotlsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
++ ""
++ "{rl%I2nm|rlw%I2nm} %0,%1,%h2,0xffffffff")
++
++(define_insn "*rotlsi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "! TARGET_POWERPC64"
++ "{rl%I2nm.|rlw%I2nm.} %3,%1,%h2,0xffffffff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotlsi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (rotate:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,0xffffffff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotlsi3_internal4"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (match_operand:SI 3 "mask_operand" "T")))]
++ ""
++ "{rl%I2nm|rlw%I2nm} %0,%1,%h2,%m3,%M3")
++
++(define_insn "*rotlsi3_internal5"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (and:SI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (match_operand:SI 3 "mask_operand" "T"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=r"))]
++ "! TARGET_POWERPC64"
++ "{rl%I2nm.|rlw%I2nm.} %4,%1,%h2,%m3,%M3"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotlsi3_internal6"
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC (and:SI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (match_operand:SI 3 "mask_operand" "T"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (rotate:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
++ "! TARGET_POWERPC64"
++ "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,%m3,%M3"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotlsi3_internal7"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI
++ (subreg:QI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]
++ ""
++ "{rl%I2nm|rlw%I2nm} %0,%1,%h2,0xff")
++
++(define_insn "*rotlsi3_internal8"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI
++ (subreg:QI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ ""
++ "{rl%I2nm.|rlw%I2nm.} %3,%1,%h2,0xff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotlsi3_internal9"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI
++ (subreg:QI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
++ ""
++ "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,0xff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotlsi3_internal10"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI
++ (subreg:HI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]
++ ""
++ "{rl%I2nm|rlw%I2nm} %0,%1,%h2,0xffff")
++
++(define_insn "*rotlsi3_internal11"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI
++ (subreg:HI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ ""
++ "{rl%I2nm.|rlw%I2nm.} %3,%1,%h2,0xffff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotlsi3_internal12"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:SI
++ (subreg:HI
++ (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
++ ""
++ "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,0xffff"
++ [(set_attr "type" "delayed_compare")])
++
++;; Note that we use "sle." instead of "sl." so that we can set
++;; SHIFT_COUNT_TRUNCATED.
++
++(define_expand "ashlsi3"
++ [(use (match_operand:SI 0 "gpc_reg_operand" ""))
++ (use (match_operand:SI 1 "gpc_reg_operand" ""))
++ (use (match_operand:SI 2 "reg_or_cint_operand" ""))]
++ ""
++ "
++{
++ if (TARGET_POWER)
++ emit_insn (gen_ashlsi3_power (operands[0], operands[1], operands[2]));
++ else
++ emit_insn (gen_ashlsi3_no_power (operands[0], operands[1], operands[2]));
++ DONE;
++}")
++
++(define_insn "ashlsi3_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,i")))
++ (clobber (match_scratch:SI 3 "=q,X"))]
++ "TARGET_POWER"
++ "@
++ sle %0,%1,%2
++ {sli|slwi} %0,%1,%h2")
++
++(define_insn "ashlsi3_no_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
++ "! TARGET_POWER"
++ "{sl|slw}%I2 %0,%1,%h2")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))
++ (clobber (match_scratch:SI 4 "=q,X"))]
++ "TARGET_POWER"
++ "@
++ sle. %3,%1,%2
++ {sli.|slwi.} %3,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "! TARGET_POWER && ! TARGET_POWERPC64"
++ "{sl|slw}%I2. %3,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
++ (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ashift:SI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:SI 4 "=q,X"))]
++ "TARGET_POWER"
++ "@
++ sle. %0,%1,%2
++ {sli.|slwi.} %0,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ashift:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWER && ! TARGET_POWERPC64"
++ "{sl|slw}%I2. %0,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:SI 3 "mask_operand" "T")))]
++ "includes_lshift_p (operands[2], operands[3])"
++ "{rlinm|rlwinm} %0,%1,%h2,%m3,%M3")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:SI 3 "mask_operand" "T"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=r"))]
++ "! TARGET_POWERPC64 && includes_lshift_p (operands[2], operands[3])"
++ "{rlinm.|rlwinm.} %4,%1,%h2,%m3,%M3"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:SI 3 "mask_operand" "T"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (ashift:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
++ "! TARGET_POWERPC64 && includes_lshift_p (operands[2], operands[3])"
++ "{rlinm.|rlwinm.} %0,%1,%h2,%m3,%M3"
++ [(set_attr "type" "delayed_compare")])
++
++;; The AIX assembler mis-handles "sri x,x,0", so write that case as
++;; "sli x,x,0".
++(define_expand "lshrsi3"
++ [(use (match_operand:SI 0 "gpc_reg_operand" ""))
++ (use (match_operand:SI 1 "gpc_reg_operand" ""))
++ (use (match_operand:SI 2 "reg_or_cint_operand" ""))]
++ ""
++ "
++{
++ if (TARGET_POWER)
++ emit_insn (gen_lshrsi3_power (operands[0], operands[1], operands[2]));
++ else
++ emit_insn (gen_lshrsi3_no_power (operands[0], operands[1], operands[2]));
++ DONE;
++}")
++
++(define_insn "lshrsi3_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,i")))
++ (clobber (match_scratch:SI 3 "=q,X,X"))]
++ "TARGET_POWER"
++ "@
++ sre %0,%1,%2
++ mr %0,%1
++ {s%A2i|s%A2wi} %0,%1,%h2")
++
++(define_insn "lshrsi3_no_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "O,ri")))]
++ "! TARGET_POWER"
++ "@
++ mr %0,%1
++ {sr|srw}%I2 %0,%1,%h2")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x")
++ (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,i"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,X,r"))
++ (clobber (match_scratch:SI 4 "=q,X,X"))]
++ "TARGET_POWER"
++ "@
++ sre. %3,%1,%2
++ mr. %1,%1
++ {s%A2i.|s%A2wi.} %3,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "O,ri"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=X,r"))]
++ "! TARGET_POWER && ! TARGET_POWERPC64"
++ "@
++ mr. %1,%1
++ {sr|srw}%I2. %3,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,x")
++ (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,i"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
++ (lshiftrt:SI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:SI 4 "=q,X,X"))]
++ "TARGET_POWER"
++ "@
++ sre. %0,%1,%2
++ mr. %0,%1
++ {s%A2i.|s%A2wi.} %0,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
++ (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "O,ri"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (lshiftrt:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWER && ! TARGET_POWERPC64"
++ "@
++ mr. %0,%1
++ {sr|srw}%I2. %0,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:SI 3 "mask_operand" "T")))]
++ "includes_rshift_p (operands[2], operands[3])"
++ "{rlinm|rlwinm} %0,%1,%s2,%m3,%M3")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:SI 3 "mask_operand" "T"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=r"))]
++ "! TARGET_POWERPC64 && includes_rshift_p (operands[2], operands[3])"
++ "{rlinm.|rlwinm.} %4,%1,%s2,%m3,%M3"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i"))
++ (match_operand:SI 3 "mask_operand" "T"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (lshiftrt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
++ "! TARGET_POWERPC64 && includes_rshift_p (operands[2], operands[3])"
++ "{rlinm.|rlwinm.} %0,%1,%s2,%m3,%M3"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI
++ (subreg:QI
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")) 0)))]
++ "includes_rshift_p (operands[2], GEN_INT (255))"
++ "{rlinm|rlwinm} %0,%1,%s2,0xff")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (zero_extend:SI
++ (subreg:QI
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")) 0))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "includes_rshift_p (operands[2], GEN_INT (255))"
++ "{rlinm.|rlwinm.} %3,%1,%s2,0xff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (zero_extend:SI
++ (subreg:QI
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")) 0))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
++ "includes_rshift_p (operands[2], GEN_INT (255))"
++ "{rlinm.|rlwinm.} %0,%1,%s2,0xff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI
++ (subreg:HI
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")) 0)))]
++ "includes_rshift_p (operands[2], GEN_INT (65535))"
++ "{rlinm|rlwinm} %0,%1,%s2,0xffff")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (zero_extend:SI
++ (subreg:HI
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")) 0))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "includes_rshift_p (operands[2], GEN_INT (65535))"
++ "{rlinm.|rlwinm.} %3,%1,%s2,0xffff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (zero_extend:SI
++ (subreg:HI
++ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "const_int_operand" "i")) 0))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
++ "includes_rshift_p (operands[2], GEN_INT (65535))"
++ "{rlinm.|rlwinm.} %0,%1,%s2,0xffff"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (const_int 1)
++ (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (ashiftrt:SI (match_operand:SI 2 "gpc_reg_operand" "r")
++ (const_int 31)))]
++ "TARGET_POWER"
++ "rrib %0,%1,%2")
++
++(define_insn ""
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (const_int 1)
++ (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (lshiftrt:SI (match_operand:SI 2 "gpc_reg_operand" "r")
++ (const_int 31)))]
++ "TARGET_POWER"
++ "rrib %0,%1,%2")
++
++(define_insn ""
++ [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
++ (const_int 1)
++ (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (zero_extract:SI (match_operand:SI 2 "gpc_reg_operand" "r")
++ (const_int 1)
++ (const_int 0)))]
++ "TARGET_POWER"
++ "rrib %0,%1,%2")
++
++(define_expand "ashrsi3"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (TARGET_POWER)
++ emit_insn (gen_ashrsi3_power (operands[0], operands[1], operands[2]));
++ else
++ emit_insn (gen_ashrsi3_no_power (operands[0], operands[1], operands[2]));
++ DONE;
++}")
++
++(define_insn "ashrsi3_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,i")))
++ (clobber (match_scratch:SI 3 "=q,X"))]
++ "TARGET_POWER"
++ "@
++ srea %0,%1,%2
++ {srai|srawi} %0,%1,%h2")
++
++(define_insn "ashrsi3_no_power"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
++ "! TARGET_POWER"
++ "{sra|sraw}%I2 %0,%1,%h2")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r,r"))
++ (clobber (match_scratch:SI 4 "=q,X"))]
++ "TARGET_POWER"
++ "@
++ srea. %3,%1,%2
++ {srai.|srawi.} %3,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "! TARGET_POWER"
++ "{sra|sraw}%I2. %3,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
++ (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ashiftrt:SI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:SI 4 "=q,X"))]
++ "TARGET_POWER"
++ "@
++ srea. %0,%1,%2
++ {srai.|srawi.} %0,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ashiftrt:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWER"
++ "{sra|sraw}%I2. %0,%1,%h2"
++ [(set_attr "type" "delayed_compare")])
++
++;; Floating-point insns, excluding normal data motion.
++;;
++;; PowerPC has a full set of single-precision floating point instructions.
++;;
++;; For the POWER architecture, we pretend that we have both SFmode and
++;; DFmode insns, while, in fact, all fp insns are actually done in double.
++;; The only conversions we will do will be when storing to memory. In that
++;; case, we will use the "frsp" instruction before storing.
++;;
++;; Note that when we store into a single-precision memory location, we need to
++;; use the frsp insn first. If the register being stored isn't dead, we
++;; need a scratch register for the frsp. But this is difficult when the store
++;; is done by reload. It is not incorrect to do the frsp on the register in
++;; this case, we just lose precision that we would have otherwise gotten but
++;; is not guaranteed. Perhaps this should be tightened up at some point.
++
++(define_insn "extendsfdf2"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (float_extend:DF (match_operand:SF 1 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "*
++{
++ if (REGNO (operands[0]) == REGNO (operands[1]))
++ return \"\";
++ else
++ return \"fmr %0,%1\";
++}"
++ [(set_attr "type" "fp")])
++
++(define_insn "truncdfsf2"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "frsp %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn "aux_truncdfsf2"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] 0))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "frsp %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn "negsf2"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (neg:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fneg %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn "abssf2"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (abs:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fabs %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (neg:SF (abs:SF (match_operand:SF 1 "gpc_reg_operand" "f"))))]
++ "TARGET_HARD_FLOAT"
++ "fnabs %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_expand "addsf3"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (plus:SF (match_operand:SF 1 "gpc_reg_operand" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "")
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (plus:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "fadds %0,%1,%2"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (plus:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "{fa|fadd} %0,%1,%2"
++ [(set_attr "type" "fp")])
++
++(define_expand "subsf3"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (minus:SF (match_operand:SF 1 "gpc_reg_operand" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "")
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (minus:SF (match_operand:SF 1 "gpc_reg_operand" "f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "fsubs %0,%1,%2"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (minus:SF (match_operand:SF 1 "gpc_reg_operand" "f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "{fs|fsub} %0,%1,%2"
++ [(set_attr "type" "fp")])
++
++(define_expand "mulsf3"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (mult:SF (match_operand:SF 1 "gpc_reg_operand" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "")
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "fmuls %0,%1,%2"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "{fm|fmul} %0,%1,%2"
++ [(set_attr "type" "dmul")])
++
++(define_expand "divsf3"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (div:SF (match_operand:SF 1 "gpc_reg_operand" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "")
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (div:SF (match_operand:SF 1 "gpc_reg_operand" "f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "fdivs %0,%1,%2"
++ [(set_attr "type" "sdiv")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (div:SF (match_operand:SF 1 "gpc_reg_operand" "f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "{fd|fdiv} %0,%1,%2"
++ [(set_attr "type" "ddiv")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "fmadds %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f")))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fma|fmadd} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "fmsubs %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f")))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fms|fmsub} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (neg:SF (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f"))))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "fnmadds %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (neg:SF (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f"))))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fnma|fnmadd} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (neg:SF (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f"))))]
++ "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "fnmsubs %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (neg:SF (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
++ (match_operand:SF 2 "gpc_reg_operand" "f"))
++ (match_operand:SF 3 "gpc_reg_operand" "f"))))]
++ "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fnms|fnmsub} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_expand "sqrtsf2"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "")))]
++ "(TARGET_PPC_GPOPT || TARGET_POWER2) && TARGET_HARD_FLOAT"
++ "")
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
++ "TARGET_PPC_GPOPT && TARGET_HARD_FLOAT"
++ "fsqrts %0,%1"
++ [(set_attr "type" "ssqrt")])
++
++(define_insn ""
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
++ "TARGET_POWER2 && TARGET_HARD_FLOAT"
++ "fsqrt %0,%1"
++ [(set_attr "type" "dsqrt")])
++
++;; For MIN, MAX, and conditional move, we use DEFINE_EXPAND's that involve a
++;; fsel instruction and some auxiliary computations. Then we just have a
++;; single DEFINE_INSN for fsel and the define_splits to make them if made by
++;; combine.
++(define_expand "maxsf3"
++ [(set (match_dup 3)
++ (minus:SF (match_operand:SF 1 "gpc_reg_operand" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")))
++ (set (match_operand:SF 0 "gpc_reg_operand" "")
++ (if_then_else:SF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "
++{ operands[3] = gen_reg_rtx (SFmode); }")
++
++(define_split
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (smax:SF (match_operand:SF 1 "gpc_reg_operand" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")))
++ (clobber (match_operand:SF 3 "gpc_reg_operand" ""))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ [(set (match_dup 3)
++ (minus:SF (match_dup 1) (match_dup 2)))
++ (set (match_dup 0)
++ (if_then_else:SF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "")
++
++(define_expand "minsf3"
++ [(set (match_dup 3)
++ (minus:SF (match_operand:SF 2 "gpc_reg_operand" "")
++ (match_operand:SF 1 "gpc_reg_operand" "")))
++ (set (match_operand:SF 0 "gpc_reg_operand" "")
++ (if_then_else:SF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "
++{ operands[3] = gen_reg_rtx (SFmode); }")
++
++(define_split
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (smin:SF (match_operand:SF 1 "gpc_reg_operand" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")))
++ (clobber (match_operand:SF 3 "gpc_reg_operand" ""))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ [(set (match_dup 3)
++ (minus:SF (match_dup 2) (match_dup 1)))
++ (set (match_dup 0)
++ (if_then_else:SF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "")
++
++(define_expand "movsfcc"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (if_then_else:SF (match_operand 1 "comparison_operator" "")
++ (match_operand:SF 2 "gpc_reg_operand" "")
++ (match_operand:SF 3 "gpc_reg_operand" "")))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "
++{
++ rtx temp, op0, op1;
++ enum rtx_code code = GET_CODE (operands[1]);
++ if (! rs6000_compare_fp_p)
++ FAIL;
++ switch (code)
++ {
++ case GE: case EQ: case NE:
++ op0 = rs6000_compare_op0;
++ op1 = rs6000_compare_op1;
++ break;
++ case GT:
++ op0 = rs6000_compare_op1;
++ op1 = rs6000_compare_op0;
++ temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
++ break;
++ case LE:
++ op0 = rs6000_compare_op1;
++ op1 = rs6000_compare_op0;
++ break;
++ case LT:
++ op0 = rs6000_compare_op0;
++ op1 = rs6000_compare_op1;
++ temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
++ break;
++ default:
++ FAIL;
++ }
++ if (GET_MODE (rs6000_compare_op0) == DFmode)
++ {
++ temp = gen_reg_rtx (DFmode);
++ emit_insn (gen_subdf3 (temp, op0, op1));
++ emit_insn (gen_fseldfsf4 (operands[0], temp, operands[2], operands[3]));
++ if (code == EQ)
++ {
++ emit_insn (gen_negdf2 (temp, temp));
++ emit_insn (gen_fseldfsf4 (operands[0], temp, operands[0], operands[3]));
++ }
++ else if (code == NE)
++ {
++ emit_insn (gen_negdf2 (temp, temp));
++ emit_insn (gen_fseldfsf4 (operands[0], temp, operands[3], operands[0]));
++ }
++ }
++ else
++ {
++ temp = gen_reg_rtx (SFmode);
++ emit_insn (gen_subsf3 (temp, op0, op1));
++ emit_insn (gen_fselsfsf4 (operands[0], temp, operands[2], operands[3]));
++ if (code == EQ)
++ {
++ emit_insn (gen_negsf2 (temp, temp));
++ emit_insn (gen_fselsfsf4 (operands[0], temp, operands[0], operands[3]));
++ }
++ else if (code == NE)
++ {
++ emit_insn (gen_negsf2 (temp, temp));
++ emit_insn (gen_fselsfsf4 (operands[0], temp, operands[3], operands[0]));
++ }
++ }
++ DONE;
++}")
++
++(define_insn "fselsfsf4"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "f")
++ (const_int 0))
++ (match_operand:SF 2 "gpc_reg_operand" "f")
++ (match_operand:SF 3 "gpc_reg_operand" "f")))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "fsel %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++(define_insn "fseldfsf4"
++ [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
++ (if_then_else:SF (ge (match_operand:DF 1 "gpc_reg_operand" "f")
++ (const_int 0))
++ (match_operand:SF 2 "gpc_reg_operand" "f")
++ (match_operand:SF 3 "gpc_reg_operand" "f")))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "fsel %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++(define_insn "negdf2"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (neg:DF (match_operand:DF 1 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fneg %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn "absdf2"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (abs:DF (match_operand:DF 1 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fabs %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn ""
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (neg:DF (abs:DF (match_operand:DF 1 "gpc_reg_operand" "f"))))]
++ "TARGET_HARD_FLOAT"
++ "fnabs %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn "adddf3"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (plus:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
++ (match_operand:DF 2 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "{fa|fadd} %0,%1,%2"
++ [(set_attr "type" "fp")])
++
++(define_insn "subdf3"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (minus:DF (match_operand:DF 1 "gpc_reg_operand" "f")
++ (match_operand:DF 2 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "{fs|fsub} %0,%1,%2"
++ [(set_attr "type" "fp")])
++
++(define_insn "muldf3"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
++ (match_operand:DF 2 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "{fm|fmul} %0,%1,%2"
++ [(set_attr "type" "dmul")])
++
++(define_insn "divdf3"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (div:DF (match_operand:DF 1 "gpc_reg_operand" "f")
++ (match_operand:DF 2 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "{fd|fdiv} %0,%1,%2"
++ [(set_attr "type" "ddiv")])
++
++(define_insn ""
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (plus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
++ (match_operand:DF 2 "gpc_reg_operand" "f"))
++ (match_operand:DF 3 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fma|fmadd} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_insn ""
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (minus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
++ (match_operand:DF 2 "gpc_reg_operand" "f"))
++ (match_operand:DF 3 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fms|fmsub} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_insn ""
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (neg:DF (plus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
++ (match_operand:DF 2 "gpc_reg_operand" "f"))
++ (match_operand:DF 3 "gpc_reg_operand" "f"))))]
++ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fnma|fnmadd} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_insn ""
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (neg:DF (minus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
++ (match_operand:DF 2 "gpc_reg_operand" "f"))
++ (match_operand:DF 3 "gpc_reg_operand" "f"))))]
++ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
++ "{fnms|fnmsub} %0,%1,%2,%3"
++ [(set_attr "type" "dmul")])
++
++(define_insn "sqrtdf2"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "f")))]
++ "(TARGET_PPC_GPOPT || TARGET_POWER2) && TARGET_HARD_FLOAT"
++ "fsqrt %0,%1"
++ [(set_attr "type" "dsqrt")])
++
++;; For MIN, MAX, and conditional move, we use DEFINE_EXPAND's that involve a
++;; fsel instruction and some auxiliary computations. Then we just have a
++;; single DEFINE_INSN for fsel and the define_splits to make them if made by
++;; combine.
++
++(define_expand "maxdf3"
++ [(set (match_dup 3)
++ (minus:DF (match_operand:DF 1 "gpc_reg_operand" "")
++ (match_operand:DF 2 "gpc_reg_operand" "")))
++ (set (match_operand:DF 0 "gpc_reg_operand" "")
++ (if_then_else:DF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "
++{ operands[3] = gen_reg_rtx (DFmode); }")
++
++(define_split
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (smax:DF (match_operand:DF 1 "gpc_reg_operand" "")
++ (match_operand:DF 2 "gpc_reg_operand" "")))
++ (clobber (match_operand:DF 3 "gpc_reg_operand" ""))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ [(set (match_dup 3)
++ (minus:DF (match_dup 1) (match_dup 2)))
++ (set (match_dup 0)
++ (if_then_else:DF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "")
++
++(define_expand "mindf3"
++ [(set (match_dup 3)
++ (minus:DF (match_operand:DF 2 "gpc_reg_operand" "")
++ (match_operand:DF 1 "gpc_reg_operand" "")))
++ (set (match_operand:DF 0 "gpc_reg_operand" "")
++ (if_then_else:DF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "
++{ operands[3] = gen_reg_rtx (DFmode); }")
++
++(define_split
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (smin:DF (match_operand:DF 1 "gpc_reg_operand" "")
++ (match_operand:DF 2 "gpc_reg_operand" "")))
++ (clobber (match_operand:DF 3 "gpc_reg_operand" ""))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ [(set (match_dup 3)
++ (minus:DF (match_dup 2) (match_dup 1)))
++ (set (match_dup 0)
++ (if_then_else:DF (ge (match_dup 3)
++ (const_int 0))
++ (match_dup 1)
++ (match_dup 2)))]
++ "")
++
++(define_expand "movdfcc"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (if_then_else:DF (match_operand 1 "comparison_operator" "")
++ (match_operand:DF 2 "gpc_reg_operand" "")
++ (match_operand:DF 3 "gpc_reg_operand" "")))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "
++{
++ rtx temp, op0, op1;
++ enum rtx_code code = GET_CODE (operands[1]);
++ if (! rs6000_compare_fp_p)
++ FAIL;
++ switch (code)
++ {
++ case GE: case EQ: case NE:
++ op0 = rs6000_compare_op0;
++ op1 = rs6000_compare_op1;
++ break;
++ case GT:
++ op0 = rs6000_compare_op1;
++ op1 = rs6000_compare_op0;
++ temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
++ break;
++ case LE:
++ op0 = rs6000_compare_op1;
++ op1 = rs6000_compare_op0;
++ break;
++ case LT:
++ op0 = rs6000_compare_op0;
++ op1 = rs6000_compare_op1;
++ temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
++ break;
++ default:
++ FAIL;
++ }
++ if (GET_MODE (rs6000_compare_op0) == DFmode)
++ {
++ temp = gen_reg_rtx (DFmode);
++ emit_insn (gen_subdf3 (temp, op0, op1));
++ emit_insn (gen_fseldfdf4 (operands[0], temp, operands[2], operands[3]));
++ if (code == EQ)
++ {
++ emit_insn (gen_negdf2 (temp, temp));
++ emit_insn (gen_fseldfdf4 (operands[0], temp, operands[0], operands[3]));
++ }
++ else if (code == NE)
++ {
++ emit_insn (gen_negdf2 (temp, temp));
++ emit_insn (gen_fseldfdf4 (operands[0], temp, operands[3], operands[0]));
++ }
++ }
++ else
++ {
++ temp = gen_reg_rtx (SFmode);
++ emit_insn (gen_subsf3 (temp, op0, op1));
++ emit_insn (gen_fselsfdf4 (operands[0], temp, operands[2], operands[3]));
++ if (code == EQ)
++ {
++ emit_insn (gen_negsf2 (temp, temp));
++ emit_insn (gen_fselsfdf4 (operands[0], temp, operands[0], operands[3]));
++ }
++ else if (code == NE)
++ {
++ emit_insn (gen_negsf2 (temp, temp));
++ emit_insn (gen_fselsfdf4 (operands[0], temp, operands[3], operands[0]));
++ }
++ }
++ DONE;
++}")
++
++(define_insn "fseldfdf4"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "f")
++ (const_int 0))
++ (match_operand:DF 2 "gpc_reg_operand" "f")
++ (match_operand:DF 3 "gpc_reg_operand" "f")))]
++ "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
++ "fsel %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++(define_insn "fselsfdf4"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (if_then_else:DF (ge (match_operand:SF 1 "gpc_reg_operand" "f")
++ (const_int 0))
++ (match_operand:DF 2 "gpc_reg_operand" "f")
++ (match_operand:DF 3 "gpc_reg_operand" "f")))]
++ "TARGET_PPC_GFXOPT"
++ "fsel %0,%1,%2,%3"
++ [(set_attr "type" "fp")])
++
++;; Conversions to and from floating-point.
++
++(define_expand "floatsidf2"
++ [(parallel [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
++ (use (match_dup 2))
++ (use (match_dup 3))
++ (clobber (match_dup 4))
++ (clobber (match_dup 5))
++ (clobber (reg:DF 76))])]
++ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ "
++{
++ operands[2] = force_reg (SImode, GEN_INT (0x43300000));
++ operands[3] = force_reg (DFmode, rs6000_float_const (\"4503601774854144\", DFmode));
++ operands[4] = gen_reg_rtx (SImode);
++ operands[5] = gen_reg_rtx (Pmode);
++}")
++
++(define_insn "*floatsidf2_internal"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=&f")
++ (float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))
++ (use (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (use (match_operand:DF 3 "gpc_reg_operand" "f"))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
++ (clobber (match_operand 5 "gpc_reg_operand" "=b"))
++ (clobber (reg:DF 76))]
++ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ "#"
++ [(set_attr "length" "24")])
++
++(define_split
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
++ (use (match_operand:SI 2 "gpc_reg_operand" ""))
++ (use (match_operand:DF 3 "gpc_reg_operand" ""))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" ""))
++ (clobber (match_operand 5 "gpc_reg_operand" ""))
++ (clobber (reg:DF 76))]
++ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ [(set (match_dup 4)
++ (xor:SI (match_dup 1)
++ (match_dup 6)))
++ (set (match_dup 5)
++ (unspec [(const_int 0)] 11))
++ (set (match_dup 7)
++ (unspec [(match_dup 4)
++ (match_dup 5)] 12)) ;; low word
++ (set (match_dup 7)
++ (unspec [(match_dup 2)
++ (match_dup 5)
++ (match_dup 7)] 13)) ;; high word
++ (set (match_dup 0)
++ (unspec [(match_dup 7)
++ (match_dup 5)] 14))
++ (set (match_dup 0)
++ (minus:DF (match_dup 0)
++ (match_dup 3)))]
++ "
++{
++ operands[6] = GEN_INT (0x80000000);
++ operands[7] = gen_rtx_REG (DFmode, FPMEM_REGNUM);
++}")
++
++(define_expand "floatunssidf2"
++ [(parallel [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
++ (use (match_dup 2))
++ (use (match_dup 3))
++ (clobber (match_dup 4))
++ (clobber (reg:DF 76))])]
++ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ "
++{
++ operands[2] = force_reg (SImode, GEN_INT (0x43300000));
++ operands[3] = force_reg (DFmode, rs6000_float_const (\"4503599627370496\", DFmode));
++ operands[4] = gen_reg_rtx (Pmode);
++}")
++
++(define_insn "*floatunssidf2_internal"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=&f")
++ (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))
++ (use (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (use (match_operand:DF 3 "gpc_reg_operand" "f"))
++ (clobber (match_operand 4 "gpc_reg_operand" "=b"))
++ (clobber (reg:DF 76))]
++ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ "#"
++ [(set_attr "length" "20")])
++
++(define_split
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
++ (use (match_operand:SI 2 "gpc_reg_operand" ""))
++ (use (match_operand:DF 3 "gpc_reg_operand" ""))
++ (clobber (match_operand 4 "gpc_reg_operand" ""))
++ (clobber (reg:DF 76))]
++ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ [(set (match_dup 4)
++ (unspec [(const_int 0)] 11))
++ (set (match_dup 5)
++ (unspec [(match_dup 1)
++ (match_dup 4)] 12)) ;; low word
++ (set (match_dup 5)
++ (unspec [(match_dup 2)
++ (match_dup 4)
++ (match_dup 5)] 13)) ;; high word
++ (set (match_dup 0)
++ (unspec [(match_dup 5)
++ (match_dup 4)] 14))
++ (set (match_dup 0)
++ (minus:DF (match_dup 0)
++ (match_dup 3)))]
++ "operands[5] = gen_rtx_REG (DFmode, FPMEM_REGNUM);")
++
++;; Load up scratch register with base address + offset if needed
++(define_insn "*floatsidf2_loadaddr"
++ [(set (match_operand 0 "gpc_reg_operand" "=b")
++ (unspec [(const_int 0)] 11))]
++ "TARGET_HARD_FLOAT"
++ "*
++{
++ if (rs6000_fpmem_offset > 32760)
++ {
++ rtx xop[3];
++
++ xop[0] = operands[0];
++ xop[1] = (frame_pointer_needed) ? frame_pointer_rtx : stack_pointer_rtx;
++ xop[2] = GEN_INT ((rs6000_fpmem_offset >> 16) + ((rs6000_fpmem_offset & 0x8000) >> 15));
++ output_asm_insn (\"{cau|addis} %0,%1,%2\", xop);
++ }
++
++ return \"\";
++}"
++ [(set_attr "length" "4")])
++
++(define_insn "*floatsidf2_store1"
++ [(set (reg:DF 76)
++ (unspec [(match_operand:SI 0 "gpc_reg_operand" "r")
++ (match_operand 1 "gpc_reg_operand" "b")] 12))]
++ "TARGET_HARD_FLOAT"
++ "*
++{
++ rtx indx;
++
++ if (rs6000_fpmem_offset > 32760)
++ indx = operands[1];
++ else if (frame_pointer_needed)
++ indx = frame_pointer_rtx;
++ else
++ indx = stack_pointer_rtx;
++
++ operands[2] = gen_rtx_MEM (SImode,
++ gen_rtx_PLUS (Pmode,
++ indx,
++ GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
++ + ((WORDS_BIG_ENDIAN != 0) * 4))));
++
++ return \"{st|stw} %0,%2\";
++}"
++ [(set_attr "type" "store")])
++
++(define_insn "*floatsidf2_store2"
++ [(set (reg:DF 76)
++ (unspec [(match_operand:SI 0 "gpc_reg_operand" "r")
++ (match_operand 1 "gpc_reg_operand" "b")
++ (reg:DF 76)] 13))]
++ "TARGET_HARD_FLOAT"
++ "*
++{
++ rtx indx;
++
++ if (rs6000_fpmem_offset > 32760)
++ indx = operands[1];
++ else if (frame_pointer_needed)
++ indx = frame_pointer_rtx;
++ else
++ indx = stack_pointer_rtx;
++
++ operands[2] = gen_rtx_MEM (SImode,
++ gen_rtx_PLUS (Pmode,
++ indx,
++ GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
++ + ((WORDS_BIG_ENDIAN == 0) * 4))));
++
++ return \"{st|stw} %0,%2\";
++}"
++ [(set_attr "type" "store")])
++
++(define_insn "*floatsidf2_load"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (unspec [(reg:DF 76)
++ (match_operand 1 "gpc_reg_operand" "b")] 14))]
++ "TARGET_HARD_FLOAT"
++ "*
++{
++ rtx indx;
++ HOST_WIDE_INT offset = rs6000_fpmem_offset;
++
++ if (rs6000_fpmem_offset > 32760)
++ {
++ indx = operands[1];
++ offset = (((offset & 0xffff) ^ 0x8000) - 0x8000);
++ }
++ else if (frame_pointer_needed)
++ indx = frame_pointer_rtx;
++ else
++ indx = stack_pointer_rtx;
++
++ operands[2] = gen_rtx_MEM (SImode,
++ gen_rtx_PLUS (Pmode, indx, GEN_INT (offset)));
++
++ return \"lfd %0,%2\";
++}"
++ [(set_attr "type" "fpload")])
++
++(define_expand "fix_truncdfsi2"
++ [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (fix:SI (match_operand:DF 1 "gpc_reg_operand" "")))
++ (clobber (match_dup 2))
++ (clobber (match_dup 3))
++ (clobber (match_dup 4))])]
++ "TARGET_HARD_FLOAT"
++ "
++{
++ if (! TARGET_POWER2 && ! TARGET_POWERPC)
++ {
++ emit_insn (gen_trunc_call (operands[0], operands[1],
++ gen_rtx_SYMBOL_REF (Pmode, RS6000_ITRUNC)));
++ DONE;
++ }
++
++ operands[2] = gen_reg_rtx (DImode);
++ operands[3] = gen_reg_rtx (Pmode);
++ operands[4] = gen_rtx_REG (DImode, FPMEM_REGNUM);
++}")
++
++(define_insn "*fix_truncdfsi2_internal"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f")))
++ (clobber (match_operand:DI 2 "gpc_reg_operand" "=f"))
++ (clobber (match_operand 3 "gpc_reg_operand" "=b"))
++ (clobber (reg:DI 76))]
++ "TARGET_HARD_FLOAT"
++ "#"
++ [(set_attr "length" "12")])
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f")))
++ (clobber (match_operand:DI 2 "gpc_reg_operand" ""))
++ (clobber (match_operand 3 "gpc_reg_operand" ""))
++ (clobber (reg:DI 76))]
++ "TARGET_HARD_FLOAT"
++ [(clobber (match_dup 2))
++ (set (subreg:SI (match_dup 2) 0)
++ (fix:SI (match_operand:DF 1 "gpc_reg_operand" "")))
++ (set (match_dup 3)
++ (unspec [(const_int 0)] 11))
++ (set (match_dup 4)
++ (unspec [(match_dup 2)
++ (match_dup 3)] 15))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (unspec [(match_dup 4)
++ (match_dup 3)] 16))]
++ "operands[4] = gen_rtx_REG (DImode, FPMEM_REGNUM);")
++
++(define_insn "*fix_truncdfsi2_store"
++ [(set (reg:DI 76)
++ (unspec [(match_operand:DI 0 "gpc_reg_operand" "f")
++ (match_operand 1 "gpc_reg_operand" "b")] 15))]
++ "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT"
++ "*
++{
++ rtx indx;
++
++ if (rs6000_fpmem_offset > 32760)
++ indx = operands[1];
++ else if (frame_pointer_needed)
++ indx = frame_pointer_rtx;
++ else
++ indx = stack_pointer_rtx;
++
++ operands[2] = gen_rtx_MEM (DFmode,
++ gen_rtx_PLUS (Pmode,
++ indx,
++ GEN_INT ((((rs6000_fpmem_offset & 0xffff)
++ ^ 0x8000) - 0x8000))));
++
++ return \"stfd %0,%2\";
++}"
++ [(set_attr "type" "fpstore")])
++
++(define_insn "*fix_truncdfsi2_load"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (unspec [(reg:DI 76)
++ (match_operand 1 "gpc_reg_operand" "b")] 16))]
++ "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT"
++ "*
++{
++ rtx indx;
++
++ if (rs6000_fpmem_offset > 32760)
++ indx = operands[1];
++ else if (frame_pointer_needed)
++ indx = frame_pointer_rtx;
++ else
++ indx = stack_pointer_rtx;
++
++ operands[2] = gen_rtx_MEM (DFmode,
++ gen_rtx_PLUS (Pmode,
++ indx,
++ GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
++ + ((WORDS_BIG_ENDIAN) ? 4 : 0))));
++
++ return \"{l|lwz} %0,%2\";
++}"
++ [(set_attr "type" "load")])
++
++(define_expand "fixuns_truncdfsi2"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (unsigned_fix:SI (match_operand:DF 1 "gpc_reg_operand" "")))]
++ "! TARGET_POWER2 && ! TARGET_POWERPC && TARGET_HARD_FLOAT"
++ "
++{
++ emit_insn (gen_trunc_call (operands[0], operands[1],
++ gen_rtx_SYMBOL_REF (Pmode, RS6000_UITRUNC)));
++ DONE;
++}")
++
++(define_expand "trunc_call"
++ [(parallel [(set (match_operand:SI 0 "" "")
++ (fix:SI (match_operand:DF 1 "" "")))
++ (use (match_operand:SI 2 "" ""))])]
++ "TARGET_HARD_FLOAT"
++ "
++{
++ rtx insns = gen_trunc_call_rtl (operands[0], operands[1], operands[2]);
++ rtx first = XVECEXP (insns, 0, 0);
++ rtx last = XVECEXP (insns, 0, XVECLEN (insns, 0) - 1);
++
++ REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last,
++ REG_NOTES (first));
++ REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first, REG_NOTES (last));
++
++ emit_insn (insns);
++ DONE;
++}")
++
++(define_expand "trunc_call_rtl"
++ [(set (reg:DF 33) (match_operand:DF 1 "gpc_reg_operand" ""))
++ (use (reg:DF 33))
++ (parallel [(set (reg:SI 3)
++ (call (mem:SI (match_operand 2 "" "")) (const_int 0)))
++ (use (const_int 0))
++ (clobber (scratch:SI))])
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (reg:SI 3))]
++ "TARGET_HARD_FLOAT"
++ "
++{
++ rs6000_trunc_used = 1;
++}")
++
++(define_insn "*fctiwz"
++ [(set (subreg:SI (match_operand:DI 0 "gpc_reg_operand" "=f") 0)
++ (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f")))]
++ "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT"
++ "{fcirz|fctiwz} %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn "floatdidf2"
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (float:DF (match_operand:DI 1 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ "fcfid %0,%1"
++ [(set_attr "type" "fp")])
++
++(define_insn "fix_truncdfdi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=f")
++ (fix:DI (match_operand:DF 1 "gpc_reg_operand" "f")))]
++ "TARGET_POWERPC64 && TARGET_HARD_FLOAT"
++ "fctidz %0,%1"
++ [(set_attr "type" "fp")])
++
++;; Define the DImode operations that can be done in a small number
++;; of instructions. The & constraints are to prevent the register
++;; allocator from allocating registers that overlap with the inputs
++;; (for example, having an input in 7,8 and an output in 6,7). We
++;; also allow for the output being the same as one of the inputs.
++
++(define_insn "*adddi3_noppc64"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r,r,r")
++ (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,0,0")
++ (match_operand:DI 2 "reg_or_short_operand" "r,I,r,I")))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ if (WORDS_BIG_ENDIAN)
++ return (GET_CODE (operands[2])) != CONST_INT
++ ? \"{a|addc} %L0,%L1,%L2\;{ae|adde} %0,%1,%2\"
++ : \"{ai|addic} %L0,%L1,%2\;{a%G2e|add%G2e} %0,%1\";
++ else
++ return (GET_CODE (operands[2])) != CONST_INT
++ ? \"{a|addc} %0,%1,%2\;{ae|adde} %L0,%L1,%L2\"
++ : \"{ai|addic} %0,%1,%2\;{a%G2e|add%G2e} %L0,%L1\";
++}"
++ [(set_attr "length" "8")])
++
++(define_insn "*subdi3_noppc64"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r,r,r,r")
++ (minus:DI (match_operand:DI 1 "reg_or_short_operand" "r,I,0,r,I")
++ (match_operand:DI 2 "gpc_reg_operand" "r,r,r,0,0")))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ if (WORDS_BIG_ENDIAN)
++ return (GET_CODE (operands[1]) != CONST_INT)
++ ? \"{sf|subfc} %L0,%L2,%L1\;{sfe|subfe} %0,%2,%1\"
++ : \"{sfi|subfic} %L0,%L2,%1\;{sf%G1e|subf%G1e} %0,%2\";
++ else
++ return (GET_CODE (operands[1]) != CONST_INT)
++ ? \"{sf|subfc} %0,%2,%1\;{sfe|subfe} %L0,%L2,%L1\"
++ : \"{sfi|subfic} %0,%2,%1\;{sf%G1e|subf%G1e} %L0,%L2\";
++}"
++ [(set_attr "length" "8")])
++
++(define_insn "*negdi2_noppc64"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
++ (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r,0")))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ return (WORDS_BIG_ENDIAN)
++ ? \"{sfi|subfic} %L0,%L1,0\;{sfze|subfze} %0,%1\"
++ : \"{sfi|subfic} %0,%1,0\;{sfze|subfze} %L0,%L1\";
++}"
++ [(set_attr "length" "8")])
++
++(define_expand "mulsidi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
++ "! TARGET_POWERPC64"
++ "
++{
++ if (! TARGET_POWER && ! TARGET_POWERPC)
++ {
++ emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
++ emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
++ emit_insn (gen_mull_call ());
++ if (WORDS_BIG_ENDIAN)
++ emit_move_insn (operands[0], gen_rtx_REG (DImode, 3));
++ else
++ {
++ emit_move_insn (operand_subword (operands[0], 0, 0, DImode),
++ gen_rtx_REG (SImode, 3));
++ emit_move_insn (operand_subword (operands[0], 1, 0, DImode),
++ gen_rtx_REG (SImode, 4));
++ }
++ DONE;
++ }
++ else if (TARGET_POWER)
++ {
++ emit_insn (gen_mulsidi3_mq (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++}")
++
++(define_insn "mulsidi3_mq"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))
++ (clobber (match_scratch:SI 3 "=q"))]
++ "TARGET_POWER"
++ "mul %0,%1,%2\;mfmq %L0"
++ [(set_attr "type" "imul")
++ (set_attr "length" "8")])
++
++(define_insn "*mulsidi3_no_mq"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
++ (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
++ "TARGET_POWERPC && ! TARGET_POWER && ! TARGET_POWERPC64"
++ "*
++{
++ return (WORDS_BIG_ENDIAN)
++ ? \"mulhw %0,%1,%2\;mullw %L0,%1,%2\"
++ : \"mulhw %L0,%1,%2\;mullw %0,%1,%2\";
++}"
++ [(set_attr "type" "imul")
++ (set_attr "length" "8")])
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
++ "TARGET_POWERPC && ! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
++ (sign_extend:DI (match_dup 2)))
++ (const_int 32))))
++ (set (match_dup 4)
++ (mult:SI (match_dup 1)
++ (match_dup 2)))]
++ "
++{
++ int endian = (WORDS_BIG_ENDIAN == 0);
++ operands[3] = operand_subword (operands[0], endian, 0, DImode);
++ operands[4] = operand_subword (operands[0], 1 - endian, 0, DImode);
++}")
++
++(define_expand "umulsidi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
++ "TARGET_POWERPC && ! TARGET_POWERPC64"
++ "
++{
++ if (TARGET_POWER)
++ {
++ emit_insn (gen_umulsidi3_mq (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++}")
++
++(define_insn "umulsidi3_mq"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
++ (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))
++ (clobber (match_scratch:SI 3 "=q"))]
++ "TARGET_POWERPC && TARGET_POWER"
++ "*
++{
++ return (WORDS_BIG_ENDIAN)
++ ? \"mulhwu %0,%1,%2\;mullw %L0,%1,%2\"
++ : \"mulhwu %L0,%1,%2\;mullw %0,%1,%2\";
++}"
++ [(set_attr "type" "imul")
++ (set_attr "length" "8")])
++
++(define_insn "*umulsidi3_no_mq"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
++ (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
++ "TARGET_POWERPC && ! TARGET_POWER && ! TARGET_POWERPC64"
++ "*
++{
++ return (WORDS_BIG_ENDIAN)
++ ? \"mulhwu %0,%1,%2\;mullw %L0,%1,%2\"
++ : \"mulhwu %L0,%1,%2\;mullw %0,%1,%2\";
++}"
++ [(set_attr "type" "imul")
++ (set_attr "length" "8")])
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
++ (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
++ "TARGET_POWERPC && ! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 3)
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
++ (zero_extend:DI (match_dup 2)))
++ (const_int 32))))
++ (set (match_dup 4)
++ (mult:SI (match_dup 1)
++ (match_dup 2)))]
++ "
++{
++ int endian = (WORDS_BIG_ENDIAN == 0);
++ operands[3] = operand_subword (operands[0], endian, 0, DImode);
++ operands[4] = operand_subword (operands[0], 1 - endian, 0, DImode);
++}")
++
++(define_expand "smulsi3_highpart"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (sign_extend:DI
++ (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (sign_extend:DI
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (const_int 32))))]
++ ""
++ "
++{
++ if (! TARGET_POWER && ! TARGET_POWERPC)
++ {
++ emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
++ emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
++ emit_insn (gen_mulh_call ());
++ emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
++ DONE;
++ }
++ else if (TARGET_POWER)
++ {
++ emit_insn (gen_smulsi3_highpart_mq (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++}")
++
++(define_insn "smulsi3_highpart_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (sign_extend:DI
++ (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (sign_extend:DI
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (const_int 32))))
++ (clobber (match_scratch:SI 3 "=q"))]
++ "TARGET_POWER"
++ "mul %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_insn "*smulsi3_highpart_no_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (sign_extend:DI
++ (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (sign_extend:DI
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (const_int 32))))]
++ "TARGET_POWERPC && ! TARGET_POWER"
++ "mulhw %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_expand "umulsi3_highpart"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (zero_extend:DI
++ (match_operand:SI 1 "gpc_reg_operand" ""))
++ (zero_extend:DI
++ (match_operand:SI 2 "gpc_reg_operand" "")))
++ (const_int 32))))]
++ "TARGET_POWERPC"
++ "
++{
++ if (TARGET_POWER)
++ {
++ emit_insn (gen_umulsi3_highpart_mq (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++}")
++
++(define_insn "umulsi3_highpart_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (zero_extend:DI
++ (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (zero_extend:DI
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (const_int 32))))
++ (clobber (match_scratch:SI 3 "=q"))]
++ "TARGET_POWERPC && TARGET_POWER"
++ "mulhwu %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_insn "*umulsi3_highpart_no_mq"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (truncate:SI
++ (lshiftrt:DI (mult:DI (zero_extend:DI
++ (match_operand:SI 1 "gpc_reg_operand" "%r"))
++ (zero_extend:DI
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (const_int 32))))]
++ "TARGET_POWERPC && ! TARGET_POWER"
++ "mulhwu %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++;; If operands 0 and 2 are in the same register, we have a problem. But
++;; operands 0 and 1 (the usual case) can be in the same register. That's
++;; why we have the strange constraints below.
++(define_insn "ashldi3_power"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,&r")
++ (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,0,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r")))
++ (clobber (match_scratch:SI 3 "=X,q,q,q"))]
++ "TARGET_POWER"
++ "@
++ {sli|slwi} %0,%L1,%h2\;{cal %L0,0(0)|li %L0,0}
++ sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2
++ sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2
++ sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2"
++ [(set_attr "length" "8")])
++
++(define_insn "lshrdi3_power"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,&r")
++ (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,0,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r")))
++ (clobber (match_scratch:SI 3 "=X,q,q,q"))]
++ "TARGET_POWER"
++ "@
++ {s%A2i|s%A2wi} %L0,%1,%h2\;{cal %0,0(0)|li %0,0}
++ sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2
++ sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2
++ sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2"
++ [(set_attr "length" "8")])
++
++;; Shift by a variable amount is too complex to be worth open-coding. We
++;; just handle shifts by constants.
++(define_insn "ashrdi3_power"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
++ (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "const_int_operand" "M,i")))
++ (clobber (match_scratch:SI 3 "=X,q"))]
++ "TARGET_POWER"
++ "@
++ {srai|srawi} %0,%1,31\;{srai|srawi} %L0,%1,%h2
++ sraiq %0,%1,%h2\;srliq %L0,%L1,%h2"
++ [(set_attr "length" "8")])
++
++;; PowerPC64 DImode operations.
++
++(define_expand "adddi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (plus:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:DI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (! TARGET_POWERPC64)
++ {
++ if (non_short_cint_operand (operands[2], DImode))
++ FAIL;
++ }
++ else
++ if (GET_CODE (operands[2]) == CONST_INT
++ && ! add_operand (operands[2], DImode))
++ {
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (DImode));
++
++ HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
++ HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
++
++ if (low & 0x8000)
++ high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
++
++ emit_insn (gen_adddi3 (tmp, operands[1], GEN_INT (high)));
++ emit_insn (gen_adddi3 (operands[0], tmp, GEN_INT (low)));
++ DONE;
++ }
++}")
++
++;; Discourage ai/addic because of carry but provide it in an alternative
++;; allowing register zero as source.
++
++(define_insn "*adddi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,?r,r")
++ (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,b,r,b")
++ (match_operand:DI 2 "add_operand" "r,I,I,L")))]
++ "TARGET_POWERPC64"
++ "@
++ add %0,%1,%2
++ addi %0,%1,%2
++ addic %0,%1,%2
++ addis %0,%1,%v2")
++
++(define_insn "*adddi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:DI 2 "reg_or_short_operand" "r,I"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r,r"))]
++ "TARGET_POWERPC64"
++ "@
++ add. %3,%1,%2
++ addic. %3,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*adddi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
++ (compare:CC (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r")
++ (match_operand:DI 2 "reg_or_short_operand" "r,I"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (plus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "@
++ add. %0,%1,%2
++ addic. %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++;; Split an add that we can't do in one insn into two insns, each of which
++;; does one 16-bit part. This is used by combine. Note that the low-order
++;; add should be last in case the result gets used in an address.
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (plus:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:DI 2 "non_add_cint_operand" "")))]
++ "TARGET_POWERPC64"
++ [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 3)))
++ (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))]
++"
++{
++ HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
++ HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
++
++ if (low & 0x8000)
++ high+=0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
++
++ operands[3] = GEN_INT (high);
++ operands[4] = GEN_INT (low);
++}")
++
++(define_insn "one_cmpldi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (not:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "nor %0,%1,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "nor. %2,%1,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (not:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "nor. %0,%1,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (minus:DI (match_operand:DI 1 "reg_or_short_operand" "r,I")
++ (match_operand:DI 2 "gpc_reg_operand" "r,r")))]
++ "TARGET_POWERPC64"
++ "@
++ subf %0,%2,%1
++ subfic %0,%2,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (minus:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "subf. %3,%2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (minus:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (minus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "subf. %0,%2,%1"
++ [(set_attr "type" "compare")])
++
++(define_expand "subdi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (minus:DI (match_operand:DI 1 "reg_or_short_operand" "")
++ (match_operand:DI 2 "reg_or_cint_operand" "")))]
++ ""
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT)
++ {
++ emit_insn (gen_adddi3 (operands[0], operands[1],
++ negate_rtx (DImode, operands[2])));
++ DONE;
++ }
++}")
++
++(define_insn "absdi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
++ (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0")))
++ (clobber (match_scratch:DI 2 "=&r,&r"))]
++ "TARGET_POWERPC64"
++ "sradi %2,%1,63\;xor %0,%2,%1\;subf %0,%2,%0"
++ [(set_attr "length" "12")])
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
++ (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0")))
++ (clobber (match_scratch:DI 2 "=&r,&r"))]
++ "TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 2) (ashiftrt:DI (match_dup 1) (const_int 63)))
++ (set (match_dup 0) (xor:DI (match_dup 2) (match_dup 1)))
++ (set (match_dup 0) (minus:DI (match_dup 0) (match_dup 2)))]
++ "")
++
++(define_insn "*nabsdi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
++ (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0"))))
++ (clobber (match_scratch:DI 2 "=&r,&r"))]
++ "TARGET_POWERPC64"
++ "sradi %2,%1,63\;xor %0,%2,%1\;subf %0,%0,%2"
++ [(set_attr "length" "12")])
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
++ (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0"))))
++ (clobber (match_scratch:DI 2 "=&r,&r"))]
++ "TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 2) (ashiftrt:DI (match_dup 1) (const_int 63)))
++ (set (match_dup 0) (xor:DI (match_dup 2) (match_dup 1)))
++ (set (match_dup 0) (minus:DI (match_dup 2) (match_dup 0)))]
++ "")
++
++(define_expand "negdi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (neg:DI (match_operand:DI 1 "gpc_reg_operand" "")))]
++ ""
++ "")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "neg %0,%1")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 2 "=r"))]
++ "TARGET_POWERPC64"
++ "neg. %2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (neg:DI (match_dup 1)))]
++ "TARGET_POWERPC64"
++ "neg. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn "ffsdi2"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
++ (ffs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "neg %0,%1\;and %0,%0,%1\;cntlzd %0,%0\;subfic %0,%0,64"
++ [(set_attr "length" "16")])
++
++(define_insn "muldi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (mult:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "mulld %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_insn "smuldi3_highpart"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (truncate:DI
++ (lshiftrt:TI (mult:TI (sign_extend:TI
++ (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (sign_extend:TI
++ (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 64))))]
++ "TARGET_POWERPC64"
++ "mulhd %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_insn "umuldi3_highpart"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (truncate:DI
++ (lshiftrt:TI (mult:TI (zero_extend:TI
++ (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (zero_extend:TI
++ (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 64))))]
++ "TARGET_POWERPC64"
++ "mulhdu %0,%1,%2"
++ [(set_attr "type" "imul")])
++
++(define_expand "divdi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (div:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:DI 2 "reg_or_cint_operand" "")))]
++ "TARGET_POWERPC64"
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT
++ && exact_log2 (INTVAL (operands[2])) >= 0)
++ ;
++ else
++ operands[2] = force_reg (DImode, operands[2]);
++}")
++
++(define_expand "moddi3"
++ [(use (match_operand:DI 0 "gpc_reg_operand" ""))
++ (use (match_operand:DI 1 "gpc_reg_operand" ""))
++ (use (match_operand:DI 2 "reg_or_cint_operand" ""))]
++ "TARGET_POWERPC64"
++ "
++{
++ int i = exact_log2 (INTVAL (operands[2]));
++ rtx temp1;
++ rtx temp2;
++
++ if (GET_CODE (operands[2]) != CONST_INT || i < 0)
++ FAIL;
++
++ temp1 = gen_reg_rtx (DImode);
++ temp2 = gen_reg_rtx (DImode);
++
++ emit_insn (gen_divdi3 (temp1, operands[1], operands[2]));
++ emit_insn (gen_ashldi3 (temp2, temp1, GEN_INT (i)));
++ emit_insn (gen_subdi3 (operands[0], operands[1], temp2));
++ DONE;
++}")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "const_int_operand" "N")))]
++ "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0"
++ "sradi %0,%1,%p2\;addze %0,%0"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "const_int_operand" "N"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0"
++ "sradi %3,%1,%p2\;addze. %3,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "const_int_operand" "N"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (div:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0"
++ "sradi %0,%1,%p2\;addze. %0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "divd %0,%1,%2"
++ [(set_attr "type" "idiv")])
++
++(define_insn "udivdi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (udiv:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "divdu %0,%1,%2"
++ [(set_attr "type" "idiv")])
++
++(define_insn "rotldi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")))]
++ "TARGET_POWERPC64"
++ "rld%I2cl %0,%1,%H2,0")
++
++(define_insn "*rotldi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %3,%1,%H2,0"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (rotate:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %0,%1,%H2,0"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal4"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri"))
++ (match_operand:DI 3 "mask64_operand" "S")))]
++ "TARGET_POWERPC64"
++ "rld%I2c%B3 %0,%1,%H2,%S3")
++
++(define_insn "*rotldi3_internal5"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (and:DI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri"))
++ (match_operand:DI 3 "mask64_operand" "S"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 4 "=r"))]
++ "TARGET_POWERPC64"
++ "rld%I2c%B3. %4,%1,%H2,%S3"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal6"
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC (and:DI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri"))
++ (match_operand:DI 3 "mask64_operand" "S"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (rotate:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
++ "TARGET_POWERPC64"
++ "rld%I2c%B3. %0,%1,%H2,%S3"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal7"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI
++ (subreg:QI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0)))]
++ "TARGET_POWERPC64"
++ "rld%I2cl %0,%1,%H2,56")
++
++(define_insn "*rotldi3_internal8"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI
++ (subreg:QI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %3,%1,%H2,56"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal9"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI
++ (subreg:QI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %0,%1,%H2,56"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal10"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI
++ (subreg:HI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0)))]
++ "TARGET_POWERPC64"
++ "rld%I2cl %0,%1,%H2,48")
++
++(define_insn "*rotldi3_internal11"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI
++ (subreg:HI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %3,%1,%H2,48"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal12"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI
++ (subreg:HI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %0,%1,%H2,48"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal13"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI
++ (subreg:SI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0)))]
++ "TARGET_POWERPC64"
++ "rld%I2cl %0,%1,%H2,32")
++
++(define_insn "*rotldi3_internal14"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI
++ (subreg:SI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %3,%1,%H2,32"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "*rotldi3_internal15"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (zero_extend:DI
++ (subreg:SI
++ (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
++ "TARGET_POWERPC64"
++ "rld%I2cl. %0,%1,%H2,32"
++ [(set_attr "type" "delayed_compare")])
++
++(define_expand "ashldi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ "TARGET_POWERPC64 || TARGET_POWER"
++ "
++{
++ if (TARGET_POWERPC64)
++ ;
++ else if (TARGET_POWER)
++ {
++ emit_insn (gen_ashldi3_power (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++ else
++ FAIL;
++}")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
++ "TARGET_POWERPC64"
++ "sld%I2 %0,%1,%H2"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "sld%I2. %3,%1,%H2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ashift:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "sld%I2. %0,%1,%H2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_expand "lshrdi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ "TARGET_POWERPC64 || TARGET_POWER"
++ "
++{
++ if (TARGET_POWERPC64)
++ ;
++ else if (TARGET_POWER)
++ {
++ emit_insn (gen_lshrdi3_power (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++ else
++ FAIL;
++}")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
++ "TARGET_POWERPC64"
++ "srd%I2 %0,%1,%H2")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "srd%I2. %3,%1,%H2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (lshiftrt:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "srd%I2. %0,%1,%H2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_expand "ashrdi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "reg_or_cint_operand" "")))]
++ "TARGET_POWERPC64 || TARGET_POWER"
++ "
++{
++ if (TARGET_POWERPC64)
++ ;
++ else if (TARGET_POWER && GET_CODE (operands[2]) == CONST_INT)
++ {
++ emit_insn (gen_ashrdi3_power (operands[0], operands[1], operands[2]));
++ DONE;
++ }
++ else
++ FAIL;
++}")
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
++ "TARGET_POWERPC64"
++ "srad%I2 %0,%1,%H2")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "srad%I2. %3,%1,%H2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_cint_operand" "ri"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ashiftrt:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "srad%I2. %0,%1,%H2"
++ [(set_attr "type" "delayed_compare")])
++
++(define_insn "anddi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
++ (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r")
++ (match_operand:DI 2 "and64_operand" "?r,S,K,J")))
++ (clobber (match_scratch:CC 3 "=X,X,x,x"))]
++ "TARGET_POWERPC64"
++ "@
++ and %0,%1,%2
++ rldic%B2 %0,%1,0,%S2
++ andi. %0,%1,%b2
++ andis. %0,%1,%u2")
++
++(define_insn "*anddi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x")
++ (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r")
++ (match_operand:DI 2 "and64_operand" "r,S,K,J"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r,r,r,r"))]
++ "TARGET_POWERPC64"
++ "@
++ and. %3,%1,%2
++ rldic%B2. %3,%1,0,%S2
++ andi. %3,%1,%b2
++ andis. %3,%1,%u2"
++ [(set_attr "type" "compare,delayed_compare,compare,compare")])
++
++(define_insn "*anddi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,x,x")
++ (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r")
++ (match_operand:DI 2 "and64_operand" "r,S,K,J"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
++ (and:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "@
++ and. %0,%1,%2
++ rldic%B2. %0,%1,0,%S2
++ andi. %0,%1,%b2
++ andis. %0,%1,%u2"
++ [(set_attr "type" "compare,delayed_compare,compare,compare")])
++
++(define_expand "iordi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (ior:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:DI 2 "reg_or_u_cint_operand" "")))]
++ "TARGET_POWERPC64"
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT
++ && ! logical_u_operand (operands[2], DImode))
++ {
++ HOST_WIDE_INT value = INTVAL (operands[2]);
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (DImode));
++
++ emit_insn (gen_iordi3 (tmp, operands[1],
++ GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
++ emit_insn (gen_iordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
++ DONE;
++ }
++ else if (GET_CODE (operands[2]) == CONST_DOUBLE
++ && ! logical_u_operand (operands[2], DImode))
++ {
++ HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (DImode));
++
++ emit_insn (gen_iordi3 (tmp, operands[1],
++ immed_double_const (value
++ & (~ (HOST_WIDE_INT) 0xffff),
++ 0, DImode)));
++ emit_insn (gen_iordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
++ DONE;
++ }
++}")
++
++(define_insn "*iordi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r")
++ (ior:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r")
++ (match_operand:DI 2 "logical_u_operand" "r,K,JF")))]
++ "TARGET_POWERPC64"
++ "@
++ or %0,%1,%2
++ ori %0,%1,%b2
++ oris %0,%1,%u2")
++
++(define_insn "*iordi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (ior:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "or. %3,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*iordi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (ior:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ior:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "or. %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++;; Split an IOR that we can't do in one insn into two insns, each of which
++;; does one 16-bit part. This is used by combine.
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (ior:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:DI 2 "non_logical_u_cint_operand" "")))]
++ "TARGET_POWERPC64"
++ [(set (match_dup 0) (ior:DI (match_dup 1) (match_dup 3)))
++ (set (match_dup 0) (ior:DI (match_dup 0) (match_dup 4)))]
++"
++{
++ if (GET_CODE (operands[2]) == CONST_DOUBLE)
++ {
++ HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
++ operands[3] = immed_double_const (value & (~ (HOST_WIDE_INT) 0xffff),
++ 0, DImode);
++ operands[4] = GEN_INT (value & 0xffff);
++ }
++ else
++ {
++ operands[3] = GEN_INT (INTVAL (operands[2])
++ & (~ (HOST_WIDE_INT) 0xffff));
++ operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
++ }
++}")
++
++(define_expand "xordi3"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (xor:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:DI 2 "reg_or_u_cint_operand" "")))]
++ "TARGET_POWERPC64"
++ "
++{
++ if (GET_CODE (operands[2]) == CONST_INT
++ && ! logical_u_operand (operands[2], DImode))
++ {
++ HOST_WIDE_INT value = INTVAL (operands[2]);
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (DImode));
++
++ emit_insn (gen_xordi3 (tmp, operands[1],
++ GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
++ emit_insn (gen_xordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
++ DONE;
++ }
++ else if (GET_CODE (operands[2]) == CONST_DOUBLE
++ && ! logical_u_operand (operands[2], DImode))
++ {
++ HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
++ rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
++ ? operands[0] : gen_reg_rtx (DImode));
++
++ emit_insn (gen_xordi3 (tmp, operands[1],
++ immed_double_const (value
++ & (~ (HOST_WIDE_INT) 0xffff),
++ 0, DImode)));
++ emit_insn (gen_xordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
++ DONE;
++ }
++}")
++
++(define_insn "*xordi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r")
++ (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r")
++ (match_operand:DI 2 "logical_u_operand" "r,K,JF")))]
++ "TARGET_POWERPC64"
++ "@
++ xor %0,%1,%2
++ xori %0,%1,%b2
++ xoris %0,%1,%u2")
++
++(define_insn "*xordi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "xor. %3,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*xordi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (xor:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "xor. %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++;; Split an XOR that we can't do in one insn into two insns, each of which
++;; does one 16-bit part. This is used by combine.
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (xor:DI (match_operand:DI 1 "gpc_reg_operand" "")
++ (match_operand:DI 2 "non_logical_u_cint_operand" "")))]
++ "TARGET_POWERPC64"
++ [(set (match_dup 0) (xor:DI (match_dup 1) (match_dup 3)))
++ (set (match_dup 0) (xor:DI (match_dup 0) (match_dup 4)))]
++"
++{
++ if (GET_CODE (operands[2]) == CONST_DOUBLE)
++ {
++ HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
++ operands[3] = immed_double_const (value & (~ (HOST_WIDE_INT) 0xffff),
++ 0, DImode);
++ operands[4] = GEN_INT (value & 0xffff);
++ }
++ else
++ {
++ operands[3] = GEN_INT (INTVAL (operands[2])
++ & (~ (HOST_WIDE_INT) 0xffff));
++ operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
++ }
++}")
++
++(define_insn "*eqvdi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (not:DI (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r"))))]
++ "TARGET_POWERPC64"
++ "eqv %0,%1,%2")
++
++(define_insn "*eqvdi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (not:DI (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "eqv. %3,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*eqvdi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (not:DI (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
++ (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (not:DI (xor:DI (match_dup 1) (match_dup 2))))]
++ "TARGET_POWERPC64"
++ "eqv. %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*andcdi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (match_operand:DI 2 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "andc %0,%2,%1")
++
++(define_insn "*andcdi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "andc. %3,%2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn "*andcdi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (not:DI (match_dup 1)) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "andc. %0,%2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn "*iorcdi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (match_operand:DI 2 "gpc_reg_operand" "r")))]
++ "TARGET_POWERPC64"
++ "orc %0,%2,%1")
++
++(define_insn "*iorcdi3_inernal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "orc. %3,%2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn "*iorcdi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ior:DI (not:DI (match_dup 1)) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "orc. %0,%2,%1"
++ [(set_attr "type" "compare")])
++
++(define_insn "*nanddi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (not:DI (match_operand:DI 2 "gpc_reg_operand" "r"))))]
++ "TARGET_POWERPC64"
++ "nand %0,%1,%2")
++
++(define_insn "*nanddi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "nand. %3,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*nanddi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (ior:DI (not:DI (match_dup 1)) (not:DI (match_dup 2))))]
++ "TARGET_POWERPC64"
++ "nand. %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*nordi3_internal1"
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (not:DI (match_operand:DI 2 "gpc_reg_operand" "r"))))]
++ "TARGET_POWERPC64"
++ "nor %0,%1,%2")
++
++(define_insn "*nordi3_internal2"
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=r"))]
++ "TARGET_POWERPC64"
++ "nor. %3,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn "*nordi3_internal3"
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
++ (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (not:DI (match_dup 1)) (not:DI (match_dup 2))))]
++ "TARGET_POWERPC64"
++ "nor. %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++;; Now define ways of moving data around.
++
++;; Elf specific ways of loading addresses for non-PIC code.
++;; The output of this could be r0, but we limit it to base
++;; registers, since almost all uses of this will need it
++;; in a base register shortly.
++(define_insn "elf_high"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=b")
++ (high:SI (match_operand 1 "" "")))]
++ "TARGET_ELF && ! TARGET_64BIT"
++ "{liu|lis} %0,%1@ha")
++
++(define_insn "elf_low"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b")
++ (match_operand 2 "" "")))]
++ "TARGET_ELF && ! TARGET_64BIT"
++ "{cal|la} %0,%2@l(%1)")
++
++;; Set up a register with a value from the GOT table
++
++(define_expand "movsi_got"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (unspec [(match_operand:SI 1 "got_operand" "")
++ (match_dup 2)] 8))]
++ "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && flag_pic == 1"
++ "
++{
++ if (GET_CODE (operands[1]) == CONST)
++ {
++ rtx offset = const0_rtx;
++ HOST_WIDE_INT value;
++
++ operands[1] = eliminate_constant_term (XEXP (operands[1], 0), &offset);
++ value = INTVAL (offset);
++ if (value != 0)
++ {
++ rtx tmp = (no_new_pseudos ? operands[0] : gen_reg_rtx (Pmode));
++ emit_insn (gen_movsi_got (tmp, operands[1]));
++ emit_insn (gen_addsi3 (operands[0], tmp, offset));
++ DONE;
++ }
++ }
++
++ operands[2] = rs6000_got_register (operands[1]);
++}")
++
++(define_insn "*movsi_got_internal"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (unspec [(match_operand:SI 1 "got_no_const_operand" "")
++ (match_operand:SI 2 "gpc_reg_operand" "b")] 8))]
++ "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && flag_pic == 1"
++ "{l|lwz} %0,%a1@got(%2)"
++ [(set_attr "type" "load")])
++
++;; Used by sched, shorten_branches and final when the GOT pseudo reg
++;; didn't get allocated to a hard register.
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (unspec [(match_operand:SI 1 "got_no_const_operand" "")
++ (match_operand:SI 2 "memory_operand" "m")] 8))]
++ "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
++ && flag_pic == 1
++ && (reload_in_progress || reload_completed)"
++ [(set (match_dup 0) (match_dup 2))
++ (set (match_dup 0) (unspec [(match_dup 1)(match_dup 0)] 8))]
++ "")
++
++;; For SI, we special-case integers that can't be loaded in one insn. We
++;; do the load 16-bits at a time. We could do this by loading from memory,
++;; and this is even supposed to be faster, but it is simpler not to get
++;; integers in the TOC.
++(define_expand "movsi"
++ [(set (match_operand:SI 0 "general_operand" "")
++ (match_operand:SI 1 "any_operand" ""))]
++ ""
++ "
++{
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (SImode, operands[1]);
++
++ /* Convert a move of a CONST_DOUBLE into a CONST_INT */
++ if (GET_CODE (operands[1]) == CONST_DOUBLE)
++ operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
++
++ /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary. */
++ if (GET_CODE (operands[1]) == CONSTANT_P_RTX)
++ {
++ emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
++ DONE;
++ }
++
++ /* Use default pattern for address of ELF small data */
++ if (TARGET_ELF
++ && (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
++ && (GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == CONST)
++ && small_data_operand (operands[1], SImode))
++ {
++ emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
++ DONE;
++ }
++
++ if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
++ && flag_pic == 1 && got_operand (operands[1], SImode))
++ {
++ emit_insn (gen_movsi_got (operands[0], operands[1]));
++ DONE;
++ }
++
++ if (TARGET_ELF && TARGET_NO_TOC && ! TARGET_64BIT
++ && ! flag_pic
++ && CONSTANT_P (operands[1])
++ && GET_CODE (operands[1]) != HIGH
++ && GET_CODE (operands[1]) != CONST_INT)
++ {
++ rtx target = (no_new_pseudos ? operands[0] : gen_reg_rtx (SImode));
++
++ /* If this is a function address on -mcall-aixdesc or -mcall-nt,
++ convert it to the address of the descriptor. */
++ if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
++ && GET_CODE (operands[1]) == SYMBOL_REF
++ && XSTR (operands[1], 0)[0] == '.')
++ {
++ char *name = XSTR (operands[1], 0);
++ rtx new_ref;
++ while (*name == '.')
++ name++;
++ new_ref = gen_rtx_SYMBOL_REF (Pmode, name);
++ CONSTANT_POOL_ADDRESS_P (new_ref) = CONSTANT_POOL_ADDRESS_P (operands[1]);
++ SYMBOL_REF_FLAG (new_ref) = SYMBOL_REF_FLAG (operands[1]);
++ SYMBOL_REF_USED (new_ref) = SYMBOL_REF_USED (operands[1]);
++ operands[1] = new_ref;
++ }
++
++ emit_insn (gen_elf_high (target, operands[1]));
++ emit_insn (gen_elf_low (operands[0], target, operands[1]));
++ DONE;
++ }
++
++ if (GET_CODE (operands[1]) == CONST
++ && DEFAULT_ABI == ABI_NT
++ && ! side_effects_p (operands[0]))
++ {
++ rtx const_term = const0_rtx;
++ rtx sym = eliminate_constant_term (XEXP (operands[1], 0), &const_term);
++ if (sym && GET_CODE (const_term) == CONST_INT
++ && (GET_CODE (sym) == SYMBOL_REF || GET_CODE (sym) == LABEL_REF))
++ {
++ unsigned HOST_WIDE_INT value = INTVAL (const_term);
++ int new_reg_p = (flag_expensive_optimizations && ! no_new_pseudos);
++ rtx tmp1 = ((new_reg_p && value != 0)
++ ? gen_reg_rtx (SImode) : operands[0]);
++
++ emit_insn (gen_movsi (tmp1, sym));
++ if (INTVAL (const_term) != 0)
++ emit_insn (gen_addsi3 (operands[0], tmp1, GEN_INT (value)));
++ DONE;
++ }
++ else
++ rs6000_fatal_bad_address (operands[1]);
++ }
++
++ if ((! TARGET_WINDOWS_NT || DEFAULT_ABI != ABI_NT)
++ && CONSTANT_P (operands[1])
++ && GET_CODE (operands[1]) != CONST_INT
++ && GET_CODE (operands[1]) != HIGH
++ && ! LEGITIMATE_CONSTANT_POOL_ADDRESS_P (operands[1]))
++ {
++ /* Emit a USE operation so that the constant isn't deleted if
++ expensive optimizations are turned on because nobody
++ references it. This should only be done for operands that
++ contain SYMBOL_REFs with CONSTANT_POOL_ADDRESS_P set.
++ This should not be done for operands that contain LABEL_REFs.
++ For now, we just handle the obvious case. */
++ if (GET_CODE (operands[1]) != LABEL_REF)
++ emit_insn (gen_rtx_USE (VOIDmode, operands[1]));
++
++ /* If we are to limit the number of things we put in the TOC and
++ this is a symbol plus a constant we can add in one insn,
++ just put the symbol in the TOC and add the constant. Don't do
++ this if reload is in progress. */
++ if (GET_CODE (operands[1]) == CONST
++ && TARGET_NO_SUM_IN_TOC && ! reload_in_progress
++ && GET_CODE (XEXP (operands[1], 0)) == PLUS
++ && add_operand (XEXP (XEXP (operands[1], 0), 1), SImode)
++ && (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
++ || GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == SYMBOL_REF)
++ && ! side_effects_p (operands[0]))
++ {
++ rtx sym = force_const_mem (SImode, XEXP (XEXP (operands[1], 0), 0));
++ rtx other = XEXP (XEXP (operands[1], 0), 1);
++
++ emit_insn (gen_addsi3 (operands[0], force_reg (SImode, sym), other));
++ DONE;
++ }
++
++ operands[1] = force_const_mem (SImode, operands[1]);
++ if (! memory_address_p (SImode, XEXP (operands[1], 0))
++ && ! reload_in_progress)
++ operands[1] = change_address (operands[1], SImode,
++ XEXP (operands[1], 0));
++ }
++}")
++
++(define_insn ""
++ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,m,r,r,r,r,r,*q,*c*l,*h")
++ (match_operand:SI 1 "input_operand" "r,U,m,r,I,L,n,R,*h,r,r,0"))]
++ "gpc_reg_operand (operands[0], SImode)
++ || gpc_reg_operand (operands[1], SImode)"
++ "@
++ mr %0,%1
++ {cal|la} %0,%a1
++ {l%U1%X1|lwz%U1%X1} %0,%1
++ {st%U0%X0|stw%U0%X0} %1,%0
++ {lil|li} %0,%1
++ {liu|lis} %0,%v1
++ #
++ {cal|la} %0,%1(%*)
++ mf%1 %0
++ mt%0 %1
++ mt%0 %1
++ cror 0,0,0"
++ [(set_attr "type" "*,*,load,store,*,*,*,*,*,*,mtjmpr,*")
++ (set_attr "length" "4,4,4,4,4,4,8,4,4,4,4,4")])
++
++;; Split a load of a large constant into the appropriate two-insn
++;; sequence.
++
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (match_operand:SI 1 "const_int_operand" ""))]
++ "(unsigned HOST_WIDE_INT) (INTVAL (operands[1]) + 0x8000) >= 0x10000
++ && (INTVAL (operands[1]) & 0xffff) != 0"
++ [(set (match_dup 0)
++ (match_dup 2))
++ (set (match_dup 0)
++ (ior:SI (match_dup 0)
++ (match_dup 3)))]
++ "
++{
++ operands[2] = GEN_INT (INTVAL (operands[1]) & 0xffff0000);
++ operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff);
++}")
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (match_operand:SI 1 "gpc_reg_operand" "r")
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r") (match_dup 1))]
++ "! TARGET_POWERPC64"
++ "mr. %0,%1"
++ [(set_attr "type" "compare")])
++
++(define_expand "movhi"
++ [(set (match_operand:HI 0 "general_operand" "")
++ (match_operand:HI 1 "any_operand" ""))]
++ ""
++ "
++{
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (HImode, operands[1]);
++
++ if (CONSTANT_P (operands[1])
++ && GET_CODE (operands[1]) != CONST_INT)
++ {
++ operands[1] = force_const_mem (HImode, operands[1]);
++ if (! memory_address_p (HImode, XEXP (operands[1], 0))
++ && ! reload_in_progress)
++ operands[1] = change_address (operands[1], HImode,
++ XEXP (operands[1], 0));
++ }
++}")
++
++(define_insn ""
++ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r,r,*q,*c*l,*h")
++ (match_operand:HI 1 "input_operand" "r,m,r,i,*h,r,r,0"))]
++ "gpc_reg_operand (operands[0], HImode)
++ || gpc_reg_operand (operands[1], HImode)"
++ "@
++ mr %0,%1
++ lhz%U1%X1 %0,%1
++ sth%U0%X0 %1,%0
++ {lil|li} %0,%w1
++ mf%1 %0
++ mt%0 %1
++ mt%0 %1
++ cror 0,0,0"
++ [(set_attr "type" "*,load,store,*,*,*,mtjmpr,*")])
++
++(define_expand "movqi"
++ [(set (match_operand:QI 0 "general_operand" "")
++ (match_operand:QI 1 "any_operand" ""))]
++ ""
++ "
++{
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (QImode, operands[1]);
++
++ if (CONSTANT_P (operands[1])
++ && GET_CODE (operands[1]) != CONST_INT)
++ {
++ operands[1] = force_const_mem (QImode, operands[1]);
++ if (! memory_address_p (QImode, XEXP (operands[1], 0))
++ && ! reload_in_progress)
++ operands[1] = change_address (operands[1], QImode,
++ XEXP (operands[1], 0));
++ }
++}")
++
++(define_insn ""
++ [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r,r,*q,*c*l,*h")
++ (match_operand:QI 1 "input_operand" "r,m,r,i,*h,r,r,0"))]
++ "gpc_reg_operand (operands[0], QImode)
++ || gpc_reg_operand (operands[1], QImode)"
++ "@
++ mr %0,%1
++ lbz%U1%X1 %0,%1
++ stb%U0%X0 %1,%0
++ {lil|li} %0,%1
++ mf%1 %0
++ mt%0 %1
++ mt%0 %1
++ cror 0,0,0"
++ [(set_attr "type" "*,load,store,*,*,*,mtjmpr,*")])
++
++;; Here is how to move condition codes around. When we store CC data in
++;; an integer register or memory, we store just the high-order 4 bits.
++;; This lets us not shift in the most common case of CR0.
++(define_expand "movcc"
++ [(set (match_operand:CC 0 "nonimmediate_operand" "")
++ (match_operand:CC 1 "nonimmediate_operand" ""))]
++ ""
++ "")
++
++(define_insn ""
++ [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,y,r,r,r,r,m")
++ (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,m,r"))]
++ "register_operand (operands[0], CCmode)
++ || register_operand (operands[1], CCmode)"
++ "@
++ mcrf %0,%1
++ mtcrf 128,%1
++ {rlinm|rlwinm} %1,%1,%F0,0xffffffff\;mtcrf %R0,%1\;{rlinm|rlwinm} %1,%1,%f0,0xffffffff
++ mfcr %0
++ mfcr %0\;{rlinm|rlwinm} %0,%0,%f1,0xf0000000
++ mr %0,%1
++ {l%U1%X1|lwz%U1%X1} %0,%1
++ {st%U0%U1|stw%U0%U1} %1,%0"
++ [(set_attr "type" "*,*,*,compare,*,*,load,store")
++ (set_attr "length" "*,*,12,*,8,*,*,*")])
++
++;; For floating-point, we normally deal with the floating-point registers
++;; unless -msoft-float is used. The sole exception is that parameter passing
++;; can produce floating-point values in fixed-point registers. Unless the
++;; value is a simple constant or already in memory, we deal with this by
++;; allocating memory and copying the value explicitly via that memory location.
++(define_expand "movsf"
++ [(set (match_operand:SF 0 "nonimmediate_operand" "")
++ (match_operand:SF 1 "any_operand" ""))]
++ ""
++ "
++{
++ /* If we are called from reload, we might be getting a SUBREG of a hard
++ reg. So expand it. */
++ if (GET_CODE (operands[0]) == SUBREG
++ && GET_CODE (SUBREG_REG (operands[0])) == REG
++ && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER)
++ operands[0] = alter_subreg (operands[0]);
++ if (GET_CODE (operands[1]) == SUBREG
++ && GET_CODE (SUBREG_REG (operands[1])) == REG
++ && REGNO (SUBREG_REG (operands[1])) < FIRST_PSEUDO_REGISTER)
++ operands[1] = alter_subreg (operands[1]);
++
++ if (GET_CODE (operands[0]) == MEM)
++ {
++ /* If operands[1] is a register, it may have double-precision data
++ in it, so truncate it to single precision. We need not do
++ this for POWERPC. */
++ if (! TARGET_POWERPC && TARGET_HARD_FLOAT
++ && GET_CODE (operands[1]) == REG
++ && (FP_REGNO_P (REGNO (operands[1]))
++ || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER))
++ {
++ rtx newreg = (no_new_pseudos ? operands[1] : gen_reg_rtx (SFmode));
++ emit_insn (gen_aux_truncdfsf2 (newreg, operands[1]));
++ operands[1] = newreg;
++ }
++
++ operands[1] = force_reg (SFmode, operands[1]);
++ }
++
++ if (CONSTANT_P (operands[1]) && TARGET_HARD_FLOAT
++ && ! easy_fp_constant (operands[1], SFmode))
++ {
++ operands[1] = force_const_mem (SFmode, operands[1]);
++ if (! memory_address_p (SFmode, XEXP (operands[1], 0))
++ && ! reload_in_progress)
++ operands[1] = change_address (operands[1], SFmode,
++ XEXP (operands[1], 0));
++ }
++}")
++
++(define_split
++ [(set (match_operand:SF 0 "gpc_reg_operand" "")
++ (match_operand:SF 1 "const_double_operand" ""))]
++ "reload_completed
++ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
++ || (GET_CODE (operands[0]) == SUBREG
++ && GET_CODE (SUBREG_REG (operands[0])) == REG
++ && REGNO (SUBREG_REG (operands[0])) <= 31))"
++ [(set (match_dup 2) (match_dup 3))]
++ "
++{
++ long l;
++ REAL_VALUE_TYPE rv;
++
++ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
++ REAL_VALUE_TO_TARGET_SINGLE (rv, l);
++
++ if (! TARGET_POWERPC64)
++ operands[2] = operand_subword (operands[0], 0, 0, SFmode);
++ else
++ operands[2] = gen_lowpart (SImode, operands[0]);
++
++ operands[3] = GEN_INT(l);
++}")
++
++(define_insn "*movsf_hardfloat"
++ [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!r,!r")
++ (match_operand:SF 1 "input_operand" "r,m,r,f,m,f,G,Fn"))]
++ "(gpc_reg_operand (operands[0], SFmode)
++ || gpc_reg_operand (operands[1], SFmode)) && TARGET_HARD_FLOAT"
++ "@
++ mr %0,%1
++ {l%U1%X1|lwz%U1%X1} %0,%1
++ {st%U0%X0|stw%U0%X0} %1,%0
++ fmr %0,%1
++ lfs%U1%X1 %0,%1
++ stfs%U0%X0 %1,%0
++ #
++ #"
++ [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*")
++ (set_attr "length" "4,4,4,4,4,4,4,8")])
++
++(define_insn "*movsf_softfloat"
++ [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,r")
++ (match_operand:SF 1 "input_operand" "r,m,r,I,L,R,G,Fn"))]
++ "(gpc_reg_operand (operands[0], SFmode)
++ || gpc_reg_operand (operands[1], SFmode)) && TARGET_SOFT_FLOAT"
++ "@
++ mr %0,%1
++ {l%U1%X1|lwz%U1%X1} %0,%1
++ {st%U0%X0|stw%U0%X0} %1,%0
++ {lil|li} %0,%1
++ {liu|lis} %0,%v1
++ {cal|la} %0,%1(%*)
++ #
++ #"
++ [(set_attr "type" "*,load,store,*,*,*,*,*")
++ (set_attr "length" "4,4,4,4,4,4,4,8")])
++
++
++(define_expand "movdf"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "")
++ (match_operand:DF 1 "any_operand" ""))]
++ ""
++ "
++{
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (DFmode, operands[1]);
++
++ if (CONSTANT_P (operands[1]) && ! easy_fp_constant (operands[1], DFmode))
++ {
++ operands[1] = force_const_mem (DFmode, operands[1]);
++ if (! memory_address_p (DFmode, XEXP (operands[1], 0))
++ && ! reload_in_progress)
++ operands[1] = change_address (operands[1], DFmode,
++ XEXP (operands[1], 0));
++ }
++}")
++
++(define_split
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (match_operand:DF 1 "const_int_operand" ""))]
++ "! TARGET_POWERPC64 && reload_completed
++ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
++ || (GET_CODE (operands[0]) == SUBREG
++ && GET_CODE (SUBREG_REG (operands[0])) == REG
++ && REGNO (SUBREG_REG (operands[0])) <= 31))"
++ [(set (match_dup 2) (match_dup 4))
++ (set (match_dup 3) (match_dup 1))]
++ "
++{
++ int endian = (WORDS_BIG_ENDIAN == 0);
++ operands[2] = operand_subword (operands[0], endian, 0, DFmode);
++ operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
++ operands[4] = (INTVAL (operands[1]) & 0x80000000) ? constm1_rtx : const0_rtx;
++}")
++
++(define_split
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (match_operand:DF 1 "const_double_operand" ""))]
++ "! TARGET_POWERPC64 && reload_completed
++ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
++ || (GET_CODE (operands[0]) == SUBREG
++ && GET_CODE (SUBREG_REG (operands[0])) == REG
++ && REGNO (SUBREG_REG (operands[0])) <= 31))"
++ [(set (match_dup 2) (match_dup 4))
++ (set (match_dup 3) (match_dup 5))]
++ "
++{
++ int endian = (WORDS_BIG_ENDIAN == 0);
++ long l[2];
++ REAL_VALUE_TYPE rv;
++
++ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
++ REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
++
++ operands[2] = operand_subword (operands[0], endian, 0, DFmode);
++ operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
++ operands[4] = GEN_INT (l[endian]);
++ operands[5] = GEN_INT (l[1 - endian]);
++}")
++
++(define_split
++ [(set (match_operand:DF 0 "gpc_reg_operand" "")
++ (match_operand:DF 1 "easy_fp_constant" ""))]
++ "TARGET_POWERPC64 && reload_completed
++ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
++ || (GET_CODE (operands[0]) == SUBREG
++ && GET_CODE (SUBREG_REG (operands[0])) == REG
++ && REGNO (SUBREG_REG (operands[0])) <= 31))"
++ [(set (match_dup 2) (match_dup 3))]
++ "
++{
++ int endian = (WORDS_BIG_ENDIAN == 0);
++ long l[2];
++ REAL_VALUE_TYPE rv;
++
++ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
++ REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
++
++ operands[2] = gen_lowpart (DImode, operands[0]);
++ /* HIGHPART is lower memory address when WORDS_BIG_ENDIAN. */
++ operands[3] = immed_double_const (l[1 - endian], l[endian], DImode);
++}")
++
++;; Don't have reload use general registers to load a constant. First,
++;; it might not work if the output operand is the equivalent of
++;; a non-offsettable memref, but also it is less efficient than loading
++;; the constant into an FP register, since it will probably be used there.
++;; The "??" is a kludge until we can figure out a more reasonable way
++;; of handling these non-offsettable values.
++(define_insn "*movdf_hardfloat32"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,!r,!r,!r,f,f,m")
++ (match_operand:DF 1 "input_operand" "r,m,r,G,H,F,f,m,f"))]
++ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT
++ && (gpc_reg_operand (operands[0], DFmode)
++ || gpc_reg_operand (operands[1], DFmode))"
++ "*
++{
++ switch (which_alternative)
++ {
++ default:
++ abort ();
++ case 0:
++ /* We normally copy the low-numbered register first. However, if
++ the first register operand 0 is the same as the second register
++ of operand 1, we must copy in the opposite order. */
++ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
++ return \"mr %L0,%L1\;mr %0,%1\";
++ else
++ return \"mr %0,%1\;mr %L0,%L1\";
++ case 1:
++ if (offsettable_memref_p (operands[1])
++ || (GET_CODE (operands[1]) == MEM
++ && (GET_CODE (XEXP (operands[1], 0)) == LO_SUM
++ || GET_CODE (XEXP (operands[1], 0)) == PRE_INC
++ || GET_CODE (XEXP (operands[1], 0)) == PRE_DEC)))
++ {
++ /* If the low-address word is used in the address, we must load
++ it last. Otherwise, load it first. Note that we cannot have
++ auto-increment in that case since the address register is
++ known to be dead. */
++ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
++ operands[1], 0))
++ return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
++ else
++ return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
++ }
++ else
++ {
++ rtx addreg;
++
++ addreg = find_addr_reg (XEXP (operands[1], 0));
++ if (refers_to_regno_p (REGNO (operands[0]),
++ REGNO (operands[0]) + 1,
++ operands[1], 0))
++ {
++ output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
++ output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
++ output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
++ return \"{lx|lwzx} %0,%1\";
++ }
++ else
++ {
++ output_asm_insn (\"{lx|lwzx} %0,%1\", operands);
++ output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
++ output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
++ output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
++ return \"\";
++ }
++ }
++ case 2:
++ if (offsettable_memref_p (operands[0])
++ || (GET_CODE (operands[0]) == MEM
++ && (GET_CODE (XEXP (operands[0], 0)) == LO_SUM
++ || GET_CODE (XEXP (operands[0], 0)) == PRE_INC
++ || GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)))
++ return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
++ else
++ {
++ rtx addreg;
++
++ addreg = find_addr_reg (XEXP (operands[0], 0));
++ output_asm_insn (\"{stx|stwx} %1,%0\", operands);
++ output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
++ output_asm_insn (\"{stx|stwx} %L1,%0\", operands);
++ output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
++ return \"\";
++ }
++ case 3:
++ case 4:
++ case 5:
++ return \"#\";
++ case 6:
++ return \"fmr %0,%1\";
++ case 7:
++ return \"lfd%U1%X1 %0,%1\";
++ case 8:
++ return \"stfd%U0%X0 %1,%0\";
++ }
++}"
++ [(set_attr "type" "*,load,store,*,*,*,fp,fpload,fpstore")
++ (set_attr "length" "8,16,16,8,12,16,*,*,*")])
++
++(define_insn "*movdf_softfloat32"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r")
++ (match_operand:DF 1 "input_operand" "r,m,r,G,H,F"))]
++ "! TARGET_POWERPC64 && TARGET_SOFT_FLOAT
++ && (gpc_reg_operand (operands[0], DFmode)
++ || gpc_reg_operand (operands[1], DFmode))"
++ "*
++{
++ switch (which_alternative)
++ {
++ default:
++ abort ();
++ case 0:
++ /* We normally copy the low-numbered register first. However, if
++ the first register operand 0 is the same as the second register of
++ operand 1, we must copy in the opposite order. */
++ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
++ return \"mr %L0,%L1\;mr %0,%1\";
++ else
++ return \"mr %0,%1\;mr %L0,%L1\";
++ case 1:
++ /* If the low-address word is used in the address, we must load it
++ last. Otherwise, load it first. Note that we cannot have
++ auto-increment in that case since the address register is known to be
++ dead. */
++ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
++ operands [1], 0))
++ return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
++ else
++ return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
++ case 2:
++ return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
++ case 3:
++ case 4:
++ case 5:
++ return \"#\";
++ }
++}"
++ [(set_attr "type" "*,load,store,*,*,*")
++ (set_attr "length" "8,8,8,8,12,16")])
++
++(define_insn "*movdf_hardfloat64"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,!r,!r,!r,f,f,m")
++ (match_operand:DF 1 "input_operand" "r,m,r,G,H,F,f,m,f"))]
++ "TARGET_POWERPC64 && TARGET_HARD_FLOAT
++ && (gpc_reg_operand (operands[0], DFmode)
++ || gpc_reg_operand (operands[1], DFmode))"
++ "@
++ mr %0,%1
++ ld%U1%X1 %0,%1
++ std%U0%X0 %1,%0
++ #
++ #
++ #
++ fmr %0,%1
++ lfd%U1%X1 %0,%1
++ stfd%U0%X0 %1,%0"
++ [(set_attr "type" "*,load,store,*,*,*,fp,fpload,fpstore")
++ (set_attr "length" "4,4,4,8,12,16,4,4,4")])
++
++(define_insn "*movdf_softfloat64"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r")
++ (match_operand:DF 1 "input_operand" "r,m,r,G,H,F"))]
++ "TARGET_POWERPC64 && TARGET_SOFT_FLOAT
++ && (gpc_reg_operand (operands[0], DFmode)
++ || gpc_reg_operand (operands[1], DFmode))"
++ "@
++ mr %0,%1
++ ld%U1%X1 %0,%1
++ std%U0%X0 %1,%0
++ #
++ #
++ #"
++ [(set_attr "type" "*,load,store,*,*,*")
++ (set_attr "length" "*,*,*,8,12,16")])
++
++;; Next come the multi-word integer load and store and the load and store
++;; multiple insns.
++(define_expand "movdi"
++ [(set (match_operand:DI 0 "general_operand" "")
++ (match_operand:DI 1 "any_operand" ""))]
++ ""
++ "
++{
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (DImode, operands[1]);
++
++ /* Convert a move of a CONST_DOUBLE into a CONST_INT
++ only if sign-extended lower-half for 32-bit host. */
++ if (GET_CODE (operands[1]) == CONST_DOUBLE
++#if HOST_BITS_PER_WIDE_INT == 32
++ && ((CONST_DOUBLE_HIGH (operands[1]) == 0
++ && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) == 0)
++ || (CONST_DOUBLE_HIGH (operands[1]) == (HOST_WIDE_INT) 0xffffffff
++ && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) != 0))
++#endif
++ )
++ operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
++
++ /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary. */
++ if (GET_CODE (operands[1]) == CONSTANT_P_RTX)
++ {
++ emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
++ DONE;
++ }
++
++ if (TARGET_64BIT
++ && CONSTANT_P (operands[1])
++#if HOST_BITS_PER_WIDE_INT == 32
++ && GET_CODE (operands[1]) != CONST_INT
++#endif
++ && ! easy_fp_constant (operands[1], DImode)
++ && ! LEGITIMATE_CONSTANT_POOL_ADDRESS_P (operands[1]))
++ {
++ /* Emit a USE operation so that the constant isn't deleted if
++ expensive optimizations are turned on because nobody
++ references it. This should only be done for operands that
++ contain SYMBOL_REFs with CONSTANT_POOL_ADDRESS_P set.
++ This should not be done for operands that contain LABEL_REFs.
++ For now, we just handle the obvious case. */
++ if (GET_CODE (operands[1]) != LABEL_REF)
++ emit_insn (gen_rtx_USE (VOIDmode, operands[1]));
++
++ /* If we are to limit the number of things we put in the TOC and
++ this is a symbol plus a constant we can add in one insn,
++ just put the symbol in the TOC and add the constant. Don't do
++ this if reload is in progress. */
++ if (GET_CODE (operands[1]) == CONST
++ && TARGET_NO_SUM_IN_TOC && ! reload_in_progress
++ && GET_CODE (XEXP (operands[1], 0)) == PLUS
++ && add_operand (XEXP (XEXP (operands[1], 0), 1), DImode)
++ && (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
++ || GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == SYMBOL_REF)
++ && ! side_effects_p (operands[0]))
++ {
++ rtx sym = force_const_mem (DImode, XEXP (XEXP (operands[1], 0), 0));
++ rtx other = XEXP (XEXP (operands[1], 0), 1);
++
++ emit_insn (gen_adddi3 (operands[0], force_reg (DImode, sym), other));
++ DONE;
++ }
++
++ operands[1] = force_const_mem (DImode, operands[1]);
++ if (! memory_address_p (DImode, XEXP (operands[1], 0))
++ && ! reload_in_progress)
++ operands[1] = change_address (operands[1], DImode,
++ XEXP (operands[1], 0));
++ }
++}")
++
++(define_insn "*movdi_32"
++ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,f,f,m,r,r,r,r,r")
++ (match_operand:DI 1 "input_operand" "r,m,r,f,m,f,IJK,n,G,H,F"))]
++ "! TARGET_POWERPC64
++ && (gpc_reg_operand (operands[0], DImode)
++ || gpc_reg_operand (operands[1], DImode))"
++ "*
++{
++ switch (which_alternative)
++ {
++ default:
++ abort ();
++ case 0:
++ /* We normally copy the low-numbered register first. However, if
++ the first register operand 0 is the same as the second register of
++ operand 1, we must copy in the opposite order. */
++ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
++ return \"mr %L0,%L1\;mr %0,%1\";
++ else
++ return \"mr %0,%1\;mr %L0,%L1\";
++ case 1:
++ /* If the low-address word is used in the address, we must load it
++ last. Otherwise, load it first. Note that we cannot have
++ auto-increment in that case since the address register is known to be
++ dead. */
++ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
++ operands [1], 0))
++ return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
++ else
++ return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
++ case 2:
++ return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
++ case 3:
++ return \"fmr %0,%1\";
++ case 4:
++ return \"lfd%U1%X1 %0,%1\";
++ case 5:
++ return \"stfd%U0%X0 %1,%0\";
++ case 6:
++ case 7:
++ case 8:
++ case 9:
++ case 10:
++ return \"#\";
++ }
++}"
++ [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*,*,*,*")
++ (set_attr "length" "8,8,8,*,*,*,8,12,8,12,16")])
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_int_operand" ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 2) (match_dup 4))
++ (set (match_dup 3) (match_dup 1))]
++ "
++{
++ HOST_WIDE_INT value = INTVAL (operands[1]);
++ operands[2] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN == 0);
++ operands[3] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN != 0);
++#if HOST_BITS_PER_WIDE_INT == 32
++ operands[4] = (value & 0x80000000) ? constm1_rtx : const0_rtx;
++#else
++ operands[4] = GEN_INT (value >> 32);
++ operands[1] = GEN_INT ((value & 0x7fffffff) - (value & 0x80000000));
++#endif
++}")
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_double_operand" ""))]
++ "HOST_BITS_PER_WIDE_INT == 32 && ! TARGET_POWERPC64 && reload_completed"
++ [(set (match_dup 2) (match_dup 4))
++ (set (match_dup 3) (match_dup 5))]
++ "
++{
++ operands[2] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN == 0);
++ operands[3] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN != 0);
++ operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
++ operands[5] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
++}")
++
++(define_insn "*movdi_64"
++ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,f,f,m,r,*h,*h")
++ (match_operand:DI 1 "input_operand" "r,m,r,I,L,nF,R,f,m,f,*h,r,0"))]
++ "TARGET_POWERPC64
++ && (gpc_reg_operand (operands[0], DImode)
++ || gpc_reg_operand (operands[1], DImode))"
++ "@
++ mr %0,%1
++ ld%U1%X1 %0,%1
++ std%U0%X0 %1,%0
++ li %0,%1
++ lis %0,%v1
++ #
++ {cal|la} %0,%1(%*)
++ fmr %0,%1
++ lfd%U1%X1 %0,%1
++ stfd%U0%X0 %1,%0
++ mf%1 %0
++ mt%0 %1
++ cror 0,0,0"
++ [(set_attr "type" "*,load,store,*,*,*,*,fp,fpload,fpstore,*,mtjmpr,*")
++ (set_attr "length" "4,4,4,4,4,20,4,4,4,4,4,4,4")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (match_operand:DI 1 "const_double_operand" "F"))]
++ "TARGET_POWERPC64 && GET_CODE (operands[1]) == CONST_DOUBLE
++ && num_insns_constant (operands[1], DImode) == 1"
++ "*
++{
++ return ((unsigned HOST_WIDE_INT)
++ (CONST_DOUBLE_LOW (operands[1]) + 0x8000) < 0x10000)
++ ? \"li %0,%1\" : \"lis %0,%v1\";
++}")
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_int_operand" ""))]
++ "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
++ && num_insns_constant (operands[1], DImode) > 1"
++ [(set (match_dup 0)
++ (match_dup 2))
++ (set (match_dup 0)
++ (ior:DI (match_dup 0)
++ (match_dup 3)))]
++ "
++{
++ operands[2] = GEN_INT (INTVAL (operands[1]) & 0xffff0000);
++ operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff);
++}")
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_double_operand" ""))]
++ "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
++ && GET_CODE (operands[1]) == CONST_DOUBLE
++ && ((CONST_DOUBLE_HIGH (operands[1]) == 0
++ && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) == 0)
++ || (CONST_DOUBLE_HIGH (operands[1]) == (HOST_WIDE_INT) 0xffffffff
++ && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) != 0))"
++ [(set (match_dup 0)
++ (match_dup 2))
++ (set (match_dup 0)
++ (ior:DI (match_dup 0)
++ (match_dup 3)))]
++ "
++{
++ operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[1]) & 0xffff0000);
++ operands[3] = GEN_INT (CONST_DOUBLE_LOW (operands[1]) & 0xffff);
++}")
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_double_operand" ""))]
++ "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
++ && GET_CODE (operands[1]) == CONST_DOUBLE
++ && CONST_DOUBLE_HIGH (operands[1]) == 0
++ && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) != 0"
++ [(set (match_dup 0)
++ (match_dup 2))
++ (set (match_dup 0)
++ (zero_extend:DI (match_dup 3)))]
++ "
++{
++ operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
++ operands[3] = gen_lowpart_common (SImode, operands[0]);
++}")
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_double_operand" ""))]
++ "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
++ && GET_CODE (operands[1]) == CONST_DOUBLE
++ && CONST_DOUBLE_LOW (operands[1]) == 0"
++ [(set (match_dup 0)
++ (match_dup 2))
++ (set (match_dup 0)
++ (ashift:DI (match_dup 0)
++ (const_int 32)))]
++ "
++{ operands[2] = GEN_INT (CONST_DOUBLE_HIGH (operands[1])); }")
++
++;; Generate all one-bits and clear left or right.
++;; Use (and:DI (rotate:DI ...)) to avoid anddi3 unnecessary clobber.
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "mask64_operand" ""))]
++ "TARGET_POWERPC64 && num_insns_constant (operands[1], DImode) > 1"
++ [(set (match_dup 0) (const_int -1))
++ (set (match_dup 0)
++ (and:DI (rotate:DI (match_dup 0)
++ (const_int 0))
++ (match_dup 1)))]
++ "")
++
++;; Split a load of a large constant into the appropriate five-instruction
++;; sequence. Handle anything in a constant number of insns.
++;; When non-easy constants can go in the TOC, this should use
++;; easy_fp_constant predicate.
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_double_operand" ""))]
++ "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
++ && num_insns_constant (operands[1], DImode) > 1"
++ [(set (match_dup 0)
++ (match_dup 2))
++ (set (match_dup 0)
++ (ashift:DI (match_dup 0)
++ (const_int 32)))
++ (set (match_dup 0)
++ (ior:DI (match_dup 0)
++ (match_dup 3)))]
++ "
++{
++ if (GET_CODE (operands[1]) == CONST_DOUBLE)
++ {
++ operands[2] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
++ operands[3] = immed_double_const (CONST_DOUBLE_LOW (operands[1]),
++ 0, DImode);
++ }
++ else
++ {
++ HOST_WIDE_INT value = INTVAL (operands[1]);
++ operands[2] = (value & 0x80000000) ? constm1_rtx : const0_rtx;
++ operands[3] = immed_double_const (value, 0, DImode);
++ }
++}")
++
++(define_split
++ [(set (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "const_int_operand" ""))]
++ "HOST_BITS_PER_WIDE_INT != 32 && TARGET_POWERPC64
++ && num_insns_constant (operands[1], DImode) > 1"
++ [(set (match_dup 0)
++ (match_dup 2))
++ (set (match_dup 0)
++ (ashift:DI (match_dup 0)
++ (const_int 32)))
++ (set (match_dup 0)
++ (ior:DI (match_dup 0)
++ (match_dup 3)))]
++ "
++{
++#if HOST_BITS_PER_WIDE_INT != 32
++ HOST_WIDE_INT value = INTVAL (operands[1]);
++ operands[2] = GEN_INT (value >> 32);
++ operands[3] = GEN_INT ((value & 0x7fffffff) - (value & 0x80000000));
++#endif
++}")
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC (match_operand:DI 1 "gpc_reg_operand" "r")
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r") (match_dup 1))]
++ "TARGET_POWERPC64"
++ "mr. %0,%1"
++ [(set_attr "type" "compare")])
++
++;; TImode is similar, except that we usually want to compute the address into
++;; a register and use lsi/stsi (the exception is during reload). MQ is also
++;; clobbered in stsi for POWER, so we need a SCRATCH for it.
++(define_expand "movti"
++ [(parallel [(set (match_operand:TI 0 "general_operand" "")
++ (match_operand:TI 1 "general_operand" ""))
++ (clobber (scratch:SI))])]
++ "TARGET_STRING || TARGET_POWERPC64"
++ "
++{
++ if (GET_CODE (operands[0]) == MEM)
++ operands[1] = force_reg (TImode, operands[1]);
++
++ if (GET_CODE (operands[0]) == MEM
++ && GET_CODE (XEXP (operands[0], 0)) != REG
++ && ! reload_in_progress)
++ operands[0] = change_address (operands[0], TImode,
++ copy_addr_to_reg (XEXP (operands[0], 0)));
++
++ if (GET_CODE (operands[1]) == MEM
++ && GET_CODE (XEXP (operands[1], 0)) != REG
++ && ! reload_in_progress)
++ operands[1] = change_address (operands[1], TImode,
++ copy_addr_to_reg (XEXP (operands[1], 0)));
++}")
++
++;; We say that MQ is clobbered in the last alternative because the first
++;; alternative would never get used otherwise since it would need a reload
++;; while the 2nd alternative would not. We put memory cases first so they
++;; are preferred. Otherwise, we'd try to reload the output instead of
++;; giving the SCRATCH mq.
++(define_insn "*movti_power"
++ [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,m,????r,????r,????r")
++ (match_operand:TI 1 "reg_or_mem_operand" "r,r,r,Q,m"))
++ (clobber (match_scratch:SI 2 "=q,q#X,X,X,X"))]
++ "TARGET_STRING && TARGET_POWER && ! TARGET_POWERPC64
++ && (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))"
++ "*
++{
++ switch (which_alternative)
++ {
++ default:
++ abort ();
++
++ case 0:
++ return \"{stsi|stswi} %1,%P0,16\";
++
++ case 1:
++ return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\;{st|stw} %Y1,%Y0\;{st|stw} %Z1,%Z0\";
++
++ case 2:
++ /* Normally copy registers with lowest numbered register copied first.
++ But copy in the other order if the first register of the output
++ is the second, third, or fourth register in the input. */
++ if (REGNO (operands[0]) >= REGNO (operands[1]) + 1
++ && REGNO (operands[0]) <= REGNO (operands[1]) + 3)
++ return \"mr %Z0,%Z1\;mr %Y0,%Y1\;mr %L0,%L1\;mr %0,%1\";
++ else
++ return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
++ case 3:
++ /* If the address is not used in the output, we can use lsi. Otherwise,
++ fall through to generating four loads. */
++ if (! reg_overlap_mentioned_p (operands[0], operands[1]))
++ return \"{lsi|lswi} %0,%P1,16\";
++ /* ... fall through ... */
++ case 4:
++ /* If the address register is the same as the register for the lowest-
++ addressed word, load it last. Similarly for the next two words.
++ Otherwise load lowest address to highest. */
++ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
++ operands[1], 0))
++ return \"{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %0,%1\";
++ else if (refers_to_regno_p (REGNO (operands[0]) + 1,
++ REGNO (operands[0]) + 2, operands[1], 0))
++ return \"{l|lwz} %0,%1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %L0,%L1\";
++ else if (refers_to_regno_p (REGNO (operands[0]) + 2,
++ REGNO (operands[0]) + 3, operands[1], 0))
++ return \"{l|lwz} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Z0,%Z1\;{l|lwz} %Y0,%Y1\";
++ else
++ return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\";
++ }
++}"
++ [(set_attr "type" "store,store,*,load,load")
++ (set_attr "length" "*,16,16,*,16")])
++
++(define_insn "*movti_string"
++ [(set (match_operand:TI 0 "reg_or_mem_operand" "=m,????r,????r")
++ (match_operand:TI 1 "reg_or_mem_operand" "r,r,m"))
++ (clobber (match_scratch:SI 2 "=X,X,X"))]
++ "TARGET_STRING && ! TARGET_POWER && ! TARGET_POWERPC64
++ && (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))"
++ "*
++{
++ switch (which_alternative)
++ {
++ default:
++ abort ();
++
++ case 0:
++ return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\;{st|stw} %Y1,%Y0\;{st|stw} %Z1,%Z0\";
++
++ case 1:
++ /* Normally copy registers with lowest numbered register copied first.
++ But copy in the other order if the first register of the output
++ is the second, third, or fourth register in the input. */
++ if (REGNO (operands[0]) >= REGNO (operands[1]) + 1
++ && REGNO (operands[0]) <= REGNO (operands[1]) + 3)
++ return \"mr %Z0,%Z1\;mr %Y0,%Y1\;mr %L0,%L1\;mr %0,%1\";
++ else
++ return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
++ case 2:
++ /* If the address register is the same as the register for the lowest-
++ addressed word, load it last. Similarly for the next two words.
++ Otherwise load lowest address to highest. */
++ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
++ operands[1], 0))
++ return \"{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %0,%1\";
++ else if (refers_to_regno_p (REGNO (operands[0]) + 1,
++ REGNO (operands[0]) + 2, operands[1], 0))
++ return \"{l|lwz} %0,%1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %L0,%L1\";
++ else if (refers_to_regno_p (REGNO (operands[0]) + 2,
++ REGNO (operands[0]) + 3, operands[1], 0))
++ return \"{l|lwz} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Z0,%Z1\;{l|lwz} %Y0,%Y1\";
++ else
++ return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\";
++ }
++}"
++ [(set_attr "type" "store,*,load")
++ (set_attr "length" "16,16,16")])
++
++(define_insn "*movti_ppc64"
++ [(set (match_operand:TI 0 "nonimmediate_operand" "=r,r,m")
++ (match_operand:TI 1 "input_operand" "r,m,r"))]
++ "TARGET_POWERPC64 && (gpc_reg_operand (operands[0], TImode)
++ || gpc_reg_operand (operands[1], TImode))"
++ "*
++{
++ switch (which_alternative)
++ {
++ default:
++ abort ();
++ case 0:
++ /* We normally copy the low-numbered register first. However, if
++ the first register operand 0 is the same as the second register of
++ operand 1, we must copy in the opposite order. */
++ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
++ return \"mr %L0,%L1\;mr %0,%1\";
++ else
++ return \"mr %0,%1\;mr %L0,%L1\";
++ case 1:
++ /* If the low-address word is used in the address, we must load it
++ last. Otherwise, load it first. Note that we cannot have
++ auto-increment in that case since the address register is known to be
++ dead. */
++ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
++ operands [1], 0))
++ return \"ld %L0,%L1\;ld %0,%1\";
++ else
++ return \"ld%U1 %0,%1\;ld %L0,%L1\";
++ case 2:
++ return \"std%U0 %1,%0\;std %L1,%L0\";
++ }
++}"
++ [(set_attr "type" "*,load,store")
++ (set_attr "length" "8,8,8")])
++
++(define_expand "load_multiple"
++ [(match_par_dup 3 [(set (match_operand:SI 0 "" "")
++ (match_operand:SI 1 "" ""))
++ (use (match_operand:SI 2 "" ""))])]
++ "TARGET_STRING"
++ "
++{
++ int regno;
++ int count;
++ rtx from;
++ int i;
++
++ /* Support only loading a constant number of fixed-point registers from
++ memory and only bother with this if more than two; the machine
++ doesn't support more than eight. */
++ if (GET_CODE (operands[2]) != CONST_INT
++ || INTVAL (operands[2]) <= 2
++ || INTVAL (operands[2]) > 8
++ || GET_CODE (operands[1]) != MEM
++ || GET_CODE (operands[0]) != REG
++ || REGNO (operands[0]) >= 32)
++ FAIL;
++
++ count = INTVAL (operands[2]);
++ regno = REGNO (operands[0]);
++
++ operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count));
++ from = force_reg (SImode, XEXP (operands[1], 0));
++
++ for (i = 0; i < count; i++)
++ XVECEXP (operands[3], 0, i)
++ = gen_rtx_SET (VOIDmode, gen_rtx_REG (SImode, regno + i),
++ change_address (operands[1], SImode,
++ plus_constant (from, i * 4)));
++}")
++
++(define_insn ""
++ [(match_parallel 0 "load_multiple_operation"
++ [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
++ (mem:SI (match_operand:SI 2 "gpc_reg_operand" "b")))])]
++ "TARGET_STRING"
++ "*
++{
++ /* We have to handle the case where the pseudo used to contain the address
++ is assigned to one of the output registers. */
++ int i, j;
++ int words = XVECLEN (operands[0], 0);
++ rtx xop[10];
++
++ if (XVECLEN (operands[0], 0) == 1)
++ return \"{l|lwz} %1,0(%2)\";
++
++ for (i = 0; i < words; i++)
++ if (refers_to_regno_p (REGNO (operands[1]) + i,
++ REGNO (operands[1]) + i + 1, operands[2], 0))
++ {
++ if (i == words-1)
++ {
++ xop[0] = operands[1];
++ xop[1] = operands[2];
++ xop[2] = GEN_INT (4 * (words-1));
++ output_asm_insn (\"{lsi|lswi} %0,%1,%2\;{l|lwz} %1,%2(%1)\", xop);
++ return \"\";
++ }
++ else if (i == 0)
++ {
++ xop[0] = operands[1];
++ xop[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
++ xop[2] = GEN_INT (4 * (words-1));
++ output_asm_insn (\"{cal %0,4(%0)|addi %0,%0,4}\;{lsi|lswi} %1,%0,%2\;{l|lwz} %0,-4(%0)\", xop);
++ return \"\";
++ }
++ else
++ {
++ for (j = 0; j < words; j++)
++ if (j != i)
++ {
++ xop[0] = gen_rtx_REG (SImode, REGNO (operands[1]) + j);
++ xop[1] = operands[2];
++ xop[2] = GEN_INT (j * 4);
++ output_asm_insn (\"{l|lwz} %0,%2(%1)\", xop);
++ }
++ xop[0] = operands[2];
++ xop[1] = GEN_INT (i * 4);
++ output_asm_insn (\"{l|lwz} %0,%1(%0)\", xop);
++ return \"\";
++ }
++ }
++
++ return \"{lsi|lswi} %1,%2,%N0\";
++}"
++ [(set_attr "type" "load")
++ (set_attr "length" "32")])
++
++
++(define_expand "store_multiple"
++ [(match_par_dup 3 [(set (match_operand:SI 0 "" "")
++ (match_operand:SI 1 "" ""))
++ (clobber (scratch:SI))
++ (use (match_operand:SI 2 "" ""))])]
++ "TARGET_STRING"
++ "
++{
++ int regno;
++ int count;
++ rtx to;
++ int i;
++
++ /* Support only storing a constant number of fixed-point registers to
++ memory and only bother with this if more than two; the machine
++ doesn't support more than eight. */
++ if (GET_CODE (operands[2]) != CONST_INT
++ || INTVAL (operands[2]) <= 2
++ || INTVAL (operands[2]) > 8
++ || GET_CODE (operands[0]) != MEM
++ || GET_CODE (operands[1]) != REG
++ || REGNO (operands[1]) >= 32)
++ FAIL;
++
++ count = INTVAL (operands[2]);
++ regno = REGNO (operands[1]);
++
++ operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count + 1));
++ to = force_reg (SImode, XEXP (operands[0], 0));
++
++ XVECEXP (operands[3], 0, 0)
++ = gen_rtx_SET (VOIDmode, change_address (operands[0], SImode, to),
++ operands[1]);
++ XVECEXP (operands[3], 0, 1) = gen_rtx_CLOBBER (VOIDmode,
++ gen_rtx_SCRATCH (SImode));
++
++ for (i = 1; i < count; i++)
++ XVECEXP (operands[3], 0, i + 1)
++ = gen_rtx_SET (VOIDmode,
++ change_address (operands[0], SImode,
++ plus_constant (to, i * 4)),
++ gen_rtx_REG (SImode, regno + i));
++}")
++
++(define_insn ""
++ [(match_parallel 0 "store_multiple_operation"
++ [(set (match_operand:SI 1 "indirect_operand" "=Q")
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (clobber (match_scratch:SI 3 "=q"))])]
++ "TARGET_STRING && TARGET_POWER"
++ "{stsi|stswi} %2,%P1,%O0"
++ [(set_attr "type" "store")])
++
++(define_insn ""
++ [(match_parallel 0 "store_multiple_operation"
++ [(set (mem:SI (match_operand:SI 1 "gpc_reg_operand" "b"))
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (clobber (match_scratch:SI 3 "X"))])]
++ "TARGET_STRING && ! TARGET_POWER"
++ "{stsi|stswi} %2,%1,%O0"
++ [(set_attr "type" "store")])
++
++
++;; String/block move insn.
++;; Argument 0 is the destination
++;; Argument 1 is the source
++;; Argument 2 is the length
++;; Argument 3 is the alignment
++
++(define_expand "movstrsi"
++ [(parallel [(set (match_operand:BLK 0 "" "")
++ (match_operand:BLK 1 "" ""))
++ (use (match_operand:SI 2 "" ""))
++ (use (match_operand:SI 3 "" ""))])]
++ ""
++ "
++{
++ if (expand_block_move (operands))
++ DONE;
++ else
++ FAIL;
++}")
++
++;; Move up to 32 bytes at a time. The fixed registers are needed because the
++;; register allocator doesn't have a clue about allocating 8 word registers
++(define_expand "movstrsi_8reg"
++ [(parallel [(set (match_operand 0 "" "")
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (use (match_operand 3 "" ""))
++ (clobber (reg:SI 5))
++ (clobber (reg:SI 6))
++ (clobber (reg:SI 7))
++ (clobber (reg:SI 8))
++ (clobber (reg:SI 9))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 4 ""))])]
++ "TARGET_STRING"
++ "")
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
++ (clobber (reg:SI 6))
++ (clobber (reg:SI 7))
++ (clobber (reg:SI 8))
++ (clobber (reg:SI 9))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 5 "=q"))]
++ "TARGET_STRING && TARGET_POWER
++ && ((INTVAL (operands[2]) > 24 && INTVAL (operands[2]) < 32) || INTVAL (operands[2]) == 0)
++ && (REGNO (operands[0]) < 5 || REGNO (operands[0]) > 12)
++ && (REGNO (operands[1]) < 5 || REGNO (operands[1]) > 12)
++ && REGNO (operands[4]) == 5"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
++ (clobber (reg:SI 6))
++ (clobber (reg:SI 7))
++ (clobber (reg:SI 8))
++ (clobber (reg:SI 9))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 5 "X"))]
++ "TARGET_STRING && ! TARGET_POWER
++ && ((INTVAL (operands[2]) > 24 && INTVAL (operands[2]) < 32) || INTVAL (operands[2]) == 0)
++ && (REGNO (operands[0]) < 5 || REGNO (operands[0]) > 12)
++ && (REGNO (operands[1]) < 5 || REGNO (operands[1]) > 12)
++ && REGNO (operands[4]) == 5"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++;; Move up to 24 bytes at a time. The fixed registers are needed because the
++;; register allocator doesn't have a clue about allocating 6 word registers
++(define_expand "movstrsi_6reg"
++ [(parallel [(set (match_operand 0 "" "")
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (use (match_operand 3 "" ""))
++ (clobber (reg:SI 7))
++ (clobber (reg:SI 8))
++ (clobber (reg:SI 9))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 4 ""))])]
++ "TARGET_STRING"
++ "")
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
++ (clobber (reg:SI 8))
++ (clobber (reg:SI 9))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 5 "=q"))]
++ "TARGET_STRING && TARGET_POWER
++ && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24
++ && (REGNO (operands[0]) < 7 || REGNO (operands[0]) > 12)
++ && (REGNO (operands[1]) < 7 || REGNO (operands[1]) > 12)
++ && REGNO (operands[4]) == 7"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
++ (clobber (reg:SI 8))
++ (clobber (reg:SI 9))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 5 "X"))]
++ "TARGET_STRING && ! TARGET_POWER
++ && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 32
++ && (REGNO (operands[0]) < 7 || REGNO (operands[0]) > 12)
++ && (REGNO (operands[1]) < 7 || REGNO (operands[1]) > 12)
++ && REGNO (operands[4]) == 7"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++;; Move up to 16 bytes at a time, using 4 fixed registers to avoid spill problems
++;; with TImode
++(define_expand "movstrsi_4reg"
++ [(parallel [(set (match_operand 0 "" "")
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (use (match_operand 3 "" ""))
++ (clobber (reg:SI 9))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 4 ""))])]
++ "TARGET_STRING"
++ "")
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 5 "=q"))]
++ "TARGET_STRING && TARGET_POWER
++ && INTVAL (operands[2]) > 8 && INTVAL (operands[2]) <= 16
++ && (REGNO (operands[0]) < 9 || REGNO (operands[0]) > 12)
++ && (REGNO (operands[1]) < 9 || REGNO (operands[1]) > 12)
++ && REGNO (operands[4]) == 9"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
++ (clobber (reg:SI 10))
++ (clobber (reg:SI 11))
++ (clobber (reg:SI 12))
++ (clobber (match_scratch:SI 5 "X"))]
++ "TARGET_STRING && ! TARGET_POWER
++ && INTVAL (operands[2]) > 8 && INTVAL (operands[2]) <= 16
++ && (REGNO (operands[0]) < 9 || REGNO (operands[0]) > 12)
++ && (REGNO (operands[1]) < 9 || REGNO (operands[1]) > 12)
++ && REGNO (operands[4]) == 9"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++;; Move up to 8 bytes at a time.
++(define_expand "movstrsi_2reg"
++ [(parallel [(set (match_operand 0 "" "")
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (use (match_operand 3 "" ""))
++ (clobber (match_scratch:DI 4 ""))
++ (clobber (match_scratch:SI 5 ""))])]
++ "TARGET_STRING && ! TARGET_64BIT"
++ "")
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_scratch:DI 4 "=&r"))
++ (clobber (match_scratch:SI 5 "=q"))]
++ "TARGET_STRING && TARGET_POWER && ! TARGET_64BIT
++ && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_scratch:DI 4 "=&r"))
++ (clobber (match_scratch:SI 5 "X"))]
++ "TARGET_STRING && ! TARGET_POWER && ! TARGET_64BIT
++ && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++;; Move up to 4 bytes at a time.
++(define_expand "movstrsi_1reg"
++ [(parallel [(set (match_operand 0 "" "")
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (use (match_operand 3 "" ""))
++ (clobber (match_scratch:SI 4 ""))
++ (clobber (match_scratch:SI 5 ""))])]
++ "TARGET_STRING"
++ "")
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_scratch:SI 4 "=&r"))
++ (clobber (match_scratch:SI 5 "=q"))]
++ "TARGET_STRING && TARGET_POWER
++ && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
++ (use (match_operand:SI 2 "immediate_operand" "i"))
++ (use (match_operand:SI 3 "immediate_operand" "i"))
++ (clobber (match_scratch:SI 4 "=&r"))
++ (clobber (match_scratch:SI 5 "X"))]
++ "TARGET_STRING && ! TARGET_POWER
++ && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4"
++ "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
++ [(set_attr "type" "load")
++ (set_attr "length" "8")])
++
++
++;; Define insns that do load or store with update. Some of these we can
++;; get by using pre-decrement or pre-increment, but the hardware can also
++;; do cases where the increment is not the size of the object.
++;;
++;; In all these cases, we use operands 0 and 1 for the register being
++;; incremented because those are the operands that local-alloc will
++;; tie and these are the pair most likely to be tieable (and the ones
++;; that will benefit the most).
++
++(define_insn "*movdi_update1"
++ [(set (match_operand:DI 3 "gpc_reg_operand" "=r,r")
++ (mem:DI (plus:DI (match_operand:DI 1 "gpc_reg_operand" "0,0")
++ (match_operand:DI 2 "reg_or_short_operand" "r,I"))))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=b,b")
++ (plus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64 && TARGET_UPDATE"
++ "@
++ ldux %3,%0,%2
++ ldu %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "*movdi_update2"
++ [(set (match_operand:DI 3 "gpc_reg_operand" "=r")
++ (sign_extend:DI
++ (mem:SI (plus:DI (match_operand:DI 1 "gpc_reg_operand" "0")
++ (match_operand:DI 2 "gpc_reg_operand" "r")))))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=b")
++ (plus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "lwaux %3,%0,%2"
++ [(set_attr "type" "load")])
++
++(define_insn "movdi_update"
++ [(set (mem:DI (plus:DI (match_operand:DI 1 "gpc_reg_operand" "0,0")
++ (match_operand:DI 2 "reg_or_short_operand" "r,I")))
++ (match_operand:DI 3 "gpc_reg_operand" "r,r"))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=b,b")
++ (plus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64 && TARGET_UPDATE"
++ "@
++ stdux %3,%0,%2
++ stdu %3,%2(%0)"
++ [(set_attr "type" "store")])
++
++(define_insn "*movsi_update1"
++ [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
++ (mem:SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ ""
++ "@
++ {lux|lwzux} %3,%0,%2
++ {lu|lwzu} %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "movsi_update"
++ [(set (mem:SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ {stux|stwux} %3,%0,%2
++ {stu|stwu} %3,%2(%0)"
++ [(set_attr "type" "store")])
++
++(define_insn "*movhi_update"
++ [(set (match_operand:HI 3 "gpc_reg_operand" "=r,r")
++ (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ lhzux %3,%0,%2
++ lhzu %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "*movhi_update2"
++ [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
++ (zero_extend:SI
++ (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ lhzux %3,%0,%2
++ lhzu %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "*movhi_update3"
++ [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
++ (sign_extend:SI
++ (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ lhaux %3,%0,%2
++ lhau %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "*movhi_update4"
++ [(set (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))
++ (match_operand:HI 3 "gpc_reg_operand" "r,r"))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ sthux %3,%0,%2
++ sthu %3,%2(%0)"
++ [(set_attr "type" "store")])
++
++(define_insn "*movqi_update1"
++ [(set (match_operand:QI 3 "gpc_reg_operand" "=r,r")
++ (mem:QI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ lbzux %3,%0,%2
++ lbzu %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "*movqi_update2"
++ [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
++ (zero_extend:SI
++ (mem:QI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ lbzux %3,%0,%2
++ lbzu %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "*movqi_update3"
++ [(set (mem:QI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))
++ (match_operand:QI 3 "gpc_reg_operand" "r,r"))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_UPDATE"
++ "@
++ stbux %3,%0,%2
++ stbu %3,%2(%0)"
++ [(set_attr "type" "store")])
++
++(define_insn "*movsf_update1"
++ [(set (match_operand:SF 3 "gpc_reg_operand" "=f,f")
++ (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_HARD_FLOAT && TARGET_UPDATE"
++ "@
++ lfsux %3,%0,%2
++ lfsu %3,%2(%0)"
++ [(set_attr "type" "fpload")])
++
++(define_insn "*movsf_update2"
++ [(set (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))
++ (match_operand:SF 3 "gpc_reg_operand" "f,f"))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_HARD_FLOAT && TARGET_UPDATE"
++ "@
++ stfsux %3,%0,%2
++ stfsu %3,%2(%0)"
++ [(set_attr "type" "fpstore")])
++
++(define_insn "*movsf_update3"
++ [(set (match_operand:SF 3 "gpc_reg_operand" "=r,r")
++ (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_SOFT_FLOAT && TARGET_UPDATE"
++ "@
++ {lux|lwzux} %3,%0,%2
++ {lu|lwzu} %3,%2(%0)"
++ [(set_attr "type" "load")])
++
++(define_insn "*movsf_update4"
++ [(set (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))
++ (match_operand:SF 3 "gpc_reg_operand" "r,r"))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_SOFT_FLOAT && TARGET_UPDATE"
++ "@
++ {stux|stwux} %3,%0,%2
++ {stu|stwu} %3,%2(%0)"
++ [(set_attr "type" "store")])
++
++(define_insn "*movdf_update1"
++ [(set (match_operand:DF 3 "gpc_reg_operand" "=f,f")
++ (mem:DF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_HARD_FLOAT && TARGET_UPDATE"
++ "@
++ lfdux %3,%0,%2
++ lfdu %3,%2(%0)"
++ [(set_attr "type" "fpload")])
++
++(define_insn "*movdf_update2"
++ [(set (mem:DF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I")))
++ (match_operand:DF 3 "gpc_reg_operand" "f,f"))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_HARD_FLOAT && TARGET_UPDATE"
++ "@
++ stfdux %3,%0,%2
++ stfdu %3,%2(%0)"
++ [(set_attr "type" "fpstore")])
++
++;; Peephole to convert two consecutive FP loads or stores into lfq/stfq.
++
++(define_peephole
++ [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
++ (match_operand:DF 1 "memory_operand" ""))
++ (set (match_operand:DF 2 "gpc_reg_operand" "=f")
++ (match_operand:DF 3 "memory_operand" ""))]
++ "TARGET_POWER2
++ && TARGET_HARD_FLOAT
++ && registers_ok_for_quad_peep (operands[0], operands[2])
++ && ! MEM_VOLATILE_P (operands[1]) && ! MEM_VOLATILE_P (operands[3])
++ && addrs_ok_for_quad_peep (XEXP (operands[1], 0), XEXP (operands[3], 0))"
++ "lfq%U1%X1 %0,%1")
++
++(define_peephole
++ [(set (match_operand:DF 0 "memory_operand" "")
++ (match_operand:DF 1 "gpc_reg_operand" "f"))
++ (set (match_operand:DF 2 "memory_operand" "")
++ (match_operand:DF 3 "gpc_reg_operand" "f"))]
++ "TARGET_POWER2
++ && TARGET_HARD_FLOAT
++ && registers_ok_for_quad_peep (operands[1], operands[3])
++ && ! MEM_VOLATILE_P (operands[0]) && ! MEM_VOLATILE_P (operands[2])
++ && addrs_ok_for_quad_peep (XEXP (operands[0], 0), XEXP (operands[2], 0))"
++ "stfq%U0%X0 %1,%0")
++
++;; Next come insns related to the calling sequence.
++;;
++;; First, an insn to allocate new stack space for dynamic use (e.g., alloca).
++;; We move the back-chain and decrement the stack pointer.
++
++(define_expand "allocate_stack"
++ [(set (match_operand 0 "gpc_reg_operand" "=r")
++ (minus (reg 1) (match_operand 1 "reg_or_short_operand" "")))
++ (set (reg 1)
++ (minus (reg 1) (match_dup 1)))]
++ ""
++ "
++{ rtx chain = gen_reg_rtx (Pmode);
++ rtx stack_bot = gen_rtx_MEM (Pmode, stack_pointer_rtx);
++ rtx neg_op0;
++
++ emit_move_insn (chain, stack_bot);
++
++ /* Under Windows NT, we need to add stack probes for large/variable
++ allocations, so do it via a call to the external function alloca
++ instead of doing it inline. */
++ if (DEFAULT_ABI == ABI_NT
++ && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) > 4096))
++ {
++ rtx tmp = gen_reg_rtx (Pmode);
++ emit_library_call_value (gen_rtx_SYMBOL_REF (Pmode, \"__allocate_stack\"),
++ tmp, 0, Pmode, 1, operands[1], Pmode);
++ emit_insn (gen_set_sp (tmp));
++ emit_move_insn (operands[0], tmp);
++ DONE;
++ }
++
++ if (GET_CODE (operands[1]) != CONST_INT
++ || INTVAL (operands[1]) < -32767
++ || INTVAL (operands[1]) > 32768)
++ {
++ neg_op0 = gen_reg_rtx (Pmode);
++ if (TARGET_32BIT)
++ emit_insn (gen_negsi2 (neg_op0, operands[1]));
++ else
++ emit_insn (gen_negdi2 (neg_op0, operands[1]));
++ }
++ else
++ neg_op0 = GEN_INT (- INTVAL (operands[1]));
++
++ if (TARGET_UPDATE)
++ emit_insn ((* ((TARGET_32BIT) ? gen_movsi_update : gen_movdi_update))
++ (stack_pointer_rtx, stack_pointer_rtx, neg_op0, chain));
++
++ else
++ {
++ emit_insn ((* ((TARGET_32BIT) ? gen_addsi3 : gen_adddi3))
++ (stack_pointer_rtx, stack_pointer_rtx, neg_op0));
++ emit_move_insn (gen_rtx_MEM (Pmode, stack_pointer_rtx), chain);
++ }
++
++ emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
++ DONE;
++}")
++
++;; Marker to indicate that the stack pointer was changed under NT in
++;; ways not known to the compiler
++
++(define_insn "set_sp"
++ [(set (reg:SI 1)
++ (unspec [(match_operand:SI 0 "register_operand" "r")] 7))]
++ ""
++ ""
++ [(set_attr "length" "0")])
++
++;; These patterns say how to save and restore the stack pointer. We need not
++;; save the stack pointer at function level since we are careful to
++;; preserve the backchain. At block level, we have to restore the backchain
++;; when we restore the stack pointer.
++;;
++;; For nonlocal gotos, we must save both the stack pointer and its
++;; backchain and restore both. Note that in the nonlocal case, the
++;; save area is a memory location.
++
++(define_expand "save_stack_function"
++ [(match_operand 0 "any_operand" "")
++ (match_operand 1 "any_operand" "")]
++ ""
++ "DONE;")
++
++(define_expand "restore_stack_function"
++ [(match_operand 0 "any_operand" "")
++ (match_operand 1 "any_operand" "")]
++ ""
++ "DONE;")
++
++(define_expand "restore_stack_block"
++ [(use (match_operand 0 "register_operand" ""))
++ (set (match_dup 2) (match_dup 3))
++ (set (match_dup 0) (match_operand 1 "register_operand" ""))
++ (set (match_dup 3) (match_dup 2))]
++ ""
++ "
++{
++ operands[2] = gen_reg_rtx (Pmode);
++ operands[3] = gen_rtx_MEM (Pmode, operands[0]);
++}")
++
++(define_expand "save_stack_nonlocal"
++ [(match_operand 0 "memory_operand" "")
++ (match_operand 1 "register_operand" "")]
++ ""
++ "
++{
++ rtx temp = gen_reg_rtx (Pmode);
++
++ /* Copy the backchain to the first word, sp to the second. */
++ emit_move_insn (temp, gen_rtx_MEM (Pmode, operands[1]));
++ emit_move_insn (operand_subword (operands[0], 0, 0, (TARGET_32BIT ? DImode : TImode)),
++ temp);
++ emit_move_insn (operand_subword (operands[0], 1, 0, (TARGET_32BIT ? DImode : TImode)),
++ operands[1]);
++ DONE;
++}")
++
++(define_expand "restore_stack_nonlocal"
++ [(match_operand 0 "register_operand" "")
++ (match_operand 1 "memory_operand" "")]
++ ""
++ "
++{
++ rtx temp = gen_reg_rtx (Pmode);
++
++ /* Restore the backchain from the first word, sp from the second. */
++ emit_move_insn (temp,
++ operand_subword (operands[1], 0, 0, (TARGET_32BIT ? DImode : TImode)));
++ emit_move_insn (operands[0],
++ operand_subword (operands[1], 1, 0, (TARGET_32BIT ? DImode : TImode)));
++ emit_move_insn (gen_rtx_MEM (Pmode, operands[0]), temp);
++ DONE;
++}")
++
++;; If we have -mminimal-toc, we need to reload r30 after a nonlocal goto.
++
++(define_insn "nonlocal_goto_receiver"
++ [(unspec_volatile [(const_int 0)] 1)]
++ "TARGET_TOC && TARGET_MINIMAL_TOC"
++ "*
++{
++ rs6000_output_load_toc_table (asm_out_file, 30);
++ return \"\";
++}"
++ [(set_attr "type" "load")
++ (set_attr "length" "24")])
++
++;; A function pointer under AIX is a pointer to a data area whose first word
++;; contains the actual address of the function, whose second word contains a
++;; pointer to its TOC, and whose third word contains a value to place in the
++;; static chain register (r11). Note that if we load the static chain, our
++;; "trampoline" need not have any executable code.
++;;
++;; operands[0] is a register pointing to the 3 word descriptor (aka, the function address)
++;; operands[1] is the stack size to clean up
++;; operands[2] is the value FUNCTION_ARG returns for the VOID argument (must be 0 for AIX)
++;; operands[3] is location to store the TOC
++;; operands[4] is the TOC register
++;; operands[5] is the static chain register
++;;
++;; We do not break this into separate insns, so that the scheduler will not try
++;; to move the load of the new TOC before any loads from the TOC.
++
++(define_insn "call_indirect_aix32"
++ [(call (mem:SI (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (match_operand 1 "const_int_operand" "n"))
++ (use (match_operand 2 "const_int_operand" "n"))
++ (use (match_operand 3 "offsettable_mem_operand" "o"))
++ (use (match_operand 4 "gpc_reg_operand" "r"))
++ (clobber (match_operand 5 "gpc_reg_operand" "=r"))
++ (clobber (match_scratch:SI 6 "=&r"))
++ (clobber (match_scratch:SI 7 "=l"))]
++ "DEFAULT_ABI == ABI_AIX
++ && (INTVAL (operands[2]) == CALL_NORMAL || (INTVAL (operands[2]) & CALL_LONG) != 0)"
++ "{st|stw} %4,%3\;{l|lwz} %6,0(%0)\;{l|lwz} %4,4(%0)\;mt%7 %6\;{l|lwz} %5,8(%0)\;{brl|blrl}\;{l|lwz} %4,%3"
++ [(set_attr "type" "load")
++ (set_attr "length" "28")])
++
++(define_insn "call_indirect_aix64"
++ [(call (mem:SI (match_operand:DI 0 "gpc_reg_operand" "b"))
++ (match_operand 1 "const_int_operand" "n"))
++ (use (match_operand 2 "const_int_operand" "n"))
++ (use (match_operand 3 "offsettable_mem_operand" "o"))
++ (use (match_operand 4 "gpc_reg_operand" "r"))
++ (clobber (match_operand 5 "gpc_reg_operand" "=r"))
++ (clobber (match_scratch:SI 6 "=&r"))
++ (clobber (match_scratch:SI 7 "=l"))]
++ "TARGET_64BIT && DEFAULT_ABI == ABI_AIX
++ && (INTVAL (operands[2]) == CALL_NORMAL || (INTVAL (operands[2]) & CALL_LONG) != 0)"
++ "std %4,%3\;ld %6,0(%0)\;ld %4,8(%0)\;mt%7 %6\;ld %5,16(%0)\;blrl\;ld %4,%3"
++ [(set_attr "type" "load")
++ (set_attr "length" "28")])
++
++(define_insn "call_value_indirect_aix32"
++ [(set (match_operand 0 "register_operand" "fg")
++ (call (mem:SI (match_operand:SI 1 "gpc_reg_operand" "b"))
++ (match_operand 2 "const_int_operand" "n")))
++ (use (match_operand 3 "const_int_operand" "n"))
++ (use (match_operand 4 "offsettable_mem_operand" "o"))
++ (use (match_operand 5 "gpc_reg_operand" "r"))
++ (clobber (match_operand 6 "gpc_reg_operand" "=r"))
++ (clobber (match_scratch:SI 7 "=&r"))
++ (clobber (match_scratch:SI 8 "=l"))]
++ "DEFAULT_ABI == ABI_AIX
++ && (INTVAL (operands[3]) == CALL_NORMAL || (INTVAL (operands[3]) & CALL_LONG) != 0)"
++ "{st|stw} %5,%4\;{l|lwz} %7,0(%1)\;{l|lwz} %5,4(%1)\;mt%8 %7\;{l|lwz} %6,8(%1)\;{brl|blrl}\;{l|lwz} %5,%4"
++ [(set_attr "type" "load")
++ (set_attr "length" "28")])
++
++(define_insn "call_value_indirect_aix64"
++ [(set (match_operand 0 "register_operand" "fg")
++ (call (mem:SI (match_operand:DI 1 "gpc_reg_operand" "b"))
++ (match_operand 2 "const_int_operand" "n")))
++ (use (match_operand 3 "const_int_operand" "n"))
++ (use (match_operand 4 "offsettable_mem_operand" "o"))
++ (use (match_operand 5 "gpc_reg_operand" "r"))
++ (clobber (match_operand 6 "gpc_reg_operand" "=r"))
++ (clobber (match_scratch:SI 7 "=&r"))
++ (clobber (match_scratch:SI 8 "=l"))]
++ "TARGET_64BIT && DEFAULT_ABI == ABI_AIX
++ && (INTVAL (operands[3]) == CALL_NORMAL || (INTVAL (operands[3]) & CALL_LONG) != 0)"
++ "std %5,%4\;ld %7,0(%1)\;ld %5,8(%1)\;mt%8 %7\;ld %6,16(%1)\;blrl\;ld %5,%4"
++ [(set_attr "type" "load")
++ (set_attr "length" "28")])
++
++;; A function pointer undef NT is a pointer to a data area whose first word
++;; contains the actual address of the function, whose second word contains a
++;; pointer to its TOC. The static chain is not stored under NT, which means
++;; that we need a trampoline.
++;;
++;; operands[0] is an SImode pseudo in which we place the address of the function.
++;; operands[1] is the stack size to clean up
++;; operands[2] is the value FUNCTION_ARG returns for the VOID argument (must be 0 for NT)
++;; operands[3] is location to store the TOC
++;; operands[4] is the TOC register
++;;
++;; We do not break this into separate insns, so that the scheduler will not try
++;; to move the load of the new TOC before any loads from the TOC.
++
++(define_insn "call_indirect_nt"
++ [(call (mem:SI (match_operand:SI 0 "gpc_reg_operand" "b"))
++ (match_operand 1 "const_int_operand" "n"))
++ (use (match_operand 2 "const_int_operand" "n"))
++ (use (match_operand 3 "offsettable_mem_operand" "o"))
++ (use (match_operand 4 "gpc_reg_operand" "r"))
++ (clobber (match_scratch:SI 5 "=&r"))
++ (clobber (match_scratch:SI 6 "=l"))]
++ "DEFAULT_ABI == ABI_NT
++ && (INTVAL (operands[2]) == CALL_NORMAL || (INTVAL (operands[2]) & CALL_LONG) != 0)"
++ "{st|stw} %4,%a3\;{l|lwz} %5,0(%0)\;{l|lwz} %4,4(%0)\;mt%6 %5\;{brl|blrl}\;{l|lwz} %4,%a3"
++ [(set_attr "type" "load")
++ (set_attr "length" "24")])
++
++(define_insn "call_value_indirect_nt"
++ [(set (match_operand 0 "register_operand" "fg")
++ (call (mem:SI (match_operand:SI 1 "gpc_reg_operand" "b"))
++ (match_operand 2 "const_int_operand" "n")))
++ (use (match_operand 3 "const_int_operand" "n"))
++ (use (match_operand 4 "offsettable_mem_operand" "o"))
++ (use (match_operand 5 "gpc_reg_operand" "r"))
++ (clobber (match_scratch:SI 6 "=&r"))
++ (clobber (match_scratch:SI 7 "=l"))]
++ "DEFAULT_ABI == ABI_NT
++ && (INTVAL (operands[3]) == CALL_NORMAL || (INTVAL (operands[3]) & CALL_LONG) != 0)"
++ "{st|stw} %5,%a4\;{l|lwz} %6,0(%1)\;{l|lwz} %5,4(%1)\;mt%7 %6\;{brl|blrl}\;{l|lwz} %5,%a4"
++ [(set_attr "type" "load")
++ (set_attr "length" "24")])
++
++;; A function pointer under System V is just a normal pointer
++;; operands[0] is the function pointer
++;; operands[1] is the stack size to clean up
++;; operands[2] is the value FUNCTION_ARG returns for the VOID argument which indicates how to set cr1
++
++(define_insn "call_indirect_sysv"
++ [(call (mem:SI (match_operand:SI 0 "register_operand" "l,l"))
++ (match_operand 1 "const_int_operand" "n,n"))
++ (use (match_operand 2 "const_int_operand" "O,n"))
++ (clobber (match_scratch:SI 3 "=l,l"))]
++ "DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS || DEFAULT_ABI == ABI_AIX_NODESC"
++ "*
++{
++ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return \"{brl|blrl}\";
++}"
++ [(set_attr "type" "jmpreg")
++ (set_attr "length" "4,8")])
++
++(define_insn "call_value_indirect_sysv"
++ [(set (match_operand 0 "register_operand" "=fg,fg")
++ (call (mem:SI (match_operand:SI 1 "register_operand" "l,l"))
++ (match_operand 2 "const_int_operand" "n,n")))
++ (use (match_operand 3 "const_int_operand" "O,n"))
++ (clobber (match_scratch:SI 4 "=l,l"))]
++ "DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS || DEFAULT_ABI == ABI_AIX_NODESC"
++ "*
++{
++ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return \"{brl|blrl}\";
++}"
++ [(set_attr "type" "jmpreg")
++ (set_attr "length" "4,8")])
++
++;; Now the definitions for the call and call_value insns
++(define_expand "call"
++ [(parallel [(call (mem:SI (match_operand 0 "address_operand" ""))
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (clobber (scratch:SI))])]
++ ""
++ "
++{
++int is_longcall;
++
++ if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != CONST_INT)
++ abort ();
++
++ operands[0] = XEXP (operands[0], 0);
++
++ /* Convert NT DLL imports into an indirect call. */
++ if (GET_CODE (operands[0]) == SYMBOL_REF
++ && (INTVAL (operands[2]) & CALL_NT_DLLIMPORT) != 0)
++ {
++ operands[0] = rs6000_dll_import_ref (operands[0]);
++ operands[2] = GEN_INT ((int)CALL_NORMAL);
++ }
++
++ is_longcall = rs6000_is_longcall_p(operands[0], INTVAL(operands[2]));
++
++ if (GET_CODE (operands[0]) != SYMBOL_REF || is_longcall)
++ {
++ if (is_longcall)
++ operands[0] = rs6000_longcall_ref (operands[0]);
++
++ if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_SOLARIS)
++ emit_call_insn (gen_call_indirect_sysv (force_reg (Pmode, operands[0]),
++ operands[1], operands[2]));
++ else
++ {
++ rtx toc_reg = gen_rtx_REG (Pmode, 2);
++ rtx toc_addr = RS6000_SAVE_TOC;
++
++ if (DEFAULT_ABI == ABI_AIX)
++ {
++ /* AIX function pointers are really pointers to a three word area */
++ rtx static_chain = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
++ emit_call_insn (TARGET_32BIT
++ ? gen_call_indirect_aix32 (force_reg (Pmode, operands[0]),
++ operands[1], operands[2],
++ toc_addr, toc_reg, static_chain)
++ : gen_call_indirect_aix64 (force_reg (Pmode, operands[0]),
++ operands[1], operands[2],
++ toc_addr, toc_reg, static_chain));
++ }
++ else if (DEFAULT_ABI == ABI_NT)
++ {
++ /* NT function pointers are really pointers to a two word area */
++ emit_call_insn (gen_call_indirect_nt (force_reg (Pmode, operands[0]),
++ operands[1], operands[2],
++ toc_addr, toc_reg));
++ }
++ else
++ abort ();
++ }
++ DONE;
++ }
++}")
++
++(define_expand "call_value"
++ [(parallel [(set (match_operand 0 "" "")
++ (call (mem:SI (match_operand 1 "address_operand" ""))
++ (match_operand 2 "" "")))
++ (use (match_operand 3 "" ""))
++ (clobber (scratch:SI))])]
++ ""
++ "
++{
++int is_longcall;
++
++ if (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != CONST_INT)
++ abort ();
++
++ operands[1] = XEXP (operands[1], 0);
++
++ /* Convert NT DLL imports into an indirect call. */
++ if (GET_CODE (operands[1]) == SYMBOL_REF
++ && (INTVAL (operands[3]) & CALL_NT_DLLIMPORT) != 0)
++ {
++ operands[1] = rs6000_dll_import_ref (operands[1]);
++ operands[3] = GEN_INT ((int)CALL_NORMAL);
++ }
++
++ is_longcall = rs6000_is_longcall_p(operands[1], INTVAL(operands[3]));
++
++ if (GET_CODE (operands[1]) != SYMBOL_REF || is_longcall)
++ {
++ if (is_longcall)
++ operands[1] = rs6000_longcall_ref (operands[1]);
++
++ if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_SOLARIS)
++ emit_call_insn (gen_call_value_indirect_sysv (operands[0], operands[1],
++ operands[2], operands[3]));
++ else
++ {
++ rtx toc_reg = gen_rtx_REG (Pmode, 2);
++ rtx toc_addr = RS6000_SAVE_TOC;
++
++ if (DEFAULT_ABI == ABI_AIX)
++ {
++ /* AIX function pointers are really pointers to a three word area */
++ rtx static_chain = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
++ emit_call_insn (TARGET_32BIT
++ ? gen_call_value_indirect_aix32 (operands[0],
++ force_reg (Pmode, operands[1]),
++ operands[2], operands[3],
++ toc_addr, toc_reg, static_chain)
++ : gen_call_value_indirect_aix64 (operands[0],
++ force_reg (Pmode, operands[1]),
++ operands[2], operands[3],
++ toc_addr, toc_reg, static_chain));
++ }
++ else if (DEFAULT_ABI == ABI_NT)
++ {
++ /* NT function pointers are really pointers to a two word area */
++ emit_call_insn (gen_call_value_indirect_nt (operands[0],
++ force_reg (Pmode, operands[1]),
++ operands[2], operands[3],
++ toc_addr, toc_reg));
++ }
++ else
++ abort ();
++ }
++ DONE;
++ }
++}")
++
++;; Call to function in current module. No TOC pointer reload needed.
++;; Operand2 is non-zero if we are using the V.4 calling sequence and
++;; either the function was not prototyped, or it was prototyped as a
++;; variable argument function. It is > 0 if FP registers were passed
++;; and < 0 if they were not.
++
++(define_insn "*call_local32"
++ [(call (mem:SI (match_operand:SI 0 "current_file_function_operand" "s,s"))
++ (match_operand 1 "" "g,g"))
++ (use (match_operand:SI 2 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 3 "=l,l"))]
++ "!rs6000_is_longcall_p(operands[0], INTVAL (operands[2]))"
++ "*
++{
++ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@local\" : \"bl %z0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "4,8")])
++
++(define_insn "*call_local64"
++ [(call (mem:SI (match_operand:DI 0 "current_file_function_operand" "s,s"))
++ (match_operand 1 "" "g,g"))
++ (use (match_operand:SI 2 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 3 "=l,l"))]
++ "TARGET_64BIT && !rs6000_is_longcall_p(operands[0], INTVAL (operands[2]))"
++ "*
++{
++ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@local\" : \"bl %z0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "4,8")])
++
++(define_insn "*ret_call_local32"
++ [(set (match_operand 0 "" "=fg,fg")
++ (call (mem:SI (match_operand:SI 1 "current_file_function_operand" "s,s"))
++ (match_operand 2 "" "g,g")))
++ (use (match_operand:SI 3 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 4 "=l,l"))]
++ "!rs6000_is_longcall_p(operands[1], INTVAL (operands[3]))"
++ "*
++{
++ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@local\" : \"bl %z1\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "4,8")])
++
++
++(define_insn "*ret_call_local64"
++ [(set (match_operand 0 "" "=fg,fg")
++ (call (mem:SI (match_operand:DI 1 "current_file_function_operand" "s,s"))
++ (match_operand 2 "" "g,g")))
++ (use (match_operand:SI 3 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 4 "=l,l"))]
++ "TARGET_64BIT && !rs6000_is_longcall_p(operands[1], INTVAL (operands[3]))"
++ "*
++{
++ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@local\" : \"bl %z1\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "4,8")])
++
++;; Call to function which may be in another module. Restore the TOC
++;; pointer (r2) after the call unless this is System V.
++;; Operand2 is non-zero if we are using the V.4 calling sequence and
++;; either the function was not prototyped, or it was prototyped as a
++;; variable argument function. It is > 0 if FP registers were passed
++;; and < 0 if they were not.
++
++(define_insn "*call_nonlocal_aix32"
++ [(call (mem:SI (match_operand:SI 0 "call_operand" "s,s"))
++ (match_operand 1 "" "fg,fg"))
++ (use (match_operand:SI 2 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 3 "=l,l"))]
++ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
++ && (INTVAL (operands[2]) & CALL_LONG) == 0"
++ "*
++{
++ /* Indirect calls should go through call_indirect */
++ if (GET_CODE (operands[0]) == REG)
++ abort ();
++
++ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (TARGET_WINDOWS_NT) ? \"bl %z0\;.znop %z0\" : \"bl %z0\;%.\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "8,12")])
++
++(define_insn "*call_nonlocal_aix64"
++ [(call (mem:SI (match_operand:DI 0 "call_operand" "s,s"))
++ (match_operand 1 "" "fg,fg"))
++ (use (match_operand:SI 2 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 3 "=l,l"))]
++ "TARGET_64BIT && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
++ && (INTVAL (operands[2]) & CALL_LONG) == 0"
++ "*
++{
++ /* Indirect calls should go through call_indirect */
++ if (GET_CODE (operands[0]) == REG)
++ abort ();
++
++ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (TARGET_WINDOWS_NT) ? \"bl %z0\;.znop %z0\" : \"bl %z0\;%.\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "8,12")])
++
++(define_insn "*call_nonlocal_sysv"
++ [(call (mem:SI (match_operand:SI 0 "call_operand" "s,s"))
++ (match_operand 1 "" "fg,fg"))
++ (use (match_operand:SI 2 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 3 "=l,l"))]
++ "(DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
++ && !rs6000_is_longcall_p(operands[0], INTVAL (operands[2]))"
++ "*
++{
++ /* Indirect calls should go through call_indirect */
++ if (GET_CODE (operands[0]) == REG)
++ abort ();
++
++ if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@plt\" : \"bl %z0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "4,8")])
++
++(define_insn "*ret_call_nonlocal_aix32"
++ [(set (match_operand 0 "" "=fg,fg")
++ (call (mem:SI (match_operand:SI 1 "call_operand" "s,s"))
++ (match_operand 2 "" "fg,fg")))
++ (use (match_operand:SI 3 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 4 "=l,l"))]
++ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
++ && (INTVAL (operands[3]) & CALL_LONG) == 0"
++ "*
++{
++ /* This should be handled by call_value_indirect */
++ if (GET_CODE (operands[1]) == REG)
++ abort ();
++
++ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (TARGET_WINDOWS_NT) ? \"bl %z1\;.znop %z1\" : \"bl %z1\;%.\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "8,12")])
++
++(define_insn "*ret_call_nonlocal_aix64"
++ [(set (match_operand 0 "" "=fg,fg")
++ (call (mem:SI (match_operand:DI 1 "call_operand" "s,s"))
++ (match_operand 2 "" "fg,fg")))
++ (use (match_operand:SI 3 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 4 "=l,l"))]
++ "TARGET_64BIT && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
++ && (INTVAL (operands[3]) & CALL_LONG) == 0"
++ "*
++{
++ /* This should be handled by call_value_indirect */
++ if (GET_CODE (operands[1]) == REG)
++ abort ();
++
++ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (TARGET_WINDOWS_NT) ? \"bl %z1\;.znop %z1\" : \"bl %z1\;%.\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "8,12")])
++
++(define_insn "*ret_call_nonlocal_sysv"
++ [(set (match_operand 0 "" "=fg,fg")
++ (call (mem:SI (match_operand:SI 1 "call_operand" "s,s"))
++ (match_operand 2 "" "fg,fg")))
++ (use (match_operand:SI 3 "immediate_operand" "O,n"))
++ (clobber (match_scratch:SI 4 "=l,l"))]
++ "(DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
++ && !rs6000_is_longcall_p(operands[1], INTVAL (operands[3]))"
++ "*
++{
++ /* This should be handled by call_value_indirect */
++ if (GET_CODE (operands[1]) == REG)
++ abort ();
++
++ if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
++ output_asm_insn (\"crxor 6,6,6\", operands);
++
++ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
++ output_asm_insn (\"creqv 6,6,6\", operands);
++
++ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@plt\" : \"bl %z1\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "4,8")])
++
++;; Call subroutine returning any type.
++(define_expand "untyped_call"
++ [(parallel [(call (match_operand 0 "" "")
++ (const_int 0))
++ (match_operand 1 "" "")
++ (match_operand 2 "" "")])]
++ ""
++ "
++{
++ int i;
++
++ emit_call_insn (gen_call (operands[0], const0_rtx, const0_rtx, const0_rtx));
++
++ for (i = 0; i < XVECLEN (operands[2], 0); i++)
++ {
++ rtx set = XVECEXP (operands[2], 0, i);
++ emit_move_insn (SET_DEST (set), SET_SRC (set));
++ }
++
++ /* The optimizer does not know that the call sets the function value
++ registers we stored in the result block. We avoid problems by
++ claiming that all hard registers are used and clobbered at this
++ point. */
++ emit_insn (gen_blockage ());
++
++ DONE;
++}")
++
++;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
++;; all of memory. This blocks insns from being moved across this point.
++
++(define_insn "blockage"
++ [(unspec_volatile [(const_int 0)] 0)]
++ ""
++ "")
++
++;; V.4 specific code to initialize the PIC register
++
++(define_insn "init_v4_pic"
++ [(set (match_operand:SI 0 "register_operand" "=l")
++ (unspec [(const_int 0)] 7))]
++ "DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS"
++ "bl _GLOBAL_OFFSET_TABLE_@local-4"
++ [(set_attr "type" "branch")
++ (set_attr "length" "4")])
++
++
++;; Compare insns are next. Note that the RS/6000 has two types of compares,
++;; signed & unsigned, and one type of branch.
++;;
++;; Start with the DEFINE_EXPANDs to generate the rtl for compares, scc
++;; insns, and branches. We store the operands of compares until we see
++;; how it is used.
++(define_expand "cmpsi"
++ [(set (cc0)
++ (compare (match_operand:SI 0 "gpc_reg_operand" "")
++ (match_operand:SI 1 "reg_or_short_operand" "")))]
++ ""
++ "
++{
++ /* Take care of the possibility that operands[1] might be negative but
++ this might be a logical operation. That insn doesn't exist. */
++ if (GET_CODE (operands[1]) == CONST_INT
++ && INTVAL (operands[1]) < 0)
++ operands[1] = force_reg (SImode, operands[1]);
++
++ rs6000_compare_op0 = operands[0];
++ rs6000_compare_op1 = operands[1];
++ rs6000_compare_fp_p = 0;
++ DONE;
++}")
++
++(define_expand "cmpdi"
++ [(set (cc0)
++ (compare (match_operand:DI 0 "gpc_reg_operand" "")
++ (match_operand:DI 1 "reg_or_short_operand" "")))]
++ "TARGET_POWERPC64"
++ "
++{
++ /* Take care of the possibility that operands[1] might be negative but
++ this might be a logical operation. That insn doesn't exist. */
++ if (GET_CODE (operands[1]) == CONST_INT
++ && INTVAL (operands[1]) < 0)
++ operands[1] = force_reg (DImode, operands[1]);
++
++ rs6000_compare_op0 = operands[0];
++ rs6000_compare_op1 = operands[1];
++ rs6000_compare_fp_p = 0;
++ DONE;
++}")
++
++(define_expand "cmpsf"
++ [(set (cc0) (compare (match_operand:SF 0 "gpc_reg_operand" "")
++ (match_operand:SF 1 "gpc_reg_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "
++{
++ rs6000_compare_op0 = operands[0];
++ rs6000_compare_op1 = operands[1];
++ rs6000_compare_fp_p = 1;
++ DONE;
++}")
++
++(define_expand "cmpdf"
++ [(set (cc0) (compare (match_operand:DF 0 "gpc_reg_operand" "")
++ (match_operand:DF 1 "gpc_reg_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "
++{
++ rs6000_compare_op0 = operands[0];
++ rs6000_compare_op1 = operands[1];
++ rs6000_compare_fp_p = 1;
++ DONE;
++}")
++
++(define_expand "beq"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (eq (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "bne"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (ne (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "blt"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (lt (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "bgt"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (gt (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "ble"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (le (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "bge"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (ge (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "bgtu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (gtu (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++(define_expand "bltu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (ltu (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++(define_expand "bgeu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (geu (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++(define_expand "bleu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (pc)
++ (if_then_else (leu (match_dup 2)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++;; For SNE, we would prefer that the xor/abs sequence be used for integers.
++;; For SEQ, likewise, except that comparisons with zero should be done
++;; with an scc insns. However, due to the order that combine see the
++;; resulting insns, we must, in fact, allow SEQ for integers. Fail in
++;; the cases we don't want to handle.
++(define_expand "seq"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (eq:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "sne"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ne:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ if (! rs6000_compare_fp_p)
++ FAIL;
++
++ operands[1] = gen_rtx_COMPARE (CCFPmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCFPmode);
++}")
++
++;; A > 0 is best done using the portable sequence, so fail in that case.
++(define_expand "sgt"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (gt:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++
++ if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
++ FAIL;
++
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++;; A < 0 is best done in the portable way for A an integer.
++(define_expand "slt"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (lt:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++
++ if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
++ FAIL;
++
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "sge"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ge:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++;; A <= 0 is best done the portable way for A an integer.
++(define_expand "sle"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (le:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
++
++ if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
++ FAIL;
++
++ operands[1] = gen_rtx_COMPARE (mode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (mode);
++}")
++
++(define_expand "sgtu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (gtu:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++(define_expand "sltu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (ltu:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++(define_expand "sgeu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (geu:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++(define_expand "sleu"
++ [(set (match_dup 2) (match_dup 1))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (leu:SI (match_dup 2) (const_int 0)))]
++ ""
++ "
++{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
++ rs6000_compare_op0, rs6000_compare_op1);
++ operands[2] = gen_reg_rtx (CCUNSmode);
++}")
++
++;; Here are the actual compare insns.
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=y")
++ (compare:CC (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))]
++ ""
++ "{cmp%I2|cmpw%I2} %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=y")
++ (compare:CC (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_short_operand" "rI")))]
++ "TARGET_POWERPC64"
++ "cmpd%I2 %0,%1,%2"
++ [(set_attr "type" "compare")])
++
++;; If we are comparing a register for equality with a large constant,
++;; we can do this with an XOR followed by a compare. But we need a scratch
++;; register for the result of the XOR.
++
++(define_split
++ [(set (match_operand:CC 0 "cc_reg_operand" "")
++ (compare:CC (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "non_short_cint_operand" "")))
++ (clobber (match_operand:SI 3 "gpc_reg_operand" ""))]
++ "find_single_use (operands[0], insn, 0)
++ && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
++ || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
++ [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
++ (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
++ "
++{
++ /* Get the constant we are comparing against, C, and see what it looks like
++ sign-extended to 16 bits. Then see what constant could be XOR'ed
++ with C to get the sign-extended value. */
++
++ int c = INTVAL (operands[2]);
++ int sextc = (c << 16) >> 16;
++ int xorv = c ^ sextc;
++
++ operands[4] = GEN_INT (xorv);
++ operands[5] = GEN_INT (sextc);
++}")
++
++(define_insn ""
++ [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
++ (compare:CCUNS (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_u_short_operand" "rK")))]
++ ""
++ "{cmpl%I2|cmplw%I2} %0,%1,%W2"
++ [(set_attr "type" "compare")])
++
++(define_insn ""
++ [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
++ (compare:CCUNS (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_u_short_operand" "rK")))]
++ ""
++ "cmpld%I2 %0,%1,%W2"
++ [(set_attr "type" "compare")])
++
++;; The following two insns don't exist as single insns, but if we provide
++;; them, we can swap an add and compare, which will enable us to overlap more
++;; of the required delay between a compare and branch. We generate code for
++;; them by splitting.
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=y")
++ (compare:CC (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "short_cint_operand" "i")))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "i")))]
++ ""
++ "#"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CCUNS 3 "cc_reg_operand" "=y")
++ (compare:CCUNS (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "u_short_cint_operand" "i")))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "i")))]
++ ""
++ "#"
++ [(set_attr "length" "8")])
++
++(define_split
++ [(set (match_operand:CC 3 "cc_reg_operand" "")
++ (compare:CC (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "short_cint_operand" "")))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "")))]
++ ""
++ [(set (match_dup 3) (compare:CC (match_dup 1) (match_dup 2)))
++ (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 4)))])
++
++(define_split
++ [(set (match_operand:CCUNS 3 "cc_reg_operand" "")
++ (compare:CCUNS (match_operand:SI 1 "gpc_reg_operand" "")
++ (match_operand:SI 2 "u_short_cint_operand" "")))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "")))]
++ ""
++ [(set (match_dup 3) (compare:CCUNS (match_dup 1) (match_dup 2)))
++ (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 4)))])
++
++(define_insn ""
++ [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
++ (compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "f")
++ (match_operand:SF 2 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fcmpu %0,%1,%2"
++ [(set_attr "type" "fpcompare")])
++
++(define_insn ""
++ [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
++ (compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "f")
++ (match_operand:DF 2 "gpc_reg_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fcmpu %0,%1,%2"
++ [(set_attr "type" "fpcompare")])
++
++;; Now we have the scc insns. We can do some combinations because of the
++;; way the machine works.
++;;
++;; Note that this is probably faster if we can put an insn between the
++;; mfcr and rlinm, but this is tricky. Let's leave it for now. In most
++;; cases the insns below which don't use an intermediate CR field will
++;; be used instead.
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (match_operator:SI 1 "scc_comparison_operator"
++ [(match_operand 2 "cc_reg_operand" "y")
++ (const_int 0)]))]
++ ""
++ "%D1mfcr %0\;{rlinm|rlwinm} %0,%0,%J1,1"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC (match_operator:SI 1 "scc_comparison_operator"
++ [(match_operand 2 "cc_reg_operand" "y")
++ (const_int 0)])
++ (const_int 0)))
++ (set (match_operand:SI 3 "gpc_reg_operand" "=r")
++ (match_op_dup 1 [(match_dup 2) (const_int 0)]))]
++ "! TARGET_POWERPC64"
++ "%D1mfcr %3\;{rlinm.|rlwinm.} %3,%3,%J1,1"
++ [(set_attr "type" "delayed_compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ashift:SI (match_operator:SI 1 "scc_comparison_operator"
++ [(match_operand 2 "cc_reg_operand" "y")
++ (const_int 0)])
++ (match_operand:SI 3 "const_int_operand" "n")))]
++ ""
++ "*
++{
++ int is_bit = ccr_bit (operands[1], 1);
++ int put_bit = 31 - (INTVAL (operands[3]) & 31);
++ int count;
++
++ if (is_bit >= put_bit)
++ count = is_bit - put_bit;
++ else
++ count = 32 - (put_bit - is_bit);
++
++ operands[4] = GEN_INT (count);
++ operands[5] = GEN_INT (put_bit);
++
++ return \"%D1mfcr %0\;{rlinm|rlwinm} %0,%0,%4,%5,%5\";
++}"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (ashift:SI (match_operator:SI 1 "scc_comparison_operator"
++ [(match_operand 2 "cc_reg_operand" "y")
++ (const_int 0)])
++ (match_operand:SI 3 "const_int_operand" "n"))
++ (const_int 0)))
++ (set (match_operand:SI 4 "gpc_reg_operand" "=r")
++ (ashift:SI (match_op_dup 1 [(match_dup 2) (const_int 0)])
++ (match_dup 3)))]
++ ""
++ "*
++{
++ int is_bit = ccr_bit (operands[1], 1);
++ int put_bit = 31 - (INTVAL (operands[3]) & 31);
++ int count;
++
++ if (is_bit >= put_bit)
++ count = is_bit - put_bit;
++ else
++ count = 32 - (put_bit - is_bit);
++
++ operands[5] = GEN_INT (count);
++ operands[6] = GEN_INT (put_bit);
++
++ return \"%D1mfcr %4\;{rlinm.|rlwinm.} %4,%4,%5,%6,%6\";
++}"
++ [(set_attr "type" "delayed_compare")
++ (set_attr "length" "12")])
++
++;; If we are comparing the result of two comparisons, this can be done
++;; using creqv or crxor.
++
++(define_insn ""
++ [(set (match_operand:CCEQ 0 "cc_reg_operand" "=y")
++ (compare:CCEQ (match_operator 1 "scc_comparison_operator"
++ [(match_operand 2 "cc_reg_operand" "y")
++ (const_int 0)])
++ (match_operator 3 "scc_comparison_operator"
++ [(match_operand 4 "cc_reg_operand" "y")
++ (const_int 0)])))]
++ "REGNO (operands[2]) != REGNO (operands[4])"
++ "*
++{
++ enum rtx_code code1, code2;
++
++ code1 = GET_CODE (operands[1]);
++ code2 = GET_CODE (operands[3]);
++
++ if ((code1 == EQ || code1 == LT || code1 == GT
++ || code1 == LTU || code1 == GTU
++ || (code1 != NE && GET_MODE (operands[2]) == CCFPmode))
++ !=
++ (code2 == EQ || code2 == LT || code2 == GT
++ || code2 == LTU || code2 == GTU
++ || (code2 != NE && GET_MODE (operands[4]) == CCFPmode)))
++ return \"%C1%C3crxor %E0,%j1,%j3\";
++ else
++ return \"%C1%C3creqv %E0,%j1,%j3\";
++}"
++ [(set_attr "length" "12")])
++
++;; There is a 3 cycle delay between consecutive mfcr instructions
++;; so it is useful to combine 2 scc instructions to use only one mfcr.
++
++(define_peephole
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (match_operator:SI 1 "scc_comparison_operator"
++ [(match_operand 2 "cc_reg_operand" "y")
++ (const_int 0)]))
++ (set (match_operand:SI 3 "gpc_reg_operand" "=r")
++ (match_operator:SI 4 "scc_comparison_operator"
++ [(match_operand 5 "cc_reg_operand" "y")
++ (const_int 0)]))]
++ "REGNO (operands[2]) != REGNO (operands[5])"
++ "%D1%D4mfcr %3\;{rlinm|rlwinm} %0,%3,%J1,1\;{rlinm|rlwinm} %3,%3,%J4,1"
++ [(set_attr "length" "20")])
++
++;; There are some scc insns that can be done directly, without a compare.
++;; These are faster because they don't involve the communications between
++;; the FXU and branch units. In fact, we will be replacing all of the
++;; integer scc insns here or in the portable methods in emit_store_flag.
++;;
++;; Also support (neg (scc ..)) since that construct is used to replace
++;; branches, (plus (scc ..) ..) since that construct is common and
++;; takes no more insns than scc, and (and (neg (scc ..)) ..) in the
++;; cases where it is no more expensive than (neg (scc ..)).
++
++;; Have reload force a constant into a register for the simple insns that
++;; otherwise won't accept constants. We do this because it is faster than
++;; the cmp/mfcr sequence we would otherwise generate.
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
++ (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I")))
++ (clobber (match_scratch:SI 3 "=r,&r,r,r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ xor %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
++ {sfi|subfic} %3,%1,0\;{ae|adde} %0,%3,%1
++ {xoril|xori} %0,%1,%b2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
++ {xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
++ {sfi|subfic} %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0"
++ [(set_attr "length" "12,8,12,12,12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r")
++ (eq:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:DI 2 "reg_or_cint_operand" "r,O,K,J,I")))
++ (clobber (match_scratch:DI 3 "=r,&r,r,r,r"))]
++ "TARGET_POWERPC64"
++ "@
++ xor %0,%1,%2\;subfic %3,%0,0\;adde %0,%3,%0
++ subfic %3,%1,0\;adde %0,%3,%1
++ xori %0,%1,%b2\;subfic %3,%0,0\;adde %0,%3,%0
++ xoris %0,%1,%u2\;subfic %3,%0,0\;adde %0,%3,%0
++ subfic %0,%1,%2\;subfic %3,%0,0\;adde %0,%3,%0"
++ [(set_attr "length" "12,8,12,12,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,x,x,x")
++ (compare:CC
++ (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
++ (eq:SI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:SI 3 "=r,&r,r,r,r"))]
++ "! TARGET_POWERPC64"
++ "@
++ xor %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0
++ {sfi|subfic} %3,%1,0\;{ae.|adde.} %0,%3,%1
++ {xoril|xori} %0,%1,%b2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0
++ {xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0
++ {sfi|subfic} %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12,8,12,12,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,x,x,x")
++ (compare:CC
++ (eq:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:DI 2 "reg_or_cint_operand" "r,O,K,J,I"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r")
++ (eq:DI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:DI 3 "=r,&r,r,r,r"))]
++ "TARGET_POWERPC64"
++ "@
++ xor %0,%1,%2\;subfic %3,%0,0\;adde. %0,%3,%0
++ subfic %3,%1,0\;adde. %0,%3,%1
++ xori %0,%1,%b2\;subfic %3,%0,0\;adde. %0,%3,%0
++ xoris %0,%1,%u2\;subfic %3,%0,0\;adde. %0,%3,%0
++ subfic %0,%1,%2\;subfic %3,%0,0\;adde. %0,%3,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12,8,12,12,12")])
++
++;; We have insns of the form shown by the first define_insn below. If
++;; there is something inside the comparison operation, we must split it.
++(define_split
++ [(set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_operator 1 "comparison_operator"
++ [(match_operand:SI 2 "" "")
++ (match_operand:SI 3
++ "reg_or_cint_operand" "")])
++ (match_operand:SI 4 "gpc_reg_operand" "")))
++ (clobber (match_operand:SI 5 "register_operand" ""))]
++ "! gpc_reg_operand (operands[2], SImode)"
++ [(set (match_dup 5) (match_dup 2))
++ (set (match_dup 2) (plus:SI (match_op_dup 1 [(match_dup 2) (match_dup 3)])
++ (match_dup 4)))])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
++ (plus:SI (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r,r,r,r")))
++ (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ xor %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
++ {sfi|subfic} %4,%1,0\;{aze|addze} %0,%3
++ {xoril|xori} %4,%1,%b2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
++ {xoriu|xoris} %4,%1,%u2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
++ {sfi|subfic} %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3"
++ [(set_attr "length" "12,8,12,12,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x,x")
++ (compare:CC
++ (plus:SI
++ (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r,r,r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ xor %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
++ {sfi|subfic} %4,%1,0\;{aze.|addze.} %4,%3
++ {xoril|xori} %4,%1,%b2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
++ {xoriu|xoris} %4,%1,%u2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
++ {sfi|subfic} %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12,8,12,12,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,x,x,x")
++ (compare:CC
++ (plus:SI
++ (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r,r,r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
++ (plus:SI (eq:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ xor %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
++ {sfi|subfic} %4,%1,0\;{aze.|addze.} %0,%3
++ {xoril|xori} %4,%1,%b2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
++ {xoriu|xoris} %4,%1,%u2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
++ {sfi|subfic} %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12,8,12,12,12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
++ (neg:SI (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
++ (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))))]
++ "! TARGET_POWERPC64"
++ "@
++ xor %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
++ {ai|addic} %0,%1,-1\;{sfe|subfe} %0,%0,%0
++ {xoril|xori} %0,%1,%b2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
++ {xoriu|xoris} %0,%1,%u2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
++ {sfi|subfic} %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0"
++ [(set_attr "length" "12,8,12,12,12")])
++
++;; Simplify (ne X (const_int 0)) on the PowerPC. No need to on the Power,
++;; since it nabs/sr is just as fast.
++(define_insn "*ne0"
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
++ (lshiftrt:SI (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
++ (const_int 31)))
++ (clobber (match_scratch:SI 2 "=&r"))]
++ "! TARGET_POWER && ! TARGET_POWERPC64"
++ "{ai|addic} %2,%1,-1\;{sfe|subfe} %0,%2,%1"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (lshiftrt:DI (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
++ (const_int 63)))
++ (clobber (match_scratch:DI 2 "=&r"))]
++ "TARGET_POWERPC64"
++ "addic %2,%1,-1\;subfe %0,%2,%1"
++ [(set_attr "length" "8")])
++
++;; This is what (plus (ne X (const_int 0)) Y) looks like.
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (lshiftrt:SI
++ (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
++ (const_int 31))
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{ai|addic} %3,%1,-1\;{aze|addze} %0,%2"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (plus:DI (lshiftrt:DI
++ (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
++ (const_int 63))
++ (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "addic %3,%1,-1\;addze %0,%2"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (lshiftrt:SI
++ (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
++ (const_int 31))
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{ai|addic} %3,%1,-1\;{aze.|addze.} %3,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:DI (lshiftrt:DI
++ (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
++ (const_int 63))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "addic %3,%1,-1\;addze. %3,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (lshiftrt:SI
++ (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
++ (const_int 31))
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (lshiftrt:SI (neg:SI (abs:SI (match_dup 1))) (const_int 31))
++ (match_dup 2)))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{ai|addic} %3,%1,-1\;{aze.|addze.} %0,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:DI (lshiftrt:DI
++ (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
++ (const_int 63))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (plus:DI (lshiftrt:DI (neg:DI (abs:DI (match_dup 1))) (const_int 63))
++ (match_dup 2)))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "addic %3,%1,-1\;addze. %0,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,O")))
++ (clobber (match_scratch:SI 3 "=r,X"))]
++ "TARGET_POWER"
++ "@
++ doz %3,%2,%1\;{sfi|subfic} %0,%3,0\;{ae|adde} %0,%0,%3
++ {ai|addic} %0,%1,-1\;{aze|addze} %0,%0\;{sri|srwi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,O"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (le:SI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:SI 3 "=r,X"))]
++ "TARGET_POWER"
++ "@
++ doz %3,%2,%1\;{sfi|subfic} %0,%3,0\;{ae.|adde.} %0,%0,%3
++ {ai|addic} %0,%1,-1\;{aze|addze} %0,%0\;{sri.|srwi.} %0,%0,31"
++ [(set_attr "type" "compare,delayed_compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,O"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r")))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "TARGET_POWER"
++ "@
++ doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
++ {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze|addze} %0,%3"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,O"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "TARGET_POWER"
++ "@
++ doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
++ {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze.|addze.} %4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,O"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "TARGET_POWER"
++ "@
++ doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
++ {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze.|addze.} %0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (neg:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,O"))))]
++ "TARGET_POWER"
++ "@
++ doz %0,%2,%1\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
++ {ai|addic} %0,%1,-1\;{aze|addze} %0,%0\;{srai|srawi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %0,%1,%2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (leu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_short_operand" "rI")))]
++ "TARGET_POWERPC64"
++ "subf%I2c %0,%1,%2\;li %0,0\;adde %0,%0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (leu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (leu:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "subf%I2c %0,%1,%2\;li %0,0\;adde. %0,%0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (leu:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %0,%1,%2\;{cal %0,0(0)|li %0,0}\;{ae.|adde.} %0,%0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (leu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (leu:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "subf%I2c %0,%1,%2\;li %0,0\;adde. %0,%0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %4,%1,%2\;{aze|addze} %0,%3"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %4,%1,%2\;{aze.|addze.} %4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %4,%1,%2\;{aze.|addze.} %0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (neg:SI
++ (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))
++ (match_operand:SI 3 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (neg:SI
++ (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc. %4,%3,%4"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (neg:SI
++ (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))]
++ "TARGET_POWER"
++ "doz%I2 %0,%1,%2\;nabs %0,%0\;{sri|srwi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (lt:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWER"
++ "doz%I2 %0,%1,%2\;nabs %0,%0\;{sri.|srwi.} %0,%0,31"
++ [(set_attr "type" "delayed_compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze|addze} %0,%3"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze.|addze.} %4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze.|addze.} %0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
++ "TARGET_POWER"
++ "doz%I2 %0,%1,%2\;nabs %0,%0\;{srai|srawi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;neg %0,%0
++ {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;neg %0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (ltu:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;neg. %0,%0
++ {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;neg. %0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (match_operand:SI 3 "reg_or_short_operand" "rI,rI")))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;{sf%I3|subf%I3c} %0,%4,%3
++ {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;{sf%I3|subf%I3c} %0,%4,%3"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %4,%4,%3
++ {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %4,%4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3
++ {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (neg:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0
++ {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "TARGET_POWER"
++ "doz%I2 %3,%1,%2\;{sfi|subfic} %0,%3,0\;{ae|adde} %0,%0,%3"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (ge:SI (match_dup 1) (match_dup 2)))
++ (clobber (match_scratch:SI 3 "=r"))]
++ "TARGET_POWER"
++ "doz%I2 %3,%1,%2\;{sfi|subfic} %0,%3,0\;{ae.|adde.} %0,%0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
++ "TARGET_POWER"
++ "doz%I2 %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0"
++ [(set_attr "length" "12")])
++
++;; This is (and (neg (ge X (const_int 0))) Y).
++;; srawi sign-extends, so these patterrns are 64-bit safe.
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (neg:SI
++ (lshiftrt:SI
++ (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 31)))
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ ""
++ "{srai|srawi} %3,%1,31\;andc %0,%2,%3"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (neg:DI
++ (lshiftrt:DI
++ (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (const_int 63)))
++ (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "sradi %3,%1,63\;andc %0,%2,%3"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (neg:SI
++ (lshiftrt:SI
++ (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 31)))
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ ""
++ "{srai|srawi} %3,%1,31\;andc. %3,%2,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:DI (neg:DI
++ (lshiftrt:DI
++ (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (const_int 63)))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "sradi %3,%1,63\;andc. %3,%2,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:SI (neg:SI
++ (lshiftrt:SI
++ (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
++ (const_int 31)))
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (and:SI (neg:SI (lshiftrt:SI (not:SI (match_dup 1))
++ (const_int 31)))
++ (match_dup 2)))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ ""
++ "{srai|srawi} %3,%1,31\;andc. %0,%2,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (and:DI (neg:DI
++ (lshiftrt:DI
++ (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
++ (const_int 63)))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (and:DI (neg:DI (lshiftrt:SI (not:DI (match_dup 1))
++ (const_int 63)))
++ (match_dup 2)))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "sradi %3,%1,63\;andc. %0,%2,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %0,%2,%1\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0
++ {ai|addic} %0,%1,%n2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (geu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
++ (match_operand:DI 2 "reg_or_neg_short_operand" "r,P")))]
++ "TARGET_POWERPC64"
++ "@
++ subfc %0,%2,%1\;li %0,0\;adde %0,%0,%0
++ addic %0,%1,%n2\;li %0,0\;adde %0,%0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (geu:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %0,%2,%1\;{cal %0,0(0)|li %0,0}\;{ae.|adde.} %0,%0,%0
++ {ai|addic} %0,%1,%n2\;{cal %0,0(0)|li %0,0}\;{ae.|adde.} %0,%0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (geu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
++ (match_operand:DI 2 "reg_or_neg_short_operand" "r,P"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (geu:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "@
++ subfc %0,%2,%1\;li %0,0\;adde. %0,%0,%0
++ addic %0,%1,%n2\;li %0,0\;adde. %0,%0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r")))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{aze|addze} %0,%3
++ {ai|addic} %4,%1,%n2\;{aze|addze} %0,%3"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{aze.|addze.} %4,%3
++ {ai|addic} %4,%1,%n2\;{aze.|addze.} %4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{aze.|addze.} %0,%3
++ {ai|addic} %4,%1,%n2\;{aze.|addze.} %0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (neg:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "r,I"))))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0
++ {sfi|subfic} %0,%1,-1\;{a%I2|add%I2c} %0,%0,%2\;{sfe|subfe} %0,%0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (and:SI (neg:SI
++ (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r")))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4
++ {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (and:SI (neg:SI
++ (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc. %4,%3,%4
++ {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc. %4,%3,%4"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (and:SI (neg:SI
++ (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4
++ {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (const_int 0)))]
++ "! TARGET_POWERPC64"
++ "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{sri|srwi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (const_int 0)))]
++ "TARGET_POWERPC64"
++ "subfic %0,%1,0\;addme %0,%0\;srdi %0,%0,63"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC
++ (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (gt:SI (match_dup 1) (const_int 0)))]
++ "! TARGET_POWERPC64"
++ "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{sri.|srwi.} %0,%0,31"
++ [(set_attr "type" "delayed_compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 2 "cc_reg_operand" "=x")
++ (compare:CC
++ (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (gt:DI (match_dup 1) (const_int 0)))]
++ "TARGET_POWERPC64"
++ "subfic %0,%1,0\;addme %0,%0\;srdi. %0,%0,63"
++ [(set_attr "type" "delayed_compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "r")))]
++ "TARGET_POWER"
++ "doz %0,%2,%1\;nabs %0,%0\;{sri|srwi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (gt:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWER"
++ "doz %0,%2,%1\;nabs %0,%0\;{sri.|srwi.} %0,%0,31"
++ [(set_attr "type" "delayed_compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (match_operand:SI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{a|addc} %3,%1,%1\;{sfe|subfe} %3,%1,%3\;{aze|addze} %0,%2"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (match_operand:DI 2 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "addc %3,%1,%1\;subfe %3,%1,%3\;addze %0,%2"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{a|addc} %3,%1,%1\;{sfe|subfe} %3,%1,%3\;{aze.|addze.} %3,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "addc %3,%1,%1\;subfe %3,%1,%3\;addze. %3,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (match_operand:SI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))
++ (clobber (match_scratch:SI 3 "=&r"))]
++ "! TARGET_POWERPC64"
++ "{a|addc} %3,%1,%1\;{sfe|subfe} %3,%1,%3\;{aze.|addze.} %0,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 4 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (const_int 0))
++ (match_operand:DI 2 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))
++ (clobber (match_scratch:DI 3 "=&r"))]
++ "TARGET_POWERPC64"
++ "addc %3,%1,%1\;subfe %3,%1,%3\;addze. %0,%2"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "r"))
++ (match_operand:SI 3 "gpc_reg_operand" "r")))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze|addze} %0,%3"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "r"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze.|addze.} %4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x")
++ (compare:CC
++ (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "r"))
++ (match_operand:SI 3 "gpc_reg_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "TARGET_POWER"
++ "doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze.|addze.} %0,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (const_int 0))))]
++ "! TARGET_POWERPC64"
++ "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{srai|srawi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (neg:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (const_int 0))))]
++ "TARGET_POWERPC64"
++ "subfic %0,%1,0\;addme %0,%0\;sradi} %0,%0,63"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "r"))))]
++ "TARGET_POWER"
++ "doz %0,%2,%1\;nabs %0,%0\;{srai|srawi} %0,%0,31"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;neg %0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_short_operand" "rI")))]
++ "TARGET_POWERPC64"
++ "subf%I2c %0,%1,%2\;subfe %0,%0,%0\;neg %0,%0"
++ [(set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (gtu:SI (match_dup 1) (match_dup 2)))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;neg. %0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:CC 3 "cc_reg_operand" "=x")
++ (compare:CC
++ (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_short_operand" "rI"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (gtu:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_POWERPC64"
++ "subf%I2c %0,%1,%2\;subfe %0,%0,%0\;neg. %0,%0"
++ [(set_attr "type" "compare")
++ (set_attr "length" "12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "I,rI"))
++ (match_operand:SI 3 "reg_or_short_operand" "r,rI")))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {ai|addic} %4,%1,%k2\;{aze|addze} %0,%3
++ {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;{sf%I3|subf%I3c} %0,%4,%3"
++ [(set_attr "length" "8,12")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
++ (match_operand:DI 2 "reg_or_short_operand" "I,rI"))
++ (match_operand:DI 3 "reg_or_short_operand" "r,rI")))
++ (clobber (match_scratch:DI 4 "=&r,&r"))]
++ "TARGET_POWERPC64"
++ "@
++ addic %4,%1,%k2\;addze %0,%3
++ subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subf%I3c %0,%4,%3"
++ [(set_attr "length" "8,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "I,r"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {ai|addic} %4,%1,%k2\;{aze.|addze.} %4,%3
++ {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %4,%4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
++ (match_operand:DI 2 "reg_or_short_operand" "I,r"))
++ (match_operand:DI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (clobber (match_scratch:DI 4 "=&r,&r"))]
++ "TARGET_POWERPC64"
++ "@
++ addic %4,%1,%k2\;addze. %4,%3
++ subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subfc. %4,%4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
++ (match_operand:SI 2 "reg_or_short_operand" "I,r"))
++ (match_operand:SI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
++ (plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:SI 4 "=&r,&r"))]
++ "! TARGET_POWERPC64"
++ "@
++ {ai|addic} %4,%1,%k2\;{aze.|addze.} %0,%3
++ {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8,12")])
++
++(define_insn ""
++ [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
++ (compare:CC
++ (plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
++ (match_operand:DI 2 "reg_or_short_operand" "I,r"))
++ (match_operand:DI 3 "gpc_reg_operand" "r,r"))
++ (const_int 0)))
++ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
++ (plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))
++ (clobber (match_scratch:DI 4 "=&r,&r"))]
++ "TARGET_POWERPC64"
++ "@
++ addic %4,%1,%k2\;addze. %0,%3
++ subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subfc. %0,%4,%3"
++ [(set_attr "type" "compare")
++ (set_attr "length" "8,12")])
++
++(define_insn ""
++ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
++ (neg:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
++ "! TARGET_POWERPC64"
++ "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0"
++ [(set_attr "length" "8")])
++
++(define_insn ""
++ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
++ (neg:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "reg_or_short_operand" "rI"))))]
++ "TARGET_POWERPC64"
++ "subf%I2c %0,%1,%2\;subfe %0,%0,%0"
++ [(set_attr "length" "8")])
++
++;; Define both directions of branch and return. If we need a reload
++;; register, we'd rather use CR0 since it is much easier to copy a
++;; register CC value to there.
++
++(define_insn ""
++ [(set (pc)
++ (if_then_else (match_operator 1 "branch_comparison_operator"
++ [(match_operand 2
++ "cc_reg_operand" "x,?y")
++ (const_int 0)])
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "*
++{
++ if (get_attr_length (insn) == 8)
++ return \"%C1bc %t1,%j1,%l0\";
++ else
++ return \"%C1bc %T1,%j1,%$+8\;b %l0\";
++
++}"
++ [(set_attr "type" "branch")])
++
++(define_insn ""
++ [(set (pc)
++ (if_then_else (match_operator 0 "branch_comparison_operator"
++ [(match_operand 1
++ "cc_reg_operand" "x,?y")
++ (const_int 0)])
++ (return)
++ (pc)))]
++ "direct_return ()"
++ "{%C0bcr|%C0bclr} %t0,%j0"
++ [(set_attr "type" "branch")
++ (set_attr "length" "8")])
++
++(define_insn ""
++ [(set (pc)
++ (if_then_else (match_operator 1 "branch_comparison_operator"
++ [(match_operand 2
++ "cc_reg_operand" "x,?y")
++ (const_int 0)])
++ (pc)
++ (label_ref (match_operand 0 "" ""))))]
++ ""
++ "*
++{
++ if (get_attr_length (insn) == 8)
++ return \"%C1bc %T1,%j1,%l0\";
++ else
++ return \"%C1bc %t1,%j1,%$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")])
++
++(define_insn ""
++ [(set (pc)
++ (if_then_else (match_operator 0 "branch_comparison_operator"
++ [(match_operand 1
++ "cc_reg_operand" "x,?y")
++ (const_int 0)])
++ (pc)
++ (return)))]
++ "direct_return ()"
++ "{%C0bcr|%C0bclr} %T0,%j0"
++ [(set_attr "type" "branch")
++ (set_attr "length" "8")])
++
++;; Unconditional branch and return.
++
++(define_insn "jump"
++ [(set (pc)
++ (label_ref (match_operand 0 "" "")))]
++ ""
++ "b %l0"
++ [(set_attr "type" "branch")])
++
++(define_insn "return"
++ [(return)]
++ "direct_return ()"
++ "{br|blr}"
++ [(set_attr "type" "jmpreg")])
++
++(define_expand "indirect_jump"
++ [(set (pc) (match_operand 0 "register_operand" ""))]
++ ""
++ "
++{
++ if (TARGET_32BIT)
++ emit_jump_insn (gen_indirect_jumpsi (operands[0]));
++ else
++ emit_jump_insn (gen_indirect_jumpdi (operands[0]));
++ DONE;
++}")
++
++(define_insn "indirect_jumpsi"
++ [(set (pc) (match_operand:SI 0 "register_operand" "c,l"))]
++ "TARGET_32BIT"
++ "@
++ bctr
++ {br|blr}"
++ [(set_attr "type" "jmpreg")])
++
++(define_insn "indirect_jumpdi"
++ [(set (pc) (match_operand:DI 0 "register_operand" "c,l"))]
++ "TARGET_64BIT"
++ "@
++ bctr
++ {br|blr}"
++ [(set_attr "type" "jmpreg")])
++
++;; Table jump for switch statements:
++(define_expand "tablejump"
++ [(use (match_operand 0 "" ""))
++ (use (label_ref (match_operand 1 "" "")))]
++ ""
++ "
++{
++ if (TARGET_32BIT)
++ emit_jump_insn (gen_tablejumpsi (operands[0], operands[1]));
++ else
++ emit_jump_insn (gen_tablejumpdi (operands[0], operands[1]));
++ DONE;
++}")
++
++(define_expand "tablejumpsi"
++ [(set (match_dup 3)
++ (plus:SI (match_operand:SI 0 "" "")
++ (match_dup 2)))
++ (parallel [(set (pc) (match_dup 3))
++ (use (label_ref (match_operand 1 "" "")))])]
++ "TARGET_32BIT"
++ "
++{ operands[0] = force_reg (SImode, operands[0]);
++ operands[2] = force_reg (SImode, gen_rtx_LABEL_REF (VOIDmode, operands[1]));
++ operands[3] = gen_reg_rtx (SImode);
++}")
++
++(define_expand "tablejumpdi"
++ [(set (match_dup 3)
++ (plus:DI (match_operand:DI 0 "" "")
++ (match_dup 2)))
++ (parallel [(set (pc) (match_dup 3))
++ (use (label_ref (match_operand 1 "" "")))])]
++ "TARGET_64BIT"
++ "
++{ operands[0] = force_reg (DImode, operands[0]);
++ operands[2] = force_reg (DImode, gen_rtx_LABEL_REF (VOIDmode, operands[1]));
++ operands[3] = gen_reg_rtx (DImode);
++}")
++
++(define_insn ""
++ [(set (pc)
++ (match_operand:SI 0 "register_operand" "c,l"))
++ (use (label_ref (match_operand 1 "" "")))]
++ "TARGET_32BIT"
++ "@
++ bctr
++ {br|blr}"
++ [(set_attr "type" "jmpreg")])
++
++(define_insn ""
++ [(set (pc)
++ (match_operand:DI 0 "register_operand" "c,l"))
++ (use (label_ref (match_operand 1 "" "")))]
++ "TARGET_64BIT"
++ "@
++ bctr
++ {br|blr}"
++ [(set_attr "type" "jmpreg")])
++
++(define_insn "nop"
++ [(const_int 0)]
++ ""
++ "{cror 0,0,0|nop}")
++
++;; Define the subtract-one-and-jump insns, starting with the template
++;; so loop.c knows what to generate.
++
++(define_expand "decrement_and_branch_on_count"
++ [(use (match_operand 0 "register_operand" ""))
++ (use (label_ref (match_operand 1 "" "")))]
++ ""
++ "
++{
++ if (TARGET_POWERPC64)
++ emit_jump_insn (gen_ctrdi (operands[0], operands[1]));
++ else
++ emit_jump_insn (gen_ctrsi (operands[0], operands[1]));
++ DONE;
++}")
++
++(define_expand "ctrsi"
++ [(parallel [(set (pc) (if_then_else (ne (match_operand:SI 0 "register_operand" "")
++ (const_int 1))
++ (label_ref (match_operand 1 "" ""))
++ (pc)))
++ (set (match_dup 0)
++ (plus:SI (match_dup 0)
++ (const_int -1)))
++ (clobber (match_scratch:CC 2 ""))
++ (clobber (match_scratch:SI 3 ""))])]
++ "! TARGET_POWERPC64"
++ "")
++
++(define_expand "ctrdi"
++ [(parallel [(set (pc) (if_then_else (ne (match_operand:DI 0 "register_operand" "")
++ (const_int 1))
++ (label_ref (match_operand 1 "" ""))
++ (pc)))
++ (set (match_dup 0)
++ (plus:DI (match_dup 0)
++ (const_int -1)))
++ (clobber (match_scratch:CC 2 ""))
++ (clobber (match_scratch:DI 3 ""))])]
++ "TARGET_POWERPC64"
++ "")
++
++;; We need to be able to do this for any operand, including MEM, or we
++;; will cause reload to blow up since we don't allow output reloads on
++;; JUMP_INSNs.
++;; For the length attribute to be calculated correctly, the
++;; label MUST be operand 0.
++
++(define_insn "*ctrsi_internal1"
++ [(set (pc)
++ (if_then_else (ne (match_operand:SI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))
++ (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:SI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:SI 4 "=X,X,r"))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"{bdn|bdnz} %l0\";
++ else
++ return \"bdz %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrsi_internal2"
++ [(set (pc)
++ (if_then_else (ne (match_operand:SI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (pc)
++ (label_ref (match_operand 0 "" ""))))
++ (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:SI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:SI 4 "=X,X,r"))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"bdz %l0\";
++ else
++ return \"{bdn|bdnz} %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrdi_internal1"
++ [(set (pc)
++ (if_then_else (ne (match_operand:DI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))
++ (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:DI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:DI 4 "=X,X,r"))]
++ "TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"{bdn|bdnz} %l0\";
++ else
++ return \"bdz %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrdi_internal2"
++ [(set (pc)
++ (if_then_else (ne (match_operand:DI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (pc)
++ (label_ref (match_operand 0 "" ""))))
++ (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:DI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:DI 4 "=X,X,r"))]
++ "TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"bdz %l0\";
++ else
++ return \"{bdn|bdnz} %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++;; Similar, but we can use GE since we have a REG_NONNEG.
++
++(define_insn "*ctrsi_internal3"
++ [(set (pc)
++ (if_then_else (ge (match_operand:SI 1 "register_operand" "c,*r,*r")
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))
++ (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:SI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&X"))
++ (clobber (match_scratch:SI 4 "=X,X,r"))]
++ "! TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"{bdn|bdnz} %l0\";
++ else
++ return \"bdz %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrsi_internal4"
++ [(set (pc)
++ (if_then_else (ge (match_operand:SI 1 "register_operand" "c,*r,*r")
++ (const_int 0))
++ (pc)
++ (label_ref (match_operand 0 "" ""))))
++ (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:SI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&X"))
++ (clobber (match_scratch:SI 4 "=X,X,r"))]
++ "! TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"bdz %l0\";
++ else
++ return \"{bdn|bdnz} %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrdi_internal3"
++ [(set (pc)
++ (if_then_else (ge (match_operand:DI 1 "register_operand" "c,*r,*r")
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))
++ (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:DI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&X"))
++ (clobber (match_scratch:DI 4 "=X,X,r"))]
++ "TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"{bdn|bdnz} %l0\";
++ else
++ return \"bdz %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrdi_internal4"
++ [(set (pc)
++ (if_then_else (ge (match_operand:DI 1 "register_operand" "c,*r,*r")
++ (const_int 0))
++ (pc)
++ (label_ref (match_operand 0 "" ""))))
++ (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:DI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&X"))
++ (clobber (match_scratch:DI 4 "=X,X,r"))]
++ "TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"bdz %l0\";
++ else
++ return \"{bdn|bdnz} %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++;; Similar but use EQ
++
++(define_insn "*ctrsi_internal5"
++ [(set (pc)
++ (if_then_else (eq (match_operand:SI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))
++ (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:SI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:SI 4 "=X,X,r"))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"bdz %l0\";
++ else
++ return \"{bdn|bdnz} %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrsi_internal6"
++ [(set (pc)
++ (if_then_else (eq (match_operand:SI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (pc)
++ (label_ref (match_operand 0 "" ""))))
++ (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:SI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:SI 4 "=X,X,r"))]
++ "! TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"{bdn|bdnz} %l0\";
++ else
++ return \"bdz %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrdi_internal5"
++ [(set (pc)
++ (if_then_else (eq (match_operand:DI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))
++ (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:DI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:DI 4 "=X,X,r"))]
++ "TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"bdz %l0\";
++ else
++ return \"{bdn|bdnz} %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++(define_insn "*ctrdi_internal6"
++ [(set (pc)
++ (if_then_else (eq (match_operand:DI 1 "register_operand" "c,*r,*r")
++ (const_int 1))
++ (pc)
++ (label_ref (match_operand 0 "" ""))))
++ (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
++ (plus:DI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 "=X,&x,&x"))
++ (clobber (match_scratch:DI 4 "=X,X,r"))]
++ "TARGET_POWERPC64"
++ "*
++{
++ if (which_alternative != 0)
++ return \"#\";
++ else if (get_attr_length (insn) == 8)
++ return \"{bdn|bdnz} %l0\";
++ else
++ return \"bdz %$+8\;b %l0\";
++}"
++ [(set_attr "type" "branch")
++ (set_attr "length" "*,12,16")])
++
++;; Now the splitters if we could not allocate the CTR register
++
++(define_split
++ [(set (pc)
++ (if_then_else (match_operator 2 "comparison_operator"
++ [(match_operand:SI 1 "gpc_reg_operand" "")
++ (const_int 1)])
++ (match_operand 5 "" "")
++ (match_operand 6 "" "")))
++ (set (match_operand:SI 0 "gpc_reg_operand" "")
++ (plus:SI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 ""))
++ (clobber (match_scratch:SI 4 ""))]
++ "! TARGET_POWERPC64 && reload_completed"
++ [(parallel [(set (match_dup 3)
++ (compare:CC (plus:SI (match_dup 1)
++ (const_int -1))
++ (const_int 0)))
++ (set (match_dup 0)
++ (plus:SI (match_dup 1)
++ (const_int -1)))])
++ (set (pc) (if_then_else (match_dup 7)
++ (match_dup 5)
++ (match_dup 6)))]
++ "
++{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
++ const0_rtx); }")
++
++(define_split
++ [(set (pc)
++ (if_then_else (match_operator 2 "comparison_operator"
++ [(match_operand:SI 1 "gpc_reg_operand" "")
++ (const_int 1)])
++ (match_operand 5 "" "")
++ (match_operand 6 "" "")))
++ (set (match_operand:SI 0 "general_operand" "")
++ (plus:SI (match_dup 1) (const_int -1)))
++ (clobber (match_scratch:CC 3 ""))
++ (clobber (match_scratch:SI 4 ""))]
++ "! TARGET_POWERPC64 && reload_completed
++ && ! gpc_reg_operand (operands[0], SImode)"
++ [(parallel [(set (match_dup 3)
++ (compare:CC (plus:SI (match_dup 1)
++ (const_int -1))
++ (const_int 0)))
++ (set (match_dup 4)
++ (plus:SI (match_dup 1)
++ (const_int -1)))])
++ (set (match_dup 0)
++ (match_dup 4))
++ (set (pc) (if_then_else (match_dup 7)
++ (match_dup 5)
++ (match_dup 6)))]
++ "
++{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
++ const0_rtx); }")
++(define_split
++ [(set (pc)
++ (if_then_else (match_operator 2 "comparison_operator"
++ [(match_operand:DI 1 "gpc_reg_operand" "")
++ (const_int 1)])
++ (match_operand 5 "" "")
++ (match_operand 6 "" "")))
++ (set (match_operand:DI 0 "gpc_reg_operand" "")
++ (plus:DI (match_dup 1)
++ (const_int -1)))
++ (clobber (match_scratch:CC 3 ""))
++ (clobber (match_scratch:DI 4 ""))]
++ "TARGET_POWERPC64 && reload_completed"
++ [(parallel [(set (match_dup 3)
++ (compare:CC (plus:DI (match_dup 1)
++ (const_int -1))
++ (const_int 0)))
++ (set (match_dup 0)
++ (plus:DI (match_dup 1)
++ (const_int -1)))])
++ (set (pc) (if_then_else (match_dup 7)
++ (match_dup 5)
++ (match_dup 6)))]
++ "
++{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
++ const0_rtx); }")
++
++(define_split
++ [(set (pc)
++ (if_then_else (match_operator 2 "comparison_operator"
++ [(match_operand:DI 1 "gpc_reg_operand" "")
++ (const_int 1)])
++ (match_operand 5 "" "")
++ (match_operand 6 "" "")))
++ (set (match_operand:DI 0 "general_operand" "")
++ (plus:DI (match_dup 1) (const_int -1)))
++ (clobber (match_scratch:CC 3 ""))
++ (clobber (match_scratch:DI 4 ""))]
++ "TARGET_POWERPC64 && reload_completed
++ && ! gpc_reg_operand (operands[0], DImode)"
++ [(parallel [(set (match_dup 3)
++ (compare:CC (plus:DI (match_dup 1)
++ (const_int -1))
++ (const_int 0)))
++ (set (match_dup 4)
++ (plus:DI (match_dup 1)
++ (const_int -1)))])
++ (set (match_dup 0)
++ (match_dup 4))
++ (set (pc) (if_then_else (match_dup 7)
++ (match_dup 5)
++ (match_dup 6)))]
++ "
++{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
++ const0_rtx); }")
++
++(define_insn "trap"
++ [(trap_if (const_int 1) (const_int 0))]
++ ""
++ "{t 31,0,0|trap}")
++
++(define_expand "conditional_trap"
++ [(trap_if (match_operator 0 "trap_comparison_operator"
++ [(match_dup 2) (match_dup 3)])
++ (match_operand 1 "const_int_operand" ""))]
++ ""
++ "if (rs6000_compare_fp_p || operands[1] != const0_rtx) FAIL;
++ operands[2] = rs6000_compare_op0;
++ operands[3] = rs6000_compare_op1;")
++
++(define_insn ""
++ [(trap_if (match_operator 0 "trap_comparison_operator"
++ [(match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "reg_or_short_operand" "rI")])
++ (const_int 0))]
++ ""
++ "t%V0%I2 %1,%2")
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/sysv4.h gcc-2.95.4/gcc/config/rs6000/sysv4.h
+--- gcc-2.95.3/gcc/config/rs6000/sysv4.h 2001-01-25 15:03:37.000000000 +0100
++++ gcc-2.95.4/gcc/config/rs6000/sysv4.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,6 @@
+ /* Target definitions for GNU compiler for PowerPC running System V.4
+- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
++ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software
++ Foundation, Inc.
+ Contributed by Cygnus Support.
+
+ This file is part of GNU CC.
+@@ -184,7 +185,7 @@
+ else \
+ error ("Bad value for -msdata=%s", rs6000_sdata_name); \
+ } \
+- else if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) \
++ else if (!TARGET_VXCOMPAT272 && (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)) \
+ { \
+ rs6000_sdata = SDATA_DATA; \
+ rs6000_sdata_name = "data"; \
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/t-ppcgas-vx gcc-2.95.4/gcc/config/rs6000/t-ppcgas-vx
+--- gcc-2.95.3/gcc/config/rs6000/t-ppcgas-vx 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/config/rs6000/t-ppcgas-vx 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++# PowerPC embedded support with gas.
++# Build libgcc.a with different options.
++
++MULTILIB_OPTIONS = msoft-float
++
++MULTILIB_DIRNAMES = nof
++
++MULTILIB_EXTRA_OPTS = mno-eabi mstrict-align mbig mcall-sysv mlongcall
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = ${MULTILIB_MATCHES_FLOAT}
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/vxppc.h gcc-2.95.4/gcc/config/rs6000/vxppc.h
+--- gcc-2.95.3/gcc/config/rs6000/vxppc.h 1999-05-17 02:30:56.000000000 +0200
++++ gcc-2.95.4/gcc/config/rs6000/vxppc.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Definitions of target machine for GNU compiler. Vxworks PowerPC version.
+- Copyright (C) 1996 Free Software Foundation, Inc.
++ Copyright (C) 1996, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -20,6 +20,8 @@
+
+ /* This file just exists to give specs for the PowerPC running on VxWorks. */
+
++#define SDATA_DEFAULT_SIZE 0
++
+ #include "rs6000/sysv4.h"
+
+ /* ??? This file redefines CPP_SPEC which is wrong. It should instead define
+@@ -29,6 +31,7 @@
+
+ #undef CPP_SPEC
+ #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %(cpp_endian) %(cpp_cpu) \
++%{mrelocatable: -D_RELOCATABLE} \
+ %{mads: %(cpp_os_ads) } \
+ %{myellowknife: %(cpp_os_yellowknife) } \
+ %{mmvme: %(cpp_os_mvme) } \
+@@ -47,13 +50,24 @@
+ #undef CPP_PREDEFINES
+ #define CPP_PREDEFINES "\
+ -D__vxworks -Asystem(vxworks) -Asystem(embedded) \
+--Acpu(powerpc) -Amachine(powerpc)"
++-Acpu(powerpc) -Amachine(powerpc) -D__PPC__ -D__VXVARGS__"
++
++/* This option makes gcc emit code that uses the variant (partial)
++ implementation of eabi that was current at the time of 2.7.2 */
++
++#undef TARGET_VXCOMPAT272
++#define TARGET_VXCOMPAT272 (1) /* Fix double alignment to only four bytes */
+
+ /* VxWorks does all the library stuff itself. */
+
+ #undef LIB_SPEC
+ #define LIB_SPEC ""
+
++/* Brad M. Garcia's patch for making operator new work */
++
++#undef SIZE_TYPE
++#define SIZE_TYPE "unsigned int"
++
+ /* VxWorks uses object files, not loadable images. make linker just
+ combine objects. */
+
+@@ -69,5 +83,40 @@
+ #define ENDFILE_SPEC ""
+
+ /* We use stabs-in-elf for debugging */
++
+ #undef PREFERRED_DEBUGGING_TYPE
+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
++
++/* But, to make this work, we have to output the stabs for the function
++ name *first*... */
++
++#define DBX_FUNCTION_FIRST
++
++/* More backward compatibility patches: we undef these two in
++ order to force the compiler to output our static constructors
++ and destructors in the fashion to which it is accustomed.... */
++
++#undef ASM_OUTPUT_CONSTRUCTOR
++#undef ASM_OUTPUT_DESTRUCTOR
++
++/* And this puts $ signs into the static object c/d-tors that
++ need to be found by WRS munch. It also makes libgcc symbols
++ match WRS symbols */
++
++#undef NO_DOLLAR_IN_LABEL
++
++/* The default definitions of these duplicate an endian define
++ that WRS include in their system header files so remove it */
++
++#undef CPP_ENDIAN_BIG_SPEC
++#define CPP_ENDIAN_BIG_SPEC "-D__BIG_ENDIAN__ -Amachine(bigendian)"
++
++#undef CPP_ENDIAN_LITTLE_SPEC
++#define CPP_ENDIAN_LITTLE_SPEC "-D__LITTLE_ENDIAN__ -Amachine(littleendian)"
++
++/* Work under DOS ? */
++#define CYGWIN_USES_DOS_PATHS
++#define CYGWIN_VXWORKS_PATHS
++
++/* WRS runtime does not need a separate math library. */
++#define MATH_LIBRARY ""
+diff -ruNb gcc-2.95.3/gcc/config/rs6000/xm-cygwin.h gcc-2.95.4/gcc/config/rs6000/xm-cygwin.h
+--- gcc-2.95.3/gcc/config/rs6000/xm-cygwin.h 1998-12-16 22:12:47.000000000 +0100
++++ gcc-2.95.4/gcc/config/rs6000/xm-cygwin.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1 +1 @@
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+diff -ruNb gcc-2.95.3/gcc/config/sparc/sparc.md gcc-2.95.4/gcc/config/sparc/sparc.md
+--- gcc-2.95.3/gcc/config/sparc/sparc.md 2001-01-25 15:03:37.000000000 +0100
++++ gcc-2.95.4/gcc/config/sparc/sparc.md 2017-11-07 22:10:12.000000000 +0100
+@@ -5211,7 +5211,7 @@
+ (define_insn "muldi3_v8plus"
+ [(set (match_operand:DI 0 "register_operand" "=r,h")
+ (mult:DI (match_operand:DI 1 "arith_double_operand" "%r,0")
+- (match_operand:DI 2 "arith_double_operand" "rHI,rHI")))
++ (match_operand:DI 2 "arith_double_operand" "rI,rI")))
+ (clobber (match_scratch:SI 3 "=&h,X"))
+ (clobber (match_scratch:SI 4 "=&h,X"))]
+ "TARGET_V8PLUS"
+@@ -5221,6 +5221,13 @@
+ output_asm_insn (\"srl\\t%L1, 0, %L1\", operands);
+ if (which_alternative == 1)
+ output_asm_insn (\"sllx\\t%H1, 32, %H1\", operands);
++ if (GET_CODE (operands[2]) == CONST_INT)
++ {
++ if (which_alternative == 1)
++ return \"or\\t%L1, %H1, %H1\\n\\tmulx\\t%H1, %2, %L0\;srlx\\t%L0, 32, %H0\";
++ else
++ return \"sllx\\t%H1, 32, %3\\n\\tor\\t%L1, %3, %3\\n\\tmulx\\t%3, %2, %3\\n\\tsrlx\\t%3, 32, %H0\\n\\tmov\\t%3, %L0\";
++ }
+ if (sparc_check_64 (operands[2], insn) <= 0)
+ output_asm_insn (\"srl\\t%L2, 0, %L2\", operands);
+ if (which_alternative == 1)
+diff -ruNb gcc-2.95.3/gcc/config/vax/vms.h gcc-2.95.4/gcc/config/vax/vms.h
+--- gcc-2.95.3/gcc/config/vax/vms.h 1998-12-16 22:14:29.000000000 +0100
++++ gcc-2.95.4/gcc/config/vax/vms.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,6 @@
+ /* Output variables, constants and external declarations, for GNU compiler.
+- Copyright (C) 1988, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
++ Copyright (C) 1988, 1994, 1995, 1996, 1997, 2001 Free Software
++ Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -20,6 +21,9 @@
+
+ #define VMS_TARGET
+
++#define TARGET_EXECUTABLE_SUFFIX ".exe"
++#define TARGET_OBJECT_SUFFIX ".obj"
++
+ /* This enables certain macros in vax.h, which will make an indirect
+ reference to an external symbol an invalid address. This needs to be
+ defined before we include vax.h, since it determines which macros
+diff -ruNb gcc-2.95.3/gcc/config/vax/xm-vms.h gcc-2.95.4/gcc/config/vax/xm-vms.h
+--- gcc-2.95.3/gcc/config/vax/xm-vms.h 1998-12-16 22:14:33.000000000 +0100
++++ gcc-2.95.4/gcc/config/vax/xm-vms.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,6 @@
+ /* Configuration for GNU C-compiler for Vax.
+- Copyright (C) 1987, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
++ Copyright (C) 1987, 1994, 1995, 1996, 1997, 2001 Free Software
++ Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -72,6 +73,9 @@
+ #define F_OK 0
+ #endif
+
++#define HOST_EXECUTABLE_SUFFIX ".exe"
++#define HOST_OBJECT_SUFFIX ".obj"
++
+ #define GCC_INCLUDE_DIR "///not used with VMS///" /* nonsense string for now */
+
+ /* and define a local equivalent (sort of) for unlink */
+diff -ruNb gcc-2.95.3/gcc/config/winnt/xm-winnt.h gcc-2.95.4/gcc/config/winnt/xm-winnt.h
+--- gcc-2.95.3/gcc/config/winnt/xm-winnt.h 1999-04-10 06:27:16.000000000 +0200
++++ gcc-2.95.4/gcc/config/winnt/xm-winnt.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Configuration for GNU compiler for processor running Windows NT 3.x.
+- Copyright (C) 1993, 1995, 1997, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1993, 1995, 1997, 1999, 2001 Free Software Foundation, Inc.
+ Contributed by Douglas B. Rupp (drupp@cs.washington.edu)
+
+ This file is part of GNU CC.
+@@ -44,8 +44,8 @@
+ #define NO_SYS_SIGLIST 1
+ #define kill(a,b) raise(b)
+
+-#define OBJECT_SUFFIX ".obj"
+-#define EXECUTABLE_SUFFIX ".exe"
++#define HOST_OBJECT_SUFFIX ".obj"
++#define HOST_EXECUTABLE_SUFFIX ".exe"
+ #define PATH_SEPARATOR ';'
+
+ #define DIR_SEPARATOR '\\'
+diff -ruNb gcc-2.95.3/gcc/configure gcc-2.95.4/gcc/configure
+--- gcc-2.95.3/gcc/configure 2001-03-16 15:13:48.000000000 +0100
++++ gcc-2.95.4/gcc/configure 2017-11-07 22:10:12.000000000 +0100
+@@ -1311,7 +1311,7 @@
+ fi
+
+ # Find some useful tools
+-for ac_prog in gawk mawk nawk awk
++for ac_prog in mawk gawk nawk awk
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+@@ -5162,7 +5162,7 @@
+ xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+ xm_defines="USG POSIX"
+ tm_file=rs6000/vxppc.h
+- tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
++ tmake_file="rs6000/t-ppcgas-vx rs6000/t-ppccomm"
+ extra_headers=ppc-asm.h
+ thread_file='vxworks'
+ ;;
+diff -ruNb gcc-2.95.3/gcc/configure.in gcc-2.95.4/gcc/configure.in
+--- gcc-2.95.3/gcc/configure.in 2001-01-25 15:03:02.000000000 +0100
++++ gcc-2.95.4/gcc/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -2846,7 +2846,7 @@
+ xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+ xm_defines="USG POSIX"
+ tm_file=rs6000/vxppc.h
+- tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
++ tmake_file="rs6000/t-ppcgas-vx rs6000/t-ppccomm"
+ extra_headers=ppc-asm.h
+ thread_file='vxworks'
+ ;;
+diff -ruNb gcc-2.95.3/gcc/c-parse.c gcc-2.95.4/gcc/c-parse.c
+--- gcc-2.95.3/gcc/c-parse.c 1999-04-27 00:35:53.000000000 +0200
++++ gcc-2.95.4/gcc/c-parse.c 2017-11-08 08:29:40.000000000 +0100
+@@ -1,69 +1,68 @@
+
+ /* A Bison parser, made from c-parse.y
+- by GNU Bison version 1.25
+- */
++ by GNU Bison version 1.28 */
+
+ #define YYBISON 1 /* Identify Bison output. */
+
+-#define IDENTIFIER 258
+-#define TYPENAME 259
+-#define SCSPEC 260
+-#define TYPESPEC 261
+-#define TYPE_QUAL 262
+-#define CONSTANT 263
+-#define STRING 264
+-#define ELLIPSIS 265
+-#define SIZEOF 266
+-#define ENUM 267
+-#define STRUCT 268
+-#define UNION 269
+-#define IF 270
+-#define ELSE 271
+-#define WHILE 272
+-#define DO 273
+-#define FOR 274
+-#define SWITCH 275
+-#define CASE 276
+-#define DEFAULT 277
+-#define BREAK 278
+-#define CONTINUE 279
+-#define RETURN 280
+-#define GOTO 281
+-#define ASM_KEYWORD 282
+-#define TYPEOF 283
+-#define ALIGNOF 284
+-#define ATTRIBUTE 285
+-#define EXTENSION 286
+-#define LABEL 287
+-#define REALPART 288
+-#define IMAGPART 289
+-#define ASSIGN 290
+-#define OROR 291
+-#define ANDAND 292
+-#define EQCOMPARE 293
+-#define ARITHCOMPARE 294
+-#define LSHIFT 295
+-#define RSHIFT 296
+-#define UNARY 297
+-#define PLUSPLUS 298
+-#define MINUSMINUS 299
+-#define HYPERUNARY 300
+-#define POINTSAT 301
+-#define INTERFACE 302
+-#define IMPLEMENTATION 303
+-#define END 304
+-#define SELECTOR 305
+-#define DEFS 306
+-#define ENCODE 307
+-#define CLASSNAME 308
+-#define PUBLIC 309
+-#define PRIVATE 310
+-#define PROTECTED 311
+-#define PROTOCOL 312
+-#define OBJECTNAME 313
+-#define CLASS 314
+-#define ALIAS 315
+-#define OBJC_STRING 316
++#define IDENTIFIER 257
++#define TYPENAME 258
++#define SCSPEC 259
++#define TYPESPEC 260
++#define TYPE_QUAL 261
++#define CONSTANT 262
++#define STRING 263
++#define ELLIPSIS 264
++#define SIZEOF 265
++#define ENUM 266
++#define STRUCT 267
++#define UNION 268
++#define IF 269
++#define ELSE 270
++#define WHILE 271
++#define DO 272
++#define FOR 273
++#define SWITCH 274
++#define CASE 275
++#define DEFAULT 276
++#define BREAK 277
++#define CONTINUE 278
++#define RETURN 279
++#define GOTO 280
++#define ASM_KEYWORD 281
++#define TYPEOF 282
++#define ALIGNOF 283
++#define ATTRIBUTE 284
++#define EXTENSION 285
++#define LABEL 286
++#define REALPART 287
++#define IMAGPART 288
++#define ASSIGN 289
++#define OROR 290
++#define ANDAND 291
++#define EQCOMPARE 292
++#define ARITHCOMPARE 293
++#define LSHIFT 294
++#define RSHIFT 295
++#define UNARY 296
++#define PLUSPLUS 297
++#define MINUSMINUS 298
++#define HYPERUNARY 299
++#define POINTSAT 300
++#define INTERFACE 301
++#define IMPLEMENTATION 302
++#define END 303
++#define SELECTOR 304
++#define DEFS 305
++#define ENCODE 306
++#define CLASSNAME 307
++#define PUBLIC 308
++#define PRIVATE 309
++#define PROTECTED 310
++#define PROTOCOL 311
++#define OBJECTNAME 312
++#define CLASS 313
++#define ALIAS 314
++#define OBJC_STRING 315
+
+ #line 56 "c-parse.y"
+
+@@ -119,6 +118,17 @@
+ /* 1 if we explained undeclared var errors. */
+ static int undeclared_variable_notice;
+
++/* For __extension__, save/restore the warning flags which are
++ controlled by __extension__. */
++#define SAVE_WARN_FLAGS() \
++ build_int_2 (pedantic | (warn_pointer_arith << 1), 0)
++#define RESTORE_WARN_FLAGS(tval) \
++ do { \
++ int val = TREE_INT_CST_LOW (tval); \
++ pedantic = val & 1; \
++ warn_pointer_arith = (val >> 1) & 1; \
++ } while (0)
++
+
+ /* Tell yyparse how to print a token's value, if yydebug is set. */
+
+@@ -138,7 +148,7 @@
+ #define YYFLAG -32768
+ #define YYNTBASE 84
+
+-#define YYTRANSLATE(x) ((unsigned)(x) <= 316 ? yytranslate[x] : 241)
++#define YYTRANSLATE(x) ((unsigned)(x) <= 315 ? yytranslate[x] : 241)
+
+ static const char yytranslate[] = { 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+@@ -166,13 +176,13 @@
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
+- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+- 39, 40, 44, 45, 46, 47, 53, 54, 55, 56,
+- 57, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+- 70, 71, 72, 73, 74, 75
++ 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
++ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
++ 27, 28, 29, 30, 31, 32, 33, 34, 35, 39,
++ 40, 44, 45, 46, 47, 53, 54, 55, 56, 57,
++ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
++ 71, 72, 73, 74, 75
+ };
+
+ #if YYDEBUG != 0
+@@ -357,47 +367,47 @@
+
+ #if YYDEBUG != 0
+ static const short yyrline[] = { 0,
+- 233, 238, 252, 254, 254, 255, 257, 259, 260, 268,
+- 272, 283, 288, 293, 295, 297, 298, 299, 304, 311,
+- 313, 318, 323, 329, 331, 336, 341, 347, 349, 354,
+- 361, 363, 366, 368, 370, 372, 374, 376, 378, 382,
+- 386, 389, 392, 395, 399, 401, 404, 407, 411, 439,
+- 445, 448, 451, 454, 456, 460, 464, 468, 470, 473,
+- 477, 504, 506, 508, 510, 512, 514, 516, 518, 520,
+- 522, 524, 526, 528, 530, 534, 536, 540, 542, 545,
+- 549, 551, 558, 561, 569, 580, 679, 680, 682, 688,
+- 690, 704, 727, 729, 731, 735, 741, 743, 748, 750,
+- 755, 757, 758, 768, 773, 775, 776, 777, 784, 790,
+- 795, 798, 806, 811, 813, 814, 815, 822, 833, 837,
+- 843, 848, 853, 858, 860, 862, 871, 874, 878, 880,
+- 882, 887, 891, 894, 898, 901, 903, 915, 918, 920,
+- 922, 926, 930, 932, 935, 948, 951, 955, 957, 965,
+- 966, 967, 971, 973, 979, 980, 981, 984, 986, 989,
+- 991, 994, 997, 1003, 1010, 1012, 1019, 1026, 1029, 1036,
+- 1039, 1043, 1046, 1050, 1055, 1058, 1062, 1065, 1067, 1069,
+- 1071, 1078, 1080, 1081, 1082, 1087, 1089, 1094, 1102, 1107,
+- 1111, 1114, 1116, 1121, 1123, 1124, 1127, 1127, 1130, 1133,
+- 1135, 1137, 1140, 1142, 1145, 1151, 1153, 1157, 1168, 1176,
+- 1180, 1191, 1199, 1206, 1208, 1213, 1216, 1221, 1223, 1225,
+- 1232, 1234, 1242, 1248, 1253, 1255, 1257, 1264, 1266, 1272,
+- 1278, 1280, 1282, 1287, 1289, 1296, 1298, 1301, 1304, 1308,
+- 1311, 1315, 1318, 1322, 1327, 1329, 1333, 1335, 1337, 1339,
+- 1343, 1345, 1348, 1351, 1354, 1357, 1361, 1363, 1366, 1368,
+- 1373, 1376, 1381, 1383, 1385, 1399, 1406, 1411, 1417, 1422,
+- 1424, 1429, 1431, 1435, 1439, 1443, 1453, 1455, 1460, 1465,
+- 1468, 1472, 1475, 1479, 1482, 1485, 1488, 1492, 1495, 1499,
+- 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1521, 1529,
+- 1537, 1539, 1541, 1545, 1547, 1550, 1553, 1564, 1566, 1571,
+- 1573, 1576, 1590, 1593, 1596, 1598, 1600, 1608, 1616, 1627,
+- 1632, 1635, 1649, 1658, 1662, 1666, 1670, 1676, 1680, 1685,
+- 1688, 1693, 1696, 1697, 1714, 1719, 1722, 1734, 1736, 1746,
+- 1756, 1757, 1765, 1768, 1780, 1784, 1801, 1811, 1820, 1825,
+- 1830, 1835, 1839, 1843, 1854, 1861, 1868, 1875, 1886, 1892,
+- 1895, 1900, 1923, 1957, 1988, 2019, 2034, 2048, 2052, 2056,
+- 2059, 2064, 2066, 2069, 2071, 2075, 2080, 2083, 2089, 2094,
+- 2099, 2101, 2110, 2111, 2117, 2119, 2129, 2131, 2135, 2138,
+- 2144, 2154, 2163, 2172, 2182, 2196, 2201, 2206, 2208, 2217,
+- 2220, 2225, 2228, 2232
++ 244, 249, 263, 265, 265, 266, 268, 270, 271, 279,
++ 283, 294, 299, 304, 306, 308, 309, 310, 315, 322,
++ 324, 329, 334, 340, 342, 347, 352, 358, 360, 365,
++ 372, 374, 377, 379, 381, 383, 385, 387, 389, 393,
++ 397, 400, 403, 406, 410, 412, 415, 418, 422, 450,
++ 456, 459, 462, 465, 467, 471, 475, 479, 481, 484,
++ 488, 515, 517, 519, 521, 523, 525, 527, 529, 531,
++ 533, 535, 537, 539, 541, 545, 547, 551, 553, 556,
++ 560, 562, 569, 572, 580, 591, 690, 691, 693, 699,
++ 701, 715, 738, 740, 742, 746, 752, 754, 759, 761,
++ 766, 768, 769, 779, 784, 786, 787, 788, 795, 801,
++ 806, 809, 817, 822, 824, 825, 826, 833, 844, 848,
++ 854, 859, 864, 869, 871, 873, 882, 885, 889, 891,
++ 893, 898, 902, 905, 909, 912, 914, 926, 929, 931,
++ 933, 937, 941, 943, 946, 959, 962, 966, 968, 976,
++ 977, 978, 982, 984, 990, 991, 992, 995, 997, 1000,
++ 1002, 1005, 1008, 1014, 1021, 1023, 1030, 1037, 1040, 1047,
++ 1050, 1054, 1057, 1061, 1066, 1069, 1073, 1076, 1078, 1080,
++ 1082, 1089, 1091, 1092, 1093, 1098, 1100, 1105, 1113, 1118,
++ 1122, 1125, 1127, 1132, 1134, 1135, 1138, 1138, 1141, 1144,
++ 1146, 1148, 1151, 1153, 1156, 1162, 1164, 1168, 1179, 1187,
++ 1191, 1202, 1210, 1217, 1219, 1224, 1227, 1232, 1234, 1236,
++ 1243, 1245, 1253, 1259, 1264, 1266, 1268, 1275, 1277, 1283,
++ 1289, 1291, 1293, 1298, 1300, 1307, 1309, 1312, 1315, 1319,
++ 1322, 1326, 1329, 1333, 1338, 1340, 1344, 1346, 1348, 1350,
++ 1354, 1356, 1359, 1362, 1365, 1368, 1372, 1374, 1377, 1379,
++ 1384, 1387, 1392, 1394, 1396, 1410, 1417, 1422, 1428, 1433,
++ 1435, 1440, 1442, 1446, 1450, 1454, 1464, 1466, 1471, 1476,
++ 1479, 1483, 1486, 1490, 1493, 1496, 1499, 1503, 1506, 1510,
++ 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1532, 1540,
++ 1548, 1550, 1552, 1556, 1558, 1561, 1564, 1575, 1577, 1582,
++ 1584, 1587, 1601, 1604, 1607, 1609, 1611, 1619, 1627, 1638,
++ 1643, 1646, 1660, 1669, 1673, 1677, 1681, 1687, 1691, 1696,
++ 1699, 1704, 1707, 1708, 1725, 1730, 1733, 1745, 1747, 1757,
++ 1767, 1768, 1776, 1779, 1791, 1795, 1812, 1822, 1831, 1836,
++ 1841, 1846, 1850, 1854, 1865, 1872, 1879, 1886, 1897, 1903,
++ 1906, 1911, 1934, 1968, 1999, 2030, 2045, 2059, 2063, 2067,
++ 2070, 2075, 2077, 2080, 2082, 2086, 2091, 2094, 2100, 2105,
++ 2110, 2112, 2121, 2122, 2128, 2130, 2140, 2142, 2146, 2149,
++ 2155, 2165, 2174, 2183, 2193, 2207, 2212, 2217, 2219, 2228,
++ 2231, 2236, 2239, 2243
+ };
+ #endif
+
+@@ -1205,7 +1215,8 @@
+ 50, 51, 52
+ };
+ /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+-#line 3 "/usr/lib/bison.simple"
++#line 3 "/usr/share/bison.simple"
++/* This file comes from bison-1.28. */
+
+ /* Skeleton output parser for bison,
+ Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+@@ -1222,46 +1233,66 @@
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
++ Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
+
+ /* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+-#ifndef alloca
++/* This is the parser code that is written into each bison parser
++ when the %semantic_parser declaration is not specified in the grammar.
++ It was written by Richard Stallman by simplifying the hairy parser
++ used when %semantic_parser is specified. */
++
++#ifndef YYSTACK_USE_ALLOCA
++#ifdef alloca
++#define YYSTACK_USE_ALLOCA
++#else /* alloca not defined */
+ #ifdef __GNUC__
++#define YYSTACK_USE_ALLOCA
+ #define alloca __builtin_alloca
+ #else /* not GNU C. */
+-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
++#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
++#define YYSTACK_USE_ALLOCA
+ #include <alloca.h>
+ #else /* not sparc */
+-#if defined (MSDOS) && !defined (__TURBOC__)
++/* We think this test detects Watcom and Microsoft C. */
++/* This used to test MSDOS, but that is a bad idea
++ since that symbol is in the user namespace. */
++#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
++#if 0 /* No need for malloc.h, which pollutes the namespace;
++ instead, just don't use alloca. */
+ #include <malloc.h>
++#endif
+ #else /* not MSDOS, or __TURBOC__ */
+ #if defined(_AIX)
+-#include <malloc.h>
++/* I don't know what this was needed for, but it pollutes the namespace.
++ So I turned it off. rms, 2 May 1997. */
++/* #include <malloc.h> */
+ #pragma alloca
+-#else /* not MSDOS, __TURBOC__, or _AIX */
+-#ifdef __hpux
+-#ifdef __cplusplus
+-extern "C" {
+-void *alloca (unsigned int);
+-};
+-#else /* not __cplusplus */
+-void *alloca ();
+-#endif /* not __cplusplus */
++#define YYSTACK_USE_ALLOCA
++#else /* not MSDOS, or __TURBOC__, or _AIX */
++#if 0
++#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
++ and on HPUX 10. Eventually we can turn this on. */
++#define YYSTACK_USE_ALLOCA
++#define alloca __builtin_alloca
+ #endif /* __hpux */
++#endif
+ #endif /* not _AIX */
+ #endif /* not MSDOS, or __TURBOC__ */
+-#endif /* not sparc. */
+-#endif /* not GNU C. */
+-#endif /* alloca not defined. */
++#endif /* not sparc */
++#endif /* not GNU C */
++#endif /* alloca not defined */
++#endif /* YYSTACK_USE_ALLOCA not defined */
+
+-/* This is the parser code that is written into each bison parser
+- when the %semantic_parser declaration is not specified in the grammar.
+- It was written by Richard Stallman by simplifying the hairy parser
+- used when %semantic_parser is specified. */
++#ifdef YYSTACK_USE_ALLOCA
++#define YYSTACK_ALLOC alloca
++#else
++#define YYSTACK_ALLOC malloc
++#endif
+
+ /* Note: there must be only one dollar sign in this file.
+ It is replaced by the list of actions, each action
+@@ -1271,8 +1302,8 @@
+ #define yyclearin (yychar = YYEMPTY)
+ #define YYEMPTY -2
+ #define YYEOF 0
+-#define YYACCEPT return(0)
+-#define YYABORT return(1)
++#define YYACCEPT goto yyacceptlab
++#define YYABORT goto yyabortlab
+ #define YYERROR goto yyerrlab1
+ /* Like YYERROR except do call yyerror.
+ This remains here temporarily to ease the
+@@ -1354,10 +1385,10 @@
+ #define YYMAXDEPTH 10000
+ #endif
+
+-/* Prevent warning if -Wstrict-prototypes. */
+-#ifdef __GNUC__
+-int yyparse (void);
+-#endif
++/* Define __yy_memcpy. Note that the size argument
++ should be passed with type unsigned int, because that is what the non-GCC
++ definitions require. With GCC, __builtin_memcpy takes an arg
++ of type size_t, but it can handle unsigned int. */
+
+ #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
+ #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
+@@ -1370,7 +1401,7 @@
+ __yy_memcpy (to, from, count)
+ char *to;
+ char *from;
+- int count;
++ unsigned int count;
+ {
+ register char *f = from;
+ register char *t = to;
+@@ -1385,10 +1416,10 @@
+ /* This is the most reliable way to avoid incompatibilities
+ in available built-in functions on various systems. */
+ static void
+-__yy_memcpy (char *to, char *from, int count)
++__yy_memcpy (char *to, char *from, unsigned int count)
+ {
+- register char *f = from;
+ register char *t = to;
++ register char *f = from;
+ register int i = count;
+
+ while (i-- > 0)
+@@ -1398,7 +1429,7 @@
+ #endif
+ #endif
+
+-#line 196 "/usr/lib/bison.simple"
++#line 217 "/usr/share/bison.simple"
+
+ /* The user can define YYPARSE_PARAM as the name of an argument to be passed
+ into yyparse. The argument should have type void *.
+@@ -1419,6 +1450,15 @@
+ #define YYPARSE_PARAM_DECL
+ #endif /* not YYPARSE_PARAM */
+
++/* Prevent warning if -Wstrict-prototypes. */
++#ifdef __GNUC__
++#ifdef YYPARSE_PARAM
++int yyparse (void *);
++#else
++int yyparse (void);
++#endif
++#endif
++
+ int
+ yyparse(YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+@@ -1447,6 +1487,7 @@
+ #endif
+
+ int yystacksize = YYINITDEPTH;
++ int yyfree_stacks = 0;
+
+ #ifdef YYPURE
+ int yychar;
+@@ -1531,18 +1572,32 @@
+ if (yystacksize >= YYMAXDEPTH)
+ {
+ yyerror("parser stack overflow");
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
+ return 2;
+ }
+ yystacksize *= 2;
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+- yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
+- __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
+- yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
+- __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
++#ifndef YYSTACK_USE_ALLOCA
++ yyfree_stacks = 1;
++#endif
++ yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
++ __yy_memcpy ((char *)yyss, (char *)yyss1,
++ size * (unsigned int) sizeof (*yyssp));
++ yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
++ __yy_memcpy ((char *)yyvs, (char *)yyvs1,
++ size * (unsigned int) sizeof (*yyvsp));
+ #ifdef YYLSP_NEEDED
+- yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
+- __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
++ yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
++ __yy_memcpy ((char *)yyls, (char *)yyls1,
++ size * (unsigned int) sizeof (*yylsp));
+ #endif
+ #endif /* no yyoverflow */
+
+@@ -1703,14 +1758,14 @@
+ switch (yyn) {
+
+ case 1:
+-#line 234 "c-parse.y"
++#line 245 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids an empty source file");
+ finish_file ();
+ ;
+ break;}
+ case 2:
+-#line 239 "c-parse.y"
++#line 250 "c-parse.y"
+ {
+ /* In case there were missing closebraces,
+ get us back to the global binding level. */
+@@ -1720,15 +1775,15 @@
+ ;
+ break;}
+ case 3:
+-#line 253 "c-parse.y"
++#line 264 "c-parse.y"
+ {yyval.ttype = NULL_TREE; ;
+ break;}
+ case 5:
+-#line 254 "c-parse.y"
++#line 265 "c-parse.y"
+ {yyval.ttype = NULL_TREE; ;
+ break;}
+ case 9:
+-#line 261 "c-parse.y"
++#line 272 "c-parse.y"
+ { STRIP_NOPS (yyvsp[-2].ttype);
+ if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
+@@ -1738,11 +1793,11 @@
+ error ("argument of `asm' is not a constant string"); ;
+ break;}
+ case 10:
+-#line 269 "c-parse.y"
+-{ pedantic = yyvsp[-1].itype; ;
++#line 280 "c-parse.y"
++{ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 11:
+-#line 274 "c-parse.y"
++#line 285 "c-parse.y"
+ { if (pedantic)
+ error ("ANSI C forbids data definition with no type or storage class");
+ else if (!flag_traditional)
+@@ -1754,45 +1809,45 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 12:
+-#line 284 "c-parse.y"
++#line 295 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 13:
+-#line 289 "c-parse.y"
++#line 300 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 14:
+-#line 294 "c-parse.y"
++#line 305 "c-parse.y"
+ { pedwarn ("empty declaration"); ;
+ break;}
+ case 15:
+-#line 296 "c-parse.y"
++#line 307 "c-parse.y"
+ { shadow_tag (yyvsp[-1].ttype); ;
+ break;}
+ case 18:
+-#line 300 "c-parse.y"
++#line 311 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C does not allow extra `;' outside of a function"); ;
+ break;}
+ case 19:
+-#line 306 "c-parse.y"
++#line 317 "c-parse.y"
+ { if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 0))
+ YYERROR1;
+ reinit_parse_for_function (); ;
+ break;}
+ case 20:
+-#line 311 "c-parse.y"
++#line 322 "c-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 21:
+-#line 313 "c-parse.y"
++#line 324 "c-parse.y"
+ { finish_function (0);
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -1800,25 +1855,25 @@
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 22:
+-#line 319 "c-parse.y"
++#line 330 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 23:
+-#line 324 "c-parse.y"
++#line 335 "c-parse.y"
+ { if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 0))
+ YYERROR1;
+ reinit_parse_for_function (); ;
+ break;}
+ case 24:
+-#line 329 "c-parse.y"
++#line 340 "c-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 25:
+-#line 331 "c-parse.y"
++#line 342 "c-parse.y"
+ { finish_function (0);
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -1826,25 +1881,25 @@
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 26:
+-#line 337 "c-parse.y"
++#line 348 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 27:
+-#line 342 "c-parse.y"
++#line 353 "c-parse.y"
+ { if (! start_function (NULL_TREE, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 0))
+ YYERROR1;
+ reinit_parse_for_function (); ;
+ break;}
+ case 28:
+-#line 347 "c-parse.y"
++#line 358 "c-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 29:
+-#line 349 "c-parse.y"
++#line 360 "c-parse.y"
+ { finish_function (0);
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -1852,72 +1907,72 @@
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 30:
+-#line 355 "c-parse.y"
++#line 366 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 33:
+-#line 367 "c-parse.y"
++#line 378 "c-parse.y"
+ { yyval.code = ADDR_EXPR; ;
+ break;}
+ case 34:
+-#line 369 "c-parse.y"
++#line 380 "c-parse.y"
+ { yyval.code = NEGATE_EXPR; ;
+ break;}
+ case 35:
+-#line 371 "c-parse.y"
++#line 382 "c-parse.y"
+ { yyval.code = CONVERT_EXPR; ;
+ break;}
+ case 36:
+-#line 373 "c-parse.y"
++#line 384 "c-parse.y"
+ { yyval.code = PREINCREMENT_EXPR; ;
+ break;}
+ case 37:
+-#line 375 "c-parse.y"
++#line 386 "c-parse.y"
+ { yyval.code = PREDECREMENT_EXPR; ;
+ break;}
+ case 38:
+-#line 377 "c-parse.y"
++#line 388 "c-parse.y"
+ { yyval.code = BIT_NOT_EXPR; ;
+ break;}
+ case 39:
+-#line 379 "c-parse.y"
++#line 390 "c-parse.y"
+ { yyval.code = TRUTH_NOT_EXPR; ;
+ break;}
+ case 40:
+-#line 383 "c-parse.y"
++#line 394 "c-parse.y"
+ { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
+ break;}
+ case 41:
+-#line 388 "c-parse.y"
++#line 399 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 43:
+-#line 394 "c-parse.y"
++#line 405 "c-parse.y"
+ { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+ break;}
+ case 44:
+-#line 396 "c-parse.y"
++#line 407 "c-parse.y"
+ { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 46:
+-#line 402 "c-parse.y"
++#line 413 "c-parse.y"
+ { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
+ break;}
+ case 47:
+-#line 405 "c-parse.y"
++#line 416 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+- pedantic = yyvsp[-1].itype; ;
++ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 48:
+-#line 408 "c-parse.y"
++#line 419 "c-parse.y"
+ { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
+ overflow_warning (yyval.ttype); ;
+ break;}
+ case 49:
+-#line 412 "c-parse.y"
++#line 423 "c-parse.y"
+ { tree label = lookup_label (yyvsp[0].ttype);
+ if (pedantic)
+ pedwarn ("ANSI C forbids `&&'");
+@@ -1932,7 +1987,7 @@
+ ;
+ break;}
+ case 50:
+-#line 440 "c-parse.y"
++#line 451 "c-parse.y"
+ { skip_evaluation--;
+ if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
+ && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
+@@ -1940,49 +1995,49 @@
+ yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
+ break;}
+ case 51:
+-#line 446 "c-parse.y"
++#line 457 "c-parse.y"
+ { skip_evaluation--;
+ yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
+ break;}
+ case 52:
+-#line 449 "c-parse.y"
++#line 460 "c-parse.y"
+ { skip_evaluation--;
+ yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
+ break;}
+ case 53:
+-#line 452 "c-parse.y"
++#line 463 "c-parse.y"
+ { skip_evaluation--;
+ yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
+ break;}
+ case 54:
+-#line 455 "c-parse.y"
++#line 466 "c-parse.y"
+ { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
+ break;}
+ case 55:
+-#line 457 "c-parse.y"
++#line 468 "c-parse.y"
+ { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
+ break;}
+ case 56:
+-#line 461 "c-parse.y"
++#line 472 "c-parse.y"
+ { skip_evaluation++; ;
+ break;}
+ case 57:
+-#line 465 "c-parse.y"
++#line 476 "c-parse.y"
+ { skip_evaluation++; ;
+ break;}
+ case 59:
+-#line 471 "c-parse.y"
++#line 482 "c-parse.y"
+ { tree type = groktypename (yyvsp[-2].ttype);
+ yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
+ break;}
+ case 60:
+-#line 474 "c-parse.y"
++#line 485 "c-parse.y"
+ { start_init (NULL_TREE, NULL, 0);
+ yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
+ really_start_incremental_init (yyvsp[-2].ttype); ;
+ break;}
+ case 61:
+-#line 478 "c-parse.y"
++#line 489 "c-parse.y"
+ { char *name;
+ tree result = pop_init_level (0);
+ tree type = yyvsp[-5].ttype;
+@@ -2009,90 +2064,90 @@
+ ;
+ break;}
+ case 63:
+-#line 507 "c-parse.y"
++#line 518 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 64:
+-#line 509 "c-parse.y"
++#line 520 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 65:
+-#line 511 "c-parse.y"
++#line 522 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 66:
+-#line 513 "c-parse.y"
++#line 524 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 67:
+-#line 515 "c-parse.y"
++#line 526 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 68:
+-#line 517 "c-parse.y"
++#line 528 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 69:
+-#line 519 "c-parse.y"
++#line 530 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 70:
+-#line 521 "c-parse.y"
++#line 532 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 71:
+-#line 523 "c-parse.y"
++#line 534 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 72:
+-#line 525 "c-parse.y"
++#line 536 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 73:
+-#line 527 "c-parse.y"
++#line 538 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 74:
+-#line 529 "c-parse.y"
++#line 540 "c-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 75:
+-#line 531 "c-parse.y"
++#line 542 "c-parse.y"
+ { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
+ skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
+ break;}
+ case 76:
+-#line 534 "c-parse.y"
++#line 545 "c-parse.y"
+ { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
+ yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 77:
+-#line 537 "c-parse.y"
++#line 548 "c-parse.y"
+ { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
+ skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
+ break;}
+ case 78:
+-#line 540 "c-parse.y"
++#line 551 "c-parse.y"
+ { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
+ yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 79:
+-#line 543 "c-parse.y"
++#line 554 "c-parse.y"
+ { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
+ skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
+ break;}
+ case 80:
+-#line 546 "c-parse.y"
++#line 557 "c-parse.y"
+ { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
+ - (yyvsp[-4].ttype == boolean_false_node)); ;
+ break;}
+ case 81:
+-#line 549 "c-parse.y"
++#line 560 "c-parse.y"
+ { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
+ yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 82:
+-#line 552 "c-parse.y"
++#line 563 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
+ /* Make sure first operand is calculated only once. */
+@@ -2101,12 +2156,12 @@
+ skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
+ break;}
+ case 83:
+-#line 559 "c-parse.y"
++#line 570 "c-parse.y"
+ { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
+ yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 84:
+-#line 562 "c-parse.y"
++#line 573 "c-parse.y"
+ { char class;
+ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
+ class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
+@@ -2116,7 +2171,7 @@
+ ;
+ break;}
+ case 85:
+-#line 570 "c-parse.y"
++#line 581 "c-parse.y"
+ { char class;
+ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
+ /* This inhibits warnings in truthvalue_conversion. */
+@@ -2127,7 +2182,7 @@
+ ;
+ break;}
+ case 86:
+-#line 582 "c-parse.y"
++#line 593 "c-parse.y"
+ {
+ yyval.ttype = lastiddecl;
+ if (!yyval.ttype || yyval.ttype == error_mark_node)
+@@ -2227,11 +2282,11 @@
+ ;
+ break;}
+ case 88:
+-#line 681 "c-parse.y"
++#line 692 "c-parse.y"
+ { yyval.ttype = combine_strings (yyvsp[0].ttype); ;
+ break;}
+ case 89:
+-#line 683 "c-parse.y"
++#line 694 "c-parse.y"
+ { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
+ if (class == 'e' || class == '1'
+ || class == '2' || class == '<')
+@@ -2239,11 +2294,11 @@
+ yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 90:
+-#line 689 "c-parse.y"
++#line 700 "c-parse.y"
+ { yyval.ttype = error_mark_node; ;
+ break;}
+ case 91:
+-#line 691 "c-parse.y"
++#line 702 "c-parse.y"
+ { if (current_function_decl == 0)
+ {
+ error ("braced-group within expression allowed only inside a function");
+@@ -2259,7 +2314,7 @@
+ yyval.ttype = expand_start_stmt_expr (); ;
+ break;}
+ case 92:
+-#line 705 "c-parse.y"
++#line 716 "c-parse.y"
+ { tree rtl_exp;
+ if (pedantic)
+ pedwarn ("ANSI C forbids braced-groups within expressions");
+@@ -2284,21 +2339,21 @@
+ ;
+ break;}
+ case 93:
+-#line 728 "c-parse.y"
++#line 739 "c-parse.y"
+ { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 94:
+-#line 730 "c-parse.y"
++#line 741 "c-parse.y"
+ { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 95:
+-#line 732 "c-parse.y"
++#line 743 "c-parse.y"
+ {
+ yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 96:
+-#line 736 "c-parse.y"
++#line 747 "c-parse.y"
+ {
+ tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
+
+@@ -2306,56 +2361,56 @@
+ ;
+ break;}
+ case 97:
+-#line 742 "c-parse.y"
++#line 753 "c-parse.y"
+ { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
+ break;}
+ case 98:
+-#line 744 "c-parse.y"
++#line 755 "c-parse.y"
+ { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
+ break;}
+ case 100:
+-#line 751 "c-parse.y"
++#line 762 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 103:
+-#line 760 "c-parse.y"
++#line 771 "c-parse.y"
+ { c_mark_varargs ();
+ if (pedantic)
+ pedwarn ("ANSI C does not permit use of `varargs.h'"); ;
+ break;}
+ case 104:
+-#line 770 "c-parse.y"
++#line 781 "c-parse.y"
+ { ;
+ break;}
+ case 109:
+-#line 786 "c-parse.y"
++#line 797 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 110:
+-#line 791 "c-parse.y"
++#line 802 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 111:
+-#line 796 "c-parse.y"
++#line 807 "c-parse.y"
+ { shadow_tag_warned (yyvsp[-1].ttype, 1);
+ pedwarn ("empty declaration"); ;
+ break;}
+ case 112:
+-#line 799 "c-parse.y"
++#line 810 "c-parse.y"
+ { pedwarn ("empty declaration"); ;
+ break;}
+ case 113:
+-#line 808 "c-parse.y"
++#line 819 "c-parse.y"
+ { ;
+ break;}
+ case 118:
+-#line 823 "c-parse.y"
++#line 834 "c-parse.y"
+ { yyval.itype = suspend_momentary ();
+ pending_xref_error ();
+ declspec_stack = tree_cons (prefix_attributes,
+@@ -2365,131 +2420,131 @@
+ &current_declspecs, &prefix_attributes); ;
+ break;}
+ case 119:
+-#line 834 "c-parse.y"
++#line 845 "c-parse.y"
+ { prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ;
+ break;}
+ case 120:
+-#line 839 "c-parse.y"
++#line 850 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 121:
+-#line 844 "c-parse.y"
++#line 855 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 122:
+-#line 849 "c-parse.y"
++#line 860 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 123:
+-#line 854 "c-parse.y"
++#line 865 "c-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 124:
+-#line 859 "c-parse.y"
++#line 870 "c-parse.y"
+ { shadow_tag (yyvsp[-1].ttype); ;
+ break;}
+ case 125:
+-#line 861 "c-parse.y"
++#line 872 "c-parse.y"
+ { pedwarn ("empty declaration"); ;
+ break;}
+ case 126:
+-#line 863 "c-parse.y"
+-{ pedantic = yyvsp[-1].itype; ;
++#line 874 "c-parse.y"
++{ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 127:
+-#line 873 "c-parse.y"
++#line 884 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 128:
+-#line 875 "c-parse.y"
++#line 886 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
+ break;}
+ case 129:
+-#line 879 "c-parse.y"
++#line 890 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 130:
+-#line 881 "c-parse.y"
++#line 892 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 131:
+-#line 883 "c-parse.y"
++#line 894 "c-parse.y"
+ { if (extra_warnings)
+ warning ("`%s' is not at beginning of declaration",
+ IDENTIFIER_POINTER (yyvsp[0].ttype));
+ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 132:
+-#line 888 "c-parse.y"
++#line 899 "c-parse.y"
+ { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 133:
+-#line 893 "c-parse.y"
++#line 904 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 134:
+-#line 895 "c-parse.y"
++#line 906 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
+ break;}
+ case 135:
+-#line 900 "c-parse.y"
++#line 911 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 136:
+-#line 902 "c-parse.y"
++#line 913 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 137:
+-#line 904 "c-parse.y"
++#line 915 "c-parse.y"
+ { if (extra_warnings)
+ warning ("`%s' is not at beginning of declaration",
+ IDENTIFIER_POINTER (yyvsp[0].ttype));
+ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 138:
+-#line 917 "c-parse.y"
++#line 928 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 139:
+-#line 919 "c-parse.y"
++#line 930 "c-parse.y"
+ { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
+ break;}
+ case 140:
+-#line 921 "c-parse.y"
++#line 932 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 141:
+-#line 923 "c-parse.y"
++#line 934 "c-parse.y"
+ { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 142:
+-#line 928 "c-parse.y"
++#line 939 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
+ TREE_STATIC (yyval.ttype) = 1; ;
+ break;}
+ case 143:
+-#line 931 "c-parse.y"
++#line 942 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 144:
+-#line 933 "c-parse.y"
++#line 944 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
+ TREE_STATIC (yyval.ttype) = 1; ;
+ break;}
+ case 145:
+-#line 936 "c-parse.y"
++#line 947 "c-parse.y"
+ { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
+ warning ("`%s' is not at beginning of declaration",
+ IDENTIFIER_POINTER (yyvsp[0].ttype));
+@@ -2497,138 +2552,138 @@
+ TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
+ break;}
+ case 146:
+-#line 950 "c-parse.y"
++#line 961 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 147:
+-#line 952 "c-parse.y"
++#line 963 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
+ break;}
+ case 148:
+-#line 956 "c-parse.y"
++#line 967 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 149:
+-#line 958 "c-parse.y"
++#line 969 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 152:
+-#line 968 "c-parse.y"
++#line 979 "c-parse.y"
+ { /* For a typedef name, record the meaning, not the name.
+ In case of `foo foo, bar;'. */
+ yyval.ttype = lookup_name (yyvsp[0].ttype); ;
+ break;}
+ case 153:
+-#line 972 "c-parse.y"
++#line 983 "c-parse.y"
+ { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
+ break;}
+ case 154:
+-#line 974 "c-parse.y"
++#line 985 "c-parse.y"
+ { yyval.ttype = groktypename (yyvsp[-1].ttype); ;
+ break;}
+ case 162:
+-#line 996 "c-parse.y"
++#line 1007 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 163:
+-#line 998 "c-parse.y"
++#line 1009 "c-parse.y"
+ { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
+ yyval.ttype = yyvsp[-1].ttype;
+ ;
+ break;}
+ case 164:
+-#line 1005 "c-parse.y"
++#line 1016 "c-parse.y"
+ { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
+ yyvsp[-1].ttype, prefix_attributes);
+ start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
+ break;}
+ case 165:
+-#line 1010 "c-parse.y"
++#line 1021 "c-parse.y"
+ { finish_init ();
+ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
+ break;}
+ case 166:
+-#line 1013 "c-parse.y"
++#line 1024 "c-parse.y"
+ { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
+ yyvsp[0].ttype, prefix_attributes);
+ finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
+ ;
+ break;}
+ case 167:
+-#line 1021 "c-parse.y"
++#line 1032 "c-parse.y"
+ { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
+ yyvsp[-1].ttype, prefix_attributes);
+ start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
+ break;}
+ case 168:
+-#line 1026 "c-parse.y"
++#line 1037 "c-parse.y"
+ { finish_init ();
+ decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes);
+ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
+ break;}
+ case 169:
+-#line 1030 "c-parse.y"
++#line 1041 "c-parse.y"
+ { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
+ yyvsp[0].ttype, prefix_attributes);
+ finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 170:
+-#line 1038 "c-parse.y"
++#line 1049 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 171:
+-#line 1040 "c-parse.y"
++#line 1051 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 172:
+-#line 1045 "c-parse.y"
++#line 1056 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 173:
+-#line 1047 "c-parse.y"
++#line 1058 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 174:
+-#line 1052 "c-parse.y"
++#line 1063 "c-parse.y"
+ { yyval.ttype = yyvsp[-2].ttype; ;
+ break;}
+ case 175:
+-#line 1057 "c-parse.y"
++#line 1068 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 176:
+-#line 1059 "c-parse.y"
++#line 1070 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 177:
+-#line 1064 "c-parse.y"
++#line 1075 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 178:
+-#line 1066 "c-parse.y"
++#line 1077 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 179:
+-#line 1068 "c-parse.y"
++#line 1079 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
+ break;}
+ case 180:
+-#line 1070 "c-parse.y"
++#line 1081 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
+ break;}
+ case 181:
+-#line 1072 "c-parse.y"
++#line 1083 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 187:
+-#line 1090 "c-parse.y"
++#line 1101 "c-parse.y"
+ { really_start_incremental_init (NULL_TREE);
+ /* Note that the call to clear_momentary
+ is in process_init_element. */
+ push_momentary (); ;
+ break;}
+ case 188:
+-#line 1095 "c-parse.y"
++#line 1106 "c-parse.y"
+ { yyval.ttype = pop_init_level (0);
+ if (yyval.ttype == error_mark_node
+ && ! (yychar == STRING || yychar == CONSTANT))
+@@ -2637,44 +2692,44 @@
+ pop_momentary_nofree (); ;
+ break;}
+ case 189:
+-#line 1103 "c-parse.y"
++#line 1114 "c-parse.y"
+ { yyval.ttype = error_mark_node; ;
+ break;}
+ case 190:
+-#line 1109 "c-parse.y"
++#line 1120 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids empty initializer braces"); ;
+ break;}
+ case 196:
+-#line 1125 "c-parse.y"
++#line 1136 "c-parse.y"
+ { set_init_label (yyvsp[-1].ttype); ;
+ break;}
+ case 199:
+-#line 1132 "c-parse.y"
++#line 1143 "c-parse.y"
+ { push_init_level (0); ;
+ break;}
+ case 200:
+-#line 1134 "c-parse.y"
++#line 1145 "c-parse.y"
+ { process_init_element (pop_init_level (0)); ;
+ break;}
+ case 201:
+-#line 1136 "c-parse.y"
++#line 1147 "c-parse.y"
+ { process_init_element (yyvsp[0].ttype); ;
+ break;}
+ case 205:
+-#line 1147 "c-parse.y"
++#line 1158 "c-parse.y"
+ { set_init_label (yyvsp[0].ttype); ;
+ break;}
+ case 206:
+-#line 1152 "c-parse.y"
++#line 1163 "c-parse.y"
+ { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 207:
+-#line 1154 "c-parse.y"
++#line 1165 "c-parse.y"
+ { set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
+ break;}
+ case 208:
+-#line 1159 "c-parse.y"
++#line 1170 "c-parse.y"
+ { push_c_function_context ();
+ if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 1))
+@@ -2685,16 +2740,16 @@
+ reinit_parse_for_function (); ;
+ break;}
+ case 209:
+-#line 1168 "c-parse.y"
++#line 1179 "c-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 210:
+-#line 1176 "c-parse.y"
++#line 1187 "c-parse.y"
+ { finish_function (1);
+ pop_c_function_context (); ;
+ break;}
+ case 211:
+-#line 1182 "c-parse.y"
++#line 1193 "c-parse.y"
+ { push_c_function_context ();
+ if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 1))
+@@ -2705,211 +2760,211 @@
+ reinit_parse_for_function (); ;
+ break;}
+ case 212:
+-#line 1191 "c-parse.y"
++#line 1202 "c-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 213:
+-#line 1199 "c-parse.y"
++#line 1210 "c-parse.y"
+ { finish_function (1);
+ pop_c_function_context (); ;
+ break;}
+ case 216:
+-#line 1215 "c-parse.y"
++#line 1226 "c-parse.y"
+ { yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 217:
+-#line 1217 "c-parse.y"
++#line 1228 "c-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 218:
+-#line 1222 "c-parse.y"
++#line 1233 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 219:
+-#line 1224 "c-parse.y"
++#line 1235 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 220:
+-#line 1226 "c-parse.y"
++#line 1237 "c-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 221:
+-#line 1233 "c-parse.y"
++#line 1244 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 223:
+-#line 1244 "c-parse.y"
++#line 1255 "c-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 224:
+-#line 1249 "c-parse.y"
++#line 1260 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE);
+ if (! flag_isoc9x)
+ error ("`[*]' in parameter declaration only allowed in ISO C 9x");
+ ;
+ break;}
+ case 225:
+-#line 1254 "c-parse.y"
++#line 1265 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 226:
+-#line 1256 "c-parse.y"
++#line 1267 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 227:
+-#line 1258 "c-parse.y"
++#line 1269 "c-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 228:
+-#line 1265 "c-parse.y"
++#line 1276 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 230:
+-#line 1274 "c-parse.y"
++#line 1285 "c-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 231:
+-#line 1279 "c-parse.y"
++#line 1290 "c-parse.y"
+ { yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 232:
+-#line 1281 "c-parse.y"
++#line 1292 "c-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 233:
+-#line 1283 "c-parse.y"
++#line 1294 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE);
+ if (! flag_isoc9x)
+ error ("`[*]' in parameter declaration only allowed in ISO C 9x");
+ ;
+ break;}
+ case 234:
+-#line 1288 "c-parse.y"
++#line 1299 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 235:
+-#line 1290 "c-parse.y"
++#line 1301 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 236:
+-#line 1297 "c-parse.y"
++#line 1308 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 238:
+-#line 1303 "c-parse.y"
++#line 1314 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 239:
+-#line 1305 "c-parse.y"
++#line 1316 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 240:
+-#line 1310 "c-parse.y"
++#line 1321 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 241:
+-#line 1312 "c-parse.y"
++#line 1323 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 242:
+-#line 1317 "c-parse.y"
++#line 1328 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 243:
+-#line 1319 "c-parse.y"
++#line 1330 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 244:
+-#line 1324 "c-parse.y"
++#line 1335 "c-parse.y"
+ { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
+ /* Start scope of tag before parsing components. */
+ ;
+ break;}
+ case 245:
+-#line 1328 "c-parse.y"
++#line 1339 "c-parse.y"
+ { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
+ break;}
+ case 246:
+-#line 1330 "c-parse.y"
++#line 1341 "c-parse.y"
+ { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
+ yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
+ ;
+ break;}
+ case 247:
+-#line 1334 "c-parse.y"
++#line 1345 "c-parse.y"
+ { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
+ break;}
+ case 248:
+-#line 1336 "c-parse.y"
++#line 1347 "c-parse.y"
+ { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
+ break;}
+ case 249:
+-#line 1338 "c-parse.y"
++#line 1349 "c-parse.y"
+ { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
+ break;}
+ case 250:
+-#line 1340 "c-parse.y"
++#line 1351 "c-parse.y"
+ { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
+ yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
+ ;
+ break;}
+ case 251:
+-#line 1344 "c-parse.y"
++#line 1355 "c-parse.y"
+ { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
+ break;}
+ case 252:
+-#line 1346 "c-parse.y"
++#line 1357 "c-parse.y"
+ { yyvsp[0].itype = suspend_momentary ();
+ yyval.ttype = start_enum (yyvsp[-1].ttype); ;
+ break;}
+ case 253:
+-#line 1349 "c-parse.y"
++#line 1360 "c-parse.y"
+ { yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype));
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 254:
+-#line 1352 "c-parse.y"
++#line 1363 "c-parse.y"
+ { yyvsp[0].itype = suspend_momentary ();
+ yyval.ttype = start_enum (NULL_TREE); ;
+ break;}
+ case 255:
+-#line 1355 "c-parse.y"
++#line 1366 "c-parse.y"
+ { yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 256:
+-#line 1358 "c-parse.y"
++#line 1369 "c-parse.y"
+ { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
+ break;}
+ case 260:
+-#line 1369 "c-parse.y"
++#line 1380 "c-parse.y"
+ { if (pedantic && ! flag_isoc9x)
+ pedwarn ("comma at end of enumerator list"); ;
+ break;}
+ case 261:
+-#line 1375 "c-parse.y"
++#line 1386 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 262:
+-#line 1377 "c-parse.y"
++#line 1388 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
+ pedwarn ("no semicolon at end of struct or union"); ;
+ break;}
+ case 263:
+-#line 1382 "c-parse.y"
++#line 1393 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 264:
+-#line 1384 "c-parse.y"
++#line 1395 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 265:
+-#line 1386 "c-parse.y"
++#line 1397 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("extra semicolon in struct or union specified"); ;
+ break;}
+ case 266:
+-#line 1401 "c-parse.y"
++#line 1412 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -2917,14 +2972,14 @@
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 267:
+-#line 1407 "c-parse.y"
++#line 1418 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids member declarations with no members");
+ shadow_tag(yyvsp[0].ttype);
+ yyval.ttype = NULL_TREE; ;
+ break;}
+ case 268:
+-#line 1412 "c-parse.y"
++#line 1423 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -2932,144 +2987,144 @@
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 269:
+-#line 1418 "c-parse.y"
++#line 1429 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids member declarations with no members");
+ shadow_tag(yyvsp[0].ttype);
+ yyval.ttype = NULL_TREE; ;
+ break;}
+ case 270:
+-#line 1423 "c-parse.y"
++#line 1434 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 271:
+-#line 1425 "c-parse.y"
++#line 1436 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+- pedantic = yyvsp[-1].itype; ;
++ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 273:
+-#line 1432 "c-parse.y"
++#line 1443 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 274:
+-#line 1437 "c-parse.y"
++#line 1448 "c-parse.y"
+ { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
+ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
+ break;}
+ case 275:
+-#line 1441 "c-parse.y"
++#line 1452 "c-parse.y"
+ { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
+ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
+ break;}
+ case 276:
+-#line 1444 "c-parse.y"
++#line 1455 "c-parse.y"
+ { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
+ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
+ break;}
+ case 278:
+-#line 1456 "c-parse.y"
++#line 1467 "c-parse.y"
+ { if (yyvsp[-2].ttype == error_mark_node)
+ yyval.ttype = yyvsp[-2].ttype;
+ else
+ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
+ break;}
+ case 279:
+-#line 1461 "c-parse.y"
++#line 1472 "c-parse.y"
+ { yyval.ttype = error_mark_node; ;
+ break;}
+ case 280:
+-#line 1467 "c-parse.y"
++#line 1478 "c-parse.y"
+ { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 281:
+-#line 1469 "c-parse.y"
++#line 1480 "c-parse.y"
+ { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 282:
+-#line 1474 "c-parse.y"
++#line 1485 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 283:
+-#line 1476 "c-parse.y"
++#line 1487 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 284:
+-#line 1481 "c-parse.y"
++#line 1492 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 286:
+-#line 1487 "c-parse.y"
++#line 1498 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 287:
+-#line 1489 "c-parse.y"
++#line 1500 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 288:
+-#line 1494 "c-parse.y"
++#line 1505 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 289:
+-#line 1496 "c-parse.y"
++#line 1507 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 290:
+-#line 1501 "c-parse.y"
++#line 1512 "c-parse.y"
+ { yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 291:
+-#line 1504 "c-parse.y"
++#line 1515 "c-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 292:
+-#line 1506 "c-parse.y"
++#line 1517 "c-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 293:
+-#line 1508 "c-parse.y"
++#line 1519 "c-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 294:
+-#line 1510 "c-parse.y"
++#line 1521 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 295:
+-#line 1512 "c-parse.y"
++#line 1523 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 296:
+-#line 1514 "c-parse.y"
++#line 1525 "c-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 297:
+-#line 1516 "c-parse.y"
++#line 1527 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 298:
+-#line 1518 "c-parse.y"
++#line 1529 "c-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
+ break;}
+ case 299:
+-#line 1522 "c-parse.y"
++#line 1533 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 300:
+-#line 1531 "c-parse.y"
++#line 1542 "c-parse.y"
+ {
+ if (pedantic && yyvsp[0].ends_in_label)
+ pedwarn ("ANSI C forbids label at end of compound statement");
+ ;
+ break;}
+ case 302:
+-#line 1540 "c-parse.y"
++#line 1551 "c-parse.y"
+ { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
+ break;}
+ case 303:
+-#line 1542 "c-parse.y"
++#line 1553 "c-parse.y"
+ { yyval.ends_in_label = 0; ;
+ break;}
+ case 307:
+-#line 1554 "c-parse.y"
++#line 1565 "c-parse.y"
+ { emit_line_note (input_filename, lineno);
+ pushlevel (0);
+ clear_last_expr ();
+@@ -3078,12 +3133,12 @@
+ ;
+ break;}
+ case 309:
+-#line 1567 "c-parse.y"
++#line 1578 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids label declarations"); ;
+ break;}
+ case 312:
+-#line 1578 "c-parse.y"
++#line 1589 "c-parse.y"
+ { tree link;
+ for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
+ {
+@@ -3094,19 +3149,19 @@
+ ;
+ break;}
+ case 313:
+-#line 1592 "c-parse.y"
++#line 1603 "c-parse.y"
+ {;
+ break;}
+ case 315:
+-#line 1596 "c-parse.y"
++#line 1607 "c-parse.y"
+ { compstmt_count++; ;
+ break;}
+ case 316:
+-#line 1599 "c-parse.y"
++#line 1610 "c-parse.y"
+ { yyval.ttype = convert (void_type_node, integer_zero_node); ;
+ break;}
+ case 317:
+-#line 1601 "c-parse.y"
++#line 1612 "c-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_end_bindings (getdecls (), 1, 0);
+ yyval.ttype = poplevel (1, 1, 0);
+@@ -3116,7 +3171,7 @@
+ pop_momentary (); ;
+ break;}
+ case 318:
+-#line 1609 "c-parse.y"
++#line 1620 "c-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_end_bindings (getdecls (), kept_level_p (), 0);
+ yyval.ttype = poplevel (kept_level_p (), 0, 0);
+@@ -3126,7 +3181,7 @@
+ pop_momentary (); ;
+ break;}
+ case 319:
+-#line 1617 "c-parse.y"
++#line 1628 "c-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_end_bindings (getdecls (), kept_level_p (), 0);
+ yyval.ttype = poplevel (kept_level_p (), 0, 0);
+@@ -3136,7 +3191,7 @@
+ pop_momentary (); ;
+ break;}
+ case 322:
+-#line 1637 "c-parse.y"
++#line 1648 "c-parse.y"
+ { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
+ c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0,
+ compstmt_count);
+@@ -3146,7 +3201,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 323:
+-#line 1651 "c-parse.y"
++#line 1662 "c-parse.y"
+ { stmt_count++;
+ compstmt_count++;
+ emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
+@@ -3156,43 +3211,43 @@
+ position_after_white_space (); ;
+ break;}
+ case 324:
+-#line 1659 "c-parse.y"
++#line 1670 "c-parse.y"
+ { expand_loop_continue_here (); ;
+ break;}
+ case 325:
+-#line 1663 "c-parse.y"
++#line 1674 "c-parse.y"
+ { yyval.filename = input_filename; ;
+ break;}
+ case 326:
+-#line 1667 "c-parse.y"
++#line 1678 "c-parse.y"
+ { yyval.lineno = lineno; ;
+ break;}
+ case 327:
+-#line 1672 "c-parse.y"
++#line 1683 "c-parse.y"
+ { ;
+ break;}
+ case 328:
+-#line 1677 "c-parse.y"
++#line 1688 "c-parse.y"
+ { ;
+ break;}
+ case 329:
+-#line 1682 "c-parse.y"
++#line 1693 "c-parse.y"
+ { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
+ break;}
+ case 330:
+-#line 1687 "c-parse.y"
++#line 1698 "c-parse.y"
+ { yyval.ends_in_label = 0; ;
+ break;}
+ case 331:
+-#line 1689 "c-parse.y"
++#line 1700 "c-parse.y"
+ { yyval.ends_in_label = 1; ;
+ break;}
+ case 332:
+-#line 1695 "c-parse.y"
++#line 1706 "c-parse.y"
+ { stmt_count++; ;
+ break;}
+ case 334:
+-#line 1698 "c-parse.y"
++#line 1709 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ /* It appears that this should not be done--that a non-lvalue array
+@@ -3211,19 +3266,19 @@
+ clear_momentary (); ;
+ break;}
+ case 335:
+-#line 1715 "c-parse.y"
++#line 1726 "c-parse.y"
+ { c_expand_start_else ();
+ yyvsp[-1].itype = stmt_count;
+ position_after_white_space (); ;
+ break;}
+ case 336:
+-#line 1719 "c-parse.y"
++#line 1730 "c-parse.y"
+ { c_expand_end_cond ();
+ if (extra_warnings && stmt_count == yyvsp[-3].itype)
+ warning ("empty body in an else-statement"); ;
+ break;}
+ case 337:
+-#line 1723 "c-parse.y"
++#line 1734 "c-parse.y"
+ { c_expand_end_cond ();
+ /* This warning is here instead of in simple_if, because we
+ do not want a warning if an empty if is followed by an
+@@ -3234,11 +3289,11 @@
+ "empty body in an if-statement"); ;
+ break;}
+ case 338:
+-#line 1735 "c-parse.y"
++#line 1746 "c-parse.y"
+ { c_expand_end_cond (); ;
+ break;}
+ case 339:
+-#line 1737 "c-parse.y"
++#line 1748 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
+ /* The emit_nop used to come before emit_line_note,
+@@ -3250,7 +3305,7 @@
+ emit_nop (); ;
+ break;}
+ case 340:
+-#line 1747 "c-parse.y"
++#line 1758 "c-parse.y"
+ { /* Don't start the loop till we have succeeded
+ in parsing the end test. This is to make sure
+ that we end every loop we start. */
+@@ -3261,11 +3316,11 @@
+ position_after_white_space (); ;
+ break;}
+ case 341:
+-#line 1756 "c-parse.y"
++#line 1767 "c-parse.y"
+ { expand_end_loop (); ;
+ break;}
+ case 342:
+-#line 1759 "c-parse.y"
++#line 1770 "c-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_exit_loop_if_false (NULL_PTR,
+ truthvalue_conversion (yyvsp[-2].ttype));
+@@ -3273,12 +3328,12 @@
+ clear_momentary (); ;
+ break;}
+ case 343:
+-#line 1766 "c-parse.y"
++#line 1777 "c-parse.y"
+ { expand_end_loop ();
+ clear_momentary (); ;
+ break;}
+ case 344:
+-#line 1770 "c-parse.y"
++#line 1781 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
+ /* See comment in `while' alternative, above. */
+@@ -3291,12 +3346,12 @@
+ ;
+ break;}
+ case 345:
+-#line 1782 "c-parse.y"
++#line 1793 "c-parse.y"
+ { yyvsp[0].lineno = lineno;
+ yyval.filename = input_filename; ;
+ break;}
+ case 346:
+-#line 1785 "c-parse.y"
++#line 1796 "c-parse.y"
+ {
+ /* Start the loop. Doing this after parsing
+ all the expressions ensures we will end the loop. */
+@@ -3314,7 +3369,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 347:
+-#line 1801 "c-parse.y"
++#line 1812 "c-parse.y"
+ { /* Emit the increment expression, with a line number. */
+ emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
+ expand_loop_continue_here ();
+@@ -3327,7 +3382,7 @@
+ expand_end_loop (); ;
+ break;}
+ case 348:
+-#line 1812 "c-parse.y"
++#line 1823 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
+ c_expand_start_case (yyvsp[-1].ttype);
+@@ -3337,7 +3392,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 349:
+-#line 1820 "c-parse.y"
++#line 1831 "c-parse.y"
+ { expand_end_case (yyvsp[-3].ttype);
+ if (yychar == CONSTANT || yychar == STRING)
+ pop_momentary_nofree ();
+@@ -3345,33 +3400,33 @@
+ pop_momentary (); ;
+ break;}
+ case 350:
+-#line 1826 "c-parse.y"
++#line 1837 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ if ( ! expand_exit_something ())
+ error ("break statement not within loop or switch"); ;
+ break;}
+ case 351:
+-#line 1831 "c-parse.y"
++#line 1842 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ if (! expand_continue_loop (NULL_PTR))
+ error ("continue statement not within a loop"); ;
+ break;}
+ case 352:
+-#line 1836 "c-parse.y"
++#line 1847 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ c_expand_return (NULL_TREE); ;
+ break;}
+ case 353:
+-#line 1840 "c-parse.y"
++#line 1851 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
+ c_expand_return (yyvsp[-1].ttype); ;
+ break;}
+ case 354:
+-#line 1844 "c-parse.y"
++#line 1855 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
+ STRIP_NOPS (yyvsp[-2].ttype);
+@@ -3383,7 +3438,7 @@
+ error ("argument of `asm' is not a constant string"); ;
+ break;}
+ case 355:
+-#line 1855 "c-parse.y"
++#line 1866 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
+ c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
+@@ -3391,7 +3446,7 @@
+ input_filename, lineno); ;
+ break;}
+ case 356:
+-#line 1862 "c-parse.y"
++#line 1873 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
+ c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
+@@ -3399,7 +3454,7 @@
+ input_filename, lineno); ;
+ break;}
+ case 357:
+-#line 1870 "c-parse.y"
++#line 1881 "c-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
+ c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
+@@ -3407,7 +3462,7 @@
+ input_filename, lineno); ;
+ break;}
+ case 358:
+-#line 1876 "c-parse.y"
++#line 1887 "c-parse.y"
+ { tree decl;
+ stmt_count++;
+ emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
+@@ -3420,7 +3475,7 @@
+ ;
+ break;}
+ case 359:
+-#line 1887 "c-parse.y"
++#line 1898 "c-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids `goto *expr;'");
+ stmt_count++;
+@@ -3428,7 +3483,7 @@
+ expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
+ break;}
+ case 362:
+-#line 1902 "c-parse.y"
++#line 1913 "c-parse.y"
+ {
+ /* The value returned by this action is */
+ /* 1 if everything is OK */
+@@ -3451,14 +3506,14 @@
+ ;
+ break;}
+ case 363:
+-#line 1923 "c-parse.y"
++#line 1934 "c-parse.y"
+ {
+ if (yyvsp[-1].itype)
+ iterator_for_loop_end (yyvsp[-3].ttype);
+ ;
+ break;}
+ case 364:
+-#line 1958 "c-parse.y"
++#line 1969 "c-parse.y"
+ { register tree value = check_case_value (yyvsp[-1].ttype);
+ register tree label
+ = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
+@@ -3491,7 +3546,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 365:
+-#line 1989 "c-parse.y"
++#line 2000 "c-parse.y"
+ { register tree value1 = check_case_value (yyvsp[-3].ttype);
+ register tree value2 = check_case_value (yyvsp[-1].ttype);
+ register tree label
+@@ -3524,7 +3579,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 366:
+-#line 2020 "c-parse.y"
++#line 2031 "c-parse.y"
+ {
+ tree duplicate;
+ register tree label
+@@ -3541,7 +3596,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 367:
+-#line 2035 "c-parse.y"
++#line 2046 "c-parse.y"
+ { tree label = define_label (input_filename, lineno, yyvsp[-2].ttype);
+ stmt_count++;
+ emit_nop ();
+@@ -3553,52 +3608,52 @@
+ position_after_white_space (); ;
+ break;}
+ case 368:
+-#line 2050 "c-parse.y"
++#line 2061 "c-parse.y"
+ { emit_line_note (input_filename, lineno);
+ yyval.ttype = NULL_TREE; ;
+ break;}
+ case 369:
+-#line 2053 "c-parse.y"
++#line 2064 "c-parse.y"
+ { emit_line_note (input_filename, lineno); ;
+ break;}
+ case 370:
+-#line 2058 "c-parse.y"
++#line 2069 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 372:
+-#line 2065 "c-parse.y"
++#line 2076 "c-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 375:
+-#line 2072 "c-parse.y"
++#line 2083 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 376:
+-#line 2077 "c-parse.y"
++#line 2088 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 377:
+-#line 2082 "c-parse.y"
++#line 2093 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
+ break;}
+ case 378:
+-#line 2084 "c-parse.y"
++#line 2095 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
+ break;}
+ case 379:
+-#line 2090 "c-parse.y"
++#line 2101 "c-parse.y"
+ { pushlevel (0);
+ clear_parm_order ();
+ declare_parm_level (0); ;
+ break;}
+ case 380:
+-#line 2094 "c-parse.y"
++#line 2105 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ parmlist_tags_warning ();
+ poplevel (0, 0, 0); ;
+ break;}
+ case 382:
+-#line 2102 "c-parse.y"
++#line 2113 "c-parse.y"
+ { tree parm;
+ if (pedantic)
+ pedwarn ("ANSI C forbids forward parameter declarations");
+@@ -3608,19 +3663,19 @@
+ clear_parm_order (); ;
+ break;}
+ case 383:
+-#line 2110 "c-parse.y"
++#line 2121 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 384:
+-#line 2112 "c-parse.y"
++#line 2123 "c-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
+ break;}
+ case 385:
+-#line 2118 "c-parse.y"
++#line 2129 "c-parse.y"
+ { yyval.ttype = get_parm_info (0); ;
+ break;}
+ case 386:
+-#line 2120 "c-parse.y"
++#line 2131 "c-parse.y"
+ { yyval.ttype = get_parm_info (0);
+ /* Gcc used to allow this as an extension. However, it does
+ not work for all targets, and thus has been disabled.
+@@ -3632,23 +3687,23 @@
+ ;
+ break;}
+ case 387:
+-#line 2130 "c-parse.y"
++#line 2141 "c-parse.y"
+ { yyval.ttype = get_parm_info (1); ;
+ break;}
+ case 388:
+-#line 2132 "c-parse.y"
++#line 2143 "c-parse.y"
+ { yyval.ttype = get_parm_info (0); ;
+ break;}
+ case 389:
+-#line 2137 "c-parse.y"
++#line 2148 "c-parse.y"
+ { push_parm_decl (yyvsp[0].ttype); ;
+ break;}
+ case 390:
+-#line 2139 "c-parse.y"
++#line 2150 "c-parse.y"
+ { push_parm_decl (yyvsp[0].ttype); ;
+ break;}
+ case 391:
+-#line 2146 "c-parse.y"
++#line 2157 "c-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -3659,7 +3714,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 392:
+-#line 2155 "c-parse.y"
++#line 2166 "c-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -3670,7 +3725,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 393:
+-#line 2164 "c-parse.y"
++#line 2175 "c-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -3681,7 +3736,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 394:
+-#line 2173 "c-parse.y"
++#line 2184 "c-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -3692,7 +3747,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 395:
+-#line 2183 "c-parse.y"
++#line 2194 "c-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -3703,19 +3758,19 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 396:
+-#line 2197 "c-parse.y"
++#line 2208 "c-parse.y"
+ { pushlevel (0);
+ clear_parm_order ();
+ declare_parm_level (1); ;
+ break;}
+ case 397:
+-#line 2201 "c-parse.y"
++#line 2212 "c-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ parmlist_tags_warning ();
+ poplevel (0, 0, 0); ;
+ break;}
+ case 399:
+-#line 2209 "c-parse.y"
++#line 2220 "c-parse.y"
+ { tree t;
+ for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
+ if (TREE_VALUE (t) == NULL_TREE)
+@@ -3723,29 +3778,30 @@
+ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 400:
+-#line 2219 "c-parse.y"
++#line 2230 "c-parse.y"
+ { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+ break;}
+ case 401:
+-#line 2221 "c-parse.y"
++#line 2232 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 402:
+-#line 2227 "c-parse.y"
++#line 2238 "c-parse.y"
+ { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+ break;}
+ case 403:
+-#line 2229 "c-parse.y"
++#line 2240 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 404:
+-#line 2234 "c-parse.y"
+-{ yyval.itype = pedantic;
+- pedantic = 0; ;
++#line 2245 "c-parse.y"
++{ yyval.ttype = SAVE_WARN_FLAGS();
++ pedantic = 0;
++ warn_pointer_arith = 0; ;
+ break;}
+ }
+ /* the action file gets copied in in place of this dollarsign */
+-#line 498 "/usr/lib/bison.simple"
++#line 543 "/usr/share/bison.simple"
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+@@ -3940,6 +3996,30 @@
+
+ yystate = yyn;
+ goto yynewstate;
++
++ yyacceptlab:
++ /* YYACCEPT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 0;
++
++ yyabortlab:
++ /* YYABORT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 1;
+ }
+-#line 2238 "c-parse.y"
++#line 2250 "c-parse.y"
+
+diff -ruNb gcc-2.95.3/gcc/.#c-parse.c.1.17 gcc-2.95.4/gcc/.#c-parse.c.1.17
+--- gcc-2.95.3/gcc/.#c-parse.c.1.17 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/.#c-parse.c.1.17 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4025 @@
++
++/* A Bison parser, made from c-parse.y
++ by GNU Bison version 1.28 */
++
++#define YYBISON 1 /* Identify Bison output. */
++
++#define IDENTIFIER 257
++#define TYPENAME 258
++#define SCSPEC 259
++#define TYPESPEC 260
++#define TYPE_QUAL 261
++#define CONSTANT 262
++#define STRING 263
++#define ELLIPSIS 264
++#define SIZEOF 265
++#define ENUM 266
++#define STRUCT 267
++#define UNION 268
++#define IF 269
++#define ELSE 270
++#define WHILE 271
++#define DO 272
++#define FOR 273
++#define SWITCH 274
++#define CASE 275
++#define DEFAULT 276
++#define BREAK 277
++#define CONTINUE 278
++#define RETURN 279
++#define GOTO 280
++#define ASM_KEYWORD 281
++#define TYPEOF 282
++#define ALIGNOF 283
++#define ATTRIBUTE 284
++#define EXTENSION 285
++#define LABEL 286
++#define REALPART 287
++#define IMAGPART 288
++#define ASSIGN 289
++#define OROR 290
++#define ANDAND 291
++#define EQCOMPARE 292
++#define ARITHCOMPARE 293
++#define LSHIFT 294
++#define RSHIFT 295
++#define UNARY 296
++#define PLUSPLUS 297
++#define MINUSMINUS 298
++#define HYPERUNARY 299
++#define POINTSAT 300
++#define INTERFACE 301
++#define IMPLEMENTATION 302
++#define END 303
++#define SELECTOR 304
++#define DEFS 305
++#define ENCODE 306
++#define CLASSNAME 307
++#define PUBLIC 308
++#define PRIVATE 309
++#define PROTECTED 310
++#define PROTOCOL 311
++#define OBJECTNAME 312
++#define CLASS 313
++#define ALIAS 314
++#define OBJC_STRING 315
++
++#line 56 "c-parse.y"
++
++#include "config.h"
++#include "system.h"
++#include <setjmp.h>
++
++#include "tree.h"
++#include "input.h"
++#include "c-lex.h"
++#include "c-tree.h"
++#include "flags.h"
++#include "output.h"
++#include "toplev.h"
++
++#ifdef MULTIBYTE_CHARS
++#include <locale.h>
++#endif
++
++
++/* Since parsers are distinct for each language, put the language string
++ definition here. */
++char *language_string = "GNU C";
++
++/* Like YYERROR but do call yyerror. */
++#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
++
++/* Cause the `yydebug' variable to be defined. */
++#define YYDEBUG 1
++
++#line 87 "c-parse.y"
++typedef union {long itype; tree ttype; enum tree_code code;
++ char *filename; int lineno; int ends_in_label; } YYSTYPE;
++#line 204 "c-parse.y"
++
++/* Number of statements (loosely speaking) and compound statements
++ seen so far. */
++static int stmt_count;
++static int compstmt_count;
++
++/* Input file and line number of the end of the body of last simple_if;
++ used by the stmt-rule immediately after simple_if returns. */
++static char *if_stmt_file;
++static int if_stmt_line;
++
++/* List of types and structure classes of the current declaration. */
++static tree current_declspecs = NULL_TREE;
++static tree prefix_attributes = NULL_TREE;
++
++/* Stack of saved values of current_declspecs and prefix_attributes. */
++static tree declspec_stack;
++
++/* 1 if we explained undeclared var errors. */
++static int undeclared_variable_notice;
++
++/* For __extension__, save/restore the warning flags which are
++ controlled by __extension__. */
++#define SAVE_WARN_FLAGS() \
++ build_int_2 (pedantic | (warn_pointer_arith << 1), 0)
++#define RESTORE_WARN_FLAGS(tval) \
++ do { \
++ int val = TREE_INT_CST_LOW (tval); \
++ pedantic = val & 1; \
++ warn_pointer_arith = (val >> 1) & 1; \
++ } while (0)
++
++
++/* Tell yyparse how to print a token's value, if yydebug is set. */
++
++#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
++extern void yyprint PROTO ((FILE *, int, YYSTYPE));
++#include <stdio.h>
++
++#ifndef __cplusplus
++#ifndef __STDC__
++#define const
++#endif
++#endif
++
++
++
++#define YYFINAL 692
++#define YYFLAG -32768
++#define YYNTBASE 84
++
++#define YYTRANSLATE(x) ((unsigned)(x) <= 315 ? yytranslate[x] : 241)
++
++static const char yytranslate[] = { 0,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 80, 2, 2, 2, 52, 43, 2, 59,
++ 76, 50, 48, 81, 49, 58, 51, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 38, 77, 2,
++ 36, 2, 37, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 60, 2, 83, 42, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 82, 41, 78, 79, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
++ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
++ 27, 28, 29, 30, 31, 32, 33, 34, 35, 39,
++ 40, 44, 45, 46, 47, 53, 54, 55, 56, 57,
++ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
++ 71, 72, 73, 74, 75
++};
++
++#if YYDEBUG != 0
++static const short yyprhs[] = { 0,
++ 0, 1, 3, 4, 7, 8, 12, 14, 16, 22,
++ 25, 29, 34, 39, 42, 45, 48, 51, 53, 54,
++ 55, 63, 68, 69, 70, 78, 83, 84, 85, 92,
++ 96, 98, 100, 102, 104, 106, 108, 110, 112, 114,
++ 116, 117, 119, 121, 125, 127, 130, 133, 136, 139,
++ 142, 147, 150, 155, 158, 161, 163, 165, 167, 172,
++ 173, 181, 183, 187, 191, 195, 199, 203, 207, 211,
++ 215, 219, 223, 227, 231, 232, 237, 238, 243, 244,
++ 245, 253, 254, 260, 264, 268, 270, 272, 274, 278,
++ 282, 283, 288, 293, 298, 302, 306, 309, 312, 314,
++ 317, 318, 320, 323, 327, 329, 331, 334, 337, 342,
++ 347, 350, 353, 357, 359, 361, 364, 367, 368, 369,
++ 374, 379, 383, 387, 390, 393, 396, 399, 403, 404,
++ 407, 410, 413, 416, 420, 421, 424, 427, 429, 431,
++ 434, 437, 439, 441, 444, 447, 450, 454, 455, 458,
++ 460, 462, 464, 469, 474, 476, 478, 480, 482, 486,
++ 488, 492, 493, 498, 499, 506, 510, 511, 518, 522,
++ 523, 525, 527, 530, 537, 539, 543, 544, 546, 551,
++ 558, 563, 565, 567, 569, 571, 573, 574, 579, 581,
++ 582, 585, 587, 591, 595, 598, 599, 604, 606, 607,
++ 612, 614, 616, 618, 621, 624, 630, 634, 635, 636,
++ 642, 643, 644, 650, 652, 654, 658, 662, 667, 671,
++ 675, 679, 681, 685, 690, 695, 699, 703, 707, 709,
++ 713, 717, 721, 726, 731, 735, 739, 741, 743, 746,
++ 748, 751, 753, 756, 757, 765, 771, 774, 775, 783,
++ 789, 792, 793, 802, 803, 811, 814, 815, 817, 818,
++ 820, 822, 825, 826, 830, 833, 837, 839, 843, 845,
++ 847, 850, 852, 856, 861, 868, 874, 876, 880, 882,
++ 884, 888, 891, 894, 895, 897, 899, 902, 903, 906,
++ 910, 914, 917, 921, 926, 930, 933, 937, 940, 944,
++ 946, 948, 951, 954, 955, 957, 960, 961, 962, 964,
++ 966, 969, 973, 975, 978, 980, 983, 990, 996, 1002,
++ 1005, 1008, 1013, 1014, 1019, 1020, 1021, 1025, 1030, 1034,
++ 1036, 1038, 1040, 1042, 1045, 1046, 1051, 1053, 1057, 1058,
++ 1059, 1067, 1073, 1076, 1077, 1078, 1079, 1092, 1093, 1100,
++ 1103, 1106, 1109, 1113, 1120, 1129, 1140, 1153, 1157, 1162,
++ 1164, 1166, 1167, 1174, 1178, 1184, 1187, 1191, 1192, 1194,
++ 1195, 1197, 1198, 1200, 1202, 1206, 1211, 1213, 1217, 1218,
++ 1221, 1224, 1225, 1230, 1233, 1234, 1236, 1238, 1242, 1244,
++ 1248, 1253, 1258, 1263, 1268, 1273, 1274, 1277, 1279, 1282,
++ 1284, 1288, 1290, 1294
++};
++
++static const short yyrhs[] = { -1,
++ 85, 0, 0, 86, 88, 0, 0, 85, 87, 88,
++ 0, 90, 0, 89, 0, 27, 59, 99, 76, 77,
++ 0, 240, 88, 0, 122, 136, 77, 0, 129, 122,
++ 136, 77, 0, 125, 122, 135, 77, 0, 129, 77,
++ 0, 125, 77, 0, 1, 77, 0, 1, 78, 0,
++ 77, 0, 0, 0, 125, 122, 164, 91, 116, 92,
++ 198, 0, 125, 122, 164, 1, 0, 0, 0, 129,
++ 122, 167, 93, 116, 94, 198, 0, 129, 122, 167,
++ 1, 0, 0, 0, 122, 167, 95, 116, 96, 198,
++ 0, 122, 167, 1, 0, 3, 0, 4, 0, 43,
++ 0, 49, 0, 48, 0, 54, 0, 55, 0, 79,
++ 0, 80, 0, 101, 0, 0, 101, 0, 107, 0,
++ 101, 81, 107, 0, 113, 0, 50, 105, 0, 240,
++ 105, 0, 98, 105, 0, 40, 97, 0, 103, 102,
++ 0, 103, 59, 185, 76, 0, 104, 102, 0, 104,
++ 59, 185, 76, 0, 33, 105, 0, 34, 105, 0,
++ 11, 0, 29, 0, 102, 0, 59, 185, 76, 105,
++ 0, 0, 59, 185, 76, 82, 106, 150, 78, 0,
++ 105, 0, 107, 48, 107, 0, 107, 49, 107, 0,
++ 107, 50, 107, 0, 107, 51, 107, 0, 107, 52,
++ 107, 0, 107, 46, 107, 0, 107, 47, 107, 0,
++ 107, 45, 107, 0, 107, 44, 107, 0, 107, 43,
++ 107, 0, 107, 41, 107, 0, 107, 42, 107, 0,
++ 0, 107, 40, 108, 107, 0, 0, 107, 39, 109,
++ 107, 0, 0, 0, 107, 37, 110, 99, 38, 111,
++ 107, 0, 0, 107, 37, 112, 38, 107, 0, 107,
++ 36, 107, 0, 107, 35, 107, 0, 3, 0, 8,
++ 0, 115, 0, 59, 99, 76, 0, 59, 1, 76,
++ 0, 0, 59, 114, 200, 76, 0, 113, 59, 100,
++ 76, 0, 113, 60, 99, 83, 0, 113, 58, 97,
++ 0, 113, 57, 97, 0, 113, 54, 0, 113, 55,
++ 0, 9, 0, 115, 9, 0, 0, 118, 0, 118,
++ 10, 0, 205, 206, 119, 0, 117, 0, 193, 0,
++ 118, 117, 0, 117, 193, 0, 127, 122, 135, 77,
++ 0, 130, 122, 136, 77, 0, 127, 77, 0, 130,
++ 77, 0, 205, 206, 124, 0, 120, 0, 193, 0,
++ 121, 120, 0, 120, 193, 0, 0, 0, 125, 122,
++ 135, 77, 0, 129, 122, 136, 77, 0, 125, 122,
++ 158, 0, 129, 122, 161, 0, 125, 77, 0, 129,
++ 77, 0, 240, 124, 0, 133, 126, 0, 129, 133,
++ 126, 0, 0, 126, 134, 0, 126, 5, 0, 126,
++ 143, 0, 133, 128, 0, 130, 133, 128, 0, 0,
++ 128, 134, 0, 128, 5, 0, 130, 0, 143, 0,
++ 129, 130, 0, 129, 143, 0, 7, 0, 5, 0,
++ 130, 7, 0, 130, 5, 0, 133, 132, 0, 187,
++ 133, 132, 0, 0, 132, 134, 0, 6, 0, 171,
++ 0, 4, 0, 28, 59, 99, 76, 0, 28, 59,
++ 185, 76, 0, 6, 0, 7, 0, 171, 0, 138,
++ 0, 135, 81, 138, 0, 140, 0, 136, 81, 138,
++ 0, 0, 27, 59, 115, 76, 0, 0, 164, 137,
++ 142, 36, 139, 148, 0, 164, 137, 142, 0, 0,
++ 167, 137, 142, 36, 141, 148, 0, 167, 137, 142,
++ 0, 0, 143, 0, 144, 0, 143, 144, 0, 30,
++ 59, 59, 145, 76, 76, 0, 146, 0, 145, 81,
++ 146, 0, 0, 147, 0, 147, 59, 3, 76, 0,
++ 147, 59, 3, 81, 101, 76, 0, 147, 59, 100,
++ 76, 0, 97, 0, 5, 0, 6, 0, 7, 0,
++ 107, 0, 0, 82, 149, 150, 78, 0, 1, 0,
++ 0, 151, 176, 0, 152, 0, 151, 81, 152, 0,
++ 156, 36, 154, 0, 157, 154, 0, 0, 97, 38,
++ 153, 154, 0, 154, 0, 0, 82, 155, 150, 78,
++ 0, 107, 0, 1, 0, 157, 0, 156, 157, 0,
++ 58, 97, 0, 60, 107, 10, 107, 83, 0, 60,
++ 107, 83, 0, 0, 0, 164, 159, 116, 160, 200,
++ 0, 0, 0, 167, 162, 116, 163, 200, 0, 165,
++ 0, 167, 0, 59, 165, 76, 0, 165, 59, 235,
++ 0, 165, 60, 99, 83, 0, 165, 60, 83, 0,
++ 50, 188, 165, 0, 143, 123, 165, 0, 4, 0,
++ 166, 59, 235, 0, 166, 60, 50, 83, 0, 166,
++ 60, 99, 83, 0, 166, 60, 83, 0, 50, 188,
++ 166, 0, 143, 123, 166, 0, 4, 0, 167, 59,
++ 235, 0, 59, 167, 76, 0, 50, 188, 167, 0,
++ 167, 60, 50, 83, 0, 167, 60, 99, 83, 0,
++ 167, 60, 83, 0, 143, 123, 167, 0, 3, 0,
++ 13, 0, 13, 143, 0, 14, 0, 14, 143, 0,
++ 12, 0, 12, 143, 0, 0, 168, 97, 82, 172,
++ 178, 78, 142, 0, 168, 82, 178, 78, 142, 0,
++ 168, 97, 0, 0, 169, 97, 82, 173, 178, 78,
++ 142, 0, 169, 82, 178, 78, 142, 0, 169, 97,
++ 0, 0, 170, 97, 82, 174, 183, 177, 78, 142,
++ 0, 0, 170, 82, 175, 183, 177, 78, 142, 0,
++ 170, 97, 0, 0, 81, 0, 0, 81, 0, 179,
++ 0, 179, 180, 0, 0, 179, 180, 77, 0, 179,
++ 77, 0, 131, 122, 181, 0, 131, 0, 187, 122,
++ 181, 0, 187, 0, 1, 0, 240, 180, 0, 182,
++ 0, 181, 81, 182, 0, 205, 206, 164, 142, 0,
++ 205, 206, 164, 38, 107, 142, 0, 205, 206, 38,
++ 107, 142, 0, 184, 0, 183, 81, 184, 0, 1,
++ 0, 97, 0, 97, 36, 107, 0, 131, 186, 0,
++ 187, 186, 0, 0, 189, 0, 7, 0, 187, 7,
++ 0, 0, 188, 7, 0, 59, 189, 76, 0, 50,
++ 188, 189, 0, 50, 188, 0, 189, 59, 228, 0,
++ 189, 60, 99, 83, 0, 189, 60, 83, 0, 59,
++ 228, 0, 60, 99, 83, 0, 60, 83, 0, 143,
++ 123, 189, 0, 191, 0, 208, 0, 191, 208, 0,
++ 191, 193, 0, 0, 190, 0, 1, 77, 0, 0,
++ 0, 196, 0, 197, 0, 196, 197, 0, 32, 239,
++ 77, 0, 200, 0, 1, 200, 0, 82, 0, 199,
++ 78, 0, 199, 194, 195, 121, 192, 78, 0, 199,
++ 194, 195, 1, 78, 0, 199, 194, 195, 190, 78,
++ 0, 202, 207, 0, 202, 1, 0, 15, 59, 99,
++ 76, 0, 0, 18, 204, 207, 17, 0, 0, 0,
++ 205, 206, 210, 0, 205, 206, 221, 207, 0, 205,
++ 206, 209, 0, 210, 0, 221, 0, 200, 0, 218,
++ 0, 99, 77, 0, 0, 201, 16, 211, 207, 0,
++ 201, 0, 201, 16, 1, 0, 0, 0, 17, 212,
++ 59, 99, 76, 213, 207, 0, 203, 59, 99, 76,
++ 77, 0, 203, 1, 0, 0, 0, 0, 19, 59,
++ 223, 77, 214, 223, 77, 215, 223, 76, 216, 207,
++ 0, 0, 20, 59, 99, 76, 217, 207, 0, 23,
++ 77, 0, 24, 77, 0, 25, 77, 0, 25, 99,
++ 77, 0, 27, 222, 59, 99, 76, 77, 0, 27,
++ 222, 59, 99, 38, 224, 76, 77, 0, 27, 222,
++ 59, 99, 38, 224, 38, 224, 76, 77, 0, 27,
++ 222, 59, 99, 38, 224, 38, 224, 38, 227, 76,
++ 77, 0, 26, 97, 77, 0, 26, 50, 99, 77,
++ 0, 77, 0, 219, 0, 0, 19, 59, 113, 76,
++ 220, 207, 0, 21, 107, 38, 0, 21, 107, 10,
++ 107, 38, 0, 22, 38, 0, 97, 38, 142, 0,
++ 0, 7, 0, 0, 99, 0, 0, 225, 0, 226,
++ 0, 225, 81, 226, 0, 9, 59, 99, 76, 0,
++ 115, 0, 227, 81, 115, 0, 0, 229, 230, 0,
++ 232, 76, 0, 0, 233, 77, 231, 230, 0, 1,
++ 76, 0, 0, 10, 0, 233, 0, 233, 81, 10,
++ 0, 234, 0, 233, 81, 234, 0, 125, 122, 166,
++ 142, 0, 125, 122, 167, 142, 0, 125, 122, 186,
++ 142, 0, 129, 122, 167, 142, 0, 129, 122, 186,
++ 142, 0, 0, 236, 237, 0, 230, 0, 238, 76,
++ 0, 3, 0, 238, 81, 3, 0, 97, 0, 239,
++ 81, 97, 0, 31, 0
++};
++
++#endif
++
++#if YYDEBUG != 0
++static const short yyrline[] = { 0,
++ 244, 249, 263, 265, 265, 266, 268, 270, 271, 279,
++ 283, 294, 299, 304, 306, 308, 309, 310, 315, 322,
++ 324, 329, 334, 340, 342, 347, 352, 358, 360, 365,
++ 372, 374, 377, 379, 381, 383, 385, 387, 389, 393,
++ 397, 400, 403, 406, 410, 412, 415, 418, 422, 450,
++ 456, 459, 462, 465, 467, 471, 475, 479, 481, 484,
++ 488, 515, 517, 519, 521, 523, 525, 527, 529, 531,
++ 533, 535, 537, 539, 541, 545, 547, 551, 553, 556,
++ 560, 562, 569, 572, 580, 591, 690, 691, 693, 699,
++ 701, 715, 738, 740, 742, 746, 752, 754, 759, 761,
++ 766, 768, 769, 779, 784, 786, 787, 788, 795, 801,
++ 806, 809, 817, 822, 824, 825, 826, 833, 844, 848,
++ 854, 859, 864, 869, 871, 873, 882, 885, 889, 891,
++ 893, 898, 902, 905, 909, 912, 914, 926, 929, 931,
++ 933, 937, 941, 943, 946, 959, 962, 966, 968, 976,
++ 977, 978, 982, 984, 990, 991, 992, 995, 997, 1000,
++ 1002, 1005, 1008, 1014, 1021, 1023, 1030, 1037, 1040, 1047,
++ 1050, 1054, 1057, 1061, 1066, 1069, 1073, 1076, 1078, 1080,
++ 1082, 1089, 1091, 1092, 1093, 1098, 1100, 1105, 1113, 1118,
++ 1122, 1125, 1127, 1132, 1134, 1135, 1138, 1138, 1141, 1144,
++ 1146, 1148, 1151, 1153, 1156, 1162, 1164, 1168, 1179, 1187,
++ 1191, 1202, 1210, 1217, 1219, 1224, 1227, 1232, 1234, 1236,
++ 1243, 1245, 1253, 1259, 1264, 1266, 1268, 1275, 1277, 1283,
++ 1289, 1291, 1293, 1298, 1300, 1307, 1309, 1312, 1315, 1319,
++ 1322, 1326, 1329, 1333, 1338, 1340, 1344, 1346, 1348, 1350,
++ 1354, 1356, 1359, 1362, 1365, 1368, 1372, 1374, 1377, 1379,
++ 1384, 1387, 1392, 1394, 1396, 1410, 1417, 1422, 1428, 1433,
++ 1435, 1440, 1442, 1446, 1450, 1454, 1464, 1466, 1471, 1476,
++ 1479, 1483, 1486, 1490, 1493, 1496, 1499, 1503, 1506, 1510,
++ 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1532, 1540,
++ 1548, 1550, 1552, 1556, 1558, 1561, 1564, 1575, 1577, 1582,
++ 1584, 1587, 1601, 1604, 1607, 1609, 1611, 1619, 1627, 1638,
++ 1643, 1646, 1660, 1669, 1673, 1677, 1681, 1687, 1691, 1696,
++ 1699, 1704, 1707, 1708, 1725, 1730, 1733, 1745, 1747, 1757,
++ 1767, 1768, 1776, 1779, 1791, 1795, 1812, 1822, 1831, 1836,
++ 1841, 1846, 1850, 1854, 1865, 1872, 1879, 1886, 1897, 1903,
++ 1906, 1911, 1934, 1968, 1999, 2030, 2045, 2059, 2063, 2067,
++ 2070, 2075, 2077, 2080, 2082, 2086, 2091, 2094, 2100, 2105,
++ 2110, 2112, 2121, 2122, 2128, 2130, 2140, 2142, 2146, 2149,
++ 2155, 2165, 2174, 2183, 2193, 2207, 2212, 2217, 2219, 2228,
++ 2231, 2236, 2239, 2243
++};
++#endif
++
++
++#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
++
++static const char * const yytname[] = { "$","error","$undefined.","IDENTIFIER",
++"TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF",
++"ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT",
++"BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ATTRIBUTE",
++"EXTENSION","LABEL","REALPART","IMAGPART","ASSIGN","'='","'?'","':'","OROR",
++"ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE","LSHIFT","RSHIFT","'+'",
++"'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS","HYPERUNARY","POINTSAT",
++"'.'","'('","'['","INTERFACE","IMPLEMENTATION","END","SELECTOR","DEFS","ENCODE",
++"CLASSNAME","PUBLIC","PRIVATE","PROTECTED","PROTOCOL","OBJECTNAME","CLASS","ALIAS",
++"OBJC_STRING","')'","';'","'}'","'~'","'!'","','","'{'","']'","program","extdefs",
++"@1","@2","extdef","datadef","fndef","@3","@4","@5","@6","@7","@8","identifier",
++"unop","expr","exprlist","nonnull_exprlist","unary_expr","sizeof","alignof",
++"cast_expr","@9","expr_no_commas","@10","@11","@12","@13","@14","primary","@15",
++"string","old_style_parm_decls","lineno_datadecl","datadecls","datadecl","lineno_decl",
++"decls","setspecs","setattrs","decl","typed_declspecs","reserved_declspecs",
++"typed_declspecs_no_prefix_attr","reserved_declspecs_no_prefix_attr","declmods",
++"declmods_no_prefix_attr","typed_typespecs","reserved_typespecquals","typespec",
++"typespecqual_reserved","initdecls","notype_initdecls","maybeasm","initdcl",
++"@16","notype_initdcl","@17","maybe_attribute","attributes","attribute","attribute_list",
++"attrib","any_word","init","@18","initlist_maybe_comma","initlist1","initelt",
++"@19","initval","@20","designator_list","designator","nested_function","@21",
++"@22","notype_nested_function","@23","@24","declarator","after_type_declarator",
++"parm_declarator","notype_declarator","struct_head","union_head","enum_head",
++"structsp","@25","@26","@27","@28","maybecomma","maybecomma_warn","component_decl_list",
++"component_decl_list2","component_decl","components","component_declarator",
++"enumlist","enumerator","typename","absdcl","nonempty_type_quals","type_quals",
++"absdcl1","stmts","lineno_stmt_or_labels","xstmts","errstmt","pushlevel","maybe_label_decls",
++"label_decls","label_decl","compstmt_or_error","compstmt_start","compstmt","simple_if",
++"if_prefix","do_stmt_start","@29","save_filename","save_lineno","lineno_labeled_stmt",
++"lineno_stmt_or_label","stmt_or_label","stmt","@30","@31","@32","@33","@34",
++"@35","@36","all_iter_stmt","all_iter_stmt_simple","@37","label","maybe_type_qual",
++"xexpr","asm_operands","nonnull_asm_operands","asm_operand","asm_clobbers","parmlist",
++"@38","parmlist_1","@39","parmlist_2","parms","parm","parmlist_or_identifiers",
++"@40","parmlist_or_identifiers_1","identifiers","identifiers_or_typenames","extension", NULL
++};
++#endif
++
++static const short yyr1[] = { 0,
++ 84, 84, 86, 85, 87, 85, 88, 88, 88, 88,
++ 89, 89, 89, 89, 89, 89, 89, 89, 91, 92,
++ 90, 90, 93, 94, 90, 90, 95, 96, 90, 90,
++ 97, 97, 98, 98, 98, 98, 98, 98, 98, 99,
++ 100, 100, 101, 101, 102, 102, 102, 102, 102, 102,
++ 102, 102, 102, 102, 102, 103, 104, 105, 105, 106,
++ 105, 107, 107, 107, 107, 107, 107, 107, 107, 107,
++ 107, 107, 107, 107, 108, 107, 109, 107, 110, 111,
++ 107, 112, 107, 107, 107, 113, 113, 113, 113, 113,
++ 114, 113, 113, 113, 113, 113, 113, 113, 115, 115,
++ 116, 116, 116, 117, 118, 118, 118, 118, 119, 119,
++ 119, 119, 120, 121, 121, 121, 121, 122, 123, 124,
++ 124, 124, 124, 124, 124, 124, 125, 125, 126, 126,
++ 126, 126, 127, 127, 128, 128, 128, 129, 129, 129,
++ 129, 130, 130, 130, 130, 131, 131, 132, 132, 133,
++ 133, 133, 133, 133, 134, 134, 134, 135, 135, 136,
++ 136, 137, 137, 139, 138, 138, 141, 140, 140, 142,
++ 142, 143, 143, 144, 145, 145, 146, 146, 146, 146,
++ 146, 147, 147, 147, 147, 148, 149, 148, 148, 150,
++ 150, 151, 151, 152, 152, 153, 152, 152, 155, 154,
++ 154, 154, 156, 156, 157, 157, 157, 159, 160, 158,
++ 162, 163, 161, 164, 164, 165, 165, 165, 165, 165,
++ 165, 165, 166, 166, 166, 166, 166, 166, 166, 167,
++ 167, 167, 167, 167, 167, 167, 167, 168, 168, 169,
++ 169, 170, 170, 172, 171, 171, 171, 173, 171, 171,
++ 171, 174, 171, 175, 171, 171, 176, 176, 177, 177,
++ 178, 178, 179, 179, 179, 180, 180, 180, 180, 180,
++ 180, 181, 181, 182, 182, 182, 183, 183, 183, 184,
++ 184, 185, 185, 186, 186, 187, 187, 188, 188, 189,
++ 189, 189, 189, 189, 189, 189, 189, 189, 189, 190,
++ 191, 191, 191, 192, 192, 193, 194, 195, 195, 196,
++ 196, 197, 198, 198, 199, 200, 200, 200, 200, 201,
++ 201, 202, 204, 203, 205, 206, 207, 207, 208, 209,
++ 209, 210, 210, 210, 211, 210, 210, 210, 212, 213,
++ 210, 210, 210, 214, 215, 216, 210, 217, 210, 210,
++ 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
++ 218, 220, 219, 221, 221, 221, 221, 222, 222, 223,
++ 223, 224, 224, 225, 225, 226, 227, 227, 229, 228,
++ 230, 231, 230, 230, 232, 232, 232, 232, 233, 233,
++ 234, 234, 234, 234, 234, 236, 235, 237, 237, 238,
++ 238, 239, 239, 240
++};
++
++static const short yyr2[] = { 0,
++ 0, 1, 0, 2, 0, 3, 1, 1, 5, 2,
++ 3, 4, 4, 2, 2, 2, 2, 1, 0, 0,
++ 7, 4, 0, 0, 7, 4, 0, 0, 6, 3,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 0, 1, 1, 3, 1, 2, 2, 2, 2, 2,
++ 4, 2, 4, 2, 2, 1, 1, 1, 4, 0,
++ 7, 1, 3, 3, 3, 3, 3, 3, 3, 3,
++ 3, 3, 3, 3, 0, 4, 0, 4, 0, 0,
++ 7, 0, 5, 3, 3, 1, 1, 1, 3, 3,
++ 0, 4, 4, 4, 3, 3, 2, 2, 1, 2,
++ 0, 1, 2, 3, 1, 1, 2, 2, 4, 4,
++ 2, 2, 3, 1, 1, 2, 2, 0, 0, 4,
++ 4, 3, 3, 2, 2, 2, 2, 3, 0, 2,
++ 2, 2, 2, 3, 0, 2, 2, 1, 1, 2,
++ 2, 1, 1, 2, 2, 2, 3, 0, 2, 1,
++ 1, 1, 4, 4, 1, 1, 1, 1, 3, 1,
++ 3, 0, 4, 0, 6, 3, 0, 6, 3, 0,
++ 1, 1, 2, 6, 1, 3, 0, 1, 4, 6,
++ 4, 1, 1, 1, 1, 1, 0, 4, 1, 0,
++ 2, 1, 3, 3, 2, 0, 4, 1, 0, 4,
++ 1, 1, 1, 2, 2, 5, 3, 0, 0, 5,
++ 0, 0, 5, 1, 1, 3, 3, 4, 3, 3,
++ 3, 1, 3, 4, 4, 3, 3, 3, 1, 3,
++ 3, 3, 4, 4, 3, 3, 1, 1, 2, 1,
++ 2, 1, 2, 0, 7, 5, 2, 0, 7, 5,
++ 2, 0, 8, 0, 7, 2, 0, 1, 0, 1,
++ 1, 2, 0, 3, 2, 3, 1, 3, 1, 1,
++ 2, 1, 3, 4, 6, 5, 1, 3, 1, 1,
++ 3, 2, 2, 0, 1, 1, 2, 0, 2, 3,
++ 3, 2, 3, 4, 3, 2, 3, 2, 3, 1,
++ 1, 2, 2, 0, 1, 2, 0, 0, 1, 1,
++ 2, 3, 1, 2, 1, 2, 6, 5, 5, 2,
++ 2, 4, 0, 4, 0, 0, 3, 4, 3, 1,
++ 1, 1, 1, 2, 0, 4, 1, 3, 0, 0,
++ 7, 5, 2, 0, 0, 0, 12, 0, 6, 2,
++ 2, 2, 3, 6, 8, 10, 12, 3, 4, 1,
++ 1, 0, 6, 3, 5, 2, 3, 0, 1, 0,
++ 1, 0, 1, 1, 3, 4, 1, 3, 0, 2,
++ 2, 0, 4, 2, 0, 1, 1, 3, 1, 3,
++ 4, 4, 4, 4, 4, 0, 2, 1, 2, 1,
++ 3, 1, 3, 1
++};
++
++static const short yydefact[] = { 3,
++ 5, 0, 0, 0, 152, 143, 150, 142, 242, 238,
++ 240, 0, 0, 0, 404, 18, 4, 8, 7, 0,
++ 118, 118, 138, 129, 139, 172, 0, 0, 0, 151,
++ 0, 6, 16, 17, 243, 239, 241, 0, 0, 0,
++ 237, 288, 0, 0, 160, 119, 0, 15, 0, 14,
++ 0, 140, 129, 141, 145, 144, 127, 173, 31, 32,
++ 263, 247, 263, 251, 254, 256, 10, 86, 87, 99,
++ 56, 57, 0, 0, 0, 33, 35, 34, 0, 36,
++ 37, 0, 38, 39, 0, 0, 40, 58, 0, 0,
++ 62, 43, 45, 88, 0, 286, 0, 284, 148, 0,
++ 284, 177, 0, 0, 11, 0, 0, 30, 0, 396,
++ 0, 0, 170, 222, 288, 0, 0, 158, 119, 0,
++ 214, 215, 0, 0, 128, 131, 155, 156, 130, 132,
++ 157, 0, 0, 244, 0, 248, 0, 252, 54, 55,
++ 49, 46, 0, 0, 0, 0, 48, 0, 0, 0,
++ 50, 0, 52, 0, 0, 79, 77, 75, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 97, 98, 0, 0, 41, 0, 100, 47, 153, 288,
++ 379, 0, 119, 282, 285, 146, 154, 287, 148, 283,
++ 183, 184, 185, 182, 0, 175, 178, 289, 232, 231,
++ 161, 162, 236, 0, 230, 0, 0, 235, 0, 0,
++ 28, 0, 325, 106, 326, 169, 171, 0, 0, 13,
++ 0, 0, 22, 0, 170, 396, 0, 12, 26, 0,
++ 170, 270, 265, 118, 262, 118, 0, 263, 170, 263,
++ 279, 280, 259, 277, 0, 90, 89, 315, 307, 0,
++ 0, 9, 44, 0, 0, 85, 84, 0, 0, 0,
++ 0, 73, 74, 72, 71, 70, 68, 69, 63, 64,
++ 65, 66, 67, 96, 95, 0, 42, 0, 292, 0,
++ 296, 0, 298, 0, 0, 379, 0, 149, 147, 0,
++ 177, 41, 0, 0, 400, 386, 118, 118, 398, 0,
++ 387, 389, 397, 0, 233, 234, 306, 0, 108, 103,
++ 107, 0, 167, 220, 216, 159, 221, 20, 166, 217,
++ 219, 0, 24, 246, 325, 264, 325, 271, 0, 250,
++ 0, 0, 260, 0, 259, 316, 308, 92, 60, 59,
++ 51, 53, 0, 0, 78, 76, 93, 94, 291, 290,
++ 380, 297, 299, 293, 295, 0, 174, 176, 86, 0,
++ 163, 384, 284, 284, 381, 382, 0, 399, 0, 0,
++ 29, 313, 104, 118, 118, 135, 0, 0, 164, 218,
++ 0, 266, 272, 326, 268, 170, 170, 281, 278, 170,
++ 0, 0, 0, 309, 310, 0, 80, 83, 294, 179,
++ 0, 181, 229, 288, 379, 119, 170, 170, 170, 288,
++ 119, 170, 170, 0, 388, 390, 401, 314, 111, 0,
++ 112, 0, 135, 133, 189, 187, 186, 168, 21, 0,
++ 25, 325, 0, 245, 249, 255, 170, 402, 0, 0,
++ 0, 325, 0, 0, 115, 326, 301, 311, 202, 86,
++ 0, 0, 199, 0, 201, 0, 257, 192, 198, 0,
++ 0, 0, 0, 292, 0, 396, 0, 391, 392, 393,
++ 292, 0, 394, 395, 383, 0, 0, 162, 134, 137,
++ 136, 0, 165, 273, 0, 170, 253, 312, 0, 318,
++ 117, 116, 305, 0, 319, 303, 326, 302, 0, 205,
++ 0, 0, 196, 61, 0, 191, 0, 204, 195, 81,
++ 180, 227, 228, 223, 0, 226, 0, 109, 110, 0,
++ 170, 0, 274, 403, 317, 0, 152, 0, 339, 323,
++ 0, 0, 0, 0, 0, 0, 0, 0, 368, 360,
++ 0, 0, 113, 118, 118, 332, 337, 0, 0, 329,
++ 330, 333, 361, 331, 0, 0, 207, 0, 0, 193,
++ 194, 224, 225, 188, 276, 170, 0, 0, 325, 370,
++ 0, 0, 366, 350, 351, 352, 0, 0, 0, 369,
++ 0, 170, 334, 124, 0, 125, 0, 0, 321, 326,
++ 320, 343, 0, 126, 0, 200, 197, 275, 0, 0,
++ 0, 371, 45, 0, 0, 0, 364, 353, 0, 358,
++ 0, 367, 0, 122, 208, 0, 123, 211, 338, 325,
++ 0, 0, 206, 322, 0, 324, 362, 344, 348, 0,
++ 359, 0, 120, 0, 121, 0, 336, 327, 325, 0,
++ 340, 325, 370, 325, 365, 372, 0, 209, 212, 328,
++ 342, 325, 363, 0, 349, 0, 0, 373, 374, 354,
++ 0, 0, 341, 345, 0, 372, 0, 0, 210, 213,
++ 370, 0, 0, 355, 375, 0, 376, 0, 0, 346,
++ 377, 0, 356, 325, 0, 0, 347, 357, 378, 0,
++ 0, 0
++};
++
++static const short yydefgoto[] = { 690,
++ 1, 2, 3, 17, 18, 19, 224, 378, 230, 381,
++ 112, 308, 454, 85, 144, 276, 87, 88, 89, 90,
++ 91, 396, 92, 261, 260, 258, 462, 259, 93, 145,
++ 94, 211, 212, 213, 373, 441, 442, 20, 107, 543,
++ 297, 57, 374, 424, 298, 23, 98, 186, 24, 129,
++ 117, 44, 113, 118, 430, 45, 377, 216, 217, 26,
++ 195, 196, 197, 428, 482, 456, 457, 458, 559, 459,
++ 502, 460, 461, 614, 634, 661, 617, 636, 662, 202,
++ 121, 407, 122, 27, 28, 29, 30, 238, 240, 245,
++ 137, 506, 334, 132, 133, 235, 382, 383, 243, 244,
++ 100, 184, 101, 103, 185, 443, 444, 494, 214, 337,
++ 393, 394, 395, 371, 249, 372, 547, 548, 549, 569,
++ 590, 312, 591, 447, 550, 551, 620, 568, 652, 643,
++ 671, 684, 644, 552, 553, 642, 554, 581, 604, 657,
++ 658, 659, 682, 281, 282, 299, 414, 300, 301, 302,
++ 205, 206, 303, 304, 439, 95
++};
++
++static const short yypact[] = { 95,
++ 110, 2206, 2206, 260,-32768,-32768,-32768,-32768, 40, 40,
++ 40, 57, 59, 89,-32768,-32768,-32768,-32768,-32768, 42,
++ 99, 2234, 79,-32768, 40,-32768, 87, 93, 108,-32768,
++ 2206,-32768,-32768,-32768, 40, 40, 40, 2068, 2002, 125,
++-32768,-32768, 42, 147,-32768, 40, 1355,-32768, 257,-32768,
++ 42, 79,-32768, 40,-32768,-32768, 696,-32768,-32768,-32768,
++-32768, 76,-32768, 124,-32768, 132,-32768,-32768,-32768,-32768,
++-32768,-32768, 2068, 2068, 373,-32768,-32768,-32768, 2068,-32768,
++-32768, 721,-32768,-32768, 2068, 149, 153,-32768, 2095, 2122,
++-32768, 2335, 881, 231, 2068,-32768, 186, 319,-32768, 203,
++ 578, 708, 627, 304,-32768, 257, 42,-32768, 194,-32768,
++ 1430, 438, 40,-32768,-32768, 257, 177,-32768, 40, 276,
++ 398, 417, 188, 1417, 696,-32768,-32768,-32768,-32768, 40,
++-32768, 208, 778,-32768, 214,-32768, 468,-32768,-32768,-32768,
++-32768,-32768, 223, 269, 288, 312,-32768, 315, 2068, 721,
++-32768, 721,-32768, 2068, 2068, 362,-32768,-32768, 2068, 2068,
++ 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
++-32768,-32768, 373, 373, 2068, 2068,-32768,-32768,-32768,-32768,
++ 319, 1457, 40,-32768, 426, 760,-32768,-32768,-32768,-32768,
++-32768,-32768,-32768,-32768, 50,-32768, 344,-32768, 417,-32768,
++-32768, 385, 417, 419,-32768, 611, 1512,-32768, 349, 361,
++-32768, 316, 70,-32768,-32768, 405, 40, 545, 323,-32768,
++ 257, 257,-32768, 438, 40,-32768, 1539,-32768,-32768, 438,
++ 40,-32768,-32768, 428, 370, 198, 953,-32768, 40,-32768,
++-32768, 413, 383,-32768, 468,-32768,-32768,-32768, 376, 391,
++ 1891,-32768, 2335, 402, 411, 2335, 2335, 2068, 443, 2068,
++ 2068, 1564, 1645, 1859, 1078, 747, 838, 838, 356, 356,
++-32768,-32768,-32768,-32768,-32768, 432, 153, 412, 463, 485,
++-32768, 871,-32768, 434, 319,-32768, 1594,-32768, 760, 445,
++ 708, 2149, 54, 448,-32768,-32768,-32768, 1036,-32768, 450,
++ 197,-32768,-32768, 81,-32768,-32768,-32768, 39,-32768,-32768,
++-32768, 846,-32768, 398,-32768,-32768, 398,-32768, 483,-32768,
++-32768, 452,-32768,-32768,-32768,-32768,-32768,-32768, 461,-32768,
++ 473, 2068, 373, 480, 383,-32768, 496,-32768,-32768,-32768,
++-32768,-32768, 508, 2068, 2258, 1483,-32768,-32768, 426,-32768,
++-32768,-32768, 426,-32768,-32768, 493,-32768,-32768, 85, 510,
++-32768,-32768, 550, 497,-32768,-32768, 1006,-32768, 585, 288,
++-32768,-32768,-32768, 512, 328,-32768, 1291, 39,-32768,-32768,
++ 39, 513,-32768,-32768, 513, 40, 40, 2335,-32768, 40,
++ 515, 373, 814, 496,-32768, 1111,-32768, 2351,-32768,-32768,
++ 2068,-32768,-32768,-32768, 497, 40, 133, 140, 40,-32768,
++ 40, 140, 40, 871,-32768,-32768,-32768,-32768,-32768, 257,
++-32768, 42,-32768, 692,-32768,-32768, 2335,-32768,-32768, 1291,
++-32768,-32768, 430,-32768,-32768,-32768, 40,-32768, 220, 433,
++ 641, 518, 520, 894,-32768,-32768,-32768,-32768,-32768, 563,
++ 373, 2068,-32768, 564, 2335, 525, 526,-32768,-32768, 326,
++ 1231, 2068, 146, 500, 550,-32768, 1621,-32768,-32768,-32768,
++ 423, 497,-32768,-32768,-32768, 237, 250, 112, 692,-32768,
++-32768, 1111,-32768,-32768, 2068, 49,-32768,-32768, 373,-32768,
++-32768,-32768,-32768, 541,-32768,-32768,-32768,-32768, 1757,-32768,
++ 2245, 1111,-32768,-32768, 1171,-32768, 1346,-32768,-32768, 2351,
++-32768, 504, 504,-32768, 1676,-32768, 537,-32768,-32768, 544,
++ 1778, 2068,-32768,-32768,-32768, 1837, 588, 570,-32768,-32768,
++ 572, 576, 2068, 598, 566, 596, 2015, 193, 633,-32768,
++ 638, 601,-32768, 602, 2238,-32768, 664, 974, 66,-32768,
++-32768,-32768,-32768,-32768, 1948, 2068,-32768, 604, 1346,-32768,
++-32768,-32768,-32768,-32768,-32768, 1778, 2068, 624,-32768, 2068,
++ 2068, 1701,-32768,-32768,-32768,-32768, 615, 2068, 616,-32768,
++ 629, 40,-32768,-32768, 257,-32768, 42, 1054,-32768,-32768,
++-32768,-32768, 2068,-32768, 2290,-32768,-32768,-32768, 618, 2068,
++ 714,-32768, 687, 659, 662, 2068,-32768,-32768, 666,-32768,
++ 2068,-32768, 271,-32768, 266, 284,-32768, 158,-32768,-32768,
++ 1837, 663,-32768,-32768, 672,-32768,-32768,-32768,-32768, 2308,
++-32768, 24,-32768, 438,-32768, 438,-32768,-32768,-32768, 674,
++-32768,-32768, 2068,-32768,-32768, 744, 679,-32768,-32768,-32768,
++-32768,-32768,-32768, 681,-32768, 700, 43, 684,-32768,-32768,
++ 288, 288,-32768,-32768, 2068, 744, 691, 744,-32768,-32768,
++ 2068, 702, 61,-32768,-32768, 705,-32768, 419, 706,-32768,
++ 231, 176,-32768,-32768, 709, 419,-32768,-32768, 231, 787,
++ 789,-32768
++};
++
++static const short yypgoto[] = {-32768,
++-32768,-32768,-32768, 103,-32768,-32768,-32768,-32768,-32768,-32768,
++-32768,-32768, -24,-32768, -38, 516, -110, 477,-32768,-32768,
++ -21,-32768, 255,-32768,-32768,-32768,-32768,-32768, 232,-32768,
++ -194, -199, 591,-32768,-32768, 363,-32768, -3, -60, 252,
++ 10, 757,-32768, 389, 19, -14, -90, 635, 27, -169,
++ -390, -49, -114, -68,-32768,-32768,-32768, -171, 26, 68,
++-32768, 522,-32768, 386,-32768, -347,-32768, 325,-32768, -405,
++-32768,-32768, 406,-32768,-32768,-32768,-32768,-32768,-32768, -42,
++ -77, 105, -9,-32768,-32768,-32768, -43,-32768,-32768,-32768,
++-32768,-32768, 511, -37,-32768, 612, 538, 435, 625, 546,
++ -35, -92, -72, -91, -105, 429,-32768,-32768, -185,-32768,
++-32768,-32768, 486, 16,-32768, -125,-32768,-32768,-32768,-32768,
++ -57, -361, -461, 456,-32768, 261,-32768,-32768,-32768,-32768,
++-32768,-32768,-32768,-32768,-32768,-32768, 283,-32768, -503, 226,
++-32768, 238,-32768, 621,-32768, -250,-32768,-32768,-32768, 543,
++ -193,-32768,-32768,-32768,-32768, 13
++};
++
++
++#define YYLAST 2403
++
++
++static const short yytable[] = { 86,
++ 97, 123, 62, 64, 66, 225, 120, 52, 190, 293,
++ 47, 21, 21, 131, 31, 31, 288, 49, 51, 250,
++ 22, 22, 433, 218, 318, 135, 309, 25, 25, 476,
++ 323, 351, 320, 104, 35, 36, 37, 201, 219, 370,
++ 21, 124, 234, 31, 41, 46, 146, 54, 53, 22,
++ 141, 139, 140, 319, 215, 509, 25, 142, 222, 324,
++ 236, 646, 177, 147, 277, 99, 592, 330, 46, 14,
++ -102, 14, 209, 178, 119, 280, 46, 194, 14, 310,
++ 666, 131, 130, 55, 499, 56, 522, 225, 279, 59,
++ 60, 42, 58, 199, -1, 59, 60, 203, 678, 647,
++ 43, 561, 58, 58, 58, 32, 104, 601, 99, -2,
++ 59, 60, 242, 58, 254, 38, 255, 39, 667, 288,
++ 248, 58, 285, 183, 593, 290, 183, 189, 46, 361,
++ 291, 119, 46, 67, 520, 526, 679, 278, 109, 654,
++ 314, 119, 131, 284, 317, 237, 234, 40, 274, 275,
++ 130, -102, 316, 597, 558, 215, 368, 134, 637, 99,
++ 400, 369, 14, 475, 236, 401, 215, 676, 61, 14,
++ 110, 111, 215, 349, 63, 48, 99, 650, 99, 353,
++ 653, 277, 655, 102, 109, 142, 58, -162, 322, 65,
++ 663, 466, 467, -162, 613, 59, 60, 58, 110, 111,
++ 329, 5, 331, 7, 188, 136, 183, 445, 199, 9,
++ 10, 11, 203, 138, 434, 435, 110, 111, 436, 343,
++ 242, 511, 687, 105, 148, 13, 149, 106, 621, 340,
++ 325, 25, 327, 149, -162, 468, 469, 470, -162, 177,
++ 473, 474, 578, 119, 418, 131, 119, 119, 356, 237,
++ 58, 685, 204, 220, 481, 491, 686, 221, 496, 41,
++ 114, 179, 189, 99, 228, 487, 194, 384, 106, 384,
++ 409, 413, 514, 366, -269, -269, 223, 367, 187, -19,
++ -19, -19, -19, 52, 58, 231, 14, -19, -19, -19,
++ 463, 239, 109, 363, 364, -162, 488, 375, 246, 280,
++ 489, -162, 109, -19, 183, -162, 115, 25, 242, 481,
++ 183, -162, 464, 518, 523, 116, 210, 221, 471, -105,
++ -105, -105, -105, 54, 53, -105, 519, -105, -105, -105,
++ 106, 5, 55, 7, 56, 446, 33, 34, 376, 9,
++ 10, 11, -162, -105, 247, 465, -162, 633, 14, 565,
++ 472, 221, -162, 408, 412, 13, -162, -19, 349, 353,
++ 635, 507, 110, 111, 106, 349, 353, 438, 180, 248,
++ 420, 422, 477, 546, 384, 59, 60, 181, 182, 200,
++ 131, 226, 227, 451, 446, 452, 497, 251, 406, 411,
++ 486, 252, 25, 429, 598, 104, 431, -105, 315, -82,
++ 546, 423, 292, 253, 421, 168, 169, 170, 256, 257,
++ 612, 109, 478, 262, 263, 264, 265, 266, 267, 268,
++ 269, 270, 271, 272, 273, 41, 500, 70, 517, 198,
++ 411, 306, 41, 114, 648, 131, 649, 307, 210, 25,
++ 313, -325, -325, -325, -325, 119, 326, 46, 332, -325,
++ -325, -325, 14, 336, 199, 203, 226, 227, 119, 14,
++ 542, 199, 203, 333, 524, -325, 338, 485, 241, 198,
++ 59, 60, 410, 58, 541, 110, 111, 341, 58, 115,
++ 344, 405, 182, 681, 286, 287, 342, 542, 116, 406,
++ 406, 689, 14, 142, 348, 546, 411, 411, 577, 41,
++ 225, 541, 41, 403, -267, -267, 198, 347, 544, 307,
++ 490, 555, 180, 579, 345, 346, 352, 545, 379, -101,
++ 357, 181, 182, 362, 25, 365, 14, 392, 599, 14,
++ 52, 602, 605, 178, 380, 669, 670, 616, 386, 609,
++ 585, 587, 615, 286, 287, 397, 410, 41, 114, 404,
++ 387, 198, 41, 403, 622, 405, 182, 390, 405, 182,
++ 350, 625, 466, 467, 544, 151, 153, 555, 512, 513,
++ 54, 53, 632, 545, 14, 399, 215, 618, 215, 14,
++ 25, 5, 542, 7, 188, 402, 388, 417, 419, 9,
++ 10, 11, 437, 432, 115, -304, 541, 495, 398, 404,
++ -31, 503, 504, 116, 602, 13, 505, 14, 405, 182,
++ 119, 294, 46, 295, 5, 6, 7, 8, 525, 563,
++ 296, 564, 9, 10, 11, -32, 672, 180, 567, 41,
++ 570, 427, 602, 198, 571, 573, 181, 182, 13, 580,
++ 14, 210, 574, -114, -114, -114, -114, -114, -114, -114,
++ 455, -114, -114, -114, -114, -114, 14, -114, -114, -114,
++ -114, -114, -114, -114, -114, -114, -114, -114, -114, -114,
++ -114, -114, 575, -114, -114, 582, 42, 583, 584, 588,
++ -114, 596, 600, -114, 427, 43, -385, 611, -114, -114,
++ -114, 608, 610, 624, -114, -114, 480, 127, 128, -114,
++ 126, 127, 128, 9, 10, 11, 501, 9, 10, 11,
++ 59, 60, 191, 192, 193, 455, 510, -114, -114, -114,
++ -114, 143, -114, 68, 5, 14, 7, 96, 69, 70,
++ 626, 71, 9, 10, 11, 628, 455, 629, 640, 521,
++ 171, 172, 631, 173, 174, 175, 176, 641, 13, 72,
++ 651, 15, 656, 73, 74, 660, 455, 664, 665, 455,
++ 75, 455, 627, 76, 668, 127, 128, 674, 77, 78,
++ 79, 9, 10, 11, 80, 81, 566, 677, 232, 82,
++ 680, 5, 683, 7, 96, 688, 691, 572, 692, 9,
++ 10, 11, 164, 165, 166, 167, 168, 169, 170, 83,
++ 84, 603, -91, 311, 492, 13, 594, 360, 15, 125,
++ 595, 479, 358, 455, 440, 483, -325, -325, -325, -325,
++ -325, -325, -325, 289, -325, -325, -325, -325, -325, 560,
++ -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
++ -325, -325, -325, -325, -325, 391, -325, -325, 328, 5,
++ 6, 7, 8, -325, 233, -261, -325, 9, 10, 11,
++ 630, -325, -325, -325, 385, 508, 484, -325, -325, 335,
++ 493, 294, -325, 13, 5, 6, 7, 8, 389, 448,
++ 296, 638, 9, 10, 11, 166, 167, 168, 169, 170,
++ -325, 673, -325, -325, 210, -325, -325, -325, 13, 498,
++ 14, -325, -325, 639, -325, 675, 354, 0, -325, 416,
++ -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
++ -325, 0, -325, 0, -325, 0, -325, -325, 0, 0,
++ 0, 0, 0, -325, 171, 172, -325, 173, 174, 175,
++ 176, -325, -325, -325, 0, 0, -385, -325, -325, 0,
++ 0, 0, -325, 232, 0, 0, 5, 0, 7, 96,
++ 0, 0, 0, 0, 9, 10, 11, 0, 0, 0,
++ -325, -300, -325, -325, 589, -325, -325, -325, 0, 0,
++ 13, -325, -325, 15, -325, 0, 0, 0, -325, 0,
++ -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
++ -325, 0, -325, 0, -325, 0, -325, -325, 0, 5,
++ 6, 7, 8, -325, 0, 415, -325, 9, 10, 11,
++ 0, -325, -325, -325, 0, 0, 0, -325, -325, 0,
++ 0, 0, -325, 13, 0, 14, 0, 0, 0, 5,
++ 6, 7, 8, 0, 0, 0, 0, 9, 10, 11,
++ -325, 0, -325, -325, 619, -325, -335, -335, 0, 0,
++ 0, -335, -335, 13, -335, 14, 0, 0, -335, 0,
++ -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
++ -335, 0, -335, 0, -335, 0, -335, -335, 0, 0,
++ 0, 0, 0, -335, 0, 0, -335, 0, 0, 0,
++ 0, -335, -335, -335, 0, 0, 0, -335, -335, 0,
++ 0, 449, -335, 450, 60, 0, 0, 0, 69, 70,
++ 0, 71, 163, 164, 165, 166, 167, 168, 169, 170,
++ -335, 0, -335, -335, 0, -335, 0, 0, 0, 72,
++ 0, 15, 0, 73, 74, 0, 0, 0, 0, 0,
++ 75, 0, 0, 76, 0, 0, 0, 0, 77, 78,
++ 79, 0, 0, 0, 80, 81, 0, 0, 451, 82,
++ 452, 449, 0, 450, 60, 0, 0, 0, 69, 70,
++ 0, 71, 0, 0, 0, 0, 0, 0, -190, 83,
++ 84, 0, 453, 0, 0, 0, 0, 0, 0, 72,
++ 0, 15, 0, 73, 74, 0, 0, 0, 0, 0,
++ 75, 0, 0, 76, 0, 0, 0, 0, 77, 78,
++ 79, 0, 0, 0, 80, 81, 0, 0, 451, 82,
++ 452, 449, 0, 68, 0, 0, 0, 0, 69, 70,
++ 0, 71, 0, 0, 0, 0, 0, 0, -258, 83,
++ 84, 0, 453, 0, 0, 0, 0, 0, 0, 72,
++ 0, 15, 0, 73, 74, 0, -203, 0, 0, 0,
++ 75, 0, 0, 76, 0, 0, 0, 0, 77, 78,
++ 79, 0, 0, 0, 80, 81, 0, 0, -203, 82,
++ -203, 425, 0, 68, 0, 0, 0, 0, 69, 70,
++ 0, 71, 0, 0, 0, 0, 0, 0, 0, 83,
++ 84, 0, 453, 0, 0, 0, 0, 0, 0, 72,
++ 0, 15, 0, 73, 74, 0, 0, 0, 0, 0,
++ 75, 0, 0, 76, 0, 0, 0, 0, 77, 78,
++ 79, 0, 0, 0, 80, 81, 449, 0, 68, 82,
++ 0, 0, 0, 69, 70, 108, 71, 0, -27, -27,
++ -27, -27, 0, 0, 0, 0, -27, -27, -27, 83,
++ 84, 0, 426, 0, 72, 0, 15, 0, 73, 74,
++ 0, 109, -27, 0, -162, 75, 0, 0, 76, 0,
++ -162, 0, 0, 77, 78, 79, 0, 0, 0, 80,
++ 81, 0, 0, 0, 82, 0, 0, 0, 0, 0,
++ 0, 0, 0, 110, 111, 0, 0, 229, 0, 0,
++ -23, -23, -23, -23, 83, 84, 0, 453, -23, -23,
++ -23, -162, 68, 0, 0, -162, -27, 69, 70, 0,
++ 71, 0, 0, 109, -23, 0, -162, 0, 0, 0,
++ 0, 0, -162, 0, 0, 0, 0, 0, 72, 68,
++ 15, 0, 73, 74, 69, 70, 0, 71, 0, 75,
++ 0, 0, 76, 0, 0, 110, 111, 77, 78, 207,
++ 0, 0, 0, 80, 81, 72, 0, 15, 82, 73,
++ 74, 0, 0, -162, 0, 0, 75, -162, -23, 76,
++ 0, 0, 0, 0, 77, 78, 79, 0, 83, 84,
++ 80, 81, 208, 0, 68, 82, 0, 0, 0, 69,
++ 70, 0, 71, 159, 160, 161, 162, 163, 164, 165,
++ 166, 167, 168, 169, 170, 83, 84, 0, 0, 283,
++ 72, 68, 15, 0, 73, 74, 69, 70, 0, 71,
++ 0, 75, 0, 0, 76, 0, 0, 0, 0, 77,
++ 78, 79, 0, 0, 0, 80, 81, 72, 0, 15,
++ 82, 73, 74, 0, 0, 0, 0, 0, 75, 0,
++ 0, 76, 0, 0, 0, 0, 77, 78, 79, 0,
++ 83, 84, 80, 81, 305, 0, 68, 82, 0, 0,
++ 0, 69, 70, 0, 71, 160, 161, 162, 163, 164,
++ 165, 166, 167, 168, 169, 170, 0, 83, 84, 0,
++ 0, 321, 72, 68, 15, 0, 73, 74, 69, 70,
++ 0, 71, 0, 75, 0, 0, 76, 0, 0, 0,
++ 0, 77, 78, 79, 0, 0, 0, 80, 81, 72,
++ 0, 15, 82, 73, 74, 0, 0, 0, 0, 0,
++ 75, 0, 0, 76, 0, 0, 0, 0, 77, 78,
++ 515, 0, 83, 84, 80, 81, 355, 0, 68, 82,
++ 0, 0, 0, 69, 70, 0, 71, 161, 162, 163,
++ 164, 165, 166, 167, 168, 169, 170, 0, 0, 83,
++ 84, 0, 0, 516, 72, 0, 15, 0, 73, 74,
++ 606, 0, 0, 0, 0, 75, 0, 0, 76, 0,
++ 0, 0, 0, 77, 78, 79, 0, 0, 0, 80,
++ 81, 0, 0, 0, 82, 154, 155, 156, 607, 157,
++ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
++ 168, 169, 170, 0, 83, 84, 0, 0, 562, 450,
++ 527, 6, 7, 8, 69, 70, 0, 71, 9, 10,
++ 11, 528, 0, 529, 530, 531, 532, 533, 534, 535,
++ 536, 537, 538, 539, 13, 72, 14, 15, 0, 73,
++ 74, 0, 0, 0, 0, 0, 75, 0, 0, 76,
++ 0, 0, 0, 0, 77, 78, 79, 14, 0, 0,
++ 80, 81, 154, 155, 156, 82, 157, 158, 159, 160,
++ 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
++ 0, 0, 0, 540, 0, 83, 84, 0, 248, 450,
++ 60, 0, 0, 0, 69, 70, 0, 71, 0, 0,
++ 0, 528, 0, 529, 530, 531, 532, 533, 534, 535,
++ 536, 537, 538, 539, 0, 72, 0, 15, 0, 73,
++ 74, 0, 0, 0, 0, 0, 75, 0, 0, 76,
++ 0, 0, 0, 0, 77, 78, 79, 0, 0, 0,
++ 80, 81, 0, 68, 0, 82, 0, 0, 69, 70,
++ 0, 71, 162, 163, 164, 165, 166, 167, 168, 169,
++ 170, 0, 0, 540, 0, 83, 84, 0, 248, 72,
++ 0, 15, 0, 73, 74, 0, 0, 0, 0, 0,
++ 75, 0, 0, 76, 0, 0, 0, 0, 77, 78,
++ 79, 0, 0, 0, 80, 81, 0, 0, 0, 82,
++ 68, 5, 6, 7, 8, 69, 70, 0, 71, 9,
++ 10, 11, 0, 0, 0, 0, 0, 0, 0, 83,
++ 84, 0, 339, 0, 0, 13, 72, 14, 15, 0,
++ 73, 74, 0, 0, 0, 0, 0, 75, 0, 0,
++ 76, 0, 0, 0, 0, 77, 78, 79, 0, 0,
++ 0, 80, 81, 0, 68, 5, 82, 7, 96, 69,
++ 70, 0, 71, 9, 10, 11, 0, 68, 0, 0,
++ 0, 0, 69, 70, 0, 71, 83, 84, 0, 13,
++ 72, 0, 15, 0, 73, 74, 0, 0, 0, 0,
++ 0, 75, 0, 72, 76, 15, 0, 73, 74, 77,
++ 78, 79, 0, 0, 75, 80, 81, 76, 0, 0,
++ 82, 0, 77, 78, 79, 0, 0, 0, 80, 81,
++ 68, 0, 0, 82, 0, 69, 70, 0, 71, 0,
++ 83, 84, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 576, 0, 83, 84, 0, 72, 68, 15, 0,
++ 73, 74, 69, 70, 0, 71, 0, 75, 0, 0,
++ 76, 0, 0, 0, 0, 77, 78, 79, 0, 0,
++ 0, 80, 81, 72, 68, 15, 82, 73, 74, 69,
++ 70, 0, 71, 0, 75, 0, 0, 76, 0, 0,
++ 0, 0, 77, 78, 79, 0, 83, 84, 80, 81,
++ 72, 359, 15, 150, 73, 74, 69, 70, 0, 71,
++ 0, 75, 0, 0, 76, 0, 0, 0, 0, 77,
++ 78, 79, 0, 83, 84, 80, 81, 72, 0, 15,
++ 152, 73, 74, 0, 0, 0, 0, 0, 75, 0,
++ 0, 76, 0, 0, 0, 0, 77, 78, 79, 0,
++ 83, 84, 80, 81, 0, 0, 4, 82, -118, 5,
++ 6, 7, 8, 0, 0, 0, 0, 9, 10, 11,
++ 0, 0, 0, 0, 0, 0, 0, 83, 84, 0,
++ 0, 0, 12, 13, 0, 14, 15, 5, 6, 7,
++ 8, 5, 6, 7, 8, 9, 10, 11, 0, 9,
++ 10, 11, 0, 0, 556, -118, 0, 0, 0, 0,
++ 0, 13, 0, 14, -118, 13, 0, 14, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 154,
++ 155, 156, 16, 157, 158, 159, 160, 161, 162, 163,
++ 164, 165, 166, 167, 168, 169, 170, 158, 159, 160,
++ 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
++ 50, 0, 0, 0, 586, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 154, 155, 156, 557, 157, 158,
++ 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
++ 169, 170, 154, 155, 156, 645, 157, 158, 159, 160,
++ 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 154,
++ 155, 156, 623, 157, 158, 159, 160, 161, 162, 163,
++ 164, 165, 166, 167, 168, 169, 170, 156, 0, 157,
++ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
++ 168, 169, 170
++};
++
++static const short yycheck[] = { 38,
++ 39, 51, 27, 28, 29, 120, 49, 22, 101, 204,
++ 20, 2, 3, 57, 2, 3, 186, 21, 22, 145,
++ 2, 3, 384, 115, 224, 63, 212, 2, 3, 420,
++ 230, 282, 226, 43, 9, 10, 11, 106, 116, 1,
++ 31, 51, 133, 31, 3, 20, 82, 22, 22, 31,
++ 75, 73, 74, 225, 112, 461, 31, 79, 119, 231,
++ 133, 38, 9, 85, 175, 39, 1, 239, 43, 30,
++ 1, 30, 111, 95, 49, 181, 51, 102, 30, 10,
++ 38, 125, 57, 5, 446, 7, 38, 202, 180, 3,
++ 4, 50, 25, 103, 0, 3, 4, 107, 38, 76,
++ 59, 507, 35, 36, 37, 3, 116, 569, 82, 0,
++ 3, 4, 137, 46, 150, 59, 152, 59, 76, 289,
++ 82, 54, 183, 98, 59, 76, 101, 101, 103, 76,
++ 81, 106, 107, 31, 482, 497, 76, 176, 27, 643,
++ 218, 116, 186, 182, 222, 133, 237, 59, 173, 174,
++ 125, 82, 221, 559, 502, 213, 76, 82, 620, 133,
++ 76, 81, 30, 414, 237, 81, 224, 671, 82, 30,
++ 59, 60, 230, 279, 82, 77, 150, 639, 152, 285,
++ 642, 292, 644, 59, 27, 207, 119, 30, 227, 82,
++ 652, 59, 60, 36, 585, 3, 4, 130, 59, 60,
++ 238, 4, 240, 6, 7, 82, 181, 393, 218, 12,
++ 13, 14, 222, 82, 386, 387, 59, 60, 390, 258,
++ 245, 76, 684, 77, 76, 28, 81, 81, 590, 251,
++ 234, 206, 236, 81, 77, 407, 408, 409, 81, 9,
++ 412, 413, 50, 218, 370, 289, 221, 222, 287, 237,
++ 183, 76, 59, 77, 424, 441, 81, 81, 444, 3,
++ 4, 76, 236, 237, 77, 437, 291, 325, 81, 327,
++ 363, 364, 466, 77, 77, 78, 1, 81, 76, 4,
++ 5, 6, 7, 298, 217, 78, 30, 12, 13, 14,
++ 401, 78, 27, 297, 298, 30, 77, 312, 76, 405,
++ 81, 36, 27, 28, 279, 30, 50, 282, 333, 479,
++ 285, 36, 404, 77, 486, 59, 1, 81, 410, 4,
++ 5, 6, 7, 298, 298, 10, 77, 12, 13, 14,
++ 81, 4, 5, 6, 7, 393, 77, 78, 312, 12,
++ 13, 14, 77, 28, 76, 406, 81, 77, 30, 521,
++ 411, 81, 77, 363, 364, 28, 81, 82, 464, 465,
++ 77, 36, 59, 60, 81, 471, 472, 392, 50, 82,
++ 374, 375, 422, 499, 432, 3, 4, 59, 60, 76,
++ 424, 59, 60, 58, 442, 60, 444, 76, 363, 364,
++ 433, 77, 367, 378, 566, 405, 381, 82, 76, 38,
++ 526, 375, 59, 149, 77, 50, 51, 52, 154, 155,
++ 582, 27, 422, 159, 160, 161, 162, 163, 164, 165,
++ 166, 167, 168, 169, 170, 3, 451, 9, 467, 7,
++ 405, 83, 3, 4, 634, 479, 636, 77, 1, 414,
++ 36, 4, 5, 6, 7, 420, 77, 422, 36, 12,
++ 13, 14, 30, 78, 464, 465, 59, 60, 433, 30,
++ 499, 471, 472, 81, 489, 28, 76, 38, 1, 7,
++ 3, 4, 50, 406, 499, 59, 60, 76, 411, 50,
++ 38, 59, 60, 678, 59, 60, 76, 526, 59, 464,
++ 465, 686, 30, 515, 83, 621, 471, 472, 537, 3,
++ 615, 526, 3, 4, 77, 78, 7, 76, 499, 77,
++ 78, 499, 50, 538, 260, 261, 83, 499, 36, 82,
++ 76, 59, 60, 76, 499, 76, 30, 32, 567, 30,
++ 545, 570, 571, 555, 83, 661, 662, 587, 78, 578,
++ 544, 545, 585, 59, 60, 38, 50, 3, 4, 50,
++ 78, 7, 3, 4, 593, 59, 60, 78, 59, 60,
++ 76, 600, 59, 60, 555, 89, 90, 555, 464, 465,
++ 545, 545, 611, 555, 30, 83, 634, 587, 636, 30,
++ 555, 4, 621, 6, 7, 76, 332, 3, 77, 12,
++ 13, 14, 78, 81, 50, 78, 621, 78, 344, 50,
++ 38, 38, 78, 59, 643, 28, 81, 30, 59, 60,
++ 585, 1, 587, 3, 4, 5, 6, 7, 78, 83,
++ 10, 78, 12, 13, 14, 38, 665, 50, 59, 3,
++ 59, 377, 671, 7, 59, 38, 59, 60, 28, 7,
++ 30, 1, 77, 3, 4, 5, 6, 7, 8, 9,
++ 396, 11, 12, 13, 14, 15, 30, 17, 18, 19,
++ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
++ 30, 31, 77, 33, 34, 38, 50, 77, 77, 16,
++ 40, 78, 59, 43, 430, 59, 76, 59, 48, 49,
++ 50, 77, 77, 76, 54, 55, 5, 6, 7, 59,
++ 5, 6, 7, 12, 13, 14, 452, 12, 13, 14,
++ 3, 4, 5, 6, 7, 461, 462, 77, 78, 79,
++ 80, 1, 82, 3, 4, 30, 6, 7, 8, 9,
++ 17, 11, 12, 13, 14, 77, 482, 76, 76, 485,
++ 54, 55, 77, 57, 58, 59, 60, 76, 28, 29,
++ 77, 31, 9, 33, 34, 77, 502, 77, 59, 505,
++ 40, 507, 76, 43, 81, 6, 7, 77, 48, 49,
++ 50, 12, 13, 14, 54, 55, 522, 76, 1, 59,
++ 76, 4, 77, 6, 7, 77, 0, 533, 0, 12,
++ 13, 14, 46, 47, 48, 49, 50, 51, 52, 79,
++ 80, 570, 82, 213, 442, 28, 555, 292, 31, 53,
++ 556, 423, 291, 559, 1, 430, 3, 4, 5, 6,
++ 7, 8, 9, 189, 11, 12, 13, 14, 15, 505,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
++ 27, 28, 29, 30, 31, 335, 33, 34, 237, 4,
++ 5, 6, 7, 40, 77, 78, 43, 12, 13, 14,
++ 606, 48, 49, 50, 327, 460, 432, 54, 55, 245,
++ 442, 1, 59, 28, 4, 5, 6, 7, 333, 394,
++ 10, 621, 12, 13, 14, 48, 49, 50, 51, 52,
++ 77, 666, 79, 80, 1, 82, 3, 4, 28, 444,
++ 30, 8, 9, 621, 11, 668, 286, -1, 15, 367,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
++ 27, -1, 29, -1, 31, -1, 33, 34, -1, -1,
++ -1, -1, -1, 40, 54, 55, 43, 57, 58, 59,
++ 60, 48, 49, 50, -1, -1, 76, 54, 55, -1,
++ -1, -1, 59, 1, -1, -1, 4, -1, 6, 7,
++ -1, -1, -1, -1, 12, 13, 14, -1, -1, -1,
++ 77, 78, 79, 80, 1, 82, 3, 4, -1, -1,
++ 28, 8, 9, 31, 11, -1, -1, -1, 15, -1,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
++ 27, -1, 29, -1, 31, -1, 33, 34, -1, 4,
++ 5, 6, 7, 40, -1, 10, 43, 12, 13, 14,
++ -1, 48, 49, 50, -1, -1, -1, 54, 55, -1,
++ -1, -1, 59, 28, -1, 30, -1, -1, -1, 4,
++ 5, 6, 7, -1, -1, -1, -1, 12, 13, 14,
++ 77, -1, 79, 80, 1, 82, 3, 4, -1, -1,
++ -1, 8, 9, 28, 11, 30, -1, -1, 15, -1,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
++ 27, -1, 29, -1, 31, -1, 33, 34, -1, -1,
++ -1, -1, -1, 40, -1, -1, 43, -1, -1, -1,
++ -1, 48, 49, 50, -1, -1, -1, 54, 55, -1,
++ -1, 1, 59, 3, 4, -1, -1, -1, 8, 9,
++ -1, 11, 45, 46, 47, 48, 49, 50, 51, 52,
++ 77, -1, 79, 80, -1, 82, -1, -1, -1, 29,
++ -1, 31, -1, 33, 34, -1, -1, -1, -1, -1,
++ 40, -1, -1, 43, -1, -1, -1, -1, 48, 49,
++ 50, -1, -1, -1, 54, 55, -1, -1, 58, 59,
++ 60, 1, -1, 3, 4, -1, -1, -1, 8, 9,
++ -1, 11, -1, -1, -1, -1, -1, -1, 78, 79,
++ 80, -1, 82, -1, -1, -1, -1, -1, -1, 29,
++ -1, 31, -1, 33, 34, -1, -1, -1, -1, -1,
++ 40, -1, -1, 43, -1, -1, -1, -1, 48, 49,
++ 50, -1, -1, -1, 54, 55, -1, -1, 58, 59,
++ 60, 1, -1, 3, -1, -1, -1, -1, 8, 9,
++ -1, 11, -1, -1, -1, -1, -1, -1, 78, 79,
++ 80, -1, 82, -1, -1, -1, -1, -1, -1, 29,
++ -1, 31, -1, 33, 34, -1, 36, -1, -1, -1,
++ 40, -1, -1, 43, -1, -1, -1, -1, 48, 49,
++ 50, -1, -1, -1, 54, 55, -1, -1, 58, 59,
++ 60, 1, -1, 3, -1, -1, -1, -1, 8, 9,
++ -1, 11, -1, -1, -1, -1, -1, -1, -1, 79,
++ 80, -1, 82, -1, -1, -1, -1, -1, -1, 29,
++ -1, 31, -1, 33, 34, -1, -1, -1, -1, -1,
++ 40, -1, -1, 43, -1, -1, -1, -1, 48, 49,
++ 50, -1, -1, -1, 54, 55, 1, -1, 3, 59,
++ -1, -1, -1, 8, 9, 1, 11, -1, 4, 5,
++ 6, 7, -1, -1, -1, -1, 12, 13, 14, 79,
++ 80, -1, 82, -1, 29, -1, 31, -1, 33, 34,
++ -1, 27, 28, -1, 30, 40, -1, -1, 43, -1,
++ 36, -1, -1, 48, 49, 50, -1, -1, -1, 54,
++ 55, -1, -1, -1, 59, -1, -1, -1, -1, -1,
++ -1, -1, -1, 59, 60, -1, -1, 1, -1, -1,
++ 4, 5, 6, 7, 79, 80, -1, 82, 12, 13,
++ 14, 77, 3, -1, -1, 81, 82, 8, 9, -1,
++ 11, -1, -1, 27, 28, -1, 30, -1, -1, -1,
++ -1, -1, 36, -1, -1, -1, -1, -1, 29, 3,
++ 31, -1, 33, 34, 8, 9, -1, 11, -1, 40,
++ -1, -1, 43, -1, -1, 59, 60, 48, 49, 50,
++ -1, -1, -1, 54, 55, 29, -1, 31, 59, 33,
++ 34, -1, -1, 77, -1, -1, 40, 81, 82, 43,
++ -1, -1, -1, -1, 48, 49, 50, -1, 79, 80,
++ 54, 55, 83, -1, 3, 59, -1, -1, -1, 8,
++ 9, -1, 11, 41, 42, 43, 44, 45, 46, 47,
++ 48, 49, 50, 51, 52, 79, 80, -1, -1, 83,
++ 29, 3, 31, -1, 33, 34, 8, 9, -1, 11,
++ -1, 40, -1, -1, 43, -1, -1, -1, -1, 48,
++ 49, 50, -1, -1, -1, 54, 55, 29, -1, 31,
++ 59, 33, 34, -1, -1, -1, -1, -1, 40, -1,
++ -1, 43, -1, -1, -1, -1, 48, 49, 50, -1,
++ 79, 80, 54, 55, 83, -1, 3, 59, -1, -1,
++ -1, 8, 9, -1, 11, 42, 43, 44, 45, 46,
++ 47, 48, 49, 50, 51, 52, -1, 79, 80, -1,
++ -1, 83, 29, 3, 31, -1, 33, 34, 8, 9,
++ -1, 11, -1, 40, -1, -1, 43, -1, -1, -1,
++ -1, 48, 49, 50, -1, -1, -1, 54, 55, 29,
++ -1, 31, 59, 33, 34, -1, -1, -1, -1, -1,
++ 40, -1, -1, 43, -1, -1, -1, -1, 48, 49,
++ 50, -1, 79, 80, 54, 55, 83, -1, 3, 59,
++ -1, -1, -1, 8, 9, -1, 11, 43, 44, 45,
++ 46, 47, 48, 49, 50, 51, 52, -1, -1, 79,
++ 80, -1, -1, 83, 29, -1, 31, -1, 33, 34,
++ 10, -1, -1, -1, -1, 40, -1, -1, 43, -1,
++ -1, -1, -1, 48, 49, 50, -1, -1, -1, 54,
++ 55, -1, -1, -1, 59, 35, 36, 37, 38, 39,
++ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
++ 50, 51, 52, -1, 79, 80, -1, -1, 83, 3,
++ 4, 5, 6, 7, 8, 9, -1, 11, 12, 13,
++ 14, 15, -1, 17, 18, 19, 20, 21, 22, 23,
++ 24, 25, 26, 27, 28, 29, 30, 31, -1, 33,
++ 34, -1, -1, -1, -1, -1, 40, -1, -1, 43,
++ -1, -1, -1, -1, 48, 49, 50, 30, -1, -1,
++ 54, 55, 35, 36, 37, 59, 39, 40, 41, 42,
++ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
++ -1, -1, -1, 77, -1, 79, 80, -1, 82, 3,
++ 4, -1, -1, -1, 8, 9, -1, 11, -1, -1,
++ -1, 15, -1, 17, 18, 19, 20, 21, 22, 23,
++ 24, 25, 26, 27, -1, 29, -1, 31, -1, 33,
++ 34, -1, -1, -1, -1, -1, 40, -1, -1, 43,
++ -1, -1, -1, -1, 48, 49, 50, -1, -1, -1,
++ 54, 55, -1, 3, -1, 59, -1, -1, 8, 9,
++ -1, 11, 44, 45, 46, 47, 48, 49, 50, 51,
++ 52, -1, -1, 77, -1, 79, 80, -1, 82, 29,
++ -1, 31, -1, 33, 34, -1, -1, -1, -1, -1,
++ 40, -1, -1, 43, -1, -1, -1, -1, 48, 49,
++ 50, -1, -1, -1, 54, 55, -1, -1, -1, 59,
++ 3, 4, 5, 6, 7, 8, 9, -1, 11, 12,
++ 13, 14, -1, -1, -1, -1, -1, -1, -1, 79,
++ 80, -1, 82, -1, -1, 28, 29, 30, 31, -1,
++ 33, 34, -1, -1, -1, -1, -1, 40, -1, -1,
++ 43, -1, -1, -1, -1, 48, 49, 50, -1, -1,
++ -1, 54, 55, -1, 3, 4, 59, 6, 7, 8,
++ 9, -1, 11, 12, 13, 14, -1, 3, -1, -1,
++ -1, -1, 8, 9, -1, 11, 79, 80, -1, 28,
++ 29, -1, 31, -1, 33, 34, -1, -1, -1, -1,
++ -1, 40, -1, 29, 43, 31, -1, 33, 34, 48,
++ 49, 50, -1, -1, 40, 54, 55, 43, -1, -1,
++ 59, -1, 48, 49, 50, -1, -1, -1, 54, 55,
++ 3, -1, -1, 59, -1, 8, 9, -1, 11, -1,
++ 79, 80, -1, -1, -1, -1, -1, -1, -1, -1,
++ -1, 77, -1, 79, 80, -1, 29, 3, 31, -1,
++ 33, 34, 8, 9, -1, 11, -1, 40, -1, -1,
++ 43, -1, -1, -1, -1, 48, 49, 50, -1, -1,
++ -1, 54, 55, 29, 3, 31, 59, 33, 34, 8,
++ 9, -1, 11, -1, 40, -1, -1, 43, -1, -1,
++ -1, -1, 48, 49, 50, -1, 79, 80, 54, 55,
++ 29, 3, 31, 59, 33, 34, 8, 9, -1, 11,
++ -1, 40, -1, -1, 43, -1, -1, -1, -1, 48,
++ 49, 50, -1, 79, 80, 54, 55, 29, -1, 31,
++ 59, 33, 34, -1, -1, -1, -1, -1, 40, -1,
++ -1, 43, -1, -1, -1, -1, 48, 49, 50, -1,
++ 79, 80, 54, 55, -1, -1, 1, 59, 3, 4,
++ 5, 6, 7, -1, -1, -1, -1, 12, 13, 14,
++ -1, -1, -1, -1, -1, -1, -1, 79, 80, -1,
++ -1, -1, 27, 28, -1, 30, 31, 4, 5, 6,
++ 7, 4, 5, 6, 7, 12, 13, 14, -1, 12,
++ 13, 14, -1, -1, 10, 50, -1, -1, -1, -1,
++ -1, 28, -1, 30, 59, 28, -1, 30, -1, -1,
++ -1, -1, -1, -1, -1, -1, -1, -1, -1, 35,
++ 36, 37, 77, 39, 40, 41, 42, 43, 44, 45,
++ 46, 47, 48, 49, 50, 51, 52, 40, 41, 42,
++ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
++ 77, -1, -1, -1, 77, -1, -1, -1, -1, -1,
++ -1, -1, -1, -1, 35, 36, 37, 83, 39, 40,
++ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
++ 51, 52, 35, 36, 37, 38, 39, 40, 41, 42,
++ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
++ -1, -1, -1, -1, -1, -1, -1, -1, -1, 35,
++ 36, 37, 83, 39, 40, 41, 42, 43, 44, 45,
++ 46, 47, 48, 49, 50, 51, 52, 37, -1, 39,
++ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
++ 50, 51, 52
++};
++/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
++#line 3 "/usr/share/bison.simple"
++/* This file comes from bison-1.28. */
++
++/* Skeleton output parser for bison,
++ Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++/* As a special exception, when this file is copied by Bison into a
++ Bison output file, you may use that output file without restriction.
++ This special exception was added by the Free Software Foundation
++ in version 1.24 of Bison. */
++
++/* This is the parser code that is written into each bison parser
++ when the %semantic_parser declaration is not specified in the grammar.
++ It was written by Richard Stallman by simplifying the hairy parser
++ used when %semantic_parser is specified. */
++
++#ifndef YYSTACK_USE_ALLOCA
++#ifdef alloca
++#define YYSTACK_USE_ALLOCA
++#else /* alloca not defined */
++#ifdef __GNUC__
++#define YYSTACK_USE_ALLOCA
++#define alloca __builtin_alloca
++#else /* not GNU C. */
++#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
++#define YYSTACK_USE_ALLOCA
++#include <alloca.h>
++#else /* not sparc */
++/* We think this test detects Watcom and Microsoft C. */
++/* This used to test MSDOS, but that is a bad idea
++ since that symbol is in the user namespace. */
++#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
++#if 0 /* No need for malloc.h, which pollutes the namespace;
++ instead, just don't use alloca. */
++#include <malloc.h>
++#endif
++#else /* not MSDOS, or __TURBOC__ */
++#if defined(_AIX)
++/* I don't know what this was needed for, but it pollutes the namespace.
++ So I turned it off. rms, 2 May 1997. */
++/* #include <malloc.h> */
++ #pragma alloca
++#define YYSTACK_USE_ALLOCA
++#else /* not MSDOS, or __TURBOC__, or _AIX */
++#if 0
++#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
++ and on HPUX 10. Eventually we can turn this on. */
++#define YYSTACK_USE_ALLOCA
++#define alloca __builtin_alloca
++#endif /* __hpux */
++#endif
++#endif /* not _AIX */
++#endif /* not MSDOS, or __TURBOC__ */
++#endif /* not sparc */
++#endif /* not GNU C */
++#endif /* alloca not defined */
++#endif /* YYSTACK_USE_ALLOCA not defined */
++
++#ifdef YYSTACK_USE_ALLOCA
++#define YYSTACK_ALLOC alloca
++#else
++#define YYSTACK_ALLOC malloc
++#endif
++
++/* Note: there must be only one dollar sign in this file.
++ It is replaced by the list of actions, each action
++ as one case of the switch. */
++
++#define yyerrok (yyerrstatus = 0)
++#define yyclearin (yychar = YYEMPTY)
++#define YYEMPTY -2
++#define YYEOF 0
++#define YYACCEPT goto yyacceptlab
++#define YYABORT goto yyabortlab
++#define YYERROR goto yyerrlab1
++/* Like YYERROR except do call yyerror.
++ This remains here temporarily to ease the
++ transition to the new meaning of YYERROR, for GCC.
++ Once GCC version 2 has supplanted version 1, this can go. */
++#define YYFAIL goto yyerrlab
++#define YYRECOVERING() (!!yyerrstatus)
++#define YYBACKUP(token, value) \
++do \
++ if (yychar == YYEMPTY && yylen == 1) \
++ { yychar = (token), yylval = (value); \
++ yychar1 = YYTRANSLATE (yychar); \
++ YYPOPSTACK; \
++ goto yybackup; \
++ } \
++ else \
++ { yyerror ("syntax error: cannot back up"); YYERROR; } \
++while (0)
++
++#define YYTERROR 1
++#define YYERRCODE 256
++
++#ifndef YYPURE
++#define YYLEX yylex()
++#endif
++
++#ifdef YYPURE
++#ifdef YYLSP_NEEDED
++#ifdef YYLEX_PARAM
++#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
++#else
++#define YYLEX yylex(&yylval, &yylloc)
++#endif
++#else /* not YYLSP_NEEDED */
++#ifdef YYLEX_PARAM
++#define YYLEX yylex(&yylval, YYLEX_PARAM)
++#else
++#define YYLEX yylex(&yylval)
++#endif
++#endif /* not YYLSP_NEEDED */
++#endif
++
++/* If nonreentrant, generate the variables here */
++
++#ifndef YYPURE
++
++int yychar; /* the lookahead symbol */
++YYSTYPE yylval; /* the semantic value of the */
++ /* lookahead symbol */
++
++#ifdef YYLSP_NEEDED
++YYLTYPE yylloc; /* location data for the lookahead */
++ /* symbol */
++#endif
++
++int yynerrs; /* number of parse errors so far */
++#endif /* not YYPURE */
++
++#if YYDEBUG != 0
++int yydebug; /* nonzero means print parse trace */
++/* Since this is uninitialized, it does not stop multiple parsers
++ from coexisting. */
++#endif
++
++/* YYINITDEPTH indicates the initial size of the parser's stacks */
++
++#ifndef YYINITDEPTH
++#define YYINITDEPTH 200
++#endif
++
++/* YYMAXDEPTH is the maximum size the stacks can grow to
++ (effective only if the built-in stack extension method is used). */
++
++#if YYMAXDEPTH == 0
++#undef YYMAXDEPTH
++#endif
++
++#ifndef YYMAXDEPTH
++#define YYMAXDEPTH 10000
++#endif
++
++/* Define __yy_memcpy. Note that the size argument
++ should be passed with type unsigned int, because that is what the non-GCC
++ definitions require. With GCC, __builtin_memcpy takes an arg
++ of type size_t, but it can handle unsigned int. */
++
++#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
++#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
++#else /* not GNU C or C++ */
++#ifndef __cplusplus
++
++/* This is the most reliable way to avoid incompatibilities
++ in available built-in functions on various systems. */
++static void
++__yy_memcpy (to, from, count)
++ char *to;
++ char *from;
++ unsigned int count;
++{
++ register char *f = from;
++ register char *t = to;
++ register int i = count;
++
++ while (i-- > 0)
++ *t++ = *f++;
++}
++
++#else /* __cplusplus */
++
++/* This is the most reliable way to avoid incompatibilities
++ in available built-in functions on various systems. */
++static void
++__yy_memcpy (char *to, char *from, unsigned int count)
++{
++ register char *t = to;
++ register char *f = from;
++ register int i = count;
++
++ while (i-- > 0)
++ *t++ = *f++;
++}
++
++#endif
++#endif
++
++#line 217 "/usr/share/bison.simple"
++
++/* The user can define YYPARSE_PARAM as the name of an argument to be passed
++ into yyparse. The argument should have type void *.
++ It should actually point to an object.
++ Grammar actions can access the variable by casting it
++ to the proper pointer type. */
++
++#ifdef YYPARSE_PARAM
++#ifdef __cplusplus
++#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
++#define YYPARSE_PARAM_DECL
++#else /* not __cplusplus */
++#define YYPARSE_PARAM_ARG YYPARSE_PARAM
++#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
++#endif /* not __cplusplus */
++#else /* not YYPARSE_PARAM */
++#define YYPARSE_PARAM_ARG
++#define YYPARSE_PARAM_DECL
++#endif /* not YYPARSE_PARAM */
++
++/* Prevent warning if -Wstrict-prototypes. */
++#ifdef __GNUC__
++#ifdef YYPARSE_PARAM
++int yyparse (void *);
++#else
++int yyparse (void);
++#endif
++#endif
++
++int
++yyparse(YYPARSE_PARAM_ARG)
++ YYPARSE_PARAM_DECL
++{
++ register int yystate;
++ register int yyn;
++ register short *yyssp;
++ register YYSTYPE *yyvsp;
++ int yyerrstatus; /* number of tokens to shift before error messages enabled */
++ int yychar1 = 0; /* lookahead token as an internal (translated) token number */
++
++ short yyssa[YYINITDEPTH]; /* the state stack */
++ YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
++
++ short *yyss = yyssa; /* refer to the stacks thru separate pointers */
++ YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
++
++#ifdef YYLSP_NEEDED
++ YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
++ YYLTYPE *yyls = yylsa;
++ YYLTYPE *yylsp;
++
++#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
++#else
++#define YYPOPSTACK (yyvsp--, yyssp--)
++#endif
++
++ int yystacksize = YYINITDEPTH;
++ int yyfree_stacks = 0;
++
++#ifdef YYPURE
++ int yychar;
++ YYSTYPE yylval;
++ int yynerrs;
++#ifdef YYLSP_NEEDED
++ YYLTYPE yylloc;
++#endif
++#endif
++
++ YYSTYPE yyval; /* the variable used to return */
++ /* semantic values from the action */
++ /* routines */
++
++ int yylen;
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Starting parse\n");
++#endif
++
++ yystate = 0;
++ yyerrstatus = 0;
++ yynerrs = 0;
++ yychar = YYEMPTY; /* Cause a token to be read. */
++
++ /* Initialize stack pointers.
++ Waste one element of value and location stack
++ so that they stay on the same level as the state stack.
++ The wasted elements are never initialized. */
++
++ yyssp = yyss - 1;
++ yyvsp = yyvs;
++#ifdef YYLSP_NEEDED
++ yylsp = yyls;
++#endif
++
++/* Push a new state, which is found in yystate . */
++/* In all cases, when you get here, the value and location stacks
++ have just been pushed. so pushing a state here evens the stacks. */
++yynewstate:
++
++ *++yyssp = yystate;
++
++ if (yyssp >= yyss + yystacksize - 1)
++ {
++ /* Give user a chance to reallocate the stack */
++ /* Use copies of these so that the &'s don't force the real ones into memory. */
++ YYSTYPE *yyvs1 = yyvs;
++ short *yyss1 = yyss;
++#ifdef YYLSP_NEEDED
++ YYLTYPE *yyls1 = yyls;
++#endif
++
++ /* Get the current used size of the three stacks, in elements. */
++ int size = yyssp - yyss + 1;
++
++#ifdef yyoverflow
++ /* Each stack pointer address is followed by the size of
++ the data in use in that stack, in bytes. */
++#ifdef YYLSP_NEEDED
++ /* This used to be a conditional around just the two extra args,
++ but that might be undefined if yyoverflow is a macro. */
++ yyoverflow("parser stack overflow",
++ &yyss1, size * sizeof (*yyssp),
++ &yyvs1, size * sizeof (*yyvsp),
++ &yyls1, size * sizeof (*yylsp),
++ &yystacksize);
++#else
++ yyoverflow("parser stack overflow",
++ &yyss1, size * sizeof (*yyssp),
++ &yyvs1, size * sizeof (*yyvsp),
++ &yystacksize);
++#endif
++
++ yyss = yyss1; yyvs = yyvs1;
++#ifdef YYLSP_NEEDED
++ yyls = yyls1;
++#endif
++#else /* no yyoverflow */
++ /* Extend the stack our own way. */
++ if (yystacksize >= YYMAXDEPTH)
++ {
++ yyerror("parser stack overflow");
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 2;
++ }
++ yystacksize *= 2;
++ if (yystacksize > YYMAXDEPTH)
++ yystacksize = YYMAXDEPTH;
++#ifndef YYSTACK_USE_ALLOCA
++ yyfree_stacks = 1;
++#endif
++ yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
++ __yy_memcpy ((char *)yyss, (char *)yyss1,
++ size * (unsigned int) sizeof (*yyssp));
++ yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
++ __yy_memcpy ((char *)yyvs, (char *)yyvs1,
++ size * (unsigned int) sizeof (*yyvsp));
++#ifdef YYLSP_NEEDED
++ yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
++ __yy_memcpy ((char *)yyls, (char *)yyls1,
++ size * (unsigned int) sizeof (*yylsp));
++#endif
++#endif /* no yyoverflow */
++
++ yyssp = yyss + size - 1;
++ yyvsp = yyvs + size - 1;
++#ifdef YYLSP_NEEDED
++ yylsp = yyls + size - 1;
++#endif
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Stack size increased to %d\n", yystacksize);
++#endif
++
++ if (yyssp >= yyss + yystacksize - 1)
++ YYABORT;
++ }
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Entering state %d\n", yystate);
++#endif
++
++ goto yybackup;
++ yybackup:
++
++/* Do appropriate processing given the current state. */
++/* Read a lookahead token if we need one and don't already have one. */
++/* yyresume: */
++
++ /* First try to decide what to do without reference to lookahead token. */
++
++ yyn = yypact[yystate];
++ if (yyn == YYFLAG)
++ goto yydefault;
++
++ /* Not known => get a lookahead token if don't already have one. */
++
++ /* yychar is either YYEMPTY or YYEOF
++ or a valid token in external form. */
++
++ if (yychar == YYEMPTY)
++ {
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Reading a token: ");
++#endif
++ yychar = YYLEX;
++ }
++
++ /* Convert token to internal form (in yychar1) for indexing tables with */
++
++ if (yychar <= 0) /* This means end of input. */
++ {
++ yychar1 = 0;
++ yychar = YYEOF; /* Don't call YYLEX any more */
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Now at end of input.\n");
++#endif
++ }
++ else
++ {
++ yychar1 = YYTRANSLATE(yychar);
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
++ /* Give the individual parser a way to print the precise meaning
++ of a token, for further debugging info. */
++#ifdef YYPRINT
++ YYPRINT (stderr, yychar, yylval);
++#endif
++ fprintf (stderr, ")\n");
++ }
++#endif
++ }
++
++ yyn += yychar1;
++ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
++ goto yydefault;
++
++ yyn = yytable[yyn];
++
++ /* yyn is what to do for this token type in this state.
++ Negative => reduce, -yyn is rule number.
++ Positive => shift, yyn is new state.
++ New state is final state => don't bother to shift,
++ just return success.
++ 0, or most negative number => error. */
++
++ if (yyn < 0)
++ {
++ if (yyn == YYFLAG)
++ goto yyerrlab;
++ yyn = -yyn;
++ goto yyreduce;
++ }
++ else if (yyn == 0)
++ goto yyerrlab;
++
++ if (yyn == YYFINAL)
++ YYACCEPT;
++
++ /* Shift the lookahead token. */
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
++#endif
++
++ /* Discard the token being shifted unless it is eof. */
++ if (yychar != YYEOF)
++ yychar = YYEMPTY;
++
++ *++yyvsp = yylval;
++#ifdef YYLSP_NEEDED
++ *++yylsp = yylloc;
++#endif
++
++ /* count tokens shifted since error; after three, turn off error status. */
++ if (yyerrstatus) yyerrstatus--;
++
++ yystate = yyn;
++ goto yynewstate;
++
++/* Do the default action for the current state. */
++yydefault:
++
++ yyn = yydefact[yystate];
++ if (yyn == 0)
++ goto yyerrlab;
++
++/* Do a reduction. yyn is the number of a rule to reduce with. */
++yyreduce:
++ yylen = yyr2[yyn];
++ if (yylen > 0)
++ yyval = yyvsp[1-yylen]; /* implement default value of the action */
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ int i;
++
++ fprintf (stderr, "Reducing via rule %d (line %d), ",
++ yyn, yyrline[yyn]);
++
++ /* Print the symbols being reduced, and their result. */
++ for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
++ fprintf (stderr, "%s ", yytname[yyrhs[i]]);
++ fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
++ }
++#endif
++
++
++ switch (yyn) {
++
++case 1:
++#line 245 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C forbids an empty source file");
++ finish_file ();
++ ;
++ break;}
++case 2:
++#line 250 "c-parse.y"
++{
++ /* In case there were missing closebraces,
++ get us back to the global binding level. */
++ while (! global_bindings_p ())
++ poplevel (0, 0, 0);
++ finish_file ();
++ ;
++ break;}
++case 3:
++#line 264 "c-parse.y"
++{yyval.ttype = NULL_TREE; ;
++ break;}
++case 5:
++#line 265 "c-parse.y"
++{yyval.ttype = NULL_TREE; ;
++ break;}
++case 9:
++#line 272 "c-parse.y"
++{ STRIP_NOPS (yyvsp[-2].ttype);
++ if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
++ && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
++ || TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
++ assemble_asm (yyvsp[-2].ttype);
++ else
++ error ("argument of `asm' is not a constant string"); ;
++ break;}
++case 10:
++#line 280 "c-parse.y"
++{ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
++ break;}
++case 11:
++#line 285 "c-parse.y"
++{ if (pedantic)
++ error ("ANSI C forbids data definition with no type or storage class");
++ else if (!flag_traditional)
++ warning ("data definition has no type or storage class");
++
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 12:
++#line 295 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 13:
++#line 300 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 14:
++#line 305 "c-parse.y"
++{ pedwarn ("empty declaration"); ;
++ break;}
++case 15:
++#line 307 "c-parse.y"
++{ shadow_tag (yyvsp[-1].ttype); ;
++ break;}
++case 18:
++#line 311 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C does not allow extra `;' outside of a function"); ;
++ break;}
++case 19:
++#line 317 "c-parse.y"
++{ if (! start_function (current_declspecs, yyvsp[0].ttype,
++ prefix_attributes, NULL_TREE, 0))
++ YYERROR1;
++ reinit_parse_for_function (); ;
++ break;}
++case 20:
++#line 322 "c-parse.y"
++{ store_parm_decls (); ;
++ break;}
++case 21:
++#line 324 "c-parse.y"
++{ finish_function (0);
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-5].itype); ;
++ break;}
++case 22:
++#line 330 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 23:
++#line 335 "c-parse.y"
++{ if (! start_function (current_declspecs, yyvsp[0].ttype,
++ prefix_attributes, NULL_TREE, 0))
++ YYERROR1;
++ reinit_parse_for_function (); ;
++ break;}
++case 24:
++#line 340 "c-parse.y"
++{ store_parm_decls (); ;
++ break;}
++case 25:
++#line 342 "c-parse.y"
++{ finish_function (0);
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-5].itype); ;
++ break;}
++case 26:
++#line 348 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 27:
++#line 353 "c-parse.y"
++{ if (! start_function (NULL_TREE, yyvsp[0].ttype,
++ prefix_attributes, NULL_TREE, 0))
++ YYERROR1;
++ reinit_parse_for_function (); ;
++ break;}
++case 28:
++#line 358 "c-parse.y"
++{ store_parm_decls (); ;
++ break;}
++case 29:
++#line 360 "c-parse.y"
++{ finish_function (0);
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-5].itype); ;
++ break;}
++case 30:
++#line 366 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 33:
++#line 378 "c-parse.y"
++{ yyval.code = ADDR_EXPR; ;
++ break;}
++case 34:
++#line 380 "c-parse.y"
++{ yyval.code = NEGATE_EXPR; ;
++ break;}
++case 35:
++#line 382 "c-parse.y"
++{ yyval.code = CONVERT_EXPR; ;
++ break;}
++case 36:
++#line 384 "c-parse.y"
++{ yyval.code = PREINCREMENT_EXPR; ;
++ break;}
++case 37:
++#line 386 "c-parse.y"
++{ yyval.code = PREDECREMENT_EXPR; ;
++ break;}
++case 38:
++#line 388 "c-parse.y"
++{ yyval.code = BIT_NOT_EXPR; ;
++ break;}
++case 39:
++#line 390 "c-parse.y"
++{ yyval.code = TRUTH_NOT_EXPR; ;
++ break;}
++case 40:
++#line 394 "c-parse.y"
++{ yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
++ break;}
++case 41:
++#line 399 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 43:
++#line 405 "c-parse.y"
++{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
++ break;}
++case 44:
++#line 407 "c-parse.y"
++{ chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
++ break;}
++case 46:
++#line 413 "c-parse.y"
++{ yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
++ break;}
++case 47:
++#line 416 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype;
++ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
++ break;}
++case 48:
++#line 419 "c-parse.y"
++{ yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
++ overflow_warning (yyval.ttype); ;
++ break;}
++case 49:
++#line 423 "c-parse.y"
++{ tree label = lookup_label (yyvsp[0].ttype);
++ if (pedantic)
++ pedwarn ("ANSI C forbids `&&'");
++ if (label == 0)
++ yyval.ttype = null_pointer_node;
++ else
++ {
++ TREE_USED (label) = 1;
++ yyval.ttype = build1 (ADDR_EXPR, ptr_type_node, label);
++ TREE_CONSTANT (yyval.ttype) = 1;
++ }
++ ;
++ break;}
++case 50:
++#line 451 "c-parse.y"
++{ skip_evaluation--;
++ if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
++ && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
++ error ("`sizeof' applied to a bit-field");
++ yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
++ break;}
++case 51:
++#line 457 "c-parse.y"
++{ skip_evaluation--;
++ yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
++ break;}
++case 52:
++#line 460 "c-parse.y"
++{ skip_evaluation--;
++ yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
++ break;}
++case 53:
++#line 463 "c-parse.y"
++{ skip_evaluation--;
++ yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
++ break;}
++case 54:
++#line 466 "c-parse.y"
++{ yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
++ break;}
++case 55:
++#line 468 "c-parse.y"
++{ yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
++ break;}
++case 56:
++#line 472 "c-parse.y"
++{ skip_evaluation++; ;
++ break;}
++case 57:
++#line 476 "c-parse.y"
++{ skip_evaluation++; ;
++ break;}
++case 59:
++#line 482 "c-parse.y"
++{ tree type = groktypename (yyvsp[-2].ttype);
++ yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
++ break;}
++case 60:
++#line 485 "c-parse.y"
++{ start_init (NULL_TREE, NULL, 0);
++ yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
++ really_start_incremental_init (yyvsp[-2].ttype); ;
++ break;}
++case 61:
++#line 489 "c-parse.y"
++{ char *name;
++ tree result = pop_init_level (0);
++ tree type = yyvsp[-5].ttype;
++ finish_init ();
++
++ if (pedantic && ! flag_isoc9x)
++ pedwarn ("ANSI C forbids constructor expressions");
++ if (TYPE_NAME (type) != 0)
++ {
++ if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
++ name = IDENTIFIER_POINTER (TYPE_NAME (type));
++ else
++ name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
++ }
++ else
++ name = "";
++ yyval.ttype = result;
++ if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
++ {
++ int failure = complete_array_type (type, yyval.ttype, 1);
++ if (failure)
++ abort ();
++ }
++ ;
++ break;}
++case 63:
++#line 518 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 64:
++#line 520 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 65:
++#line 522 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 66:
++#line 524 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 67:
++#line 526 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 68:
++#line 528 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 69:
++#line 530 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 70:
++#line 532 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 71:
++#line 534 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 72:
++#line 536 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 73:
++#line 538 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 74:
++#line 540 "c-parse.y"
++{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 75:
++#line 542 "c-parse.y"
++{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
++ skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
++ break;}
++case 76:
++#line 545 "c-parse.y"
++{ skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
++ yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
++ break;}
++case 77:
++#line 548 "c-parse.y"
++{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
++ skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
++ break;}
++case 78:
++#line 551 "c-parse.y"
++{ skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
++ yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
++ break;}
++case 79:
++#line 554 "c-parse.y"
++{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
++ skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
++ break;}
++case 80:
++#line 557 "c-parse.y"
++{ skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
++ - (yyvsp[-4].ttype == boolean_false_node)); ;
++ break;}
++case 81:
++#line 560 "c-parse.y"
++{ skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
++ yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
++ break;}
++case 82:
++#line 563 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
++ /* Make sure first operand is calculated only once. */
++ yyvsp[0].ttype = save_expr (yyvsp[-1].ttype);
++ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[0].ttype));
++ skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
++ break;}
++case 83:
++#line 570 "c-parse.y"
++{ skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
++ yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
++ break;}
++case 84:
++#line 573 "c-parse.y"
++{ char class;
++ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
++ class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
++ if (class == 'e' || class == '1'
++ || class == '2' || class == '<')
++ C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR);
++ ;
++ break;}
++case 85:
++#line 581 "c-parse.y"
++{ char class;
++ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
++ /* This inhibits warnings in truthvalue_conversion. */
++ class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
++ if (class == 'e' || class == '1'
++ || class == '2' || class == '<')
++ C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK);
++ ;
++ break;}
++case 86:
++#line 593 "c-parse.y"
++{
++ yyval.ttype = lastiddecl;
++ if (!yyval.ttype || yyval.ttype == error_mark_node)
++ {
++ if (yychar == YYEMPTY)
++ yychar = YYLEX;
++ if (yychar == '(')
++ {
++ {
++ /* Ordinary implicit function declaration. */
++ yyval.ttype = implicitly_declare (yyvsp[0].ttype);
++ assemble_external (yyval.ttype);
++ TREE_USED (yyval.ttype) = 1;
++ }
++ }
++ else if (current_function_decl == 0)
++ {
++ error ("`%s' undeclared here (not in a function)",
++ IDENTIFIER_POINTER (yyvsp[0].ttype));
++ yyval.ttype = error_mark_node;
++ }
++ else
++ {
++ {
++ if (IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) != error_mark_node
++ || IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) != current_function_decl)
++ {
++ error ("`%s' undeclared (first use in this function)",
++ IDENTIFIER_POINTER (yyvsp[0].ttype));
++
++ if (! undeclared_variable_notice)
++ {
++ error ("(Each undeclared identifier is reported only once");
++ error ("for each function it appears in.)");
++ undeclared_variable_notice = 1;
++ }
++ }
++ yyval.ttype = error_mark_node;
++ /* Prevent repeated error messages. */
++ IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) = error_mark_node;
++ IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) = current_function_decl;
++ }
++ }
++ }
++ else if (TREE_TYPE (yyval.ttype) == error_mark_node)
++ yyval.ttype = error_mark_node;
++ else if (C_DECL_ANTICIPATED (yyval.ttype))
++ {
++ /* The first time we see a build-in function used,
++ if it has not been declared. */
++ C_DECL_ANTICIPATED (yyval.ttype) = 0;
++ if (yychar == YYEMPTY)
++ yychar = YYLEX;
++ if (yychar == '(')
++ {
++ /* Omit the implicit declaration we
++ would ordinarily do, so we don't lose
++ the actual built in type.
++ But print a diagnostic for the mismatch. */
++ if (TREE_CODE (yyval.ttype) != FUNCTION_DECL)
++ error ("`%s' implicitly declared as function",
++ IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
++ else if ((TYPE_MODE (TREE_TYPE (TREE_TYPE (yyval.ttype)))
++ != TYPE_MODE (integer_type_node))
++ && (TREE_TYPE (TREE_TYPE (yyval.ttype))
++ != void_type_node))
++ pedwarn ("type mismatch in implicit declaration for built-in function `%s'",
++ IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
++ /* If it really returns void, change that to int. */
++ if (TREE_TYPE (TREE_TYPE (yyval.ttype)) == void_type_node)
++ TREE_TYPE (yyval.ttype)
++ = build_function_type (integer_type_node,
++ TYPE_ARG_TYPES (TREE_TYPE (yyval.ttype)));
++ }
++ else
++ pedwarn ("built-in function `%s' used without declaration",
++ IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
++
++ /* Do what we would ordinarily do when a fn is used. */
++ assemble_external (yyval.ttype);
++ TREE_USED (yyval.ttype) = 1;
++ }
++ else
++ {
++ assemble_external (yyval.ttype);
++ TREE_USED (yyval.ttype) = 1;
++ }
++
++ if (TREE_CODE (yyval.ttype) == CONST_DECL)
++ {
++ yyval.ttype = DECL_INITIAL (yyval.ttype);
++ /* This is to prevent an enum whose value is 0
++ from being considered a null pointer constant. */
++ yyval.ttype = build1 (NOP_EXPR, TREE_TYPE (yyval.ttype), yyval.ttype);
++ TREE_CONSTANT (yyval.ttype) = 1;
++ }
++ ;
++ break;}
++case 88:
++#line 692 "c-parse.y"
++{ yyval.ttype = combine_strings (yyvsp[0].ttype); ;
++ break;}
++case 89:
++#line 694 "c-parse.y"
++{ char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
++ if (class == 'e' || class == '1'
++ || class == '2' || class == '<')
++ C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
++ yyval.ttype = yyvsp[-1].ttype; ;
++ break;}
++case 90:
++#line 700 "c-parse.y"
++{ yyval.ttype = error_mark_node; ;
++ break;}
++case 91:
++#line 702 "c-parse.y"
++{ if (current_function_decl == 0)
++ {
++ error ("braced-group within expression allowed only inside a function");
++ YYERROR;
++ }
++ /* We must force a BLOCK for this level
++ so that, if it is not expanded later,
++ there is a way to turn off the entire subtree of blocks
++ that are contained in it. */
++ keep_next_level ();
++ push_iterator_stack ();
++ push_label_level ();
++ yyval.ttype = expand_start_stmt_expr (); ;
++ break;}
++case 92:
++#line 716 "c-parse.y"
++{ tree rtl_exp;
++ if (pedantic)
++ pedwarn ("ANSI C forbids braced-groups within expressions");
++ pop_iterator_stack ();
++ pop_label_level ();
++ rtl_exp = expand_end_stmt_expr (yyvsp[-2].ttype);
++ /* The statements have side effects, so the group does. */
++ TREE_SIDE_EFFECTS (rtl_exp) = 1;
++
++ if (TREE_CODE (yyvsp[-1].ttype) == BLOCK)
++ {
++ /* Make a BIND_EXPR for the BLOCK already made. */
++ yyval.ttype = build (BIND_EXPR, TREE_TYPE (rtl_exp),
++ NULL_TREE, rtl_exp, yyvsp[-1].ttype);
++ /* Remove the block from the tree at this point.
++ It gets put back at the proper place
++ when the BIND_EXPR is expanded. */
++ delete_block (yyvsp[-1].ttype);
++ }
++ else
++ yyval.ttype = yyvsp[-1].ttype;
++ ;
++ break;}
++case 93:
++#line 739 "c-parse.y"
++{ yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 94:
++#line 741 "c-parse.y"
++{ yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 95:
++#line 743 "c-parse.y"
++{
++ yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
++ ;
++ break;}
++case 96:
++#line 747 "c-parse.y"
++{
++ tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
++
++ yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
++ ;
++ break;}
++case 97:
++#line 753 "c-parse.y"
++{ yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
++ break;}
++case 98:
++#line 755 "c-parse.y"
++{ yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
++ break;}
++case 100:
++#line 762 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 103:
++#line 771 "c-parse.y"
++{ c_mark_varargs ();
++ if (pedantic)
++ pedwarn ("ANSI C does not permit use of `varargs.h'"); ;
++ break;}
++case 104:
++#line 781 "c-parse.y"
++{ ;
++ break;}
++case 109:
++#line 797 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 110:
++#line 802 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 111:
++#line 807 "c-parse.y"
++{ shadow_tag_warned (yyvsp[-1].ttype, 1);
++ pedwarn ("empty declaration"); ;
++ break;}
++case 112:
++#line 810 "c-parse.y"
++{ pedwarn ("empty declaration"); ;
++ break;}
++case 113:
++#line 819 "c-parse.y"
++{ ;
++ break;}
++case 118:
++#line 834 "c-parse.y"
++{ yyval.itype = suspend_momentary ();
++ pending_xref_error ();
++ declspec_stack = tree_cons (prefix_attributes,
++ current_declspecs,
++ declspec_stack);
++ split_specs_attrs (yyvsp[0].ttype,
++ &current_declspecs, &prefix_attributes); ;
++ break;}
++case 119:
++#line 845 "c-parse.y"
++{ prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ;
++ break;}
++case 120:
++#line 850 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 121:
++#line 855 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 122:
++#line 860 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-1].itype); ;
++ break;}
++case 123:
++#line 865 "c-parse.y"
++{ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-1].itype); ;
++ break;}
++case 124:
++#line 870 "c-parse.y"
++{ shadow_tag (yyvsp[-1].ttype); ;
++ break;}
++case 125:
++#line 872 "c-parse.y"
++{ pedwarn ("empty declaration"); ;
++ break;}
++case 126:
++#line 874 "c-parse.y"
++{ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
++ break;}
++case 127:
++#line 884 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 128:
++#line 886 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
++ break;}
++case 129:
++#line 890 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 130:
++#line 892 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 131:
++#line 894 "c-parse.y"
++{ if (extra_warnings)
++ warning ("`%s' is not at beginning of declaration",
++ IDENTIFIER_POINTER (yyvsp[0].ttype));
++ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 132:
++#line 899 "c-parse.y"
++{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
++ break;}
++case 133:
++#line 904 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 134:
++#line 906 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
++ break;}
++case 135:
++#line 911 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 136:
++#line 913 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 137:
++#line 915 "c-parse.y"
++{ if (extra_warnings)
++ warning ("`%s' is not at beginning of declaration",
++ IDENTIFIER_POINTER (yyvsp[0].ttype));
++ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 138:
++#line 928 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 139:
++#line 930 "c-parse.y"
++{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
++ break;}
++case 140:
++#line 932 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 141:
++#line 934 "c-parse.y"
++{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
++ break;}
++case 142:
++#line 939 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
++ TREE_STATIC (yyval.ttype) = 1; ;
++ break;}
++case 143:
++#line 942 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 144:
++#line 944 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
++ TREE_STATIC (yyval.ttype) = 1; ;
++ break;}
++case 145:
++#line 947 "c-parse.y"
++{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
++ warning ("`%s' is not at beginning of declaration",
++ IDENTIFIER_POINTER (yyvsp[0].ttype));
++ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
++ TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
++ break;}
++case 146:
++#line 961 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 147:
++#line 963 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
++ break;}
++case 148:
++#line 967 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 149:
++#line 969 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 152:
++#line 979 "c-parse.y"
++{ /* For a typedef name, record the meaning, not the name.
++ In case of `foo foo, bar;'. */
++ yyval.ttype = lookup_name (yyvsp[0].ttype); ;
++ break;}
++case 153:
++#line 983 "c-parse.y"
++{ yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
++ break;}
++case 154:
++#line 985 "c-parse.y"
++{ yyval.ttype = groktypename (yyvsp[-1].ttype); ;
++ break;}
++case 162:
++#line 1007 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 163:
++#line 1009 "c-parse.y"
++{ if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
++ yyval.ttype = yyvsp[-1].ttype;
++ ;
++ break;}
++case 164:
++#line 1016 "c-parse.y"
++{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
++ yyvsp[-1].ttype, prefix_attributes);
++ start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
++ break;}
++case 165:
++#line 1021 "c-parse.y"
++{ finish_init ();
++ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
++ break;}
++case 166:
++#line 1024 "c-parse.y"
++{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
++ yyvsp[0].ttype, prefix_attributes);
++ finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
++ ;
++ break;}
++case 167:
++#line 1032 "c-parse.y"
++{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
++ yyvsp[-1].ttype, prefix_attributes);
++ start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
++ break;}
++case 168:
++#line 1037 "c-parse.y"
++{ finish_init ();
++ decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes);
++ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
++ break;}
++case 169:
++#line 1041 "c-parse.y"
++{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
++ yyvsp[0].ttype, prefix_attributes);
++ finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
++ break;}
++case 170:
++#line 1049 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 171:
++#line 1051 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 172:
++#line 1056 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 173:
++#line 1058 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 174:
++#line 1063 "c-parse.y"
++{ yyval.ttype = yyvsp[-2].ttype; ;
++ break;}
++case 175:
++#line 1068 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 176:
++#line 1070 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 177:
++#line 1075 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 178:
++#line 1077 "c-parse.y"
++{ yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 179:
++#line 1079 "c-parse.y"
++{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
++ break;}
++case 180:
++#line 1081 "c-parse.y"
++{ yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
++ break;}
++case 181:
++#line 1083 "c-parse.y"
++{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 187:
++#line 1101 "c-parse.y"
++{ really_start_incremental_init (NULL_TREE);
++ /* Note that the call to clear_momentary
++ is in process_init_element. */
++ push_momentary (); ;
++ break;}
++case 188:
++#line 1106 "c-parse.y"
++{ yyval.ttype = pop_init_level (0);
++ if (yyval.ttype == error_mark_node
++ && ! (yychar == STRING || yychar == CONSTANT))
++ pop_momentary ();
++ else
++ pop_momentary_nofree (); ;
++ break;}
++case 189:
++#line 1114 "c-parse.y"
++{ yyval.ttype = error_mark_node; ;
++ break;}
++case 190:
++#line 1120 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C forbids empty initializer braces"); ;
++ break;}
++case 196:
++#line 1136 "c-parse.y"
++{ set_init_label (yyvsp[-1].ttype); ;
++ break;}
++case 199:
++#line 1143 "c-parse.y"
++{ push_init_level (0); ;
++ break;}
++case 200:
++#line 1145 "c-parse.y"
++{ process_init_element (pop_init_level (0)); ;
++ break;}
++case 201:
++#line 1147 "c-parse.y"
++{ process_init_element (yyvsp[0].ttype); ;
++ break;}
++case 205:
++#line 1158 "c-parse.y"
++{ set_init_label (yyvsp[0].ttype); ;
++ break;}
++case 206:
++#line 1163 "c-parse.y"
++{ set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 207:
++#line 1165 "c-parse.y"
++{ set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
++ break;}
++case 208:
++#line 1170 "c-parse.y"
++{ push_c_function_context ();
++ if (! start_function (current_declspecs, yyvsp[0].ttype,
++ prefix_attributes, NULL_TREE, 1))
++ {
++ pop_c_function_context ();
++ YYERROR1;
++ }
++ reinit_parse_for_function (); ;
++ break;}
++case 209:
++#line 1179 "c-parse.y"
++{ store_parm_decls (); ;
++ break;}
++case 210:
++#line 1187 "c-parse.y"
++{ finish_function (1);
++ pop_c_function_context (); ;
++ break;}
++case 211:
++#line 1193 "c-parse.y"
++{ push_c_function_context ();
++ if (! start_function (current_declspecs, yyvsp[0].ttype,
++ prefix_attributes, NULL_TREE, 1))
++ {
++ pop_c_function_context ();
++ YYERROR1;
++ }
++ reinit_parse_for_function (); ;
++ break;}
++case 212:
++#line 1202 "c-parse.y"
++{ store_parm_decls (); ;
++ break;}
++case 213:
++#line 1210 "c-parse.y"
++{ finish_function (1);
++ pop_c_function_context (); ;
++ break;}
++case 216:
++#line 1226 "c-parse.y"
++{ yyval.ttype = yyvsp[-1].ttype; ;
++ break;}
++case 217:
++#line 1228 "c-parse.y"
++{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 218:
++#line 1233 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 219:
++#line 1235 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
++ break;}
++case 220:
++#line 1237 "c-parse.y"
++{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 221:
++#line 1244 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 223:
++#line 1255 "c-parse.y"
++{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 224:
++#line 1260 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE);
++ if (! flag_isoc9x)
++ error ("`[*]' in parameter declaration only allowed in ISO C 9x");
++ ;
++ break;}
++case 225:
++#line 1265 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 226:
++#line 1267 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
++ break;}
++case 227:
++#line 1269 "c-parse.y"
++{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 228:
++#line 1276 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 230:
++#line 1285 "c-parse.y"
++{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 231:
++#line 1290 "c-parse.y"
++{ yyval.ttype = yyvsp[-1].ttype; ;
++ break;}
++case 232:
++#line 1292 "c-parse.y"
++{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 233:
++#line 1294 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE);
++ if (! flag_isoc9x)
++ error ("`[*]' in parameter declaration only allowed in ISO C 9x");
++ ;
++ break;}
++case 234:
++#line 1299 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 235:
++#line 1301 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
++ break;}
++case 236:
++#line 1308 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 238:
++#line 1314 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 239:
++#line 1316 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 240:
++#line 1321 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 241:
++#line 1323 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 242:
++#line 1328 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 243:
++#line 1330 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 244:
++#line 1335 "c-parse.y"
++{ yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
++ /* Start scope of tag before parsing components. */
++ ;
++ break;}
++case 245:
++#line 1339 "c-parse.y"
++{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
++ break;}
++case 246:
++#line 1341 "c-parse.y"
++{ yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
++ yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
++ ;
++ break;}
++case 247:
++#line 1345 "c-parse.y"
++{ yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
++ break;}
++case 248:
++#line 1347 "c-parse.y"
++{ yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
++ break;}
++case 249:
++#line 1349 "c-parse.y"
++{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
++ break;}
++case 250:
++#line 1351 "c-parse.y"
++{ yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
++ yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
++ ;
++ break;}
++case 251:
++#line 1355 "c-parse.y"
++{ yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
++ break;}
++case 252:
++#line 1357 "c-parse.y"
++{ yyvsp[0].itype = suspend_momentary ();
++ yyval.ttype = start_enum (yyvsp[-1].ttype); ;
++ break;}
++case 253:
++#line 1360 "c-parse.y"
++{ yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype));
++ resume_momentary (yyvsp[-5].itype); ;
++ break;}
++case 254:
++#line 1363 "c-parse.y"
++{ yyvsp[0].itype = suspend_momentary ();
++ yyval.ttype = start_enum (NULL_TREE); ;
++ break;}
++case 255:
++#line 1366 "c-parse.y"
++{ yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
++ resume_momentary (yyvsp[-5].itype); ;
++ break;}
++case 256:
++#line 1369 "c-parse.y"
++{ yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
++ break;}
++case 260:
++#line 1380 "c-parse.y"
++{ if (pedantic && ! flag_isoc9x)
++ pedwarn ("comma at end of enumerator list"); ;
++ break;}
++case 261:
++#line 1386 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 262:
++#line 1388 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
++ pedwarn ("no semicolon at end of struct or union"); ;
++ break;}
++case 263:
++#line 1393 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 264:
++#line 1395 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 265:
++#line 1397 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("extra semicolon in struct or union specified"); ;
++ break;}
++case 266:
++#line 1412 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype;
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-1].itype); ;
++ break;}
++case 267:
++#line 1418 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C forbids member declarations with no members");
++ shadow_tag(yyvsp[0].ttype);
++ yyval.ttype = NULL_TREE; ;
++ break;}
++case 268:
++#line 1423 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype;
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-1].itype); ;
++ break;}
++case 269:
++#line 1429 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C forbids member declarations with no members");
++ shadow_tag(yyvsp[0].ttype);
++ yyval.ttype = NULL_TREE; ;
++ break;}
++case 270:
++#line 1434 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 271:
++#line 1436 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype;
++ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
++ break;}
++case 273:
++#line 1443 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 274:
++#line 1448 "c-parse.y"
++{ yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
++ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
++ break;}
++case 275:
++#line 1452 "c-parse.y"
++{ yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
++ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
++ break;}
++case 276:
++#line 1455 "c-parse.y"
++{ yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
++ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
++ break;}
++case 278:
++#line 1467 "c-parse.y"
++{ if (yyvsp[-2].ttype == error_mark_node)
++ yyval.ttype = yyvsp[-2].ttype;
++ else
++ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
++ break;}
++case 279:
++#line 1472 "c-parse.y"
++{ yyval.ttype = error_mark_node; ;
++ break;}
++case 280:
++#line 1478 "c-parse.y"
++{ yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 281:
++#line 1480 "c-parse.y"
++{ yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 282:
++#line 1485 "c-parse.y"
++{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 283:
++#line 1487 "c-parse.y"
++{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 284:
++#line 1492 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 286:
++#line 1498 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 287:
++#line 1500 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 288:
++#line 1505 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 289:
++#line 1507 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 290:
++#line 1512 "c-parse.y"
++{ yyval.ttype = yyvsp[-1].ttype; ;
++ break;}
++case 291:
++#line 1515 "c-parse.y"
++{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
++ break;}
++case 292:
++#line 1517 "c-parse.y"
++{ yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 293:
++#line 1519 "c-parse.y"
++{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 294:
++#line 1521 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 295:
++#line 1523 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
++ break;}
++case 296:
++#line 1525 "c-parse.y"
++{ yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
++ break;}
++case 297:
++#line 1527 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
++ break;}
++case 298:
++#line 1529 "c-parse.y"
++{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
++ break;}
++case 299:
++#line 1533 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 300:
++#line 1542 "c-parse.y"
++{
++ if (pedantic && yyvsp[0].ends_in_label)
++ pedwarn ("ANSI C forbids label at end of compound statement");
++ ;
++ break;}
++case 302:
++#line 1551 "c-parse.y"
++{ yyval.ends_in_label = yyvsp[0].ends_in_label; ;
++ break;}
++case 303:
++#line 1553 "c-parse.y"
++{ yyval.ends_in_label = 0; ;
++ break;}
++case 307:
++#line 1565 "c-parse.y"
++{ emit_line_note (input_filename, lineno);
++ pushlevel (0);
++ clear_last_expr ();
++ push_momentary ();
++ expand_start_bindings (0);
++ ;
++ break;}
++case 309:
++#line 1578 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C forbids label declarations"); ;
++ break;}
++case 312:
++#line 1589 "c-parse.y"
++{ tree link;
++ for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
++ {
++ tree label = shadow_label (TREE_VALUE (link));
++ C_DECLARED_LABEL_FLAG (label) = 1;
++ declare_nonlocal_label (label);
++ }
++ ;
++ break;}
++case 313:
++#line 1603 "c-parse.y"
++{;
++ break;}
++case 315:
++#line 1607 "c-parse.y"
++{ compstmt_count++; ;
++ break;}
++case 316:
++#line 1610 "c-parse.y"
++{ yyval.ttype = convert (void_type_node, integer_zero_node); ;
++ break;}
++case 317:
++#line 1612 "c-parse.y"
++{ emit_line_note (input_filename, lineno);
++ expand_end_bindings (getdecls (), 1, 0);
++ yyval.ttype = poplevel (1, 1, 0);
++ if (yychar == CONSTANT || yychar == STRING)
++ pop_momentary_nofree ();
++ else
++ pop_momentary (); ;
++ break;}
++case 318:
++#line 1620 "c-parse.y"
++{ emit_line_note (input_filename, lineno);
++ expand_end_bindings (getdecls (), kept_level_p (), 0);
++ yyval.ttype = poplevel (kept_level_p (), 0, 0);
++ if (yychar == CONSTANT || yychar == STRING)
++ pop_momentary_nofree ();
++ else
++ pop_momentary (); ;
++ break;}
++case 319:
++#line 1628 "c-parse.y"
++{ emit_line_note (input_filename, lineno);
++ expand_end_bindings (getdecls (), kept_level_p (), 0);
++ yyval.ttype = poplevel (kept_level_p (), 0, 0);
++ if (yychar == CONSTANT || yychar == STRING)
++ pop_momentary_nofree ();
++ else
++ pop_momentary (); ;
++ break;}
++case 322:
++#line 1648 "c-parse.y"
++{ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
++ c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0,
++ compstmt_count);
++ yyval.itype = stmt_count;
++ if_stmt_file = yyvsp[-5].filename;
++ if_stmt_line = yyvsp[-4].lineno;
++ position_after_white_space (); ;
++ break;}
++case 323:
++#line 1662 "c-parse.y"
++{ stmt_count++;
++ compstmt_count++;
++ emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
++ /* See comment in `while' alternative, above. */
++ emit_nop ();
++ expand_start_loop_continue_elsewhere (1);
++ position_after_white_space (); ;
++ break;}
++case 324:
++#line 1670 "c-parse.y"
++{ expand_loop_continue_here (); ;
++ break;}
++case 325:
++#line 1674 "c-parse.y"
++{ yyval.filename = input_filename; ;
++ break;}
++case 326:
++#line 1678 "c-parse.y"
++{ yyval.lineno = lineno; ;
++ break;}
++case 327:
++#line 1683 "c-parse.y"
++{ ;
++ break;}
++case 328:
++#line 1688 "c-parse.y"
++{ ;
++ break;}
++case 329:
++#line 1693 "c-parse.y"
++{ yyval.ends_in_label = yyvsp[0].ends_in_label; ;
++ break;}
++case 330:
++#line 1698 "c-parse.y"
++{ yyval.ends_in_label = 0; ;
++ break;}
++case 331:
++#line 1700 "c-parse.y"
++{ yyval.ends_in_label = 1; ;
++ break;}
++case 332:
++#line 1706 "c-parse.y"
++{ stmt_count++; ;
++ break;}
++case 334:
++#line 1709 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
++/* It appears that this should not be done--that a non-lvalue array
++ shouldn't get an error if the value isn't used.
++ Section 3.2.2.1 says that an array lvalue gets converted to a pointer
++ if it appears as a top-level expression,
++ but says nothing about non-lvalue arrays. */
++#if 0
++ /* Call default_conversion to get an error
++ on referring to a register array if pedantic. */
++ if (TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == ARRAY_TYPE
++ || TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == FUNCTION_TYPE)
++ yyvsp[-1].ttype = default_conversion (yyvsp[-1].ttype);
++#endif
++ iterator_expand (yyvsp[-1].ttype);
++ clear_momentary (); ;
++ break;}
++case 335:
++#line 1726 "c-parse.y"
++{ c_expand_start_else ();
++ yyvsp[-1].itype = stmt_count;
++ position_after_white_space (); ;
++ break;}
++case 336:
++#line 1730 "c-parse.y"
++{ c_expand_end_cond ();
++ if (extra_warnings && stmt_count == yyvsp[-3].itype)
++ warning ("empty body in an else-statement"); ;
++ break;}
++case 337:
++#line 1734 "c-parse.y"
++{ c_expand_end_cond ();
++ /* This warning is here instead of in simple_if, because we
++ do not want a warning if an empty if is followed by an
++ else statement. Increment stmt_count so we don't
++ give a second error if this is a nested `if'. */
++ if (extra_warnings && stmt_count++ == yyvsp[0].itype)
++ warning_with_file_and_line (if_stmt_file, if_stmt_line,
++ "empty body in an if-statement"); ;
++ break;}
++case 338:
++#line 1746 "c-parse.y"
++{ c_expand_end_cond (); ;
++ break;}
++case 339:
++#line 1748 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
++ /* The emit_nop used to come before emit_line_note,
++ but that made the nop seem like part of the preceding line.
++ And that was confusing when the preceding line was
++ inside of an if statement and was not really executed.
++ I think it ought to work to put the nop after the line number.
++ We will see. --rms, July 15, 1991. */
++ emit_nop (); ;
++ break;}
++case 340:
++#line 1758 "c-parse.y"
++{ /* Don't start the loop till we have succeeded
++ in parsing the end test. This is to make sure
++ that we end every loop we start. */
++ expand_start_loop (1);
++ emit_line_note (input_filename, lineno);
++ expand_exit_loop_if_false (NULL_PTR,
++ truthvalue_conversion (yyvsp[-1].ttype));
++ position_after_white_space (); ;
++ break;}
++case 341:
++#line 1767 "c-parse.y"
++{ expand_end_loop (); ;
++ break;}
++case 342:
++#line 1770 "c-parse.y"
++{ emit_line_note (input_filename, lineno);
++ expand_exit_loop_if_false (NULL_PTR,
++ truthvalue_conversion (yyvsp[-2].ttype));
++ expand_end_loop ();
++ clear_momentary (); ;
++ break;}
++case 343:
++#line 1777 "c-parse.y"
++{ expand_end_loop ();
++ clear_momentary (); ;
++ break;}
++case 344:
++#line 1781 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
++ /* See comment in `while' alternative, above. */
++ emit_nop ();
++ if (yyvsp[-1].ttype) c_expand_expr_stmt (yyvsp[-1].ttype);
++ /* Next step is to call expand_start_loop_continue_elsewhere,
++ but wait till after we parse the entire for (...).
++ Otherwise, invalid input might cause us to call that
++ fn without calling expand_end_loop. */
++ ;
++ break;}
++case 345:
++#line 1793 "c-parse.y"
++{ yyvsp[0].lineno = lineno;
++ yyval.filename = input_filename; ;
++ break;}
++case 346:
++#line 1796 "c-parse.y"
++{
++ /* Start the loop. Doing this after parsing
++ all the expressions ensures we will end the loop. */
++ expand_start_loop_continue_elsewhere (1);
++ /* Emit the end-test, with a line number. */
++ emit_line_note (yyvsp[-2].filename, yyvsp[-3].lineno);
++ if (yyvsp[-4].ttype)
++ expand_exit_loop_if_false (NULL_PTR,
++ truthvalue_conversion (yyvsp[-4].ttype));
++ /* Don't let the tree nodes for $9 be discarded by
++ clear_momentary during the parsing of the next stmt. */
++ push_momentary ();
++ yyvsp[-3].lineno = lineno;
++ yyvsp[-2].filename = input_filename;
++ position_after_white_space (); ;
++ break;}
++case 347:
++#line 1812 "c-parse.y"
++{ /* Emit the increment expression, with a line number. */
++ emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
++ expand_loop_continue_here ();
++ if (yyvsp[-3].ttype)
++ c_expand_expr_stmt (yyvsp[-3].ttype);
++ if (yychar == CONSTANT || yychar == STRING)
++ pop_momentary_nofree ();
++ else
++ pop_momentary ();
++ expand_end_loop (); ;
++ break;}
++case 348:
++#line 1823 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
++ c_expand_start_case (yyvsp[-1].ttype);
++ /* Don't let the tree nodes for $3 be discarded by
++ clear_momentary during the parsing of the next stmt. */
++ push_momentary ();
++ position_after_white_space (); ;
++ break;}
++case 349:
++#line 1831 "c-parse.y"
++{ expand_end_case (yyvsp[-3].ttype);
++ if (yychar == CONSTANT || yychar == STRING)
++ pop_momentary_nofree ();
++ else
++ pop_momentary (); ;
++ break;}
++case 350:
++#line 1837 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
++ if ( ! expand_exit_something ())
++ error ("break statement not within loop or switch"); ;
++ break;}
++case 351:
++#line 1842 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
++ if (! expand_continue_loop (NULL_PTR))
++ error ("continue statement not within a loop"); ;
++ break;}
++case 352:
++#line 1847 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
++ c_expand_return (NULL_TREE); ;
++ break;}
++case 353:
++#line 1851 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
++ c_expand_return (yyvsp[-1].ttype); ;
++ break;}
++case 354:
++#line 1855 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
++ STRIP_NOPS (yyvsp[-2].ttype);
++ if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
++ && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
++ || TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
++ expand_asm (yyvsp[-2].ttype);
++ else
++ error ("argument of `asm' is not a constant string"); ;
++ break;}
++case 355:
++#line 1866 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
++ c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
++ yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE],
++ input_filename, lineno); ;
++ break;}
++case 356:
++#line 1873 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
++ c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
++ yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE],
++ input_filename, lineno); ;
++ break;}
++case 357:
++#line 1881 "c-parse.y"
++{ stmt_count++;
++ emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
++ c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
++ yyvsp[-10].ttype == ridpointers[(int)RID_VOLATILE],
++ input_filename, lineno); ;
++ break;}
++case 358:
++#line 1887 "c-parse.y"
++{ tree decl;
++ stmt_count++;
++ emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
++ decl = lookup_label (yyvsp[-1].ttype);
++ if (decl != 0)
++ {
++ TREE_USED (decl) = 1;
++ expand_goto (decl);
++ }
++ ;
++ break;}
++case 359:
++#line 1898 "c-parse.y"
++{ if (pedantic)
++ pedwarn ("ANSI C forbids `goto *expr;'");
++ stmt_count++;
++ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
++ expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
++ break;}
++case 362:
++#line 1913 "c-parse.y"
++{
++ /* The value returned by this action is */
++ /* 1 if everything is OK */
++ /* 0 in case of error or already bound iterator */
++
++ yyval.itype = 0;
++ if (TREE_CODE (yyvsp[-1].ttype) != VAR_DECL)
++ error ("invalid `for (ITERATOR)' syntax");
++ else if (! ITERATOR_P (yyvsp[-1].ttype))
++ error ("`%s' is not an iterator",
++ IDENTIFIER_POINTER (DECL_NAME (yyvsp[-1].ttype)));
++ else if (ITERATOR_BOUND_P (yyvsp[-1].ttype))
++ error ("`for (%s)' inside expansion of same iterator",
++ IDENTIFIER_POINTER (DECL_NAME (yyvsp[-1].ttype)));
++ else
++ {
++ yyval.itype = 1;
++ iterator_for_loop_start (yyvsp[-1].ttype);
++ }
++ ;
++ break;}
++case 363:
++#line 1934 "c-parse.y"
++{
++ if (yyvsp[-1].itype)
++ iterator_for_loop_end (yyvsp[-3].ttype);
++ ;
++ break;}
++case 364:
++#line 1969 "c-parse.y"
++{ register tree value = check_case_value (yyvsp[-1].ttype);
++ register tree label
++ = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
++
++ stmt_count++;
++
++ if (value != error_mark_node)
++ {
++ tree duplicate;
++ int success;
++
++ if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
++ pedwarn ("label must have integral type in ANSI C");
++
++ success = pushcase (value, convert_and_check,
++ label, &duplicate);
++
++ if (success == 1)
++ error ("case label not within a switch statement");
++ else if (success == 2)
++ {
++ error ("duplicate case value");
++ error_with_decl (duplicate, "this is the first entry for that value");
++ }
++ else if (success == 3)
++ warning ("case value out of range");
++ else if (success == 5)
++ error ("case label within scope of cleanup or variable array");
++ }
++ position_after_white_space (); ;
++ break;}
++case 365:
++#line 2000 "c-parse.y"
++{ register tree value1 = check_case_value (yyvsp[-3].ttype);
++ register tree value2 = check_case_value (yyvsp[-1].ttype);
++ register tree label
++ = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
++
++ if (pedantic)
++ pedwarn ("ANSI C forbids case ranges");
++ stmt_count++;
++
++ if (value1 != error_mark_node && value2 != error_mark_node)
++ {
++ tree duplicate;
++ int success = pushcase_range (value1, value2,
++ convert_and_check, label,
++ &duplicate);
++ if (success == 1)
++ error ("case label not within a switch statement");
++ else if (success == 2)
++ {
++ error ("duplicate case value");
++ error_with_decl (duplicate, "this is the first entry for that value");
++ }
++ else if (success == 3)
++ warning ("case value out of range");
++ else if (success == 4)
++ warning ("empty case range");
++ else if (success == 5)
++ error ("case label within scope of cleanup or variable array");
++ }
++ position_after_white_space (); ;
++ break;}
++case 366:
++#line 2031 "c-parse.y"
++{
++ tree duplicate;
++ register tree label
++ = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
++ int success = pushcase (NULL_TREE, 0, label, &duplicate);
++ stmt_count++;
++ if (success == 1)
++ error ("default label not within a switch statement");
++ else if (success == 2)
++ {
++ error ("multiple default labels in one switch");
++ error_with_decl (duplicate, "this is the first default label");
++ }
++ position_after_white_space (); ;
++ break;}
++case 367:
++#line 2046 "c-parse.y"
++{ tree label = define_label (input_filename, lineno, yyvsp[-2].ttype);
++ stmt_count++;
++ emit_nop ();
++ if (label)
++ {
++ expand_label (label);
++ decl_attributes (label, yyvsp[0].ttype, NULL_TREE);
++ }
++ position_after_white_space (); ;
++ break;}
++case 368:
++#line 2061 "c-parse.y"
++{ emit_line_note (input_filename, lineno);
++ yyval.ttype = NULL_TREE; ;
++ break;}
++case 369:
++#line 2064 "c-parse.y"
++{ emit_line_note (input_filename, lineno); ;
++ break;}
++case 370:
++#line 2069 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 372:
++#line 2076 "c-parse.y"
++{ yyval.ttype = NULL_TREE; ;
++ break;}
++case 375:
++#line 2083 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
++ break;}
++case 376:
++#line 2088 "c-parse.y"
++{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
++ break;}
++case 377:
++#line 2093 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
++ break;}
++case 378:
++#line 2095 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
++ break;}
++case 379:
++#line 2101 "c-parse.y"
++{ pushlevel (0);
++ clear_parm_order ();
++ declare_parm_level (0); ;
++ break;}
++case 380:
++#line 2105 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype;
++ parmlist_tags_warning ();
++ poplevel (0, 0, 0); ;
++ break;}
++case 382:
++#line 2113 "c-parse.y"
++{ tree parm;
++ if (pedantic)
++ pedwarn ("ANSI C forbids forward parameter declarations");
++ /* Mark the forward decls as such. */
++ for (parm = getdecls (); parm; parm = TREE_CHAIN (parm))
++ TREE_ASM_WRITTEN (parm) = 1;
++ clear_parm_order (); ;
++ break;}
++case 383:
++#line 2121 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype; ;
++ break;}
++case 384:
++#line 2123 "c-parse.y"
++{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
++ break;}
++case 385:
++#line 2129 "c-parse.y"
++{ yyval.ttype = get_parm_info (0); ;
++ break;}
++case 386:
++#line 2131 "c-parse.y"
++{ yyval.ttype = get_parm_info (0);
++ /* Gcc used to allow this as an extension. However, it does
++ not work for all targets, and thus has been disabled.
++ Also, since func (...) and func () are indistinguishable,
++ it caused problems with the code in expand_builtin which
++ tries to verify that BUILT_IN_NEXT_ARG is being used
++ correctly. */
++ error ("ANSI C requires a named argument before `...'");
++ ;
++ break;}
++case 387:
++#line 2141 "c-parse.y"
++{ yyval.ttype = get_parm_info (1); ;
++ break;}
++case 388:
++#line 2143 "c-parse.y"
++{ yyval.ttype = get_parm_info (0); ;
++ break;}
++case 389:
++#line 2148 "c-parse.y"
++{ push_parm_decl (yyvsp[0].ttype); ;
++ break;}
++case 390:
++#line 2150 "c-parse.y"
++{ push_parm_decl (yyvsp[0].ttype); ;
++ break;}
++case 391:
++#line 2157 "c-parse.y"
++{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
++ yyvsp[-1].ttype),
++ build_tree_list (prefix_attributes,
++ yyvsp[0].ttype));
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 392:
++#line 2166 "c-parse.y"
++{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
++ yyvsp[-1].ttype),
++ build_tree_list (prefix_attributes,
++ yyvsp[0].ttype));
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 393:
++#line 2175 "c-parse.y"
++{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
++ yyvsp[-1].ttype),
++ build_tree_list (prefix_attributes,
++ yyvsp[0].ttype));
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 394:
++#line 2184 "c-parse.y"
++{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
++ yyvsp[-1].ttype),
++ build_tree_list (prefix_attributes,
++ yyvsp[0].ttype));
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 395:
++#line 2194 "c-parse.y"
++{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
++ yyvsp[-1].ttype),
++ build_tree_list (prefix_attributes,
++ yyvsp[0].ttype));
++ current_declspecs = TREE_VALUE (declspec_stack);
++ prefix_attributes = TREE_PURPOSE (declspec_stack);
++ declspec_stack = TREE_CHAIN (declspec_stack);
++ resume_momentary (yyvsp[-2].itype); ;
++ break;}
++case 396:
++#line 2208 "c-parse.y"
++{ pushlevel (0);
++ clear_parm_order ();
++ declare_parm_level (1); ;
++ break;}
++case 397:
++#line 2212 "c-parse.y"
++{ yyval.ttype = yyvsp[0].ttype;
++ parmlist_tags_warning ();
++ poplevel (0, 0, 0); ;
++ break;}
++case 399:
++#line 2220 "c-parse.y"
++{ tree t;
++ for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
++ if (TREE_VALUE (t) == NULL_TREE)
++ error ("`...' in old-style identifier list");
++ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
++ break;}
++case 400:
++#line 2230 "c-parse.y"
++{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
++ break;}
++case 401:
++#line 2232 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
++ break;}
++case 402:
++#line 2238 "c-parse.y"
++{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
++ break;}
++case 403:
++#line 2240 "c-parse.y"
++{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
++ break;}
++case 404:
++#line 2245 "c-parse.y"
++{ yyval.ttype = SAVE_WARN_FLAGS();
++ pedantic = 0;
++ warn_pointer_arith = 0; ;
++ break;}
++}
++ /* the action file gets copied in in place of this dollarsign */
++#line 543 "/usr/share/bison.simple"
++
++ yyvsp -= yylen;
++ yyssp -= yylen;
++#ifdef YYLSP_NEEDED
++ yylsp -= yylen;
++#endif
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ short *ssp1 = yyss - 1;
++ fprintf (stderr, "state stack now");
++ while (ssp1 != yyssp)
++ fprintf (stderr, " %d", *++ssp1);
++ fprintf (stderr, "\n");
++ }
++#endif
++
++ *++yyvsp = yyval;
++
++#ifdef YYLSP_NEEDED
++ yylsp++;
++ if (yylen == 0)
++ {
++ yylsp->first_line = yylloc.first_line;
++ yylsp->first_column = yylloc.first_column;
++ yylsp->last_line = (yylsp-1)->last_line;
++ yylsp->last_column = (yylsp-1)->last_column;
++ yylsp->text = 0;
++ }
++ else
++ {
++ yylsp->last_line = (yylsp+yylen-1)->last_line;
++ yylsp->last_column = (yylsp+yylen-1)->last_column;
++ }
++#endif
++
++ /* Now "shift" the result of the reduction.
++ Determine what state that goes to,
++ based on the state we popped back to
++ and the rule number reduced by. */
++
++ yyn = yyr1[yyn];
++
++ yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
++ if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
++ yystate = yytable[yystate];
++ else
++ yystate = yydefgoto[yyn - YYNTBASE];
++
++ goto yynewstate;
++
++yyerrlab: /* here on detecting error */
++
++ if (! yyerrstatus)
++ /* If not already recovering from an error, report this error. */
++ {
++ ++yynerrs;
++
++#ifdef YYERROR_VERBOSE
++ yyn = yypact[yystate];
++
++ if (yyn > YYFLAG && yyn < YYLAST)
++ {
++ int size = 0;
++ char *msg;
++ int x, count;
++
++ count = 0;
++ /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
++ for (x = (yyn < 0 ? -yyn : 0);
++ x < (sizeof(yytname) / sizeof(char *)); x++)
++ if (yycheck[x + yyn] == x)
++ size += strlen(yytname[x]) + 15, count++;
++ msg = (char *) malloc(size + 15);
++ if (msg != 0)
++ {
++ strcpy(msg, "parse error");
++
++ if (count < 5)
++ {
++ count = 0;
++ for (x = (yyn < 0 ? -yyn : 0);
++ x < (sizeof(yytname) / sizeof(char *)); x++)
++ if (yycheck[x + yyn] == x)
++ {
++ strcat(msg, count == 0 ? ", expecting `" : " or `");
++ strcat(msg, yytname[x]);
++ strcat(msg, "'");
++ count++;
++ }
++ }
++ yyerror(msg);
++ free(msg);
++ }
++ else
++ yyerror ("parse error; also virtual memory exceeded");
++ }
++ else
++#endif /* YYERROR_VERBOSE */
++ yyerror("parse error");
++ }
++
++ goto yyerrlab1;
++yyerrlab1: /* here on error raised explicitly by an action */
++
++ if (yyerrstatus == 3)
++ {
++ /* if just tried and failed to reuse lookahead token after an error, discard it. */
++
++ /* return failure if at end of input */
++ if (yychar == YYEOF)
++ YYABORT;
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
++#endif
++
++ yychar = YYEMPTY;
++ }
++
++ /* Else will try to reuse lookahead token
++ after shifting the error token. */
++
++ yyerrstatus = 3; /* Each real token shifted decrements this */
++
++ goto yyerrhandle;
++
++yyerrdefault: /* current state does not do anything special for the error token. */
++
++#if 0
++ /* This is wrong; only states that explicitly want error tokens
++ should shift them. */
++ yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
++ if (yyn) goto yydefault;
++#endif
++
++yyerrpop: /* pop the current state because it cannot handle the error token */
++
++ if (yyssp == yyss) YYABORT;
++ yyvsp--;
++ yystate = *--yyssp;
++#ifdef YYLSP_NEEDED
++ yylsp--;
++#endif
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ short *ssp1 = yyss - 1;
++ fprintf (stderr, "Error: state stack now");
++ while (ssp1 != yyssp)
++ fprintf (stderr, " %d", *++ssp1);
++ fprintf (stderr, "\n");
++ }
++#endif
++
++yyerrhandle:
++
++ yyn = yypact[yystate];
++ if (yyn == YYFLAG)
++ goto yyerrdefault;
++
++ yyn += YYTERROR;
++ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
++ goto yyerrdefault;
++
++ yyn = yytable[yyn];
++ if (yyn < 0)
++ {
++ if (yyn == YYFLAG)
++ goto yyerrpop;
++ yyn = -yyn;
++ goto yyreduce;
++ }
++ else if (yyn == 0)
++ goto yyerrpop;
++
++ if (yyn == YYFINAL)
++ YYACCEPT;
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Shifting error token, ");
++#endif
++
++ *++yyvsp = yylval;
++#ifdef YYLSP_NEEDED
++ *++yylsp = yylloc;
++#endif
++
++ yystate = yyn;
++ goto yynewstate;
++
++ yyacceptlab:
++ /* YYACCEPT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 0;
++
++ yyabortlab:
++ /* YYABORT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 1;
++}
++#line 2250 "c-parse.y"
++
+diff -ruNb gcc-2.95.3/gcc/c-parse.h gcc-2.95.4/gcc/c-parse.h
+--- gcc-2.95.3/gcc/c-parse.h 2001-03-16 15:13:48.000000000 +0100
++++ gcc-2.95.4/gcc/c-parse.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,64 +1,64 @@
+ typedef union {long itype; tree ttype; enum tree_code code;
+ char *filename; int lineno; int ends_in_label; } YYSTYPE;
+-#define IDENTIFIER 258
+-#define TYPENAME 259
+-#define SCSPEC 260
+-#define TYPESPEC 261
+-#define TYPE_QUAL 262
+-#define CONSTANT 263
+-#define STRING 264
+-#define ELLIPSIS 265
+-#define SIZEOF 266
+-#define ENUM 267
+-#define STRUCT 268
+-#define UNION 269
+-#define IF 270
+-#define ELSE 271
+-#define WHILE 272
+-#define DO 273
+-#define FOR 274
+-#define SWITCH 275
+-#define CASE 276
+-#define DEFAULT 277
+-#define BREAK 278
+-#define CONTINUE 279
+-#define RETURN 280
+-#define GOTO 281
+-#define ASM_KEYWORD 282
+-#define TYPEOF 283
+-#define ALIGNOF 284
+-#define ATTRIBUTE 285
+-#define EXTENSION 286
+-#define LABEL 287
+-#define REALPART 288
+-#define IMAGPART 289
+-#define ASSIGN 290
+-#define OROR 291
+-#define ANDAND 292
+-#define EQCOMPARE 293
+-#define ARITHCOMPARE 294
+-#define LSHIFT 295
+-#define RSHIFT 296
+-#define UNARY 297
+-#define PLUSPLUS 298
+-#define MINUSMINUS 299
+-#define HYPERUNARY 300
+-#define POINTSAT 301
+-#define INTERFACE 302
+-#define IMPLEMENTATION 303
+-#define END 304
+-#define SELECTOR 305
+-#define DEFS 306
+-#define ENCODE 307
+-#define CLASSNAME 308
+-#define PUBLIC 309
+-#define PRIVATE 310
+-#define PROTECTED 311
+-#define PROTOCOL 312
+-#define OBJECTNAME 313
+-#define CLASS 314
+-#define ALIAS 315
+-#define OBJC_STRING 316
++#define IDENTIFIER 257
++#define TYPENAME 258
++#define SCSPEC 259
++#define TYPESPEC 260
++#define TYPE_QUAL 261
++#define CONSTANT 262
++#define STRING 263
++#define ELLIPSIS 264
++#define SIZEOF 265
++#define ENUM 266
++#define STRUCT 267
++#define UNION 268
++#define IF 269
++#define ELSE 270
++#define WHILE 271
++#define DO 272
++#define FOR 273
++#define SWITCH 274
++#define CASE 275
++#define DEFAULT 276
++#define BREAK 277
++#define CONTINUE 278
++#define RETURN 279
++#define GOTO 280
++#define ASM_KEYWORD 281
++#define TYPEOF 282
++#define ALIGNOF 283
++#define ATTRIBUTE 284
++#define EXTENSION 285
++#define LABEL 286
++#define REALPART 287
++#define IMAGPART 288
++#define ASSIGN 289
++#define OROR 290
++#define ANDAND 291
++#define EQCOMPARE 292
++#define ARITHCOMPARE 293
++#define LSHIFT 294
++#define RSHIFT 295
++#define UNARY 296
++#define PLUSPLUS 297
++#define MINUSMINUS 298
++#define HYPERUNARY 299
++#define POINTSAT 300
++#define INTERFACE 301
++#define IMPLEMENTATION 302
++#define END 303
++#define SELECTOR 304
++#define DEFS 305
++#define ENCODE 306
++#define CLASSNAME 307
++#define PUBLIC 308
++#define PRIVATE 309
++#define PROTECTED 310
++#define PROTOCOL 311
++#define OBJECTNAME 312
++#define CLASS 313
++#define ALIAS 314
++#define OBJC_STRING 315
+
+
+ extern YYSTYPE yylval;
+diff -ruNb gcc-2.95.3/gcc/c-parse.in gcc-2.95.4/gcc/c-parse.in
+--- gcc-2.95.3/gcc/c-parse.in 1999-04-27 00:35:50.000000000 +0200
++++ gcc-2.95.4/gcc/c-parse.in 2017-11-07 22:10:12.000000000 +0100
+@@ -186,7 +186,7 @@
+ %type <ttype> init maybeasm
+ %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
+ %type <ttype> maybe_attribute attributes attribute attribute_list attrib
+-%type <ttype> any_word
++%type <ttype> any_word extension
+
+ %type <ttype> compstmt
+
+@@ -247,6 +247,17 @@
+ /* 1 if we explained undeclared var errors. */
+ static int undeclared_variable_notice;
+
++/* For __extension__, save/restore the warning flags which are
++ controlled by __extension__. */
++#define SAVE_WARN_FLAGS() \
++ build_int_2 (pedantic | (warn_pointer_arith << 1), 0)
++#define RESTORE_WARN_FLAGS(tval) \
++ do { \
++ int val = TREE_INT_CST_LOW (tval); \
++ pedantic = val & 1; \
++ warn_pointer_arith = (val >> 1) & 1; \
++ } while (0)
++
+ ifobjc
+ /* Objective-C specific information */
+
+@@ -307,7 +318,7 @@
+ else
+ error ("argument of `asm' is not a constant string"); }
+ | extension extdef
+- { pedantic = $<itype>1; }
++ { RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ datadef:
+@@ -448,7 +459,7 @@
+ /* __extension__ turns off -pedantic for following primary. */
+ | extension cast_expr %prec UNARY
+ { $$ = $2;
+- pedantic = $<itype>1; }
++ RESTORE_WARN_FLAGS ($1); }
+ | unop cast_expr %prec UNARY
+ { $$ = build_unary_op ($1, $2, 0);
+ overflow_warning ($$); }
+@@ -1015,7 +1026,7 @@
+ | declmods ';'
+ { pedwarn ("empty declaration"); }
+ | extension decl
+- { pedantic = $<itype>1; }
++ { RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ /* Declspecs which contain at least one type specifier or typedef name.
+@@ -1614,7 +1625,7 @@
+ { $$ = NULL_TREE; }
+ | extension component_decl
+ { $$ = $2;
+- pedantic = $<itype>1; }
++ RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ components:
+@@ -2426,8 +2437,9 @@
+
+ extension:
+ EXTENSION
+- { $<itype>$ = pedantic;
+- pedantic = 0; }
++ { $$ = SAVE_WARN_FLAGS();
++ pedantic = 0;
++ warn_pointer_arith = 0; }
+ ;
+
+ ifobjc
+diff -ruNb gcc-2.95.3/gcc/c-parse.y gcc-2.95.4/gcc/c-parse.y
+--- gcc-2.95.3/gcc/c-parse.y 1999-04-27 00:35:51.000000000 +0200
++++ gcc-2.95.4/gcc/c-parse.y 2017-11-07 22:10:12.000000000 +0100
+@@ -174,7 +174,7 @@
+ %type <ttype> init maybeasm
+ %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
+ %type <ttype> maybe_attribute attributes attribute attribute_list attrib
+-%type <ttype> any_word
++%type <ttype> any_word extension
+
+ %type <ttype> compstmt
+
+@@ -222,6 +222,17 @@
+ /* 1 if we explained undeclared var errors. */
+ static int undeclared_variable_notice;
+
++/* For __extension__, save/restore the warning flags which are
++ controlled by __extension__. */
++#define SAVE_WARN_FLAGS() \
++ build_int_2 (pedantic | (warn_pointer_arith << 1), 0)
++#define RESTORE_WARN_FLAGS(tval) \
++ do { \
++ int val = TREE_INT_CST_LOW (tval); \
++ pedantic = val & 1; \
++ warn_pointer_arith = (val >> 1) & 1; \
++ } while (0)
++
+
+ /* Tell yyparse how to print a token's value, if yydebug is set. */
+
+@@ -266,7 +277,7 @@
+ else
+ error ("argument of `asm' is not a constant string"); }
+ | extension extdef
+- { pedantic = $<itype>1; }
++ { RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ datadef:
+@@ -403,7 +414,7 @@
+ /* __extension__ turns off -pedantic for following primary. */
+ | extension cast_expr %prec UNARY
+ { $$ = $2;
+- pedantic = $<itype>1; }
++ RESTORE_WARN_FLAGS ($1); }
+ | unop cast_expr %prec UNARY
+ { $$ = build_unary_op ($1, $2, 0);
+ overflow_warning ($$); }
+@@ -860,7 +871,7 @@
+ | declmods ';'
+ { pedwarn ("empty declaration"); }
+ | extension decl
+- { pedantic = $<itype>1; }
++ { RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ /* Declspecs which contain at least one type specifier or typedef name.
+@@ -1423,7 +1434,7 @@
+ { $$ = NULL_TREE; }
+ | extension component_decl
+ { $$ = $2;
+- pedantic = $<itype>1; }
++ RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ components:
+@@ -2231,8 +2242,9 @@
+
+ extension:
+ EXTENSION
+- { $<itype>$ = pedantic;
+- pedantic = 0; }
++ { $$ = SAVE_WARN_FLAGS();
++ pedantic = 0;
++ warn_pointer_arith = 0; }
+ ;
+
+ %%
+diff -ruNb gcc-2.95.3/gcc/cppinit.c gcc-2.95.4/gcc/cppinit.c
+--- gcc-2.95.3/gcc/cppinit.c 2001-01-25 15:03:03.000000000 +0100
++++ gcc-2.95.4/gcc/cppinit.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* CPP Library.
+ Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+- 1999, 2000 Free Software Foundation, Inc.
++ 1999, 2000, 2001 Free Software Foundation, Inc.
+ Contributed by Per Bothner, 1994-95.
+ Based on CCCP program by Paul Rubin, June 1986
+ Adapted to ANSI C, Richard Stallman, Jan 1987
+@@ -93,11 +93,11 @@
+ NULL
+ };
+
+-#ifndef OBJECT_SUFFIX
++#ifndef TARGET_OBJECT_SUFFIX
+ # ifdef VMS
+-# define OBJECT_SUFFIX ".obj"
++# define TARGET_OBJECT_SUFFIX ".obj"
+ # else
+-# define OBJECT_SUFFIX ".o"
++# define TARGET_OBJECT_SUFFIX ".o"
+ # endif
+ #endif
+
+@@ -752,7 +752,7 @@
+ }
+
+ /* Supply our own suffix. */
+- strcpy (q, OBJECT_SUFFIX);
++ strcpy (q, TARGET_OBJECT_SUFFIX);
+
+ deps_output (pfile, p, ':');
+ deps_output (pfile, opts->in_fname, ' ');
+diff -ruNb gcc-2.95.3/gcc/crtstuff.c gcc-2.95.4/gcc/crtstuff.c
+--- gcc-2.95.3/gcc/crtstuff.c 1999-03-23 01:43:51.000000000 +0100
++++ gcc-2.95.4/gcc/crtstuff.c 2017-11-07 22:10:12.000000000 +0100
+@@ -380,19 +380,8 @@
+ #endif
+ asm (TEXT_SECTION_ASM_OP);
+
+-/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr,
+- __environ and atexit (). We have to make sure they are in the .dynsym
+- section. We accomplish it by making a dummy call here. This
+- code is never reached. */
+-
+-#if defined(__linux__) && defined(__PIC__) && defined(__i386__)
+- {
+- extern void *___brk_addr;
+- extern char **__environ;
+-
+- ___brk_addr = __environ;
+- atexit ();
+- }
++#ifdef CRT_END_INIT_DUMMY
++ CRT_END_INIT_DUMMY;
+ #endif
+ }
+
+diff -ruNb gcc-2.95.3/gcc/cse.c gcc-2.95.4/gcc/cse.c
+--- gcc-2.95.3/gcc/cse.c 2001-01-25 15:03:03.000000000 +0100
++++ gcc-2.95.4/gcc/cse.c 2017-11-07 22:10:12.000000000 +0100
+@@ -696,8 +696,6 @@
+ static void free_cse_reg_info PROTO((splay_tree_value));
+ static void flush_hash_table PROTO((void));
+
+-extern int rtx_equal_function_value_matters;
+-
+ /* Dump the expressions in the equivalence class indicated by CLASSP.
+ This function is used only for debugging. */
+ void
+diff -ruNb gcc-2.95.3/gcc/except.c gcc-2.95.4/gcc/except.c
+--- gcc-2.95.3/gcc/except.c 2001-02-19 15:01:59.000000000 +0100
++++ gcc-2.95.4/gcc/except.c 2017-11-07 22:10:12.000000000 +0100
+@@ -723,21 +723,41 @@
+ receive_exception_label (handler_label)
+ rtx handler_label;
+ {
++ rtx around_label = NULL_RTX;
++
++ if (! flag_new_exceptions || exceptions_via_longjmp)
++ {
++ around_label = gen_label_rtx ();
++ emit_jump (around_label);
++ emit_barrier ();
++ }
++
+ emit_label (handler_label);
+
+-#ifdef HAVE_exception_receiver
+ if (! exceptions_via_longjmp)
++ {
++#ifdef HAVE_exception_receiver
+ if (HAVE_exception_receiver)
+ emit_insn (gen_exception_receiver ());
++ else
+ #endif
+-
+ #ifdef HAVE_nonlocal_goto_receiver
+- if (! exceptions_via_longjmp)
+ if (HAVE_nonlocal_goto_receiver)
+ emit_insn (gen_nonlocal_goto_receiver ());
++ else
+ #endif
+-}
++ { /* Nothing */ }
++ }
++ else
++ {
++#ifndef DONT_USE_BUILTIN_SETJMP
++ expand_builtin_setjmp_receiver (handler_label);
++#endif
++ }
+
++ if (around_label)
++ emit_label (around_label);
++}
+
+ struct func_eh_entry
+ {
+@@ -1320,7 +1340,7 @@
+ start_dynamic_handler ()
+ {
+ rtx dhc, dcc;
+- rtx x, arg, buf;
++ rtx arg, buf;
+ int size;
+
+ #ifndef DONT_USE_BUILTIN_SETJMP
+@@ -1362,18 +1382,17 @@
+ buf = plus_constant (XEXP (arg, 0), GET_MODE_SIZE (Pmode)*2);
+
+ #ifdef DONT_USE_BUILTIN_SETJMP
+- x = emit_library_call_value (setjmp_libfunc, NULL_RTX, 1, SImode, 1,
++ {
++ rtx x;
++ x = emit_library_call_value (setjmp_libfunc, NULL_RTX, LCT_CONST,
++ TYPE_MODE (integer_type_node), 1,
+ buf, Pmode);
+ /* If we come back here for a catch, transfer control to the handler. */
+ jumpif_rtx (x, ehstack.top->entry->exception_handler_label);
++ }
+ #else
+- {
+- /* A label to continue execution for the no exception case. */
+- rtx noex = gen_label_rtx();
+- x = expand_builtin_setjmp (buf, NULL_RTX, noex,
++ expand_builtin_setjmp_setup (buf,
+ ehstack.top->entry->exception_handler_label);
+- emit_label (noex);
+- }
+ #endif
+
+ /* We are committed to this, so update the handler chain. */
+diff -ruNb gcc-2.95.3/gcc/expr.c gcc-2.95.4/gcc/expr.c
+--- gcc-2.95.3/gcc/expr.c 2001-02-19 15:02:00.000000000 +0100
++++ gcc-2.95.4/gcc/expr.c 2017-11-07 22:10:12.000000000 +0100
+@@ -192,6 +192,7 @@
+ static int apply_args_size PROTO((void));
+ static int apply_result_size PROTO((void));
+ static rtx result_vector PROTO((int, rtx));
++static rtx expand_builtin_setjmp PROTO((tree, rtx));
+ static rtx expand_builtin_apply_args PROTO((void));
+ static rtx expand_builtin_apply PROTO((rtx, rtx, rtx));
+ static void expand_builtin_return PROTO((rtx));
+@@ -8544,44 +8545,29 @@
+ return tem;
+ }
+
+-/* __builtin_setjmp is passed a pointer to an array of five words (not
+- all will be used on all machines). It operates similarly to the C
+- library function of the same name, but is more efficient. Much of
+- the code below (and for longjmp) is copied from the handling of
+- non-local gotos.
+-
+- NOTE: This is intended for use by GNAT and the exception handling
+- scheme in the compiler and will only work in the method used by
+- them. */
++/* Construct the leading half of a __builtin_setjmp call. Control will
++ return to RECEIVER_LABEL. This is used directly by sjlj exception
++ handling code. */
+
+-rtx
+-expand_builtin_setjmp (buf_addr, target, first_label, next_label)
++void
++expand_builtin_setjmp_setup (buf_addr, receiver_label)
+ rtx buf_addr;
+- rtx target;
+- rtx first_label, next_label;
++ rtx receiver_label;
+ {
+- rtx lab1 = gen_label_rtx ();
+ enum machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
+- enum machine_mode value_mode;
+ rtx stack_save;
+
+- value_mode = TYPE_MODE (integer_type_node);
+-
+ #ifdef POINTERS_EXTEND_UNSIGNED
+ buf_addr = convert_memory_address (Pmode, buf_addr);
+ #endif
+
+ buf_addr = force_reg (Pmode, buf_addr);
+
+- if (target == 0 || GET_CODE (target) != REG
+- || REGNO (target) < FIRST_PSEUDO_REGISTER)
+- target = gen_reg_rtx (value_mode);
+-
+ emit_queue ();
+
+- /* We store the frame pointer and the address of lab1 in the buffer
+- and use the rest of it for the stack save area, which is
+- machine-dependent. */
++ /* We store the frame pointer and the address of receiver_label in
++ the buffer and use the rest of it for the stack save area, which
++ is machine-dependent. */
+
+ #ifndef BUILTIN_SETJMP_FRAME_VALUE
+ #define BUILTIN_SETJMP_FRAME_VALUE virtual_stack_vars_rtx
+@@ -8593,7 +8579,7 @@
+ (gen_rtx_MEM (Pmode,
+ plus_constant (buf_addr,
+ GET_MODE_SIZE (Pmode)))),
+- force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, lab1)));
++ force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, receiver_label)));
+
+ stack_save = gen_rtx_MEM (sa_mode,
+ plus_constant (buf_addr,
+@@ -8606,20 +8592,22 @@
+ emit_insn (gen_builtin_setjmp_setup (buf_addr));
+ #endif
+
+- /* Set TARGET to zero and branch to the first-time-through label. */
+- emit_move_insn (target, const0_rtx);
+- emit_jump_insn (gen_jump (first_label));
+- emit_barrier ();
+- emit_label (lab1);
+-
+- /* Tell flow about the strange goings on. Putting `lab1' on
+- `nonlocal_goto_handler_labels' to indicates that function
+- calls may traverse the arc back to this label. */
++ /* Tell optimize_save_area_alloca that extra work is going to
++ need to go on during alloca. */
++ current_function_calls_setjmp = 1;
+
++ /* Set this so all the registers get saved in our frame; we need to be
++ able to copy the saved values for any registers from frames we unwind. */
+ current_function_has_nonlocal_label = 1;
+- nonlocal_goto_handler_labels =
+- gen_rtx_EXPR_LIST (VOIDmode, lab1, nonlocal_goto_handler_labels);
++}
++
++/* Construct the trailing part of a __builtin_setjmp call.
++ This is used directly by sjlj exception handling code. */
+
++void
++expand_builtin_setjmp_receiver (receiver_label)
++ rtx receiver_label ATTRIBUTE_UNUSED;
++{
+ /* Clobber the FP when we get here, so we have to make sure it's
+ marked as used by this function. */
+ emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
+@@ -8666,7 +8654,7 @@
+
+ #ifdef HAVE_builtin_setjmp_receiver
+ if (HAVE_builtin_setjmp_receiver)
+- emit_insn (gen_builtin_setjmp_receiver (lab1));
++ emit_insn (gen_builtin_setjmp_receiver (receiver_label));
+ else
+ #endif
+ #ifdef HAVE_nonlocal_goto_receiver
+@@ -8678,10 +8666,66 @@
+ ; /* Nothing */
+ }
+
+- /* Set TARGET, and branch to the next-time-through label. */
+- emit_move_insn (target, const1_rtx);
+- emit_jump_insn (gen_jump (next_label));
++ /* @@@ This is a kludge. Not all machine descriptions define a blockage
++ insn, but we must not allow the code we just generated to be reordered
++ by scheduling. Specifically, the update of the frame pointer must
++ happen immediately, not later. So emit an ASM_INPUT to act as blockage
++ insn. */
++ emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
++}
++
++
++/* __builtin_setjmp is passed a pointer to an array of five words (not
++ all will be used on all machines). It operates similarly to the C
++ library function of the same name, but is more efficient. Much of
++ the code below (and for longjmp) is copied from the handling of
++ non-local gotos.
++
++ NOTE: This is intended for use by GNAT and the exception handling
++ scheme in the compiler and will only work in the method used by
++ them. */
++
++static rtx
++expand_builtin_setjmp (arglist, target)
++ tree arglist;
++ rtx target;
++{
++ rtx buf_addr, next_lab, cont_lab;
++
++ if (arglist == 0
++ || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
++ return NULL_RTX;
++
++ if (target == 0 || GET_CODE (target) != REG
++ || REGNO (target) < FIRST_PSEUDO_REGISTER)
++ target = gen_reg_rtx (TYPE_MODE (integer_type_node));
++
++ buf_addr = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0);
++
++ next_lab = gen_label_rtx ();
++ cont_lab = gen_label_rtx ();
++
++ expand_builtin_setjmp_setup (buf_addr, next_lab);
++
++ /* Set TARGET to zero and branch to the continue label. */
++ emit_move_insn (target, const0_rtx);
++ emit_jump_insn (gen_jump (cont_lab));
+ emit_barrier ();
++ emit_label (next_lab);
++
++ expand_builtin_setjmp_receiver (next_lab);
++
++ /* Set TARGET to one. */
++ emit_move_insn (target, const1_rtx);
++ emit_label (cont_lab);
++
++ /* Tell flow about the strange goings on. Putting `next_lab' on
++ `nonlocal_goto_handler_labels' to indicates that function
++ calls may traverse the arc back to this label. */
++
++ current_function_has_nonlocal_label = 1;
++ nonlocal_goto_handler_labels
++ = gen_rtx_EXPR_LIST (VOIDmode, next_lab, nonlocal_goto_handler_labels);
+
+ return target;
+ }
+@@ -9703,18 +9747,10 @@
+ #endif
+
+ case BUILT_IN_SETJMP:
+- if (arglist == 0
+- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
++ target = expand_builtin_setjmp (arglist, target);
++ if (target)
++ return target;
+ break;
+- else
+- {
+- rtx buf_addr = expand_expr (TREE_VALUE (arglist), subtarget,
+- VOIDmode, 0);
+- rtx lab = gen_label_rtx ();
+- rtx ret = expand_builtin_setjmp (buf_addr, target, lab, lab);
+- emit_label (lab);
+- return ret;
+- }
+
+ /* __builtin_longjmp is passed a pointer to an array of five words.
+ It's similar to the C library longjmp function but works with
+diff -ruNb gcc-2.95.3/gcc/expr.h gcc-2.95.4/gcc/expr.h
+--- gcc-2.95.3/gcc/expr.h 2001-02-19 15:02:02.000000000 +0100
++++ gcc-2.95.4/gcc/expr.h 2017-11-07 22:10:12.000000000 +0100
+@@ -831,7 +831,8 @@
+ Useful after calling expand_expr with 1 as sum_ok. */
+ extern rtx force_operand PROTO((rtx, rtx));
+
+-extern rtx expand_builtin_setjmp PROTO((rtx, rtx, rtx, rtx));
++extern void expand_builtin_setjmp_setup PARAMS ((rtx, rtx));
++extern void expand_builtin_setjmp_receiver PARAMS ((rtx));
+
+ #ifdef TREE_CODE
+ /* Generate code for computing expression EXP.
+diff -ruNb gcc-2.95.3/gcc/f/version.c gcc-2.95.4/gcc/f/version.c
+--- gcc-2.95.3/gcc/f/version.c 2001-03-16 13:52:16.000000000 +0100
++++ gcc-2.95.4/gcc/f/version.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1 +1 @@
+-const char *ffe_version_string = "0.5.25 20010315 (release)";
++const char *ffe_version_string = "0.5.25 20010319 (prerelease)";
+diff -ruNb gcc-2.95.3/gcc/final.c gcc-2.95.4/gcc/final.c
+--- gcc-2.95.3/gcc/final.c 2001-03-12 13:07:59.000000000 +0100
++++ gcc-2.95.4/gcc/final.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1701,7 +1701,9 @@
+ profile_function (file)
+ FILE *file;
+ {
++#ifndef NO_PROFILE_COUNTERS
+ int align = MIN (BIGGEST_ALIGNMENT, LONG_TYPE_SIZE);
++#endif
+ #if defined(ASM_OUTPUT_REG_PUSH)
+ #if defined(STRUCT_VALUE_INCOMING_REGNUM) || defined(STRUCT_VALUE_REGNUM)
+ int sval = current_function_returns_struct;
+@@ -1711,10 +1713,12 @@
+ #endif
+ #endif /* ASM_OUTPUT_REG_PUSH */
+
++#ifndef NO_PROFILE_COUNTERS
+ data_section ();
+ ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
+ ASM_OUTPUT_INTERNAL_LABEL (file, "LP", profile_label_no);
+ assemble_integer (const0_rtx, LONG_TYPE_SIZE / BITS_PER_UNIT, 1);
++#endif
+
+ function_section (current_function_decl);
+
+@@ -3043,7 +3047,8 @@
+ if (GET_CODE (recog_operand[i]) == SUBREG)
+ recog_operand[i] = alter_subreg (recog_operand[i]);
+ else if (GET_CODE (recog_operand[i]) == PLUS
+- || GET_CODE (recog_operand[i]) == MULT)
++ || GET_CODE (recog_operand[i]) == MULT
++ || GET_CODE (recog_operand[i]) == MEM)
+ recog_operand[i] = walk_alter_subreg (recog_operand[i]);
+ }
+
+@@ -3052,7 +3057,8 @@
+ if (GET_CODE (*recog_dup_loc[i]) == SUBREG)
+ *recog_dup_loc[i] = alter_subreg (*recog_dup_loc[i]);
+ else if (GET_CODE (*recog_dup_loc[i]) == PLUS
+- || GET_CODE (*recog_dup_loc[i]) == MULT)
++ || GET_CODE (*recog_dup_loc[i]) == MULT
++ || GET_CODE (*recog_dup_loc[i]) == MEM)
+ *recog_dup_loc[i] = walk_alter_subreg (*recog_dup_loc[i]);
+ }
+ }
+diff -ruNb gcc-2.95.3/gcc/fixinc/inclhack.def gcc-2.95.4/gcc/fixinc/inclhack.def
+--- gcc-2.95.3/gcc/fixinc/inclhack.def 1999-08-13 09:44:06.000000000 +0200
++++ gcc-2.95.4/gcc/fixinc/inclhack.def 2017-11-07 22:10:12.000000000 +0100
+@@ -2234,6 +2234,48 @@
+ "#endif\n";
+ };
+
++/*
++ * Fix VxWorks varargs header
++ */
++fix = {
++ hackname = vxworks_varargs_problem;
++ files = arch/ppc/toolPpc.h;
++ select = "GNU C varargs support for the PowerPC with V.4 calling sequence";
++
++ sed = "/\\/\\* GNU C varargs support for the PowerPC with V.4 calling sequence \\*\\//a\\\n"
++ "#ifdef __VXVARGS__\\\n"
++ "#include <va-ppc.h>\\\n"
++ "#else /* !defined(__VXVARGS__) */\\\n";
++
++ sed = "/\\/\\* END CYGNUS LOCAL Waiting for 2.7.1 to unfreeze \\*\\//i\\\n"
++ "#endif /* !defined(__VXVARGS__) */\\\n";
++};
++
++
++/*
++ * Fix VxWorks varargs header
++ */
++fix = {
++ hackname = vxworks_stdio-lock_cxx_compat;
++ files = stdio-lock.h;
++ select = "^[ \\t]*#[ \\t]*define[ \\t]*_IO_lock_initializer[ \\t]*_IO_lock_t[ \\t]*()";
++
++ sed = "s,^[ \\t]*#[ \\t]*define[ \\t]*_IO_lock_initializer[ \\t]*_IO_lock_t[ \\t]*(),"
++ "#ifndef __cplusplus\\\n#define _IO_lock_initializer { 0UL }\\\n#else\\\n#define _IO_lock_initializer _IO_lock_t ()\\\n#endif\\\n,";
++};
++
++
++/*
++ * That last fix won't even work unless we make archPpc.h use the default
++ * search path when it includes toolPpc.h
++ *
++ */
++fix = {
++ hackname = vxworks_arch_includepath;
++ files = arch/ppc/archPpc.h;
++ select = 'include.*"toolPpc.h"';
++ sed = "s,\"toolPpc.h\",<arch/ppc/toolPpc.h>,";
++};
+
+ /*
+ * Fix VxWorks <time.h> to not require including <vxTypes.h>.
+@@ -2252,12 +2294,9 @@
+ fix = {
+ hackname = vxworks_needs_vxworks;
+ files = sys/stat.h;
+- test = " -r types/vxTypesOld.h";
+- test = " -n \"`egrep '#include' $file`\"";
+- test = " -n \"`egrep ULONG $file`\"";
+- select = "#[ \t]define[ \t][ \t]*__INCstath";
++ select = "#[ \t]*define[ \t][ \t]*__INCstath";
+
+- sed = "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
++ sed = "/#[ \t]*define[ \t][ \t]*__INCstath/a\\\n"
+ "#include <types/vxTypesOld.h>\n";
+ };
+
+diff -ruNb gcc-2.95.3/gcc/flow.c gcc-2.95.4/gcc/flow.c
+--- gcc-2.95.3/gcc/flow.c 2001-01-25 15:03:08.000000000 +0100
++++ gcc-2.95.4/gcc/flow.c 2017-11-07 22:10:12.000000000 +0100
+@@ -2744,15 +2744,23 @@
+ {
+ if (REG_NOTE_KIND (inote) == REG_LABEL)
+ {
++ int n_forced;
+ rtx label = XEXP (inote, 0);
+ rtx next;
+ LABEL_NUSES (label)--;
+
++ /* The label may be forced if it has been put in the
++ constant pool. We can't delete it in this case, but
++ we still must discard a jump table following it. */
++ n_forced = 0;
++ if (LABEL_PRESERVE_P (label))
++ n_forced++;
++
+ /* If this label was attached to an ADDR_VEC, it's
+ safe to delete the ADDR_VEC. In fact, it's pretty much
+ mandatory to delete it, because the ADDR_VEC may
+ be referencing labels that no longer exist. */
+- if (LABEL_NUSES (label) == 0
++ if (LABEL_NUSES (label) == n_forced
+ && (next = next_nonnote_insn (label)) != NULL
+ && GET_CODE (next) == JUMP_INSN
+ && (GET_CODE (PATTERN (next)) == ADDR_VEC
+diff -ruNb gcc-2.95.3/gcc/function.c gcc-2.95.4/gcc/function.c
+--- gcc-2.95.3/gcc/function.c 2001-01-25 15:03:15.000000000 +0100
++++ gcc-2.95.4/gcc/function.c 2017-11-07 22:10:12.000000000 +0100
+@@ -513,8 +513,9 @@
+ static int contains PROTO((rtx, int *));
+ #endif /* HAVE_prologue || HAVE_epilogue */
+ static void put_addressof_into_stack PROTO((rtx, struct hash_table *));
+-static void purge_addressof_1 PROTO((rtx *, rtx, int, int,
++static boolean purge_addressof_1 PROTO((rtx *, rtx, int, int,
+ struct hash_table *));
++static int is_addressof PROTO ((rtx *, void *));
+ static struct hash_entry *insns_for_mem_newfunc PROTO((struct hash_entry *,
+ struct hash_table *,
+ hash_table_key));
+@@ -3055,9 +3056,10 @@
+
+ /* Helper function for purge_addressof. See if the rtx expression at *LOC
+ in INSN needs to be changed. If FORCE, always put any ADDRESSOFs into
+- the stack. */
++ the stack. If the function returns FALSE then the replacement could not
++ be made. */
+
+-static void
++static boolean
+ purge_addressof_1 (loc, insn, force, store, ht)
+ rtx *loc;
+ rtx insn;
+@@ -3068,13 +3070,14 @@
+ RTX_CODE code;
+ int i, j;
+ char *fmt;
++ boolean result = true;
+
+ /* Re-start here to avoid recursion in common cases. */
+ restart:
+
+ x = *loc;
+ if (x == 0)
+- return;
++ return true;
+
+ code = GET_CODE (x);
+
+@@ -3087,7 +3090,7 @@
+
+ if (validate_change (insn, loc, sub, 0)
+ || validate_replace_rtx (x, sub, insn))
+- return;
++ return true;
+
+ start_sequence ();
+ sub = force_operand (sub, NULL_RTX);
+@@ -3098,7 +3101,7 @@
+ insns = gen_sequence ();
+ end_sequence ();
+ emit_insn_before (insns, insn);
+- return;
++ return true;
+ }
+ else if (code == MEM && GET_CODE (XEXP (x, 0)) == ADDRESSOF && ! force)
+ {
+@@ -3117,7 +3120,7 @@
+ && (MEM_VOLATILE_P (x) || GET_MODE (x) == BLKmode))
+ {
+ put_addressof_into_stack (XEXP (x, 0), ht);
+- return;
++ return true;
+ }
+ else if (GET_CODE (sub) == REG && GET_MODE (x) != GET_MODE (sub))
+ {
+@@ -3136,7 +3139,7 @@
+ if (rtx_equal_p (x, XEXP (tem, 0)))
+ {
+ *loc = XEXP (XEXP (tem, 1), 0);
+- return;
++ return true;
+ }
+
+ /* See comment for purge_addressof_replacements. */
+@@ -3176,11 +3179,17 @@
+ z = gen_lowpart (GET_MODE (x), z);
+
+ *loc = z;
+- return;
++ return true;
+ }
+
+- /* There should always be such a replacement. */
+- abort ();
++ /* Sometimes we may not be able to find the replacement. For
++ example when the original insn was a MEM in a wider mode,
++ and the note is part of a sign extension of a narrowed
++ version of that MEM. Gcc testcase compile/990829-1.c can
++ generate an example of this siutation. Rather than complain
++ we return false, which will prompt our caller to remove the
++ offending note. */
++ return false;
+ }
+
+ size_x = GET_MODE_BITSIZE (GET_MODE (x));
+@@ -3266,7 +3275,7 @@
+ purge_bitfield_addressof_replacements));
+
+ /* We replaced with a reg -- all done. */
+- return;
++ return true;
+ }
+ }
+ else if (validate_change (insn, loc, sub, 0))
+@@ -3283,13 +3292,13 @@
+ if (rtx_equal_p (XEXP (x, 0), XEXP (tem, 0)))
+ {
+ XEXP (XEXP (tem, 1), 0) = sub;
+- return;
++ return true;
+ }
+ purge_addressof_replacements
+ = gen_rtx (EXPR_LIST, VOIDmode, XEXP (x, 0),
+ gen_rtx_EXPR_LIST (VOIDmode, sub,
+ purge_addressof_replacements));
+- return;
++ return true;
+ }
+ goto restart;
+ }
+@@ -3299,13 +3308,13 @@
+ else if (code == ADDRESSOF)
+ {
+ put_addressof_into_stack (x, ht);
+- return;
++ return true;
+ }
+ else if (code == SET)
+ {
+- purge_addressof_1 (&SET_DEST (x), insn, force, 1, ht);
+- purge_addressof_1 (&SET_SRC (x), insn, force, 0, ht);
+- return;
++ result = purge_addressof_1 (&SET_DEST (x), insn, force, 1, ht);
++ result &= purge_addressof_1 (&SET_SRC (x), insn, force, 0, ht);
++ return result;
+ }
+
+ /* Scan all subexpressions. */
+@@ -3313,11 +3322,13 @@
+ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
+ {
+ if (*fmt == 'e')
+- purge_addressof_1 (&XEXP (x, i), insn, force, 0, ht);
++ result &= purge_addressof_1 (&XEXP (x, i), insn, force, 0, ht);
+ else if (*fmt == 'E')
+ for (j = 0; j < XVECLEN (x, i); j++)
+- purge_addressof_1 (&XVECEXP (x, i, j), insn, force, 0, ht);
++ result &= purge_addressof_1 (&XVECEXP (x, i, j), insn, force, 0, ht);
+ }
++
++ return result;
+ }
+
+ /* Return a new hash table entry in HT. */
+@@ -3437,6 +3448,16 @@
+ }
+ }
+
++/* Helper function for purge_addressof called through for_each_rtx.
++ Returns true iff the rtl is an ADDRESSOF. */
++static int
++is_addressof (rtl, data)
++ rtx * rtl;
++ void * data ATTRIBUTE_UNUSED;
++{
++ return GET_CODE (* rtl) == ADDRESSOF;
++}
++
+ /* Eliminate all occurrences of ADDRESSOF from INSNS. Elide any remaining
+ (MEM (ADDRESSOF)) patterns, and force any needed registers into the
+ stack. */
+@@ -3465,9 +3486,30 @@
+ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
+ || GET_CODE (insn) == CALL_INSN)
+ {
+- purge_addressof_1 (&PATTERN (insn), insn,
+- asm_noperands (PATTERN (insn)) > 0, 0, &ht);
+- purge_addressof_1 (&REG_NOTES (insn), NULL_RTX, 0, 0, &ht);
++ if (! purge_addressof_1 (&PATTERN (insn), insn,
++ asm_noperands (PATTERN (insn)) > 0, 0, &ht))
++ /* If we could not replace the ADDRESSOFs in the insn,
++ something is wrong. */
++ abort ();
++
++ if (! purge_addressof_1 (&REG_NOTES (insn), NULL_RTX, 0, 0, &ht))
++ {
++ /* If we could not replace the ADDRESSOFs in the insn's notes,
++ we can just remove the offending notes instead. */
++ rtx note;
++
++ for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
++ {
++ /* If we find a REG_RETVAL note then the insn is a libcall.
++ Such insns must have REG_EQUAL notes as well, in order
++ for later passes of the compiler to work. So it is not
++ safe to delete the notes here, and instead we abort. */
++ if (REG_NOTE_KIND (note) == REG_RETVAL)
++ abort ();
++ if (for_each_rtx (& note, is_addressof, NULL))
++ remove_note (insn, note);
++ }
++ }
+ }
+
+ /* Clean up. */
+@@ -5292,7 +5334,18 @@
+ - offset_ptr->constant);
+ }
+ #else /* !ARGS_GROW_DOWNWARD */
++ if (!in_regs
++#ifdef REG_PARM_STACK_SPACE
++ || REG_PARM_STACK_SPACE (fndecl) > 0
++#else
++ /* For the gcc-2_95-branch we want to make sure not to break something
++ on platforms which pass argument in registers but don't define
++ REG_PARM_STACK_SPACE. So we force the original behaviour here. */
++ || 1
++#endif
++ )
+ pad_to_arg_alignment (initial_offset_ptr, boundary);
++
+ *offset_ptr = *initial_offset_ptr;
+
+ #ifdef PUSH_ROUNDING
+diff -ruNb gcc-2.95.3/gcc/gcc.1 gcc-2.95.4/gcc/gcc.1
+--- gcc-2.95.3/gcc/gcc.1 1999-06-02 03:41:52.000000000 +0200
++++ gcc-2.95.4/gcc/gcc.1 2017-11-07 22:10:12.000000000 +0100
+@@ -20,7 +20,7 @@
+ .if n .sp
+ .if t .sp 0.4
+ ..
+-.Id $Id: gcc.1,v 1.9 1998/12/16 20:55:57 law Exp $
++.Id $Id: gcc.1,v 1.9.8.1 1999/06/02 01:41:52 law Exp $
+ .TH GCC 1 "\*(Dt" "GNU Tools" "GNU Tools"
+ .SH NAME
+ gcc, g++ \- GNU project C and C++ Compiler (gcc-2.95)
+diff -ruNb gcc-2.95.3/gcc/gcc.c gcc-2.95.4/gcc/gcc.c
+--- gcc-2.95.3/gcc/gcc.c 2001-01-25 15:03:16.000000000 +0100
++++ gcc-2.95.4/gcc/gcc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* Compiler driver program that can handle many languages.
+ Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+- 2000 Free Software Foundation, Inc.
++ 2000, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -44,18 +44,26 @@
+ #define exit __posix_exit
+ #endif
+
+-/* By default there is no special suffix for executables. */
+-#ifdef EXECUTABLE_SUFFIX
+-#define HAVE_EXECUTABLE_SUFFIX
++/* By default there is no special suffix for target executables. */
++/* FIXME: when autoconf is fixed, remove the host check - dj */
++#if defined(TARGET_EXECUTABLE_SUFFIX) && defined(HOST_EXECUTABLE_SUFFIX)
++#define HAVE_TARGET_EXECUTABLE_SUFFIX
+ #else
+-#define EXECUTABLE_SUFFIX ""
++#define TARGET_EXECUTABLE_SUFFIX ""
+ #endif
+
+-/* By default, the suffix for object files is ".o". */
+-#ifdef OBJECT_SUFFIX
+-#define HAVE_OBJECT_SUFFIX
++/* By default there is no special suffix for host executables. */
++#ifdef HOST_EXECUTABLE_SUFFIX
++#define HAVE_HOST_EXECUTABLE_SUFFIX
+ #else
+-#define OBJECT_SUFFIX ".o"
++#define HOST_EXECUTABLE_SUFFIX ""
++#endif
++
++/* By default, the suffix for target object files is ".o". */
++#ifdef TARGET_OBJECT_SUFFIX
++#define HAVE_TARGET_OBJECT_SUFFIX
++#else
++#define TARGET_OBJECT_SUFFIX ".o"
+ #endif
+
+ /* By default, colon separates directories in a path. */
+@@ -75,6 +83,14 @@
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+ #endif /* DIR_SEPARATOR_2 */
+
++#ifndef VMS
++/* FIXME: the location independence code for VMS is hairier than this,
++ and hasn't been written. */
++#ifndef DIR_UP
++#define DIR_UP ".."
++#endif /* DIR_UP */
++#endif /* VMS */
++
+ static char dir_separator_str[] = {DIR_SEPARATOR, 0};
+
+ #define obstack_chunk_alloc xmalloc
+@@ -173,6 +189,11 @@
+ struct path_prefix;
+
+ static void init_spec PROTO((void));
++#ifndef VMS
++static char **split_directories PARAMS ((const char *, int *));
++static void free_split_directories PARAMS ((char **));
++static char *make_relative_prefix PARAMS ((const char *, const char *, const char *));
++#endif /* VMS */
+ static void read_specs PROTO((const char *, int));
+ static void set_spec PROTO((const char *, const char *));
+ static struct compiler *lookup_compiler PROTO((const char *, size_t, const char *));
+@@ -538,7 +559,7 @@
+ #endif
+
+
+-#ifdef HAVE_EXECUTABLE_SUFFIX
++#ifdef HAVE_TARGET_EXECUTABLE_SUFFIX
+ /* This defines which switches stop a full compilation. */
+ #define DEFAULT_SWITCH_CURTAILS_COMPILATION(CHAR) \
+ ((CHAR) == 'c' || (CHAR) == 'S')
+@@ -1361,6 +1382,9 @@
+
+ static const char *gcc_exec_prefix;
+
++static const char *wind_host_type = 0;
++static const char *wind_base = 0;
++
+ /* Default prefixes to attach to command names. */
+
+ #ifdef CROSS_COMPILE /* Don't use these prefixes for a cross compiler. */
+@@ -1399,6 +1423,11 @@
+ static const char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
+ static const char *tooldir_prefix;
+
++#ifndef STANDARD_BINDIR_PREFIX
++#define STANDARD_BINDIR_PREFIX "/usr/local/bin"
++#endif
++static const char *standard_bindir_prefix = STANDARD_BINDIR_PREFIX;
++
+ /* Subdirectory to use for locating libraries. Set by
+ set_multilib_dir based on the compilation options. */
+
+@@ -1879,6 +1908,244 @@
+
+ #endif /* HAVE_PUTENV */
+
++#ifndef VMS
++
++/* FIXME: the location independence code for VMS is hairier than this,
++ and hasn't been written. */
++
++/* Split a filename into component directories. */
++
++static char **
++split_directories (name, ptr_num_dirs)
++ const char *name;
++ int *ptr_num_dirs;
++{
++ int num_dirs = 0;
++ char **dirs;
++ const char *p, *q;
++ int ch;
++
++ /* Count the number of directories. Special case MSDOS disk names as part
++ of the initial directory. */
++ p = name;
++#ifdef HAVE_DOS_BASED_FILE_SYSTEM
++ if (name[1] == ':' && IS_DIR_SEPARATOR (name[2]))
++ {
++ p += 3;
++ num_dirs++;
++ }
++#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
++
++ while ((ch = *p++) != '\0')
++ {
++ if (IS_DIR_SEPARATOR (ch))
++ {
++ num_dirs++;
++ while (IS_DIR_SEPARATOR (*p))
++ p++;
++ }
++ }
++
++ dirs = (char **) xmalloc (sizeof (char *) * (num_dirs + 2));
++
++ /* Now copy the directory parts. */
++ num_dirs = 0;
++ p = name;
++#ifdef HAVE_DOS_BASED_FILE_SYSTEM
++ if (name[1] == ':' && IS_DIR_SEPARATOR (name[2]))
++ {
++ dirs[num_dirs++] = save_string (p, 3);
++ p += 3;
++ }
++#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
++
++ q = p;
++ while ((ch = *p++) != '\0')
++ {
++ if (IS_DIR_SEPARATOR (ch))
++ {
++ while (IS_DIR_SEPARATOR (*p))
++ p++;
++
++ dirs[num_dirs++] = save_string (q, p - q);
++ q = p;
++ }
++ }
++
++ if (p - 1 - q > 0)
++ dirs[num_dirs++] = save_string (q, p - 1 - q);
++
++ dirs[num_dirs] = NULL_PTR;
++ if (ptr_num_dirs)
++ *ptr_num_dirs = num_dirs;
++
++ return dirs;
++}
++
++/* Release storage held by split directories. */
++
++static void
++free_split_directories (dirs)
++ char **dirs;
++{
++ int i = 0;
++
++ while (dirs[i] != NULL_PTR)
++ free (dirs[i++]);
++
++ free ((char *)dirs);
++}
++
++/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets
++ to PREFIX starting with the directory portion of PROGNAME and a relative
++ pathname of the difference between BIN_PREFIX and PREFIX.
++
++ For example, if BIN_PREFIX is /alpha/beta/gamma/gcc/delta, PREFIX is
++ /alpha/beta/gamma/omega/, and PROGNAME is /red/green/blue/gcc, then this
++ function will return /red/green/blue/../omega.
++
++ If no relative prefix can be found, return NULL. */
++
++static char *
++make_relative_prefix (progname, bin_prefix, prefix)
++ const char *progname;
++ const char *bin_prefix;
++ const char *prefix;
++{
++ char **prog_dirs, **bin_dirs, **prefix_dirs;
++ int prog_num, bin_num, prefix_num, std_loc_p;
++ int i, n, common;
++
++ prog_dirs = split_directories (progname, &prog_num);
++ bin_dirs = split_directories (bin_prefix, &bin_num);
++
++ /* If there is no full pathname, try to find the program by checking in each
++ of the directories specified in the PATH environment variable. */
++ if (prog_num == 1)
++ {
++ char *temp;
++
++ GET_ENV_PATH_LIST (temp, "PATH");
++ if (temp)
++ {
++ char *startp, *endp;
++ char *nstore = (char *) alloca (strlen (temp) + strlen (progname) + 1);
++
++ startp = endp = temp;
++ while (1)
++ {
++ if (*endp == PATH_SEPARATOR || *endp == 0)
++ {
++ if (endp == startp)
++ {
++ nstore[0] = '.';
++ nstore[1] = DIR_SEPARATOR;
++ nstore[2] = '\0';
++ }
++ else
++ {
++ strncpy (nstore, startp, endp-startp);
++ if (! IS_DIR_SEPARATOR (endp[-1]))
++ {
++ nstore[endp-startp] = DIR_SEPARATOR;
++ nstore[endp-startp+1] = 0;
++ }
++ else
++ nstore[endp-startp] = 0;
++ }
++ strcat (nstore, progname);
++ if (! access (nstore, X_OK)
++#ifdef HAVE_EXECUTABLE_SUFFIX
++ || ! access (strcat (nstore, EXECUTABLE_SUFFIX), X_OK)
++#endif
++ )
++ {
++ free_split_directories (prog_dirs);
++ progname = nstore;
++ prog_dirs = split_directories (progname, &prog_num);
++ break;
++ }
++
++ if (*endp == 0)
++ break;
++ endp = startp = endp + 1;
++ }
++ else
++ endp++;
++ }
++ }
++ }
++
++ /* Remove the program name from comparison of directory names. */
++ prog_num--;
++
++ /* Determine if the compiler is installed in the standard location, and if
++ so, we don't need to specify relative directories. Also, if argv[0]
++ doesn't contain any directory specifiers, there is not much we can do. */
++ std_loc_p = 0;
++ if (prog_num == bin_num)
++ {
++ for (i = 0; i < bin_num; i++)
++ {
++ if (strcmp (prog_dirs[i], bin_dirs[i]) != 0)
++ break;
++ }
++
++ if (prog_num <= 0 || i == bin_num)
++ {
++ std_loc_p = 1;
++ free_split_directories (prog_dirs);
++ free_split_directories (bin_dirs);
++ prog_dirs = bin_dirs = (char **)0;
++ return NULL_PTR;
++ }
++ }
++
++ prefix_dirs = split_directories (prefix, &prefix_num);
++
++ /* Find how many directories are in common between bin_prefix & prefix. */
++ n = (prefix_num < bin_num) ? prefix_num : bin_num;
++ for (common = 0; common < n; common++)
++ {
++ if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0)
++ break;
++ }
++
++ /* If there are no common directories, there can be no relative prefix. */
++ if (common == 0)
++ {
++ free_split_directories (prog_dirs);
++ free_split_directories (bin_dirs);
++ free_split_directories (prefix_dirs);
++ return NULL_PTR;
++ }
++
++ /* Build up the pathnames in argv[0]. */
++ for (i = 0; i < prog_num; i++)
++ obstack_grow (&obstack, prog_dirs[i], strlen (prog_dirs[i]));
++
++ /* Now build up the ..'s. */
++ for (i = common; i < n; i++)
++ {
++ obstack_grow (&obstack, DIR_UP, sizeof (DIR_UP)-1);
++ obstack_1grow (&obstack, DIR_SEPARATOR);
++ }
++
++ /* Put in directories to move over to prefix. */
++ for (i = common; i < prefix_num; i++)
++ obstack_grow (&obstack, prefix_dirs[i], strlen (prefix_dirs[i]));
++
++ free_split_directories (prog_dirs);
++ free_split_directories (bin_dirs);
++ free_split_directories (prefix_dirs);
++
++ obstack_1grow (&obstack, '\0');
++ return obstack_finish (&obstack);
++}
++#endif /* VMS */
++
++
++
+
+ /* Build a list of search directories from PATHS.
+ PREFIX is a string to prepend to the list.
+@@ -1966,7 +2233,7 @@
+ int mode;
+ {
+ char *temp;
+- const char *file_suffix = ((mode & X_OK) != 0 ? EXECUTABLE_SUFFIX : "");
++ const char *file_suffix = ((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "");
+ struct prefix_list *pl;
+ int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1;
+
+@@ -2405,7 +2672,7 @@
+ static int *warn_std_ptr = 0;
+
+
+-#if defined(HAVE_OBJECT_SUFFIX) || defined(HAVE_EXECUTABLE_SUFFIX)
++#if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
+
+ /* Convert NAME to a new name if it is the standard suffix. DO_EXE
+ is true if we should look for an executable suffix as well. */
+@@ -2423,22 +2690,22 @@
+
+ len = strlen (name);
+
+-#ifdef HAVE_OBJECT_SUFFIX
+- /* Convert x.o to x.obj if OBJECT_SUFFIX is ".obj". */
++#ifdef HAVE_TARGET_OBJECT_SUFFIX
++ /* Convert x.o to x.obj if HAVE_TARGET_OBJECT_SUFFIX is ".obj". */
+ if (len > 2
+ && name[len - 2] == '.'
+ && name[len - 1] == 'o')
+ {
+ obstack_grow (&obstack, name, len - 2);
+- obstack_grow0 (&obstack, OBJECT_SUFFIX, strlen (OBJECT_SUFFIX));
++ obstack_grow0 (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
+ name = obstack_finish (&obstack);
+ }
+ #endif
+
+-#ifdef HAVE_EXECUTABLE_SUFFIX
++#ifdef HAVE_TARGET_EXECUTABLE_SUFFIX
+ /* If there is no filetype, make it the executable suffix (which includes
+ the "."). But don't get confused if we have just "-o". */
+- if (! do_exe || EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-'))
++ if (! do_exe || TARGET_EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-'))
+ return name;
+
+ for (i = len - 1; i >= 0; i--)
+@@ -2450,7 +2717,7 @@
+ return name;
+
+ obstack_grow (&obstack, name, len);
+- obstack_grow0 (&obstack, EXECUTABLE_SUFFIX, strlen (EXECUTABLE_SUFFIX));
++ obstack_grow0 (&obstack, TARGET_EXECUTABLE_SUFFIX, strlen (TARGET_EXECUTABLE_SUFFIX));
+ name = obstack_finish (&obstack);
+ #endif
+
+@@ -2599,7 +2866,59 @@
+ }
+ }
+
+- /* Set up the default search paths. */
++ /* Set up the default search paths. If there is no GCC_EXEC_PREFIX,
++ see if we can create it from the pathname specified in argv[0]. */
++
++ /* Bodges here for VxWorks compiler */
++ #ifdef SYNTHETIC_VXWORKS_PREFIXES
++ GET_ENV_PATH_LIST (wind_base, "WIND_BASE");
++ GET_ENV_PATH_LIST (wind_host_type, "WIND_HOST_TYPE");
++ if (wind_base && wind_host_type && *wind_base &&*wind_host_type)
++ {
++ char *temp;
++ temp = concat (wind_base, dir_separator_str, "host",
++ dir_separator_str, wind_host_type, dir_separator_str, NULL);
++ #ifdef __CYGWIN32__
++ CONVERT_PATH (tooldir_base_prefix, temp);
++ #else
++ tooldir_base_prefix = temp;
++ #endif
++ temp = concat (wind_base, dir_separator_str, "host",
++ dir_separator_str, wind_host_type, dir_separator_str, "lib",
++ dir_separator_str, "gcc-lib", dir_separator_str, NULL);
++ #ifdef __CYGWIN32__
++ CONVERT_PATH (gcc_exec_prefix, temp);
++ #else
++ gcc_exec_prefix = temp;
++ #endif
++ temp = concat (wind_base, dir_separator_str, "host",
++ dir_separator_str, wind_host_type, dir_separator_str, "lib",
++ dir_separator_str, "gcc-lib", dir_separator_str, NULL);
++ #ifdef __CYGWIN32__
++ CONVERT_PATH (standard_exec_prefix, temp);
++ #else
++ standard_exec_prefix = temp;
++ #endif
++ }
++ #endif
++
++
++ #ifndef VMS
++ /* FIXME: make_relative_prefix doesn't yet work for VMS. */
++ if (!gcc_exec_prefix)
++ {
++ char* program_name;
++ #ifdef __CYGWIN32__
++ CONVERT_PATH(program_name, argv[0]);
++ #else
++ program_name = argv[0];
++ #endif
++ gcc_exec_prefix = make_relative_prefix (program_name, standard_bindir_prefix,
++ standard_exec_prefix);
++ if (gcc_exec_prefix)
++ putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL_PTR));
++ }
++ #endif
+
+ if (gcc_exec_prefix)
+ {
+@@ -2994,7 +3313,7 @@
+
+ case 'o':
+ have_o = 1;
+-#if defined(HAVE_EXECUTABLE_SUFFIX)
++#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
+ if (! have_c)
+ {
+ int skip;
+@@ -3023,7 +3342,7 @@
+ }
+ }
+ #endif
+-#if defined(HAVE_EXECUTABLE_SUFFIX) || defined(HAVE_OBJECT_SUFFIX)
++#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX)
+ if (p[1] == 0)
+ argv[i+1] = convert_filename (argv[i+1], ! have_c);
+ else
+@@ -3079,6 +3398,7 @@
+ directories, so that we can search both the user specified directory
+ and the standard place. */
+
++#ifndef SYNTHETIC_VXWORKS_PREFIXES
+ if (!IS_DIR_SEPARATOR (*tooldir_prefix))
+ {
+ if (gcc_exec_prefix)
+@@ -3101,6 +3421,7 @@
+ dir_separator_str, spec_version,
+ dir_separator_str, tooldir_prefix, NULL_PTR);
+ }
++#endif
+
+ add_prefix (&exec_prefixes,
+ concat (tooldir_prefix, "bin", dir_separator_str, NULL_PTR),
+@@ -3287,7 +3608,7 @@
+ }
+ else
+ {
+-#ifdef HAVE_OBJECT_SUFFIX
++#ifdef HAVE_TARGET_OBJECT_SUFFIX
+ argv[i] = convert_filename (argv[i], 0);
+ #endif
+
+@@ -3660,8 +3981,8 @@
+ /* We don't support extra suffix characters after %O. */
+ if (*p == '.' || ISALPHA ((unsigned char)*p))
+ abort ();
+- suffix = OBJECT_SUFFIX;
+- suffix_length = strlen (OBJECT_SUFFIX);
++ suffix = TARGET_OBJECT_SUFFIX;
++ suffix_length = strlen (TARGET_OBJECT_SUFFIX);
+ }
+ else
+ {
+@@ -3756,7 +4077,7 @@
+ }
+
+ case 'O':
+- obstack_grow (&obstack, OBJECT_SUFFIX, strlen (OBJECT_SUFFIX));
++ obstack_grow (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
+ arg_going = 1;
+ break;
+
+diff -ruNb gcc-2.95.3/gcc/gcc.texi gcc-2.95.4/gcc/gcc.texi
+--- gcc-2.95.3/gcc/gcc.texi 2001-01-25 15:03:16.000000000 +0100
++++ gcc-2.95.4/gcc/gcc.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -3847,17 +3847,18 @@
+ names, the character you specify will be used. GCC will test for
+ both slash and the character you specify when parsing filenames.
+
+-@findex OBJECT_SUFFIX
+-@item OBJECT_SUFFIX
++@findex HOST_OBJECT_SUFFIX
++@item HOST_OBJECT_SUFFIX
+ Define this macro to be a C string representing the suffix for object
+-files on your machine. If you do not define this macro, GCC will use
+-@samp{.o} as the suffix for object files.
++files on your host machine (@file{xm-@var{machine}.h}). If you do not define this
++macro, GCC will use @samp{.o} as the suffix for object files.
+
+-@findex EXECUTABLE_SUFFIX
+-@item EXECUTABLE_SUFFIX
+-Define this macro to be a C string representing the suffix for executable
+-files on your machine. If you do not define this macro, GCC will use
+-the null string as the suffix for object files.
++@findex HOST_EXECUTABLE_SUFFIX
++@item HOST_EXECUTABLE_SUFFIX
++Define this macro to be a C string representing the suffix for
++executable files on your host machine (@file{xm-@var{machine}.h}). If you do not
++define this macro, GCC will use the null string as the suffix for
++executable files.
+
+ @findex COLLECT_EXPORT_LIST
+ @item COLLECT_EXPORT_LIST
+diff -ruNb gcc-2.95.3/gcc/invoke.texi gcc-2.95.4/gcc/invoke.texi
+--- gcc-2.95.3/gcc/invoke.texi 2001-01-25 15:03:17.000000000 +0100
++++ gcc-2.95.4/gcc/invoke.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -1694,6 +1694,12 @@
+ @item
+ A non-@code{static} function declaration follows a @code{static} one.
+ This construct is not accepted by some traditional C compilers.
++
++@item
++The ANSI type of an integer constant has a different width or signedness
++from its traditional type. This warning is only issued if the base of
++the constant is ten. I.e. hexadecimal or octal values, which typically
++represent bit patterns, are not warned about.
+ @end itemize
+
+ @item -Wundef
+diff -ruNb gcc-2.95.3/gcc/java/lang.c gcc-2.95.4/gcc/java/lang.c
+--- gcc-2.95.3/gcc/java/lang.c 1999-05-14 15:44:09.000000000 +0200
++++ gcc-2.95.4/gcc/java/lang.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Java(TM) language-specific utility routines.
+- Copyright (C) 1996, 97-98, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1996, 97-98, 1999, 2001 Free Software Foundation, Inc.
+
+ This file is part of GNU CC.
+
+@@ -34,8 +34,8 @@
+ #include "flags.h"
+ #include "xref.h"
+
+-#ifndef OBJECT_SUFFIX
+-# define OBJECT_SUFFIX ".o"
++#ifndef TARGET_OBJECT_SUFFIX
++# define TARGET_OBJECT_SUFFIX ".o"
+ #endif
+
+ /* Table indexed by tree code giving a string containing a character
+@@ -278,7 +278,7 @@
+ else
+ {
+ char *buf = (char *) xmalloc (dot - filename +
+- 3 + sizeof (OBJECT_SUFFIX));
++ 3 + sizeof (TARGET_OBJECT_SUFFIX));
+ strncpy (buf, filename, dot - filename);
+
+ /* If emitting class files, we might have multiple
+@@ -289,7 +289,7 @@
+ jcf_dependency_set_target (NULL);
+ else
+ {
+- strcpy (buf + (dot - filename), OBJECT_SUFFIX);
++ strcpy (buf + (dot - filename), TARGET_OBJECT_SUFFIX);
+ jcf_dependency_set_target (buf);
+ }
+
+diff -ruNb gcc-2.95.3/gcc/jump.c gcc-2.95.4/gcc/jump.c
+--- gcc-2.95.3/gcc/jump.c 1999-10-21 08:24:03.000000000 +0200
++++ gcc-2.95.4/gcc/jump.c 2017-11-07 22:10:12.000000000 +0100
+@@ -200,8 +200,6 @@
+ if (flag_exceptions && cross_jump)
+ init_insn_eh_region (f, max_uid);
+
+- delete_barrier_successors (f);
+-
+ /* Leave some extra room for labels and duplicate exit test insns
+ we make. */
+ max_jump_chain = max_uid * 14 / 10;
+@@ -224,6 +222,8 @@
+ for (insn = exception_handler_labels; insn; insn = XEXP (insn, 1))
+ LABEL_NUSES (XEXP (insn, 0))++;
+
++ delete_barrier_successors (f);
++
+ /* Quit now if we just wanted to rebuild the JUMP_LABEL and REG_LABEL
+ notes and recompute LABEL_NUSES. */
+ if (mark_labels_only)
+@@ -2139,7 +2139,24 @@
+ insn = NEXT_INSN (insn);
+ while (insn != 0 && GET_CODE (insn) != CODE_LABEL)
+ {
+- if (GET_CODE (insn) == NOTE
++ if (GET_CODE (insn) == JUMP_INSN)
++ {
++ /* Detect when we're deleting a tablejump; get rid of
++ the jump table as well. */
++ rtx next1 = next_nonnote_insn (insn);
++ rtx next2 = next1 ? next_nonnote_insn (next1) : 0;
++ if (next2 && GET_CODE (next1) == CODE_LABEL
++ && GET_CODE (next2) == JUMP_INSN
++ && (GET_CODE (PATTERN (next2)) == ADDR_VEC
++ || GET_CODE (PATTERN (next2)) == ADDR_DIFF_VEC))
++ {
++ delete_insn (insn);
++ insn = next2;
++ }
++ else
++ insn = delete_insn (insn);
++ }
++ else if (GET_CODE (insn) == NOTE
+ && NOTE_LINE_NUMBER (insn) != NOTE_INSN_FUNCTION_END)
+ insn = NEXT_INSN (insn);
+ else
+diff -ruNb gcc-2.95.3/gcc/just-fixinc gcc-2.95.4/gcc/just-fixinc
+--- gcc-2.95.3/gcc/just-fixinc 1998-12-16 21:57:01.000000000 +0100
++++ gcc-2.95.4/gcc/just-fixinc 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ #!/bin/sh
+-# $Id: just-fixinc,v 1.2 1998/04/03 16:35:58 law Exp $
++# $Id: just-fixinc,v 1.3 1998/12/16 20:57:01 law Exp $
+ # This script exists for use after installing
+ # the GCC binaries from a distribution tape/CD-ROM.
+ # Use it *after* copying the directory of binaries
+diff -ruNb gcc-2.95.3/gcc/libgcc2.c gcc-2.95.4/gcc/libgcc2.c
+--- gcc-2.95.3/gcc/libgcc2.c 1999-06-11 05:11:43.000000000 +0200
++++ gcc-2.95.4/gcc/libgcc2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -63,6 +63,9 @@
+ #if defined(CROSS_COMPILE) && !defined(inhibit_libc)
+ #define inhibit_libc
+ #endif
++#if defined (__vxworks)
++#undef inhibit_libc
++#endif
+
+ /* Permit the tm.h file to select the endianness to use just for this
+ file. This is used when the endianness is determined when the
+diff -ruNb gcc-2.95.3/gcc/loop.c gcc-2.95.4/gcc/loop.c
+--- gcc-2.95.3/gcc/loop.c 2001-01-25 15:03:18.000000000 +0100
++++ gcc-2.95.4/gcc/loop.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1481,10 +1481,16 @@
+ width as M1. The check for integer is redundant, but
+ safe, since the only case of differing destination
+ modes with equal sources is when both sources are
+- VOIDmode, i.e., CONST_INT. */
++ VOIDmode, i.e., CONST_INT.
++
++ For 2.95, don't do this if the mode of M1 is Pmode.
++ This prevents us from substituting SUBREGs for REGs
++ in memory accesses; not all targets are prepared to
++ handle this properly. */
+ (GET_MODE (m->set_dest) == GET_MODE (m1->set_dest)
+ || (GET_MODE_CLASS (GET_MODE (m->set_dest)) == MODE_INT
+ && GET_MODE_CLASS (GET_MODE (m1->set_dest)) == MODE_INT
++ && GET_MODE (m1->set_dest) != Pmode
+ && (GET_MODE_BITSIZE (GET_MODE (m->set_dest))
+ >= GET_MODE_BITSIZE (GET_MODE (m1->set_dest)))))
+ /* See if the source of M1 says it matches M. */
+diff -ruNb gcc-2.95.3/gcc/Makefile.in gcc-2.95.4/gcc/Makefile.in
+--- gcc-2.95.3/gcc/Makefile.in 2001-01-25 15:02:58.000000000 +0100
++++ gcc-2.95.4/gcc/Makefile.in 2017-11-08 08:46:34.000000000 +0100
+@@ -2265,7 +2265,8 @@
+ #
+ # Remake the info files.
+
+-doc: info
++doc:
++#info
+ info: cpp.info gcc.info lang.info
+
+ cpp.info: $(srcdir)/cpp.texi
+@@ -2434,7 +2435,7 @@
+ # Install the driver last so that the window when things are
+ # broken is small.
+ install-normal: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
+- $(INSTALL_CPP) install-man install-info intl.install lang.install-normal \
++ $(INSTALL_CPP) install-man intl.install lang.install-normal \
+ install-driver
+
+ # Do nothing while making gcc with a cross-compiler. The person who
+diff -ruNb gcc-2.95.3/gcc/mkinstalldirs gcc-2.95.4/gcc/mkinstalldirs
+--- gcc-2.95.3/gcc/mkinstalldirs 1998-12-17 07:43:04.000000000 +0100
++++ gcc-2.95.4/gcc/mkinstalldirs 2017-11-07 22:10:12.000000000 +0100
+@@ -4,7 +4,7 @@
+ # Created: 1993-05-16
+ # Public domain
+
+-# $Id: mkinstalldirs,v 1.1 1998/05/19 07:09:56 drepper Exp $
++# $Id: mkinstalldirs,v 1.1 1998/12/17 06:43:04 law Exp $
+
+ errstatus=0
+
+diff -ruNb gcc-2.95.3/gcc/NEWS gcc-2.95.4/gcc/NEWS
+--- gcc-2.95.3/gcc/NEWS 2001-03-16 15:15:42.000000000 +0100
++++ gcc-2.95.4/gcc/NEWS 2017-11-07 22:10:12.000000000 +0100
+@@ -1,1539 +1,1071 @@
+-This file contains information about GCC releases which has been
+-generated automatically from the online release notes. This file
+-covers releases of GCC (and the former EGCS project) since EGCS 1.0,
+-on the line of development that led to GCC 3; for information on GCC
+-2.8.1 and older releases of GCC 2, see ONEWS.
+-
+-======================================================================
+-http://gcc.gnu.org/gcc-2.95/gcc-2.95.3.html
+-
+- GCC 2.95.3
+-
+- March 16, 2001
+-
+- The GNU project and the GCC developers are pleased to announce the
+- release of GCC version 2.95.3. GCC used to stand for the GNU C
+- Compiler, but since the compiler supports several other languages
+- aside from C, it now stands for the GNU Compiler Collection.
+-
+- This is a minor release to address several bugs in the [1]GCC version
+- 2.95.2 release.
+-
+- * Generic bugfixes and improvements
+- + Fix numerous problems that caused incorrect optimization in
+- the register reloading code.
+- + Fix numerous problems that caused incorrect optimization in
+- the loop optimizer.
+- + Fix aborts in the functions build_insn_chain and scan_loops
+- under some circumstances.
+- + Fix an alias analysis bug.
+- + Fix an infinite compilation bug in the combiner.
+- + A few problems with complex number support have been fixed.
+- + It is no longer possible for gcc to act as a fork bomb when
+- installed incorrectly.
+- + The -fpack-struct option should be recognized now.
+- + Fixed a bug that caused incorrect code to be generated due to
+- a lost stack adjustment.
+- * Platform specific bugfixes and improvements
+- + Support building ARM toolchains hosted on Windows.
+- + Fix attribute calculations in ARM toolchains.
+- + arm-linux support has been improved.
+- + Fix a PIC failure on sparc targets.
+- + On ix86 targets, the regparm attribute should now work
+- reliably.
+- + Several updates for the h8300 port.
+-
+- The whole suite has been extensively [2]regression tested and
+- [3]package tested. It should be reliable and suitable for widespread
+- use.
+-
+- The GCC 2.95 release has several new optimizations, new targets, new
+- languages and other new features as compared to EGCS 1.1 or GCC 2.8.
+- See the [4]new features page for a more complete list of new features
+- found in the GCC 2.95 releases.
+-
+- The sources include installation instructions in both HTML and
+- plaintext forms in the install directory in the distribution. However,
+- the most up to date [5]installation instructions and [6]build/test
+- status are on the web pages. We will update those pages as new
+- information becomes available.
+-
+- The GCC developers would like to thank the numerous people that have
+- contributed new features, test results, bugfixes, etc to GCC. This
+- [7]amazing group of volunteers is what makes GCC successful.
+-
+- And finally, we can't in good conscience fail to mention some
+- [8]caveats to using GCC 2.95.3.
+-
+- Download GCC 2.95.3 from the [9]GNU FTP server (ftp://ftp.gnu.org)
+- Download GCC 2.95.3 from the [10]GCC FTP server (ftp://gcc.gnu.org)
+- [11]Find a GNU mirror site
+- [12]Find a GCC mirror site
+-
+- For additional information about GCC please see the [13]GCC project
+- web server or contact the [14]GCC development mailing list.
+- _________________________________________________________________
+-
+-
+- [15]The GCC team
+- Last modified 2001-03-16
+-
+-References
+-
+- 1. http://gcc.gnu.org/gcc-2.95/gcc-2.95.2.html
+- 2. http://gcc.gnu.org/gcc-2.95/regress.html
+- 3. http://gcc.gnu.org/gcc-2.95/othertest.html
+- 4. http://gcc.gnu.org/gcc-2.95/features.html
+- 5. http://gcc.gnu.org/install/index.html
+- 6. http://gcc.gnu.org/gcc-2.95/buildstat.html
+- 7. http://gcc.gnu.org/thanks.html
+- 8. http://gcc.gnu.org/gcc-2.95/caveats.html
+- 9. ftp://ftp.gnu.org/pub/gnu/gcc/
+- 10. ftp://gcc.gnu.org/pub/gcc/releases/index.html
+- 11. http://www.gnu.org/order/ftp.html
+- 12. http://gcc.gnu.org/mirrors.html
+- 13. http://gcc.gnu.org/index.html
+- 14. mailto:gcc@gcc.gnu.org
+- 15. http://gcc.gnu.org/about.html
+-======================================================================
+-http://gcc.gnu.org/gcc-2.95/gcc-2.95.2.html
+-
+- GCC 2.95.2
+-
+- October 27, 1999
+-
+- The GNU project and the GCC developers are pleased to announce the
+- release of GCC version 2.95.2. GCC used to stand for the GNU C
+- Compiler, but since the compiler supports several other languages
+- aside from C, it now stands for the GNU Compiler Collection.
+-
+- This is a minor release to address several bugs in the GCC version
+- 2.95.1 release.
+-
+- The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While
+- the optimizations performed by -fstrict-aliasing are valid according
+- to the C and C++ standards, the optimization have caused some
+- problems, particularly with old non-conforming code.
+-
+- The GCC developers are experimenting with ways to warn users about
+- code which violates the C/C++ standards, but those warnings are not
+- ready for widespread use at this time. Rather than wait for those
+- warnings the GCC developers have chosen to disable -fstrict-aliasing
+- by default for the GCC 2.95.2 release.
+-
+- We strongly encourage developers to find and fix code which violates
+- the C/C++ standards as -fstrict-aliasing may be enabled by default in
+- future releases. Use the option -fstrict-aliasing to re-enable these
+- optimizations.
+-
+- * Generic bugfixes and improvements
+- + Fix incorrectly optimized memory reference in global common
+- subexpression elimination (GCSE) optimization pass.
+- + Fix code generation bug in regmove.c in which it could
+- incorrectly change a "const" value.
+- + Fix bug in optimization of conditionals involving volatile
+- memory references.
+- + Avoid over-allocation of stack space for some procedures.
+- + Fixed bug in the compiler which caused incorrect optimization
+- of an obscure series of bit manipulations, shifts and
+- arithmetic.
+- + Fixed register allocator bug which caused teTeX to be
+- mis-compiled on Sparc targets.
+- + Avoid incorrect optimization of degenerate case statements
+- for certain targets such as the ARM.
+- + Fix out of range memory reference in the jump optimizer.
+- + Avoid dereferencing null pointer in fix-header.
+- + Fix test for GCC specific features so that it is possible to
+- bootstrap with gcc-2.6.2 and older versions of GCC.
+- + Fix typo in scheduler which could potentially cause out of
+- range memory accesses.
+- + Avoid incorrect loop reversal which caused incorrect code for
+- certain loops on PowerPC targets.
+- + Avoid incorrect optimization of switch statements on certain
+- targets (for example the ARM).
+- * Platform specific bugfixes and improvements
+- + Work around bug in Sun V5.0 compilers which caused bootstrap
+- comparison failures on Sparc targets.
+- + Fix Sparc backend bug which caused aborts in final.c.
+- + Fix sparc-hal-solaris2* configuration fragments.
+- + Fix bug in sparc block profiling.
+- + Fix obscure code generation bug for the PARISC targets.
+- + Define __STDC_EXT__ for HPUX configurations.
+- + Various POWERPC64 code generation bugfixes.
+- + Fix abort for PPC targets using ELF (ex GNU/Linux).
+- + Fix collect2 problems for AIX targets.
+- + Correct handling of .file directive for PPC targets.
+- + Fix bug in fix_trunc x86 patterns.
+- + Fix x86 port to correctly pop the FP stack for functions that
+- return structures in memory.
+- + Fix minor bug in strlen x86 pattern.
+- + Use stabs debugging instead of dwarf1 for x86-solaris
+- targets.
+- + Fix template repository code to handle leading underscore in
+- mangled names.
+- + Fix weak/weak alias support for OpenBSD.
+- + GNU/Linux for the ARM has C++ compatible include files.
+- * Language & Runtime specific fixes.
+- + Fix handling of constructor attribute in the C front-end
+- which caused problems building the Chill runtime library on
+- some targets.
+- + Fix minor problem merging type qualifiers in the C front-end.
+- + Fix aliasing bug for pointers and references (C/C++).
+- + Fix incorrect "non-constant initializer bug" when
+- -traditional or -fwritable-strings is enabled.
+- + Fix build error for Chill front-end on SunOS.
+- + Do not complain about duplicate instantiations when using
+- -frepo (C++)
+- + Fix array bounds handling in C++ front-end which caused
+- problems with dwarf debugging information in some
+- circumstances.
+- + Fix minor namespace problem.
+- + Fix problem linking java programs.
+-
+- The whole suite has been extensively [1]regression tested and
+- [2]package tested. It should be reliable and suitable for widespread
+- use.
+-
+- The GCC 2.95 release has several new optimizations, new targets, new
+- languages and other new features as compared to EGCS 1.1 or GCC 2.8.
+- See the [3]new features page for a more complete list of new features
+- found in the GCC 2.95 releases.
+-
+- The sources include installation instructions in both HTML and
+- plaintext forms in the install directory in the distribution. However,
+- the most up to date [4]installation instructions and [5]build/test
+- status are on the web pages. We will update those pages as new
+- information becomes available.
+-
+- The GCC developers would like to thank the numerous people that have
+- contributed new features, test results, bugfixes, etc to GCC. This
+- [6]amazing group of volunteers is what makes GCC successful.
+-
+- And finally, we can't in good conscience fail to mention some
+- [7]caveats to using GCC 2.95.2.
+-
+- Download GCC 2.95.2 from the [8]GNU FTP server (ftp://ftp.gnu.org)
+- Download GCC 2.95.2 from the [9]GCC/EGCS FTP server
+- (ftp://gcc.gnu.org)
+- [10]Find a GNU mirror site
+- [11]Find a GCC/EGCS mirror site
+-
+- For additional information about GCC please see the [12]GCC project
+- web server or contact the [13]GCC development mailing list.
+- _________________________________________________________________
+-
+-
+- [14]The GCC team
+- Last modified 2001-02-12
+-
+-References
+-
+- 1. http://gcc.gnu.org/gcc-2.95/regress.html
+- 2. http://gcc.gnu.org/gcc-2.95/othertest.html
+- 3. http://gcc.gnu.org/gcc-2.95/features.html
+- 4. http://gcc.gnu.org/install/index.html
+- 5. http://gcc.gnu.org/gcc-2.95/buildstat.html
+- 6. http://gcc.gnu.org/thanks.html
+- 7. http://gcc.gnu.org/gcc-2.95/caveats.html
+- 8. ftp://ftp.gnu.org/pub/gnu/gcc/
+- 9. ftp://gcc.gnu.org/pub/gcc/releases/index.html
+- 10. http://www.gnu.org/order/ftp.html
+- 11. http://gcc.gnu.org/mirrors.html
+- 12. http://gcc.gnu.org/index.html
+- 13. mailto:gcc@gcc.gnu.org
+- 14. http://gcc.gnu.org/about.html
+-======================================================================
+-http://gcc.gnu.org/gcc-2.95/gcc-2.95.1.html
+-
+- GCC 2.95.1
+-
+- August 19, 1999
+-
+- The GNU project and the GCC/EGCS developers are pleased to announce
+- the release of GCC version 2.95.1. GCC used to stand for the GNU C
+- Compiler, but since the compiler supports several other languages
+- aside from C, it now stands for the GNU Compiler Collection.
+-
+- This is a minor release to address several bugs in the GCC version
+- 2.95 release.
+-
+- * Generic bugfixes and improvements
+- + Various documentation fixes related to the GCC/EGCS merger.
+- + Fix memory management bug which could lead to spurious
+- aborts, core dumps or random parsing errors in the compiler.
+- + Fix a couple bugs in the dwarf1 and dwarf2 debug record
+- support.
+- + Fix infinite loop in the CSE optimizer.
+- + Avoid undefined behavior in compiler FP emulation code
+- + Fix install problem when prefix is overridden on the make
+- install command.
+- + Fix problem with unwanted installation of assert.h on some
+- systems.
+- + Fix problem with finding the wrong assembler in a single tree
+- build.
+- + Avoid increasing the known alignment of a register that is
+- already known to be a pointer.
+- * Platform specific bugfixes and improvements
+- + Codegen bugfix for prologue/epilogue for cpu32 target.
+- + Fix long long code generation bug for the Coldfire target.
+- + Fix various aborts in the SH compiler.
+- + Fix bugs in libgcc support library for the SH.
+- + Fix alpha ev6 code generation bug.
+- + Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on
+- AIX platforms.
+- + Fix -fpic code generation bug for rs6000/ppc svr4 targets.
+- + Fix varargs/stdarg code generation bug for rs6000/ppc svr4
+- targets.
+- + Fix weak symbol handling for rs6000/ppc svr4 targets.
+- + Fix various problems with 64bit code generation for the
+- rs6000/ppc port.
+- + Fix codegen bug which caused tetex to be mis-compiled on the
+- x86
+- + Fix compiler abort in new cfg code exposed by x86 port.
+- + Fix out of range array reference in code convert flat
+- registers to the x87 stacked FP register file.
+- + Fix minor vxworks configuration bug
+- + Fix return type of bsearch for SunOS 4.x.
+- * Language & Runtime specific fixes.
+- + The G++ signature extension has been deprecated. It will be
+- removed in the next major release of G++. Use of signatures
+- will result in a warning from the compiler.
+- + Several bugs relating to templates and namespaces were fixed.
+- + A bug that caused crashes when combining templates with -g on
+- DWARF1 platforms was fixed.
+- + Pointers-to-members, virtual functions, and multiple
+- inheritance should now work together correctly.
+- + Some code-generation bugs relating to function try blocks
+- were fixed.
+- + G++ is a little bit more lenient with certain archaic
+- constructs than in GCC 2.95.
+- + Fix to prevent shared library version #s from bring truncated
+- to 1 digit
+- + Fix missing std:: in the libstdc++ library.
+- + Fix stream locking problems in libio.
+- + Fix problem in java compiler driver.
+-
+- The whole suite has been extensively [1]regression tested and
+- [2]package tested. It should be reliable and suitable for widespread
+- use.
+-
+- The compiler has several new optimizations, new targets, new languages
+- and other new features. See the [3]new features page for a more
+- complete list of new features found in the GCC 2.95 releases.
+-
+- The sources include installation instructions in both HTML and
+- plaintext forms in the install directory in the distribution. However,
+- the most up to date [4]installation instructions and [5]build/test
+- status are on the web pages. We will update those pages as new
+- information becomes available.
+-
+- The GCC developers would like to thank the numerous people that have
+- contributed new features, test results, bugfixes, etc to GCC. This
+- [6]amazing group of volunteers is what makes GCC successful.
+-
+- And finally, we can't in good conscience fail to mention some
+- [7]caveats to using GCC 2.95.1.
+-
+- Download GCC 2.95.1 from the [8]GNU FTP server (ftp://ftp.gnu.org)
+- Download GCC 2.95.1 from the [9]GCC/EGCS FTP server
+- (ftp://go.cygnus.com)
+- [10]Find a GNU mirror site
+- [11]Find a GCC/EGCS mirror site
+-
+- For additional information about GCC please see the [12]GCC project
+- web server or contact the [13]GCC development mailing list.
+- _________________________________________________________________
+-
+-
+- [14]The GCC team
+- Last modified 2001-02-12
+-
+-References
+-
+- 1. http://gcc.gnu.org/gcc-2.95/regress.html
+- 2. http://gcc.gnu.org/gcc-2.95/othertest.html
+- 3. http://gcc.gnu.org/gcc-2.95/features.html
+- 4. http://gcc.gnu.org/install/index.html
+- 5. http://gcc.gnu.org/gcc-2.95/buildstat.html
+- 6. http://gcc.gnu.org/thanks.html
+- 7. http://gcc.gnu.org/gcc-2.95/caveats.html
+- 8. ftp://ftp.gnu.org/pub/gnu/gcc/
+- 9. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 10. http://www.gnu.org/order/ftp.html
+- 11. http://gcc.gnu.org/mirrors.html
+- 12. http://gcc.gnu.org/index.html
+- 13. mailto:gcc@gcc.gnu.org
+- 14. http://gcc.gnu.org/about.html
+-======================================================================
+-http://gcc.gnu.org/gcc-2.95/gcc-2.95.html
+-
+- GCC 2.95
+-
+- July 31, 1999
+-
+- The GNU project and the GCC/EGCS developers are pleased to announce
+- the release of GCC version 2.95. GCC used to stand for the GNU C
+- Compiler, but since the compiler supports several other languages
+- aside from C, it now stands for the GNU Compiler Collection.
+-
+- This is the first release of GCC since the April 1999 GCC/EGCS
+- reunification and includes nearly a year's worth of new development
+- and bugfixes.
+-
+- The whole suite has been extensively [1]regression tested and
+- [2]package tested. It should be reliable and suitable for widespread
+- use.
+-
+- The compiler has several new optimizations, new targets, new languages
+- and other new features. See the [3]new features page for a more
+- complete list of new features found in the GCC 2.95 releases.
+-
+- The sources include installation instructions in both HTML and
+- plaintext forms in the install directory in the distribution. However,
+- the most up to date [4]installation instructions and [5]build/test
+- status are on the web pages. We will update those pages as new
+- information becomes available.
+-
+- The GCC developers would like to thank the numerous people that have
+- contributed new features, test results, bugfixes, etc to GCC. This
+- [6]amazing group of volunteers is what makes GCC successful.
+-
+- And finally, we can't in good conscience fail to mention some
+- [7]caveats to using GCC 2.95.
+-
+- Download GCC 2.95 from the [8]GNU FTP server (ftp://ftp.gnu.org)
+- Download GCC 2.95 from the [9]GCC/EGCS FTP server
+- (ftp://go.cygnus.com)
+- [10]Find a GNU mirror site
+- [11]Find a GCC/EGCS mirror site
+-
+- For additional information about GCC please see the [12]GCC project
+- web server or contact the [13]GCC development mailing list.
+- _________________________________________________________________
+-
+-
+- [14]The GCC team
+- Last modified 2001-02-12
+-
+-References
+-
+- 1. http://gcc.gnu.org/gcc-2.95/regress.html
+- 2. http://gcc.gnu.org/gcc-2.95/othertest.html
+- 3. http://gcc.gnu.org/gcc-2.95/features.html
+- 4. http://gcc.gnu.org/install/index.html
+- 5. http://gcc.gnu.org/gcc-2.95/buildstat.html
+- 6. http://gcc.gnu.org/thanks.html
+- 7. http://gcc.gnu.org/gcc-2.95/caveats.html
+- 8. ftp://ftp.gnu.org/pub/gnu/gcc/
+- 9. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 10. http://www.gnu.org/order/ftp.html
+- 11. http://gcc.gnu.org/mirrors.html
+- 12. http://gcc.gnu.org/index.html
+- 13. mailto:gcc@gcc.gnu.org
+- 14. http://gcc.gnu.org/about.html
+-======================================================================
+-http://gcc.gnu.org/gcc-2.95/features.html
+-
+- GCC 2.95 New Features
+-
+- * General Optimizer Improvements:
+- + [1]Localized register spilling to improve speed and code
+- density especially on small register class machines.
+- + [2]Global CSE using lazy code motion algorithms.
+- + [3]Improved global constant/copy propagation.
+- + [4]Improved control flow graph analysis and manipulation.
+- + [5]Local dead store elimination.
+- + [6]Memory Load hoisting/store sinking in loops.
+- + [7]Type based alias analysis is enabled by default. Note this
+- feature will expose bugs in the Linux kernel. Please refer to
+- the [8]FAQ for additional information on this issue.
+- + Major revamp of GIV detection, combination and simplification
+- to improve loop performance.
+- + Major improvements to register allocation and reloading.
+- * New Languages and Language specific improvements
+- + [9]Many C++ improvements.
+- + [10]Many Fortran improvements.
+- + [11]Java front-end has been integrated. A [12]runtime library
+- is available separately.
+- + [13]ISO C99 support
+- + [14]Chill front-end and runtime has been integrated.
+- + Boehm garbage collector support in libobjc.
+- + More support for various pragmas which appear in vendor
+- include files
+- * New Targets and Target Specific Improvements
+- + [15]Sparc backend rewrite.
+- + -mschedule=8000 will optimize code for PA8000 class
+- processors; -mpa-risc-2-0 will generate code for PA2.0
+- processors
+- + Various micro-optimizations for the ia32 port. K6
+- optimizations
+- + Compiler will attempt to align doubles in the stack on the
+- ia32 port
+- + Alpha EV6 support
+- + PowerPC 750
+- + RS6000/PowerPC: -mcpu=401 was added as an alias for
+- -mcpu=403. -mcpu=e603e was added to do -mcpu=603e and
+- -msoft-float.
+- + c3x, c4x
+- + HyperSparc
+- + SparcLite86x
+- + sh4
+- + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
+- arm-linux)
+- + vxWorks targets include support for vxWorks threads
+- + StrongARM 110 and ARM9 support added. ARM Scheduling
+- parameters rewritten.
+- + Various changes to the MIPS port to avoid assembler macros,
+- which
+- + Various performance improvements to the i960 port.
+- + Major rewrite of ns32k port in turn improves performance
+- * Other significant improvements
+- + [16]Ability to dump cfg information and display it using vcg.
+- + The new faster scheme for fixing vendor header files is
+- enabled by default.
+- + Experimental internationalization support.
+- + multibyte character support
+- + Some compile-time speedups for pathological problems
+- + Better support for complex types
+- * Plus the usual mountain of bugfixes
+- * Core compiler is based on the gcc2 development tree from Sept 30,
+- 1998, so we have all of the [17]features found in GCC 2.8.
+- _________________________________________________________________
+-
+-
+- [18]The GCC team
+- Last modified 2001-02-12
+-
+-References
+-
+- 1. http://gcc.gnu.org/news/spill.html
+- 2. http://gcc.gnu.org/news/lcm.html
+- 3. http://gcc.gnu.org/news/cprop.html
+- 4. http://gcc.gnu.org/news/cfg.html
+- 5. http://gcc.gnu.org/news/dse.html
+- 6. http://gcc.gnu.org/news/hoist.html
+- 7. http://gcc.gnu.org/news/alias.html
+- 8. http://gcc.gnu.org/fom_serv/cache/24.html
+- 9. http://gcc.gnu.org/gcc-2.95/c++features.html
+- 10. http://gcc.gnu.org/onlinedocs/g77_news.html
+- 11. http://sources.redhat.com/java/gcj-announce.txt
+- 12. http://gcc.gnu.org/javaannounce.html
+- 13. http://gcc.gnu.org/c99status.html
+- 14. http://gcc.gnu.org/news/chill.html
+- 15. http://gcc.gnu.org/news/sparc.html
+- 16. http://gcc.gnu.org/news/egcs-vcg.html
+- 17. http://gcc.gnu.org/egcs-1.0/features-2.8.html
+- 18. http://gcc.gnu.org/about.html
+-======================================================================
+-http://gcc.gnu.org/gcc-2.95/caveats.html
+-
+- GCC 2.95 Caveats
+-
+- * GCC 2.95 will issue an error for invalid asm statements that had
+- been silently accepted by earlier versions of the compiler. This
+- is particularly noticeable when compiling older versions of the
+- Linux kernel (2.0.xx). Please refer to the [1]FAQ for more
+- information on this issue.
+- * GCC 2.95 implements type based alias analysis to disambiguate
+- memory references. Some programs, particularly the Linux kernel
+- violate ANSI/ISO aliasing rules and therefore may not operate
+- correctly when compiled with GCC 2.95. Please refer to the [2]FAQ
+- for more information on this issue.
+- * GCC 2.95 has a known bug in its handling of complex variables for
+- 64bit targets. Instead of silently generating incorrect code, GCC
+- 2.95 will issue a fatal error for situations it can not handle.
+- This primarily affects the Fortran community as Fortran makes more
+- use of complex variables than C or C++.
+- * GCC 2.95 has an integrated libstdc++, but does not have an
+- integrated libg++. Furthermore old libg++ releases will not work
+- with GCC 2.95. You can retrieve a recent copy of libg++ from the
+- [3]GCC ftp server.
+- Note most C++ programs only need libstdc++.
+- * Exception handling may not work with shared libraries,
+- particularly on alphas, hppas, rs6000/powerpc and mips based
+- platforms. Exception handling is known to work on x86 GNU/Linux
+- platforms with shared libraries.
+- * In general, GCC 2.95 is more rigorous about rejecting invalid C++
+- code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0,
+- or EGCS 1.1. As a result it may be necessary to fix C++ code
+- before it will compile with GCC 2.95.
+- * G++ is also converting toward the ISO C++ standard; as a result
+- code which was previously valid (and thus accepted by other
+- compilers and older versions of g++) may no longer be accepted.
+- The flag -fpermissive may allow some non-conforming code to
+- compile with GCC 2.95.
+- * GCC 2.95 compiled C++ code is not binary compatible with EGCS
+- 1.1.x, EGCS 1.0.x or GCC 2.8.x.
+- * GCC 2.95 does not have changes from the GCC 2.8 tree that were
+- made between Sept 30, 1998 and April 30, 1999 (the official end of
+- the GCC 2.8 project). Future GCC releases will include all the
+- changes from the defunct GCC 2.8 sources.
+- _________________________________________________________________
+-
+-
+- [4]The GCC team
+- Last modified 2001-02-12
+-
+-References
+-
+- 1. http://gcc.gnu.org/faq.html#asmclobber
+- 2. http://gcc.gnu.org/fom_serv/cache/24.html
+- 3. ftp://gcc.gnu.org/pub/gcc/infrastructure/libg++-2.8.1.3.tar.gz
+- 4. http://gcc.gnu.org/about.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.1/egcs-1.1.2.html
+-
+- EGCS 1.1.2
+-
+- March 15, 1999
+-
+- We are pleased to announce the release of EGCS 1.1.2.
+-
+- EGCS is a collaborative effort involving several groups of hackers
+- using an open development model to accelerate development and testing
+- of GNU compilers and runtime libraries.
+-
+- EGCS 1.1.2 is a minor update to the EGCS 1.1.1 compiler to fix several
+- serious problems in EGCS 1.1.1.
+- * General improvements and fixes
+- + Fix bug in loop optimizer which caused the SPARC (and
+- potentially other) ports to segfault.
+- + Fix infinite recursion in alias analysis and combiner code.
+- + Fix bug in regclass preferencing.
+- + Fix incorrect loop reversal which caused incorrect code to be
+- generated for several targets.
+- + Fix return value for builtin memcpy.
+- + Reduce compile time for certain loops which exposed quadratic
+- behavior in the loop optimizer.
+- + Fix bug which caused volatile memory to be written multiple
+- times when only one write was needed/desired.
+- + Fix compiler abort in caller-save.c
+- + Fix combiner bug which caused incorrect code generation for
+- certain division by constant operations.
+- + Fix incorrect code generation due to a bug in range check
+- optimizations.
+- + Fix incorrect code generation due to mis-handling of
+- clobbered values in CSE.
+- + Fix compiler abort/segfault due to incorrect register
+- splitting when unrolling loops.
+- + Fix code generation involving autoincremented addresses with
+- ternary operators.
+- + Work around bug in the scheduler which caused qt to be
+- mis-compiled on some platforms.
+- + Fix code generation problems with -fshort-enums.
+- + Tighten security for temporary files.
+- + Improve compile time for codes which make heavy use of
+- overloaded functions.
+- + Fix multiply defined constructor/destructor symbol problems.
+- + Avoid setting bogus RPATH environemnt variable during
+- bootstrap.
+- + Avoid GNU-make dependencies in the texinfo subdir.
+- + Install CPP wrapper script in $(prefix)/bin if --enable-cpp.
+- --enable-cpp= can be used to specify an additional install
+- directory for the cpp wrapper script.
+- + Fix CSE bug which caused incorrect label-label refs to appear
+- on some platforms.
+- + Avoid linking in EH routines from libgcc if they are not
+- needed.
+- + Avoid obscure bug in aliasing code.
+- + Fix bug in weak symbol handling.
+- * Platform-specific improvements and fixes
+- + Fix detection of PPro/PII on Unixware 7.
+- + Fix compiler segfault when building spec99 and other programs
+- for SPARC targets.
+- + Fix code-generation bugs for integer and floating point
+- conditional move instructions on the PPro/PII.
+- + Use fixincludes to fix byteorder problems on i?86-*-sysv.
+- + Fix build failure for the arc port.
+- + Fix floating point format configuration for i?86-gnu port
+- + Fix problems with hppa1.0-hp-hpux10.20 configuration when
+- threads are enabled
+- + Fix coldfire code generation bugs.
+- + Fix "unrecognized insn" problems for Alpha and PPC ports.
+- + Fix h8/300 code generation problem with floating point values
+- in memory.
+- + Fix unrecognized insn problems for the m68k port.
+- + Fix namespace-pollution problem for the x86 port.
+- + Fix problems with old assembler on x86 NeXT systems.
+- + Fix PIC code-generation problems for the SPARC port.
+- + Fix minor bug with LONG_CALLS in PowerPC SVR4 support.
+- + Fix minor ISO namespace violation in Alpha varargs/stdarg
+- support.
+- + Fix incorrect "braf" instruction usage for the SH port.
+- + Fix minor bug in va-sh which prevented its use with -ansi.
+- + Fix problems recognizing and supporting FreeBSD.
+- + Handle OpenBSD systems correctly.
+- + Minor fixincludes fix for Digital UNIX 4.0B.
+- + Fix problems with ctors/dtors in SCO shared libraries.
+- + Abort instead of generating incorrect code for PPro/PII
+- floating point conditional moves.
+- + Avoid multiply defined symbols on Linux/GNU systems using
+- libc-5.4.xx.
+- + Fix abort in alpha compiler.
+-
+- Fortran-specific fixes
+- * Fix the IDate intrinsic (VXT) (in libg2c) so the returned year is
+- in the documented, non-Y2K-compliant range of 0-99, instead of
+- being returned as 100 in the year 2000.
+- * Fix the `Date_and_Time' intrinsic (in libg2c) to return the
+- milliseconds value properly in Values(8).
+- * Fix the `LStat' intrinsic (in libg2c) to return device-ID
+- information properly in SArray(7).
+-
+- An important goal of EGCS is to allow wide scale testing of new
+- features and optimizations which are still under development. However,
+- EGCS has been carefully tested and should be comparable in quality to
+- most gcc releases.
+-
+- EGCS 1.1.2 is based on the June 6, 1998 snapshot of the GCC 2.8
+- development sources; it contains all of the new features found in GCC
+- 2.8.1 as well as all new development from gcc2 up to June 6, 1998.
+-
+- See the [1]new features page for a more complete list of new features
+- found in EGCS 1.1 releases.
+-
+- The EGCS 1.1.2 release includes installation instructions in both HTML
+- and plaintext forms (see the INSTALL directory in the toplevel
+- directory of the EGCS 1.1.2 distribution). However, we also keep the
+- most up to date [2]installation instructions and [3]build/test status
+- on our web page. We will update those pages as new information becomes
+- available.
+-
+- The EGCS project would like to thank the numerous people that have
+- contributed new features, test results, bugfixes, etc. This [4]amazing
+- group of volunteers is what makes EGCS successful.
+-
+- And finally, we can't in good conscience fail to mention some
+- [5]caveats to using EGCS 1.1.2. [6]Download EGCS 1.1.2 from
+- egcs.cygnus.com (USA California) -->
+-
+- [7]Download EGCS 1.1.2 from go.cygnus.com (USA California - High speed
+- link provided by Stanford)
+-
+- The EGCS 1.1.2 release is also available on many [8]mirror sites.
+- _________________________________________________________________
+-
+- Last modified on July 28, 1999.
+-
+-References
+-
+- 1. http://gcc.gnu.org/egcs-1.1/features.html
+- 2. http://gcc.gnu.org/install/index.html
+- 3. http://gcc.gnu.org/egcs-1.1/buildstat.html
+- 4. http://gcc.gnu.org/thanks.html
+- 5. http://gcc.gnu.org/egcs-1.1/caveats.html
+- 6. ftp://egcs.cygnus.com/pub/egcs/releases/index.html
+- 7. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 8. http://gcc.gnu.org/mirrors.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.1/egcs-1.1.1.html
+-
+- EGCS 1.1.1
+-
+- December 1, 1998
+-
+- We are pleased to announce the release of EGCS 1.1.1.
+-
+- EGCS is a collaborative effort involving several groups of hackers
+- using an open development model to accelerate development and testing
+- of GNU compilers and runtime libraries.
+-
+- EGCS 1.1.1 is a minor update to the EGCS 1.1 compiler to fix several
+- serious problems in EGCS 1.1.
+- * General improvements and fixes
+- + Avoid some stack overflows when compiling large functions.
+- + Avoid incorrect loop invariant code motions.
+- + Fix some core dumps on Linux kernel code.
+- + Bring back the imake -Di386 and friends fix from EGCS 1.0.2.
+- + Fix code generation problem in gcse.
+- + Various documentation related fixes.
+- * g++/libstdc++ improvements and fixes
+- + MT safe EH fix for setjmp/longjmp based exception handling.
+- + Fix a few bad interactions between optimization and exception
+- handling.
+- + Fixes for demangling of template names starting with "__".
+- + Fix a bug that would fail to run destructors in some cases
+- with -O2.
+- + Fix 'new' of classes with virtual bases.
+- + Fix crash building Qt on the Alpha.
+- + Fix failure compiling WIFEXITED macro on GNU/Linux.
+- + Fix some -frepo failures.
+- * g77 and libf2c improvements and fixes
+- + Various documentation fixes.
+- + Avoid compiler crash on RAND intrinsic.
+- + Fix minor bugs in makefiles exposed by BSD make programs.
+- + Define _XOPEN_SOURCE for libI77 build to avoid potential
+- problems on some 64-bit systems.
+- + Fix problem with implicit endfile on rewind.
+- + Fix spurious recursive I/O errors.
+- * platform specific improvements and fixes
+- + Match all versions of UnixWare7.
+- + Do not assume x86 SVR4 or UnixWare targets can handle stabs
+- + Fix PPC/RS6000 LEGITIMIZE_ADDRESS macro and bug in conversion
+- from unsigned ints to double precision floats.
+- + Fix ARM ABI issue with NetBSD.
+- + Fix a few arm code generation bugs.
+- + Fixincludes will fix additional broken SCO OpenServer header
+- files.
+- + Fix a m68k backend bug which caused invalid offsets in reg+d
+- addresses.
+- + Fix problems with 64bit AIX 4.3 support.
+- + Fix handling of long longs for varargs/stdarg functions on
+- the ppc.
+- + Minor fixes to CPP predefines for Windows.
+- + Fix code generation problems with gpr<->fpr copies for 64bit
+- ppc
+- + Fix a few coldfire code generation bugs.
+- + Fix some more header file problems on SunOS 4.x
+- + Fix assert.h handling for RTEMS.
+- + Fix Windows handling of TREE_SYMBOL_REFERENCED.
+- + Fix x86 compiler abort in reg-stack pass.
+- + Fix cygwin/windows problem with section attributes.
+- + Fix Alpha code generation problem exposed by SMP Linux
+- kernels.
+- + Fix typo in m68k 32->64bit integer conversion.
+- + Make sure target libraries build with -fPIC for PPC & Alpha
+- targets.
+-
+- An important goal of EGCS is to allow wide scale testing of new
+- features and optimizations which are still under development. However,
+- EGCS has been carefully tested and should be comparable in quality to
+- most gcc releases.
+-
+- EGCS 1.1.1 is based on the June 6, 1998 snapshot of the GCC 2.8
+- development sources; it contains all of the new features found in GCC
+- 2.8.1 as well as all new development from gcc2 up to June 6, 1998.
+-
+- See the [1]new features page for a more complete list of new features
+- found in EGCS 1.1 releases.
+-
+- The EGCS 1.1.1 release includes installation instructions in both HTML
+- and plaintext forms (see the INSTALL directory in the toplevel
+- directory of the EGCS 1.1.1 distribution). However, we also keep the
+- most up to date [2]installation instructions and [3]build/test status
+- on our web page. We will update those pages as new information becomes
+- available.
+-
+- The EGCS project would like to thank the numerous people that have
+- contributed new features, test results, bugfixes, etc. This [4]amazing
+- group of volunteers is what makes EGCS successful.
+-
+- And finally, we can't in good conscience fail to mention some
+- [5]caveats to using EGCS 1.1.1.
+-
+- [6]Download EGCS 1.1.1 from egcs.cygnus.com (USA California)
+-
+- The EGCS 1.1.1 release is also available on many mirror sites.
+- [7]Goto mirror list to find a closer site
+- _________________________________________________________________
+-
+- Last modified on July 28, 1999.
+-
+-References
+-
+- 1. http://gcc.gnu.org/egcs-1.1/features.html
+- 2. http://gcc.gnu.org/install/index.html
+- 3. http://gcc.gnu.org/egcs-1.1/buildstat.html
+- 4. http://gcc.gnu.org/thanks.html
+- 5. http://gcc.gnu.org/egcs-1.1/caveats.html
+- 6. ftp://egcs.cygnus.com/pub/egcs/releases/index.html
+- 7. http://gcc.gnu.org/mirrors.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.1/egcs-1.1.html
+-
+- EGCS 1.1
+-
+- September 3, 1998
+-
+- We are pleased to announce the release of EGCS 1.1.
+-
+- EGCS is a free software project to further the development of the GNU
+- compilers using an open development environment.
+-
+- EGCS 1.1 is a major new release of the EGCS compiler system. It has
+- been [1]extensively tested and is believed to be stable and suitable
+- for widespread use.
+-
+- EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8
+- development sources; it contains all of the new features found in GCC
+- 2.8.1 as well as all new development from GCC up to June 6, 1998.
+-
+- EGCS also contains many improvements and features not found in GCC or
+- in older versions of EGCS.
+- * Global common subexpression elimination and global constant/copy
+- propagation (aka [2]gcse)
+- * Ongoing improvements to the [3]alias analysis support to allow for
+- better optimizations throughout the compiler.
+- * Vastly improved [4]C++ compiler and integrated C++ runtime
+- libraries.
+- * Fixes for the /tmp symlink race security problems.
+- * New targets including mips16, arm-thumb and 64 bit PowerPC.
+- * Improvements to GNU Fortran (g77) compiler and runtime library
+- made since [5]g77 version 0.5.23.
+-
+- See the [6]new features page for a more complete list of new features
+- found in EGCS 1.1 releases.
+-
+- The EGCS 1.1 release includes installation instructions in both HTML
+- and plaintext forms (see the INSTALL directory in the toplevel
+- directory of the EGCS 1.1 distribution). However, we also keep the
+- most up to date [7]installation instructions and [8]build/test status
+- on our web page. We will update those pages as new information becomes
+- available.
+-
+- The EGCS project would like to thank the numerous people that have
+- contributed new features, test results, bugfixes, etc. This [9]amazing
+- group of volunteers is what makes EGCS successful.
+-
+- And finally, we can't in good conscience fail to mention some
+- [10]caveats to using EGCS 1.1.
+-
+- [11]Download EGCS 1.1 from egcs.cygnus.com (USA California)
+-
+- [12]Download EGCS 1.1 from go.cygnus.com (USA California -- High speed
+- link provided by Stanford)
+-
+- The EGCS 1.1 release is also available on many mirror sites.
+- [13]Goto mirror list to find a closer site
+- _________________________________________________________________
+-
+- Last modified on September 4, 1999.
+-
+-References
+-
+- 1. http://gcc.gnu.org/egcs-1.1/egcs-1.1-test.html
+- 2. http://gcc.gnu.org/news/gcse.html
+- 3. http://gcc.gnu.org/news/alias.html
+- 4. http://gcc.gnu.org/egcs-1.1/c++features.html
+- 5. http://gcc.gnu.org/onlinedocs/g77_news.html
+- 6. http://gcc.gnu.org/egcs-1.1/features.html
+- 7. http://gcc.gnu.org/install/index.html
+- 8. http://gcc.gnu.org/egcs-1.1/buildstat.html
+- 9. http://gcc.gnu.org/thanks.html
+- 10. http://gcc.gnu.org/egcs-1.1/caveats.html
+- 11. ftp://egcs.cygnus.com/pub/egcs/releases/index.html
+- 12. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 13. http://gcc.gnu.org/mirrors.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.1/features.html
+-
+- EGCS 1.1 new features
+-
+- * Integrated GNU Fortran (g77) compiler and runtime library with
+- improvements, based on [1]g77 version 0.5.23.
+- * Vast improvements in the C++ compiler; so many they have [2]page
+- of their own!
+- * Compiler implements [3]global common subexpression elimination and
+- global copy/constant propagation.
+- * More major improvements in the [4]alias analysis code.
+- * More major improvements in the exception handling code to improve
+- performance, lower static overhead and provide the infrastructure
+- for future improvements.
+- * The infamous /tmp symlink race security problems have been fixed.
+- * The regmove optimization pass has been nearly completely rewritten
+- to improve performance of generated code.
+- * The compiler now recomputes register usage information before
+- local register allocation. By providing more accurate information
+- to the priority based allocator, we get better register
+- allocation.
+- * The register reloading phase of the compiler optimizes spill code
+- much better than in previous releases.
+- * Some bad interactions between the register allocator and
+- instruction scheduler have been fixed, resulting in much better
+- code for certain programs. Additionally, we have tuned the
+- scheduler in various ways to improve performance of generated code
+- for some architectures.
+- * The compiler's branch shortening algorithms have been
+- significantly improved to work better on targets which align jump
+- targets.
+- * The compiler now supports -Os to prefer optimizing for code space
+- over optimizing for code speed.
+- * The compiler will now totally eliminate library calls which
+- compute constant values. This primarily helps targets with no
+- integer div/mul support and targets without floating point
+- support.
+- * The compiler now supports an extensive "--help" option.
+- * cpplib has been greatly improved and may be suitable for limited
+- use.
+- * Memory footprint for the compiler has been significantly reduced
+- for some pathological cases.
+- * The time to build EGCS has been improved for certain targets
+- (particularly the alpha and mips platforms).
+- * Many infrastructure improvements throughout the compiler, plus the
+- usual mountain of bugfixes and minor improvements.
+- * Target dependent improvements:
+- + SPARC port now includes V8 plus and V9 support as well as
+- performance tuning for Ultra class machines. The SPARC port
+- now uses the Haifa scheduler.
+- + Alpha port has been tuned for the EV6 processor and has an
+- optimized expansion of memcpy/bzero. The Alpha port now uses
+- the Haifa scheduler.
+- + RS6000/PowerPC: EGCS 1.1 includes support for the Power64
+- architecture and aix4.3 support. The RS6000/PowerPC port now
+- uses the Haifa scheduler.
+- + x86: Alignment of static store data and jump targets is per
+- Intel recommendations now. Various improvements throughout
+- the x86 port to improve performance on Pentium processors.
+- Conditional move support has been fixed and enabled for PPro
+- processors. The x86 port also better supports 64bit
+- operations now.
+- + MIPS has improved multiply/multiply-add support and now
+- includes mips16 ISA support.
+- + M68k has many micro-optimizations and Coldfire fixes.
+- * Core compiler is based on the GCC development tree from June 9,
+- 1998, so we have all of the [5]features found in GCC 2.8.
+-
+- [6]Return to the EGCS home page
+-
+- Last modified: September 4, 1999
+-
+-References
+-
+- 1. http://gcc.gnu.org/onlinedocs/g77_news.html
+- 2. http://gcc.gnu.org/egcs-1.1/c++features.html
+- 3. http://gcc.gnu.org/news/gcse.html
+- 4. http://gcc.gnu.org/news/alias.html
+- 5. http://gcc.gnu.org/egcs-1.0/features-2.8.html
+- 6. http://gcc.gnu.org/index.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.1/caveats.html
+-
+- EGCS 1.1 Caveats
+-
+- * EGCS has an integrated libstdc++, but does not have an integrated
+- libg++. Furthermore old libg++ releases will not work with EGCS;
+- HJ Lu has made a [1]libg++ snapshot available which may work with
+- EGCS.
+- Note most C++ programs only need libstdc++.
+- * Exception handling may not work with shared libraries,
+- particularly on alphas, hppas, rs6000/powerpc and mips based
+- platforms. Exception handling is known to work on x86-linux
+- platforms with shared libraries.
+- * Some versions of the Linux kernel have bugs which prevent them
+- from being compiled or from running when compiled by EGCS. See
+- [2]the FAQ for additional information.
+- * In general, EGCS is more rigorous about rejecting invalid C++ code
+- or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As
+- a result it may be necessary to fix C++ code before it will
+- compile with EGCS.
+- * G++ is also converting toward the ISO C++ standard; as a result
+- code which was previously valid (and thus accepted by other
+- compilers and older versions of g++) may no longer be accepted.
+- * EGCS 1.1 compiled C++ code is not binary compatible with EGCS
+- 1.0.x or GCC 2.8.x due to changes necessary to support thread safe
+- exception handling.
+-
+- [3]Return to the GCC home page
+-
+- Last modified: July 28, 1999
+-
+-References
+-
+- 1. ftp://ftp.yggdrasil.com/private/hjl/libg++-2.8.1.2.tar.gz
+- 2. http://gcc.gnu.org/fom_serv/cache/24.html
+- 3. http://gcc.gnu.org/index.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.html
+-
+- EGCS 1.0.3
+-
+- May 15, 1998
+-
+- We are pleased to announce the release of EGCS 1.0.3.
+-
+- EGCS is a collaborative effort involving several groups of hackers
+- using an open development model to accelerate development and testing
+- of GNU compilers and runtime libraries.
+-
+- EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few
+- problems reported by Red Hat for builds of Red Hat 5.1.
+- * Generic bugfixes:
+- + Fix a typo in the libio library which resulted in incorrect
+- behavior of istream::get.
+- + Fix the Fortran negative array index problem.
+- + Fix a major problem with the ObjC runtime thread support
+- exposed by glibc2.
+- + Reduce memory consumption of the Haifa scheduler.
+- * Target specific bugfixes:
+- + Fix one x86 floating point code generation bug exposed by
+- glibc2 builds.
+- + Fix one x86 internal compiler error exposed by glibc2 builds.
+- + Fix profiling bugs on the Alpha.
+- + Fix ImageMagick & emacs 20.2 build problems on the Alpha.
+- + Fix rs6000/ppc bug when converting values from integer types
+- to floating point types.
+-
+- An important goal of EGCS is to allow wide scale testing of new
+- features and optimizations which are still under development. However,
+- EGCS has been carefully tested and should be comparable in quality to
+- most GCC releases.
+-
+- EGCS 1.0.3 is based on an August 2, 1997 snapshot of the GCC 2.8
+- development sources; it contains nearly all of the new features found
+- in GCC 2.8.
+-
+- EGCS also contains many improvements and features not found in GCC 2.7
+- or GCC 2.8.
+- * Integrated C++ runtime libraries, including support for most major
+- GNU/Linux systems!
+- * The integrated libstdc++ library includes a verbatim copy of
+- [1]SGI's STL release instead of a modified copy.
+- * Integrated GNU Fortran compiler
+- * New instruction scheduler
+- * New alias analysis code
+-
+- See the [2]new features page for a more complete list of new features
+- found in EGCS 1.0.x releases.
+-
+- The EGCS 1.0.3 release includes installation instructions in both HTML
+- and plaintext forms (see the INSTALL directory in the toplevel
+- directory of the EGCS 1.0.3 distribution). However, we also keep the
+- most up to date [3]installation instructions and [4]build/test status
+- on our web page. We will update those pages as new information becomes
+- available.
+-
+- And, we can't in good conscience fail to mention some [5]caveats to
+- using EGCS.
+-
+- Update: Big thanks to Stanford for providing a high speed link for
+- downloading EGCS (go.cygnus.com)!
+-
+- [6]Download EGCS 1.0.3 from ftp.cygnus.com (USA California)
+-
+- [7]Download EGCS 1.0.3 from go.cygnus.com (USA California -- High
+- speed link provided by Stanford)
+-
+- The EGCS 1.0.3 release is also available on many mirror sites.
+- [8]Goto mirror list to find a closer site
+-
+- We'd like to thank the numerous people that have contributed new
+- features, test results, bugfixes, etc. Unfortunately, they're far too
+- numerous to mention by name.
+- _________________________________________________________________
+-
+- Last modified on February 22, 1999.
+-
+-References
+-
+- 1. http://www.sgi.com/Technology/STL
+- 2. http://gcc.gnu.org/egcs-1.0/features.html
+- 3. http://gcc.gnu.org/install/index.html
+- 4. http://gcc.gnu.org/egcs-1.0/buildstat.html
+- 5. http://gcc.gnu.org/egcs-1.0/caveats.html
+- 6. ftp://egcs.cygnus.com/pub/egcs/releases/index.html
+- 7. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 8. http://gcc.gnu.org/mirrors.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.html
+-
+- EGCS 1.0.2
+-
+- March 16, 1998
+-
+- We are pleased to announce the release of EGCS 1.0.2.
+-
+- EGCS is a collaborative effort involving several groups of hackers
+- using an open development model to accelerate development and testing
+- of GNU compilers and runtime libraries.
+-
+- EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several
+- serious problems in EGCS 1.0.1.
+- * General improvements and fixes
+- + Memory consumption significantly reduced, especially for
+- templates and inline functions.
+- + Fix various problems with glibc2.1.
+- + Fix loop optimization bug exposed by rs6000/ppc port.
+- + Fix to avoid potential code generation problems in jump.c.
+- + Fix some undefined symbol problems in dwarf1 debug support.
+- * g++/libstdc++ improvements and fixes
+- + libstdc++ in the EGCS release has been updated and should be
+- link compatible with libstdc++-2.8.
+- + Various fixes in libio/libstdc++ to work better on Linux
+- systems.
+- + Fix problems with duplicate symbols on systems that do not
+- support weak symbols.
+- + Memory corruption bug and undefined symbols in bastring have
+- been fixed.
+- + Various exception handling fixes.
+- + Fix compiler abort for very long thunk names.
+- * g77 improvements and fixes
+- + Fix compiler crash for omitted bound in Fortran CASE
+- statement.
+- + Add missing entries to g77 lang-options.
+- + Fix problem with -fpedantic in the g77 compiler.
+- + Fix "backspace" problem with g77 on alphas.
+- + Fix x86 backend problem with Fortran literals and -fpic.
+- + Fix some of the problems with negative subscripts for g77 on
+- alphas.
+- + Fixes for Fortran builds on cygwin32/mingw32.
+- * platform specific improvements and fixes
+- + Fix long double problems on x86 (exposed by glibc)
+- + x86 ports define i386 again to keep imake happy.
+- + Fix exception handling support on NetBSD ports.
+- + Several changes to collect2 to fix many problems with AIX.
+- + Define __ELF__ for rs6000/linux.
+- + Fix -mcall-linux problem on rs6000/linux.
+- + Fix stdarg/vararg problem for rs6000/linux.
+- + Allow autoconf to select a proper install problem on AIX 3.1.
+- + m68k port support includes -mcpu32 option as well as cpu32
+- multilibs.
+- + Fix stdarg bug for irix6.
+- + Allow EGCS to build on irix5 without the gnu assembler.
+- + Fix problem with static linking on sco5.
+- + Fix bootstrap on sco5 with native compiler.
+- + Fix for abort building newlib on H8 target.
+- + Fix fixincludes handling of math.h on SunOS.
+- + Minor fix for motorola 3300 m68k systems.
+-
+- An important goal of EGCS is to allow wide scale testing of new
+- features and optimizations which are still under development. However,
+- EGCS has been carefully tested and should be comparable in quality to
+- most GCC releases.
+-
+- EGCS 1.0.2 is based on an August 2, 1997 snapshot of the GCC 2.8
+- development sources; it contains nearly all of the new features found
+- in GCC 2.8.
+-
+- EGCS also contains many improvements and features not found in GCC 2.7
+- or GCC 2.8.
+- * Integrated C++ runtime libraries, including support for most major
+- linux systems!
+- * The integrated libstdc++ library includes a verbatim copy of
+- [1]SGI's STL release.
+- * Integrated GNU Fortran compiler
+- * New instruction scheduler
+- * New alias analysis code
+-
+- See the [2]new features page for a more complete list of new features
+- found in EGCS 1.0.x releases.
+-
+- The EGCS 1.0.2 release includes installation instructions in both HTML
+- and plaintext forms (see the INSTALL directory in the toplevel
+- directory of the EGCS 1.0.2 distribution). However, we also keep the
+- most up to date [3]installation instructions and [4]build/test status
+- on our web page. We will update those pages as new information becomes
+- available.
+-
+- And, we can't in good conscience fail to mention some [5]caveats to
+- using EGCS.
+-
+- Update: Big thanks to Stanford for providing a high speed link for
+- downloading EGCS (go.cygnus.com)!
+-
+- [6]Download EGCS 1.0.2 from ftp.cygnus.com (USA California)
+-
+- [7]Download EGCS 1.0.2 from go.cygnus.com (USA California -- High
+- speed link provided by Stanford)
+-
+- The EGCS 1.0.2 release is also available on many mirror sites.
+- [8]Goto mirror list to find a closer site
+-
+- We'd like to thank the numerous people that have contributed new
+- features, test results, bugfixes, etc. Unfortunately, they're far too
+- numerous to mention by name.
+- _________________________________________________________________
+-
+- Last modified on July 28, 1999.
+-
+-References
+-
+- 1. http://www.sgi.com/Technology/STL/
+- 2. http://gcc.gnu.org/egcs-1.0/features.html
+- 3. http://gcc.gnu.org/install/index.html
+- 4. http://gcc.gnu.org/egcs-1.0/buildstat.html
+- 5. http://gcc.gnu.org/egcs-1.0/caveats.html
+- 6. ftp://egcs.cygnus.com/pub/egcs/releases/index.html
+- 7. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 8. http://gcc.gnu.org/mirrors.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.html
+-
+- EGCS 1.0.1
+-
+- January 6, 1998
+-
+- We are pleased to announce the release of EGCS 1.0.1.
+-
+- EGCS is a collaborative effort involving several groups of hackers
+- using an open development model to accelerate development and testing
+- of GNU compilers and runtime libraries.
+-
+- EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few
+- critical bugs and add support for Red Hat 5.0 Linux. Changes since the
+- EGCS 1.0 release:
+- * Add support for Red Hat 5.0 Linux and better support for Linux
+- systems using glibc2.
+- Many programs failed to link when compiled with EGCS 1.0 on Red
+- Hat 5.0 or on systems with newer versions of glibc2. EGCS 1.0.1
+- should fix these problems.
+- * Compatability with both EGCS 1.0 and GCC 2.8 libgcc exception
+- handling interfaces.
+- To avoid future compatibility problems, we strongly urge anyone
+- who is planning on distributing shared libraries that contain C++
+- code to upgrade to EGCS 1.0.1 first.
+- Soon after EGCS 1.0 was released, the GCC developers made some
+- incompatible changes in libgcc's exception handling interfaces.
+- These changes were needed to solve problems on some platforms.
+- This means that GCC 2.8.0, when released, will not be seamlessly
+- compatible with shared libraries built by EGCS 1.0. The reason is
+- that the libgcc.a in GCC 2.8.0 will not contain a function needed
+- by the old interface.
+- The result of this is that there may be compatibility problems
+- with shared libraries built by EGCS 1.0 when used with GCC 2.8.0.
+- With EGCS 1.0.1, generated code uses the new (GCC 2.8.0)
+- interface, and libgcc.a has the support routines for both the old
+- and the new interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be
+- freely mixed, and EGCS 1.0.1 and GCC 2.8.0 code can be freely
+- mixed).
+- The maintainers of GCC 2.x have decided against including seamless
+- support for the old interface in 2.8.0, since it was never
+- "official", so to avoid future compatibility problems we recommend
+- against distributing any shared libraries built by EGCS 1.0 that
+- contain C++ code (upgrade to 1.0.1 and use that).
+- * Various bugfixes in the x86, hppa, mips, and rs6000/ppc backends.
+- The x86 changes fix code generation errors exposed when building
+- glibc2 and the Linux dynamic linker (ld.so).
+- The hppa change fixes a compiler abort when configured for use
+- with RTEMS.
+- The MIPS changes fix problems with the definition of LONG_MAX on
+- newer systems, allow for command line selection of the target ABI,
+- and fix one code generation problem.
+- The rs6000/ppc change fixes some problems with passing structures
+- to varargs/stdarg functions.
+- * A few machine independent bugfixes, mostly to fix code generation
+- errors when building Linux kernels or glibc.
+- * Fix a few critical exception handling and template bugs in the C++
+- compiler.
+- * Fix Fortran namelist bug on alphas.
+- * Fix build problems on x86-solaris systems.
+-
+- An important goal of EGCS is to allow wide scale testing of new
+- features and optimizations which are still under development. However,
+- EGCS has been carefully tested and should be comparable in quality to
+- most GCC releases.
+-
+- EGCS 1.0.1 is based on an August 2, 1997 snapshot of the GCC 2.8
+- development sources; it contains nearly all of the new features found
+- in GCC 2.8.
+-
+- EGCS also contains many improvements and features not found in GCC 2.7
+- and even the soon to be released GCC 2.8 compilers.
+- * Integrated C++ runtime libraries, including support for most major
+- linux systems!
+- * The integrated libstdc++ library includes a verbatim copy of
+- [1]SGI's STL release.
+- * Integrated GNU Fortran compiler
+- * New instruction scheduler
+- * New alias analysis code
+-
+- See the [2]new features page for a more complete list of new features
+- found in EGCS 1.0.x releases.
+-
+- The EGCS 1.0.1 release includes installation instructions in both HTML
+- and plaintext forms (see the INSTALL directory in the toplevel
+- directory of the EGCS 1.0.1 distribution). However, we also keep the
+- most up to date [3]installation instructions and [4]build/test status
+- on our web page. We will update those pages as new information becomes
+- available.
+-
+- And, we can't in good conscience fail to mention some [5]caveats to
+- using EGCS.
+-
+- Update: Big thanks to Stanford for providing a high speed link for
+- downloading EGCS (go.cygnus.com)!
+-
+- [6]Download EGCS 1.0.1 from ftp.cygnus.com (USA California)
+-
+- [7]Download EGCS 1.0.1 from go.cygnus.com (USA California -- High
+- speed link provided by Stanford)
+-
+- The EGCS 1.0.1 release is also available on many mirror sites.
+- [8]Goto mirror list to find a closer site
+-
+- We'd like to thank the numerous people that have contributed new
+- features, test results, bugfixes, etc. Unfortunately, they're far too
+- numerous to mention by name.
+- _________________________________________________________________
+-
+- Last modified on July 28, 1999.
+-
+-References
+-
+- 1. http://www.sgi.com/Technology/STL/
+- 2. http://gcc.gnu.org/egcs-1.0/features.html
+- 3. http://gcc.gnu.org/install/index.html
+- 4. http://gcc.gnu.org/egcs-1.0/buildstat.html
+- 5. http://gcc.gnu.org/egcs-1.0/caveats.html
+- 6. ftp://egcs.cygnus.com/pub/egcs/releases/index.html
+- 7. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 8. http://gcc.gnu.org/mirrors.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.0/egcs-1.0.html
+-
+- EGCS 1.0
+-
+- December 3, 1997
+-
+- We are pleased to announce the release of EGCS 1.0.
+-
+- EGCS is a collaborative effort involving several groups of hackers
+- using an open development model to accelerate development and testing
+- of GNU compilers and runtime libraries.
+-
+- An important goal of EGCS is to allow wide scale testing of
+- experimental features and optimizations; therefore, EGCS contains some
+- features and optimizations which are still under development. However,
+- EGCS has been carefully tested and should be comparable in quality to
+- most GCC releases.
+-
+- EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8
+- development sources; it contains nearly all of the new features found
+- in GCC 2.8.
+-
+- EGCS 1.0 also contains many improvements and features not found in GCC
+- 2.7 and even the soon to be released GCC 2.8 compilers.
+- * Integrated C++ runtime libraries, including support for most major
+- linux systems!
+- * The integrated libstdc++ library includes a verbatim copy of
+- [1]SGI's STL release.
+- * Integrated GNU Fortran compiler
+- * New instruction scheduler
+- * New alias analysis code
+-
+- See the [2]new features page for a more complete list of new features.
+-
+- The EGCS 1.0 release includes installation instructions in both HTML
+- and plaintext forms (see the INSTALL directory in the toplevel
+- directory of the EGCS 1.0 distribution). However, we also keep the
+- most up to date [3]installation instructions and [4]build/test status
+- on our web page. We will update those pages as new information becomes
+- available.
+-
+- And, we can't in good conscience fail to mention some [5]caveats to
+- using EGCS.
+-
+- Update: The T1 into our main California offices has been 100%
+- saturated since shortly after the release. We've added an EGCS 1.0
+- mirror at our Massachusetts office to help share the load. We also
+- encourage folks to use the many mirrors available throughout the
+- world.
+-
+- Update: Big thanks to Stanford for providing a high speed link for
+- downloading EGCS! (go.cygnus.com)
+-
+- [6]Download EGCS 1.0 from ftp.cygnus.com (USA California)
+-
+- [7]Download EGCS 1.0 from go.cygnus.com (USA California -- High speed
+- link provided by Stanford)
+-
+- The EGCS 1.0 release should be available on most mirror sites by now.
+- [8]Goto mirror list to find a closer site
+-
+- We'd like to thank the numerous people that have contributed new
+- features, test results, bugfixes, etc. Unfortunately, they're far too
+- numerous to mention by name.
+- _________________________________________________________________
+-
+- Last modified on July 28, 1999.
+-
+-References
+-
+- 1. http://www.sgi.com/Technology/STL
+- 2. http://gcc.gnu.org/egcs-1.0/features.html
+- 3. http://gcc.gnu.org/install/index.html
+- 4. http://gcc.gnu.org/egcs-1.0/buildstat.html
+- 5. http://gcc.gnu.org/egcs-1.0/caveats.html
+- 6. ftp://egcs.cygnus.com/pub/egcs/releases/index.html
+- 7. ftp://go.cygnus.com/pub/sourceware.cygnus.com/pub/egcs/releases/index.html
+- 8. http://gcc.gnu.org/mirrors.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.0/features.html
+-
+- EGCS 1.0 features
+-
+- * Core compiler is based on the gcc2 development tree from Aug 2,
+- 1997, so we have most of the [1]features found in GCC 2.8.
+- * Integrated GNU Fortran compiler based on g77-0.5.22-19970929.
+- * Vast improvements in the C++ compiler; so many they have [2]page
+- of their own!
+- * Integrated C++ runtime libraries, including support for most major
+- linux systems!
+- * New instruction scheduler from IBM Haifa which includes support
+- for function wide instruction scheduling as well as superscalar
+- scheduling.
+- * Significantly improved alias analysis code.
+- * Improved register allocation for two address machines.
+- * Significant code generation improvements for Fortran code on
+- Alphas
+- * Various optimizations from the g77 project as well as improved
+- loop optimizations.
+- * Dwarf2 debug format support for some targets.
+- * egcs libstdc++ includes the SGI STL implementation without
+- changes.
+- * As a result of these and other changes, egcs libstc++ is not
+- binary compatible with previous releases of libstdc++.
+- * Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The
+- SCO Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0
+- and 1.1), Support for RTEMS on several embedded targets, Support
+- for arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and
+- MN103, NEC V850, Sparclet, Solaris & Linux on PowerPCs, etc.
+- * Integrated testsuites for gcc, g++, g77, libstdc++ and libio.
+- * RS6000/PowerPC ports generate code which can run on all
+- RS6000/PowerPC variants by default.
+- * -mcpu= and -march= switches for the x86 port to allow better
+- control over how the x86 port generates code.
+- * Includes the template repository patch (aka repo patch); note the
+- new template code makes repo obsolete for ELF systems using gnu-ld
+- such as Linux.
+- * Plus the usual assortment of bugfixes and improvements.
+-
+- [3]Return to the egcs home page
+-
+- Last modified: July 28, 1999
+-
+-References
+-
+- 1. http://gcc.gnu.org/egcs-1.0/features-2.8.html
+- 2. http://gcc.gnu.org/egcs-1.0/c++features.html
+- 3. http://gcc.gnu.org/index.html
+-======================================================================
+-http://gcc.gnu.org/egcs-1.0/caveats.html
+-
+- EGCS 1.0 Caveats
+-
+- * EGCS has an integrated libstdc++, but does not have an integrated
+- libg++. Furthermore old libg++ releases will not work with egc; HJ
+- Lu has made a [1]libg++ snapshot available which may work with
+- EGCS.
+- Note most C++ programs only need libstdc++.
+- * Note that using -pedantic or -Wreturn-type can cause an explosion
+- in the amount of memory needed for template-heavy C++ code, such
+- as code that uses STL. Also note that -Wall includes
+- -Wreturn-type, so if you use -Wall you will need to specify
+- -Wno-return-type to turn it off.
+- * Exception handling may not work with shared libraries,
+- particularly on alphas, hppas, and mips based platforms. Exception
+- handling is known to work on x86-linux platforms with shared
+- libraries.
+- * Some versions of the Linux kernel have bugs which prevent them
+- from being compiled or from running when compiled by EGCS. See
+- [2]the FAQ for additional information.
+- * In general, EGCS is more rigorous about rejecting invalid C++ code
+- or deprecated C++ constructs than G++ 2.7. As a result it may be
+- necessary to fix C++ code before it will compile with EGCS.
+- * G++ is also aggressively tracking the C++ standard; as a result
+- code which was previously valid (and thus accepted by other
+- compilers and older versions of G++) may no longer be accepted.
+- * EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS
+- 1.0.x and later releases should work with Red Hat Linux 5.0.
+-
+- [3]Return to the GCC home page
+-
+- Last modified: August 27, 1998
+-
+-References
+-
+- 1. ftp://ftp.yggdrasil.com/private/hjl/libg++-2.8.1.2.tar.gz
+- 2. http://gcc.gnu.org/fom_serv/cache/24.html
+- 3. http://gcc.gnu.org/index.html
+-======================================================================
++Noteworthy changes in GCC after EGCS 1.1.
++-----------------------------------------
++
++Target specific NEWS
++
++ RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403. -mcpu=e603e
++ was added to do -mcpu=603e and -msoft-float.
++
++Noteworthy changes in GCC for EGCS 1.1.
++---------------------------------------
++
++The compiler now implements global common subexpression elimination (gcse) as
++well as global constant/copy propagation. (link to gcse page).
++
++More major improvements have been made to the alias analysis code. A new
++option to allow front-ends to provide alias information to the optimizers
++has also been added (-fstrict-aliasing). -fstrict-aliasing is off by default
++now, but will be enabled by default in the future. (link to alias page)
++
++Major changes continue in the exception handling support. This release
++includes some changes to reduce static overhead for exception handling. It
++also includes some major changes to the setjmp/longjmp based EH mechanism to
++make it less pessimistic. And finally, major infrastructure improvements
++to the dwarf2 EH mechanism have been made to make our EH support extensible.
++
++We have fixed the infamous security problems with temporary files.
++
++The "regmove" optimization pass has been nearly completely rewritten. It now
++uses much more information about the target to determine profitability of
++transformations.
++
++The compiler now recomputes register usage information immediately before
++register allocation. Previously such information was only not kept up to
++date after instruction combination which led to poor register allocation
++choices by our priority based register allocator.
++
++The register reloading phase of the compiler has been improved to better
++optimize spill code. This primarily helps targets which generate lots of
++spills (like the x86 ports and many register poor embedded ports).
++
++A few changes in the heuristics used by the register allocator and scheduler
++have been made which can significantly improve performance for certain
++applications.
++
++The compiler's branch shortening algorithms have been significantly improved
++to work better on targets which align jump targets.
++
++The compiler now supports the "ADDRESSOF" optimization which can significantly
++reduce the overhead for certain inline calls (and inline calls in general).
++
++The compiler now supports a code size optimization switch (-Os). When enabled
++the compiler will prefer optimizations which improve code size over those
++which improve code speed.
++
++The compiler has been improved to completely eliminate library calls which
++compute constant values. This is particularly useful on machines which
++do not have integer mul/div or floating point support on-chip.
++
++GCC now supports a "--help" option to print detailed help information.
++
++cpplib has been greatly improved. It is probably useable for some sites now
++(major missing feature is trigraphs).
++
++Memory footprint for the compiler has been significantly reduced for certain
++pathalogical cases.
++
++Build time improvements for targets which support lots of sched parameters
++(alpha and mips primarily).
++
++Compile time for certain programs using large constant initializers has been
++improved (effects glibc significantly).
++
++Plus an incredible number of infrastructure changes, warning fixes, bugfixes
++and local optimizations.
++
++Various improvements have been made to better support cross compilations. They
++are still not easy, but they are improving.
++
++Target specific NEWS
++
++ Sparc: Now includes V8 plus and V9 support, lots of tuning for Ultrasparcs
++ and uses the Haifa scheduler by default.
++
++ Alpha: EV6 tuned, optimized expansion of memcpy/bzero.
++
++ x86: Data in the static store is aligned per Intel recommendations. Jump
++ targets are aligned per Intel recommendations. Improved epilogue
++ sequences for Pentium chips. Backend improvements which should help
++ register allocation on all x86 variants. Support for PPro conditional
++ move instructions has been fixed and enabled. Random changes
++ throughout the port to make generated code more Pentium friendly.
++ Improved support for 64bit integer operations.
++ Unixware 7, a System V Release 5 target is now supported.
++ SCO OpenServer targets can support GAS. See gcc/INSTALL for details.
++
++ RS6000/PowerPC: Includes AIX4.3 support as well as PowerPC64 support.
++ Haifa instruction scheduling is enabled by default now.
++
++ MIPS: Multiply/Multiply-Add support has been largely rewritten to generate
++ more efficient code. Includes mips16 support.
++
++ M68K: Various micro-optimizations and Coldfire fixes.
++
++ M32r: Major improvements to this port.
++
++ Arm: Includes Thumb and super interworking support.
++
++EGCS includes all gcc2 changes up to and including the June 9, 1998 snapshot.
++
++
++Noteworthy changes in GCC version 2.8.1
++---------------------------------------
++
++Numerous bugs have been fixed and some minor performance
++improvements (compilation speed) have been made.
++
++Noteworthy changes in GCC version 2.8.0
++---------------------------------------
++
++A major change in this release is the addition of a framework for
++exception handling, currently used by C++. Many internal changes and
++optimization improvements have been made. These increase the
++maintainability and portability of GCC. GCC now uses autoconf to
++compute many host parameters.
++
++The following lists changes that add new features or targets.
++
++See cp/NEWS for new features of C++ in this release.
++
++New tools and features:
++
++ The Dwarf 2 debugging information format is supported on ELF systems, and
++ is the default for -ggdb where available. It can also be used for C++.
++ The Dwarf version 1 debugging format is also permitted for C++, but
++ does not work well.
++
++ gcov.c is provided for test coverage analysis and branch profiling
++ analysis is also supported; see -fprofile-arcs, -ftest-coverage,
++ and -fbranch-probabilities.
++
++ Support for the Checker memory checking tool.
++
++ New switch, -fstack-check, to check for stack overflow on systems that
++ don't have such built into their ABI.
++
++ New switches, -Wundef and -Wno-undef to warn if an undefined identifier
++ is evaluated in an #if directive.
++
++ Options -Wall and -Wimplicit now cause GCC to warn about implicit int
++ in declarations (e.g. `register i;'), since the C Standard committee
++ has decided to disallow this in the next revision of the standard;
++ -Wimplicit-function-declarations and -Wimplicit-int are subsets of
++ this.
++
++ Option -Wsign-compare causes GCC to warn about comparison of signed and
++ unsigned values.
++
++ Add -dI option of cccp for cxref.
++
++New features in configuration, installation and specs file handling:
++
++ New option --enable-c-cpplib to configure script.
++
++ You can use --with-cpu on the configure command to specify the default
++ CPU that GCC should generate code for.
++
++ The -specs=file switch allows you to override default specs used in
++ invoking programs like cc1, as, etc.
++
++ Allow including one specs file from another and renaming a specs
++ variable.
++
++ You can now relocate all GCC files with a single environment variable
++ or a registry entry under Windows 95 and Windows NT.
++
++Changes in Objective-C:
++
++ The Objective-C Runtime Library has been made thread-safe.
++
++ The Objective-C Runtime Library contains an interface for creating
++ mutexes, condition mutexes, and threads; it requires a back-end
++ implementation for the specific platform and/or thread package.
++ Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads,
++ Solaris, and Windows32. The --enable-threads parameter can be used
++ when configuring GCC to enable and select a thread back-end.
++
++ Objective-C is now configured as separate front-end language to GCC,
++ making it more convenient to conditionally build it.
++
++ The internal structures of the Objective-C Runtime Library have
++ changed sufficiently to warrant a new version number; now version 8.
++ Programs compiled with an older version must be recompiled.
++
++ The Objective-C Runtime Library can be built as a DLL on Windows 95
++ and Windows NT systems.
++
++ The Objective-C Runtime Library implements +load.
++
++The following new targets are supported (see also list under each
++individual CPU below):
++
++ Embedded target m32r-elf.
++ Embedded Hitachi Super-H using ELF.
++ RTEMS real-time system on various CPU targets.
++ ARC processor.
++ NEC V850 processor.
++ Matsushita MN10200 processor.
++ Matsushita MN10300 processor.
++ Sparc and PowerPC running on VxWorks.
++ Support both glibc versions 1 and 2 on Linux-based GNU systems.
++
++New features for DEC Alpha systems:
++
++ Allow detailed specification of IEEE fp support:
++ -mieee, -mieee-with-inexact, and -mieee-conformant
++ -mfp-trap-mode=xxx, -mfp-round-mode=xxx, -mtrap-precision=xxx
++ -mcpu=xxx for CPU selection
++ Support scheduling parameters for EV5.
++ Add support for BWX, CIX, and MAX instruction set extensions.
++ Support Linux-based GNU systems.
++ Support VMS.
++
++Additional supported processors and systems for MIPS targets:
++
++ MIPS4 instruction set.
++ R4100, R4300 and R5000 processors.
++ N32 and N64 ABI.
++ IRIX 6.2.
++ SNI SINIX.
++
++New features for Intel x86 family:
++
++ Add scheduling parameters for Pentium and Pentium Pro.
++ Support stabs on Solaris-x86.
++ Intel x86 processors running the SCO OpenServer 5 family.
++ Intel x86 processors running DG/UX.
++ Intel x86 using Cygwin32 or Mingw32 on Windows 95 and Windows NT.
++
++New features for Motorola 68k family:
++
++ Support for 68060 processor.
++ More consistent switches to specify processor.
++ Motorola 68k family running AUX.
++ 68040 running pSOS, ELF object files, DBX debugging.
++ Coldfire variant of Motorola m68k family.
++
++New features for the HP PA RISC:
++
++ -mspace and -mno-space
++ -mlong-load-store and -mno-long-load-store
++ -mbig-switch -mno-big-switch
++
++ GCC on the PA requires either gas-2.7 or the HP assembler; for best
++ results using GAS is highly recommended. GAS is required for -g and
++ exception handling support.
++
++New features for SPARC-based systems:
++
++ The ultrasparc cpu.
++ The sparclet cpu, supporting only a.out file format.
++ Sparc running SunOS 4 with the GNU assembler.
++ Sparc running the Linux-based GNU system.
++ Embedded Sparc processors running the ELF object file format.
++ -mcpu=xxx
++ -mtune=xxx
++ -malign-loops=xxx
++ -malign-jumps=xxx
++ -malign-functions=xxx
++ -mimpure-text and -mno-impure-text
++
++ Options -mno-v8 and -mno-sparclite are no longer supported on SPARC
++ targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930,
++ and -mf934 are deprecated and will be deleted in GCC 2.9. Use
++ -mcpu=xxx instead.
++
++New features for rs6000 and PowerPC systems:
++
++ Solaris 2.51 running on PowerPC's.
++ The Linux-based GNU system running on PowerPC's.
++ -mcpu=604e,602,603e,620,801,823,mpc505,821,860,power2
++ -mtune=xxx
++ -mrelocatable-lib, -mno-relocatable-lib
++ -msim, -mmve, -memb
++ -mupdate, -mno-update
++ -mfused-madd, -mno-fused-madd
++
++ -mregnames
++ -meabi
++ -mcall-linux, -mcall-solaris, -mcall-sysv-eabi, -mcall-sysv-noeabi
++ -msdata, -msdata=none, -msdata=default, -msdata=sysv, -msdata=eabi
++ -memb, -msim, -mmvme
++ -myellowknife, -mads
++ wchar_t is now of type long as per the ABI, not unsigned short.
++ -p/-pg support
++ -mcpu=403 now implies -mstrict-align.
++ Implement System V profiling.
++
++ Aix 4.1 GCC targets now default to -mcpu=common so that programs
++ compiled can be moved between rs6000 and powerpc based systems. A
++ consequence of this is that -static won't work, and that some programs
++ may be slightly slower.
++
++ You can select the default value to use for -mcpu=xxx on rs6000 and
++ powerpc targets by using the --with-cpu=xxx option when configuring the
++ compiler. In addition, a new options, -mtune=xxx was added that
++ selects the machine to schedule for but does not select the
++ architecture level.
++
++ Directory names used for storing the multilib libraries on System V
++ and embedded PowerPC systems have been shortened to work with commands
++ like tar that have fixed limits on pathname size.
++
++New features for the Hitachi H8/300(H):
++
++ -malign-300
++ -ms (for the Hitachi H8/S processor)
++ -mint32
++
++New features for the ARM:
++
++ -march=xxx, -mtune=xxx, -mcpu=xxx
++ Support interworking with Thumb code.
++ ARM processor with a.out object format, COFF, or AOF assembler.
++ ARM on "semi-hosted" platform.
++ ARM running NetBSD.
++ ARM running the Linux-based GNU system.
++
++New feature for Solaris systems:
++
++ GCC installation no longer makes a copy of system include files,
++ thus insulating GCC better from updates to the operating system.
++
++
++Noteworthy changes in GCC version 2.7.2
++---------------------------------------
++
++A few bugs have been fixed (most notably the generation of an
++invalid assembler opcode on some RS/6000 systems).
++
++Noteworthy changes in GCC version 2.7.1
++---------------------------------------
++
++This release fixes numerous bugs (mostly minor) in GCC 2.7.0, but
++also contains a few new features, mostly related to specific targets.
++
++Major changes have been made in code to support Windows NT.
++
++The following new targets are supported:
++
++ 2.9 BSD on PDP-11
++ Linux on m68k
++ HP/UX version 10 on HP PA RISC (treated like version 9)
++ DEC Alpha running Windows NT
++
++When parsing C, GCC now recognizes C++ style `//' comments unless you
++specify `-ansi' or `-traditional'.
++
++The PowerPC System V targets (powerpc-*-sysv, powerpc-*-eabi) now use the
++calling sequence specified in the System V Application Binary Interface
++Processor Supplement (PowerPC Processor ABI Supplement) rather than the calling
++sequence used in GCC version 2.7.0. That calling sequence was based on the AIX
++calling sequence without function descriptors. To compile code for that older
++calling sequence, either configure the compiler for powerpc-*-eabiaix or use
++the -mcall-aix switch when compiling and linking.
++
++Noteworthy changes in GCC version 2.7.0
++---------------------------------------
++
++GCC now works better on systems that use ".obj" and ".exe" instead of
++".o" and no extension. This involved changes to the driver program,
++gcc.c, to convert ".o" names to ".obj" and to GCC's Makefile to use
++".obj" and ".exe" in filenames that are not targets. In order to
++build GCC on such systems, you may need versions of GNU make and/or
++compatible shells. At this point, this support is preliminary.
++
++Object file extensions of ".obj" and executable file extensions of
++".exe" are allowed when using appropriate version of GNU Make.
++
++Numerous enhancements were made to the __attribute__ facility including
++more attributes and more places that support it. We now support the
++"packed", "nocommon", "noreturn", "volatile", "const", "unused",
++"transparent_union", "constructor", "destructor", "mode", "section",
++"align", "format", "weak", and "alias" attributes. Each of these
++names may also be specified with added underscores, e.g., "__packed__".
++__attribute__ may now be applied to parameter definitions, function
++definitions, and structure, enum, and union definitions.
++
++GCC now supports returning more structures in registers, as specified by
++many calling sequences (ABIs), such as on the HP PA RISC.
++
++A new option '-fpack-struct' was added to automatically pack all structure
++members together without holes.
++
++There is a new library (cpplib) and program (cppmain) that at some
++point will replace cpp (aka cccp). To use cppmain as cpp now, pass
++the option CCCP=cppmain to make. The library is already used by the
++fix-header program, which should speed up the fixproto script.
++
++New options for supported targets:
++
++ GNU on many targets.
++ NetBSD on MIPS, m68k, VAX, and x86.
++ LynxOS on x86, m68k, Sparc, and RS/6000.
++ VxWorks on many targets.
++
++ Windows/NT on x86 architecture. Initial support for Windows/NT on Alpha
++ (not fully working).
++
++ Many embedded targets, specifically UDI on a29k, aout, coff, elf,
++ and vsta "operating systems" on m68k, m88k, mips, sparc, and x86.
++
++Additional support for x86 (i386, i486, and Pentium):
++
++ Work with old and new linkers for Linux-based GNU systems,
++ supporting both a.out and ELF.
++ FreeBSD on x86.
++ Stdcall convention.
++ -malign-double, -mregparm=, -malign-loops= and -malign-jumps= switches.
++ On ISC systems, support -Xp like -posix.
++
++Additions for RS/6000:
++
++ Instruction scheduling information for PowerPC 403.
++ AIX 4.1 on PowerPC.
++ -mstring and -mno-string.
++ -msoft-float and floating-point emulation included.
++ Preliminary support for PowerPC System V.4 with or without the GNU as.
++ Preliminary support for EABI.
++ Preliminary support for 64-bit systems.
++ Both big and little endian systems.
++
++New features for MIPS-based systems:
++
++ r4650.
++ mips4 and R8000.
++ Irix 6.0.
++ 64-bit ABI.
++ Allow dollar signs in labels on SGI/Irix 5.x.
++
++New support for HP PA RISC:
++
++ Generation of PIC (requires binutils-2.5.2.u6 or later).
++ HP-UX version 9 on HP PA RISC (dynamically links even with -g).
++ Processor variants for HP PA RISC: 700, 7100, and 7100LC.
++ Automatic generation of long calls when needed.
++ -mfast-indirect-calls for kernels and static binaries.
++
++ The called routine now copies arguments passed by invisible reference,
++ as required by the calling standard.
++
++Other new miscellaneous target-specific support:
++
++ -mno-multm on a29k.
++ -mold-align for i960.
++ Configuration for "semi-hosted" ARM.
++ -momit-leaf-frame-pointer for M88k.
++ SH3 variant of Hitachi Super-H and support both big and little endian.
++
++Changes to Objective-C:
++
++ Bare-bones implementation of NXConstantString has been added,
++ which is invoked by the @"string" directive.
++
++ Class * has been changed to Class to conform to the NextSTEP and
++ OpenStep runtime.
++
++ Enhancements to make dynamic loading easier.
++
++ The module version number has been updated to Version 7, thus existing
++ code will need to be recompiled to use the current run-time library.
++
++GCC now supports the ISO Normative Addendum 1 to the C Standard.
++As a result:
++
++ The header <iso646.h> defines macros for C programs written
++ in national variants of ISO 646.
++
++ The following digraph tokens are supported:
++ <: :> <% %> %: %:%:
++ These behave like the following, respectively:
++ [ ] { } # ##
++
++ Digraph tokens are supported unless you specify the `-traditional'
++ option; you do not need to specify `-ansi' or `-trigraphs'. Except
++ for contrived and unlikely examples involving preprocessor
++ stringizing, digraph interpretation doesn't change the meaning of
++ programs; this is unlike trigraph interpretation, which changes the
++ meanings of relatively common strings.
++
++ The macro __STDC_VERSION__ has the value 199409L.
++
++ As usual, for full conformance to the standard, you also need a
++ C library that conforms.
++
++The following lists changes that have been made to g++. If some
++features mentioned below sound unfamiliar, you will probably want to
++look at the recently-released public review copy of the C++ Working
++Paper. For PostScript and PDF (Adobe Acrobat) versions, see the
++archive at ftp://research.att.com/dist/stdc++/WP. For HTML and ASCII
++versions, see ftp://ftp.cygnus.com/pub/g++. On the web, see
++http://www.cygnus.com/~mrs/wp-draft.
++
++The scope of variables declared in the for-init-statement has been changed
++to conform to http://www.cygnus.com/~mrs/wp-draft/stmt.html#stmt.for; as a
++result, packages such as groff 1.09 will not compile unless you specify the
++-fno-for-scope flag. PLEASE DO NOT REPORT THIS AS A BUG; this is a change
++mandated by the C++ standardization committee.
++
++Binary incompatibilities:
++
++ The builtin 'bool' type is now the size of a machine word on RISC targets,
++ for code efficiency; it remains one byte long on CISC targets.
++
++ Code that does not use #pragma interface/implementation will most
++ likely shrink dramatically, as g++ now only emits the vtable for a
++ class in the translation unit where its first non-inline, non-abstract
++ virtual function is defined.
++
++ Classes that do not define the copy constructor will sometimes be
++ passed and returned in registers. This may illuminate latent bugs in
++ your code.
++
++Support for automatic template instantiation has *NOT* been added, due
++to a disagreement over design philosophies.
++
++Support for exception handling has been improved; more targets are now
++supported, and throws will use the RTTI mechanism to match against the
++catch parameter type. Optimization is NOT SUPPORTED with
++-fhandle-exceptions; no need to report this as a bug.
++
++Support for Run-Time Type Identification has been added with -frtti.
++This support is still in alpha; one major restriction is that any file
++compiled with -frtti must include <typeinfo.h>.
++
++Preliminary support for namespaces has been added. This support is far
++from complete, and probably not useful.
++
++Synthesis of compiler-generated constructors, destructors and
++assignment operators is now deferred until the functions are used.
++
++The parsing of expressions such as `a ? b : c = 1' has changed from
++`(a ? b : c) = 1' to `a : b ? (c = 1)'.
++
++The code generated for testing conditions, especially those using ||
++and &&, is now more efficient.
++
++The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
++or, or_eq, xor and xor_eq are now supported. Use -ansi or
++-foperator-names to enable them.
++
++The 'explicit' keyword is now supported. 'explicit' is used to mark
++constructors and type conversion operators that should not be used
++implicitly.
++
++g++ now accepts the typename keyword, though it currently has no
++semantics; it can be a no-op in the current template implementation.
++You may want to start using it in your code, however, since the
++pending rewrite of the template implementation to compile STL properly
++(perhaps for 2.8.0, perhaps not) will require you to use it as
++indicated by the current draft.
++
++Handling of user-defined type conversion has been overhauled so that
++type conversion operators are now found and used properly in
++expressions and function calls.
++
++-fno-strict-prototype now only applies to function declarations with
++"C" linkage.
++
++g++ now warns about 'if (x=0)' with -Wparentheses or -Wall.
++
++#pragma weak and #pragma pack are supported on System V R4 targets, as
++are various other target-specific #pragmas supported by gcc.
++
++new and delete of const types is now allowed (with no additional
++semantics).
++
++Explicit instantiation of template methods is now supported. Also,
++'inline template class foo<int>;' can be used to emit only the vtable
++for a template class.
++
++With -fcheck-new, g++ will check the return value of all calls to
++operator new, and not attempt to modify a returned null pointer.
++
++The template instantiation code now handles more conversions when
++passing to a parameter that does not depend on template arguments.
++This means that code like 'string s; cout << s;' now works.
++
++Invalid jumps in a switch statement past declarations that require
++initializations are now caught.
++
++Functions declared 'extern inline' now have the same linkage semantics
++as inline member functions. On supported targets, where previously
++these functions (and vtables, and template instantiations) would have
++been defined statically, they will now be defined as weak symbols so
++that only one out-of-line definition is used.
++
++collect2 now demangles linker output, and c++filt has become part of
++the gcc distribution.
++
++Noteworthy changes in GCC version 2.6.3:
++
++A few more bugs have been fixed.
++
++Noteworthy changes in GCC version 2.6.2:
++
++A few bugs have been fixed.
++
++Names of attributes can now be preceded and followed by double underscores.
++
++Noteworthy changes in GCC version 2.6.1:
++
++Numerous (mostly minor) bugs have been fixed.
++
++The following new configurations are supported:
++
++ GNU on x86 (instead of treating it like MACH)
++ NetBSD on Sparc and Motorola 68k
++ AIX 4.1 on RS/6000 and PowerPC systems
++ Sequent DYNIX/ptx 1.x and 2.x.
++ Both COFF and ELF configurations on AViiON without using /bin/gcc
++ Windows/NT on x86 architecture; preliminary
++ AT&T DSP1610 digital signal processor chips
++ i960 systems on bare boards using COFF
++ PDP11; target only and not extensively tested
++
++The -pg option is now supported for Alpha under OSF/1 V3.0 or later.
++
++Files with an extension of ".c++" are treated as C++ code.
++
++The -Xlinker and -Wl arguments are now passed to the linker in the
++position they were specified on the command line. This makes it
++possible, for example, to pass flags to the linker about specific
++object files.
++
++The use of positional arguments to the configure script is no longer
++recommended. Use --target= to specify the target; see the GCC manual.
++
++The 386 now supports two new switches: -mreg-alloc=<string> changes
++the default register allocation order used by the compiler, and
++-mno-wide-multiply disables the use of the mul/imul instructions that
++produce 64 bit results in EAX:EDX from 32 bit operands to do long long
++multiplies and 32-bit division by constants.
++
++Noteworthy changes in GCC version 2.6.0:
++
++Numerous bugs have been fixed, in the C and C++ front-ends, as
++well as in the common compiler code.
++
++This release includes the C, Objective-C, and C++ compilers. However,
++we have moved the files for the C++ compiler (G++) files to a
++subdirectory, cp. Subsequent releases of GCC will split these files
++to a separate TAR file.
++
++The G++ team has been tracking the development of the ANSI standard for C++.
++Here are some new features added from the latest working paper:
++
++ * built-in boolean type 'bool', with constants 'true' and 'false'.
++ * array new and delete (operator new [] and delete []).
++ * WP-conforming lifetime of temporaries.
++ * explicit instantiation of templates (template class A<int>;),
++ along with an option (-fno-implicit-templates) to disable emission
++ of implicitly instantiated templates, obsoletes -fexternal-templates.
++ * static member constants (static const int foo = 4; within the
++ class declaration).
++
++Many error messages have been improved to tell the user more about the
++problem. Conformance checking with -pedantic-errors has been
++improved. G++ now compiles Fresco.
++
++There is now an experimental implementation of virtual functions using
++thunks instead of Cfront-style vtables, enabled with -fvtable-thunks.
++This option also enables a heuristic which causes the compiler to only
++emit the vtable in the translation unit where its first non-inline
++virtual function is defined; using this option and
++-fno-implicit-templates, users should be able to avoid #pragma
++interface/implementation altogether.
++
++Signatures have been added as a GNU C++ extension. Using the option
++-fhandle-signatures, users are able to turn on recognition of
++signatures. A short introduction on signatures is in the section
++`Extension to the C++ Language' in the manual.
++
++The `g++' program is now a C program, rather than a shell script.
++
++Lots and lots and lots of bugs fixes, in nested types, access control,
++pointers to member functions, the parser, templates, overload
++resolution, etc, etc.
++
++There have been two major enhancements to the Objective-C compiler:
++
++1) Added portability. It now runs on Alpha, and some problems with
++ message forwarding have been addressed on other platforms.
++
++2) Selectors have been redefined to be pointers to structs like:
++ { void *sel_id, char *sel_types }, where the sel_id is the unique
++ identifier, the selector itself is no longer unique.
++
++ Programmers should use the new function sel_eq to test selector
++ equivalence.
++
++The following major changes have been made to the base compiler and
++machine-specific files.
++
++- The MIL-STD-1750A is a new port, but still preliminary.
++
++- The h8/300h is now supported; both the h8/300 and h8/300h ports come
++ with 32 bit IEEE 754 software floating point support.
++
++- The 64-bit Sparc (v9) and 64-bit MIPS chips are supported.
++
++- NetBSD is supported on m68k, Intel x86, and pc523 systems and FreeBSD
++ on x86.
++
++- COFF is supported on x86, m68k, and Sparc systems running LynxOS.
++
++- 68K systems from Bull and Concurrent are supported and System V
++ Release 4 is supported on the Atari.
++
++- GCC supports GAS on the Motorola 3300 (sysV68) and debugging
++ (assuming GAS) on the Plexus 68K system. (However, GAS does not yet
++ work on those systems).
++
++- System V Release 4 is supported on MIPS (Tandem).
++
++- For DG/UX, an ELF configuration is now supported, and both the ELF
++ and BCS configurations support ELF and COFF object file formats.
++
++- OSF/1 V2.0 is supported on Alpha.
++
++- Function profiling is also supported on Alpha.
++
++- GAS and GDB is supported for Irix 5 (MIPS).
++
++- "common mode" (code that will run on both POWER and PowerPC
++ architectures) is now supported for the RS/6000 family; the
++ compiler knows about more PPC chips.
++
++- Both NeXTStep 2.1 and 3 are supported on 68k-based architectures.
++
++- On the AMD 29k, the -msoft-float is now supported, as well as
++ -mno-sum-in-toc for RS/6000, -mapp-regs and -mflat for Sparc, and
++ -membedded-pic for MIPS.
++
++- GCC can now convert division by integer constants into the equivalent
++ multiplication and shift operations when that is faster than the
++ division.
++
++- Two new warning options, -Wbad-function-cast and
++ -Wmissing-declarations have been added.
++
++- Configurations may now add machine-specific __attribute__ options on
++ type; many machines support the `section' attribute.
++
++- The -ffast-math flag permits some optimization that violate strict
++ IEEE rules, such as converting X * 0.0 to 0.0.
++
++Noteworthy changes in GCC version 2.5.8:
++
++This release only fixes a few serious bugs. These include fixes for a
++bug that prevented most programs from working on the RS/6000, a bug
++that caused invalid assembler code for programs with a `switch'
++statement on the NS32K, a G++ problem that caused undefined names in
++some configurations, and several less serious problems, some of which
++can affect most configuration.
++
++Noteworthy change in GCC version 2.5.7:
++
++This release only fixes a few bugs, one of which was causing bootstrap
++compare errors on some systems.
++
++Noteworthy change in GCC version 2.5.6:
++
++A few backend bugs have been fixed, some of which only occur on one
++machine.
++
++The C++ compiler in 2.5.6 includes:
++
++ * fixes for some common crashes
++ * correct handling of nested types that are referenced as `foo::bar'
++ * spurious warnings about friends being declared static and never
++ defined should no longer appear
++ * enums that are local to a method in a class, or a class that's
++ local to a function, are now handled correctly. For example:
++ class foo { void bar () { enum { x, y } E; x; } };
++ void bar () { class foo { enum { x, y } E; E baz; }; }
++
++Noteworthy change in GCC version 2.5.5:
++
++A large number of C++ bugs have been fixed.
++
++The fixproto script adds prototypes conditionally on __cplusplus.
++
++Noteworthy change in GCC version 2.5.4:
++
++A bug fix in passing of structure arguments for the HP-PA architecture
++makes code compiled with GCC 2.5.4 incompatible with code compiled
++with earlier versions (if it passes struct arguments of 33 to 64 bits,
++interspersed with other types of arguments).
++
++Noteworthy change in gcc version 2.5.3:
++
++The method of "mangling" C++ function names has been changed. So you
++must recompile all C++ programs completely when you start using GCC
++2.5. Also, GCC 2.5 requires libg++ version 2.5. Earlier libg++
++versions won't work with GCC 2.5. (This is generally true--GCC
++version M.N requires libg++ version M.N.)
++
++Noteworthy GCC changes in version 2.5:
++
++* There is now support for the IBM 370 architecture as a target.
++Currently the only operating system supported is MVS; GCC does not run
++on MVS, so you must produce .s files using GCC as a cross compiler,
++then transfer them to MVS to assemble them. This port is not reliable
++yet.
++
++* The Power PC is now supported.
++
++* The i860-based Paragon machine is now supported.
++
++* The Hitachi 3050 (an HP-PA machine) is now supported.
++
++* The variable __GNUC_MINOR__ holds the minor version number of GCC, as
++an integer. For version 2.5.X, the value is 5.
++
++* In C, initializers for static and global variables are now processed
++an element at a time, so that they don't need a lot of storage.
++
++* The C syntax for specifying which structure field comes next in an
++initializer is now `.FIELDNAME='. The corresponding syntax for
++array initializers is now `[INDEX]='. For example,
++
++ char whitespace[256]
++ = { [' '] = 1, ['\t'] = 1, ['\n'] = 1 };
++
++This was changed to accord with the syntax proposed by the Numerical
++C Extensions Group (NCEG).
++
++* Complex numbers are now supported in C. Use the keyword __complex__
++to declare complex data types. See the manual for details.
++
++* GCC now supports `long double' meaningfully on the Sparc (128-bit
++floating point) and on the 386 (96-bit floating point). The Sparc
++support is enabled on Solaris 2.x because earlier system versions
++(SunOS 4) have bugs in the emulation.
++
++* All targets now have assertions for cpu, machine and system. So you
++can now use assertions to distinguish among all supported targets.
++
++* Nested functions in C may now be inline. Just declare them inline
++in the usual way.
++
++* Packed structure members are now supported fully; it should be possible
++to access them on any supported target, no matter how little alignment
++they have.
++
++* To declare that a function does not return, you must now write
++something like this (works only in 2.5):
++
++ void fatal () __attribute__ ((noreturn));
++
++or like this (works in older versions too):
++
++ typedef void voidfn ();
++
++ volatile voidfn fatal;
++
++It used to be possible to do so by writing this:
++
++ volatile void fatal ();
++
++but it turns out that ANSI C requires that to mean something
++else (which is useless).
++
++Likewise, to declare that a function is side-effect-free
++so that calls may be deleted or combined, write
++something like this (works only in 2.5):
++
++ int computation () __attribute__ ((const));
++
++or like this (works in older versions too):
++
++ typedef int intfn ();
++
++ const intfn computation;
++
++* The new option -iwithprefixbefore specifies a directory to add to
++the search path for include files in the same position where -I would
++put it, but uses the specified prefix just like -iwithprefix.
++
++* Basic block profiling has been enhanced to record the function the
++basic block comes from, and if the module was compiled for debugging,
++the line number and filename. A default version of the basic block
++support module has been added to libgcc2 that appends the basic block
++information to a text file 'bb.out'. Machine descriptions can now
++override the basic block support module in the target macro file.
++
++New features in g++:
++
++* The new flag `-fansi-overloading' for C++. Use a newly implemented
++scheme of argument matching for C++. It makes g++ more accurately
++obey the rules set down in Chapter 13 of the Annotated C++ Reference
++Manual (the ARM). This option will be turned on by default in a
++future release.
++
++* The -finline-debug flag is now gone (it was never really used by the
++ compiler).
++
++* Recognizing the syntax for pointers to members, e.g., "foo::*bar", has been
++ dramatically improved. You should not get any syntax errors or incorrect
++ runtime results while using pointers to members correctly; if you do, it's
++ a definite bug.
++
++* Forward declaration of an enum is now flagged as an error.
++
++* Class-local typedefs are now working properly.
++
++* Nested class support has been significantly improved. The compiler
++ will now (in theory) support up to 240 nested classes before hitting
++ other system limits (like memory size).
++
++* There is a new C version of the `g++' driver, to replace the old
++ shell script. This should significantly improve the performance of
++ executing g++ on a system where a user's PATH environment variable
++ references many NFS-mounted filesystems. This driver also works
++ under MS-DOS and OS/2.
++
++* The ANSI committee working on the C++ standard has adopted a new
++ keyword `mutable'. This will allow you to make a specific member be
++ modifiable in an otherwise const class.
++
++Noteworthy GCC changes in version 2.4.4:
++
++ A crash building g++ on various hosts (including m68k) has been
++ fixed. Also the g++ compiler no longer reports incorrect
++ ambiguities in some situations where they do not exist, and
++ const template member functions are now being found properly.
++
++Noteworthy GCC changes in version 2.4:
++
++* On each target, the default is now to return short structures
++compatibly with the "usual" compiler on that target.
++
++For most targets, this means the default is to return all structures
++in memory, like long structures, in whatever way is used on that
++target. Use -freg-struct-return to enable returning short structures
++(and unions) in registers.
++
++This change means that newly compiled binaries are incompatible with
++binaries compiled with previous versions of GCC.
++
++On some targets, GCC is itself the usual compiler. On these targets,
++the default way to return short structures is still in registers.
++Use -fpcc-struct-return to tell GCC to return them in memory.
++
++* There is now a floating point emulator which can imitate the way all
++supported target machines do floating point arithmetic.
++
++This makes it possible to have cross compilation to and from the VAX,
++and between machines of different endianness. However, this works
++only when the target machine description is updated to use the new
++facilities, and not all have been updated.
++
++This also makes possible support for longer floating point types.
++GCC 2.4 supports extended format on the 68K if you use `long double',
++for targets that have a 68881. (When we have run time library
++routines for extended floating point, then `long double' will use
++extended format on all 68K targets.)
++
++We expect to support extended floating point on the i386 and Sparc in
++future versions.
++
++* Building GCC now automatically fixes the system's header files.
++This should require no attention.
++
++* GCC now installs an unsigned data type as size_t when it fixes the
++header files (on all but a handful of old target machines).
++Therefore, the bug that size_t failed to be unsigned is fixed.
++
++* Building and installation are now completely separate.
++All new files are constructed during the build process;
++installation just copies them.
++
++* New targets supported: Clipper, Hitachi SH, Hitachi 8300, and Sparc
++Lite.
++
++* A totally new and much better Objective C run time system is included.
++
++* Objective C supports many new features. Alas, I can't describe them
++since I don't use that language; however, they are the same ones
++supported in recent versions of the NeXT operating system.
++
++* The builtin functions __builtin_apply_args, __builtin_apply and
++__builtin_return let you record the arguments and returned
++value of a function without knowing their number or type.
++
++* The builtin string variables __FUNCTION__ and __PRETTY_FUNCTION__
++give the name of the function in the source, and a pretty-printed
++version of the name. The two are the same in C, but differ in C++.
++
++* Casts to union types do not yield lvalues.
++
++* ## before an empty rest argument discards the preceding sequence
++of non-whitespace characters from the macro definition.
++(This feature is subject to change.)
++
++
++New features specific to C++:
++
++* The manual contains a new section ``Common Misunderstandings with
++GNU C++'' that C++ users should read.
++
++* #pragma interface and #pragma implementation let you use the same
++C++ source file for both interface and implementation.
++However, this mechanism is still in transition.
++
++* Named returned values let you avoid an extra constructor call
++when a function result has a class type.
++
++* The C++ operators <? and >? yield min and max, respectively.
++
++* C++ gotos can exit a block safely even if the block has
++aggregates that require destructors.
++
++* gcc defines the macro __GNUG__ when compiling C++ programs.
++
++* GNU C++ now correctly distinguishes between the prefix and postfix
++forms of overloaded operator ++ and --. To avoid breaking old
++code, if a class defines only the prefix form, the compiler
++accepts either ++obj or obj++, unless -pedantic is used.
++
++* If you are using version 2.3 of libg++, you need to rebuild it with
++`make CC=gcc' to avoid mismatches in the definition of `size_t'.
++
++Newly documented compiler options:
++
++-fnostartfiles
++ Omit the standard system startup files when linking.
++
++-fvolatile-global
++ Consider memory references to extern and global data items to
++ be volatile.
++
++-idirafter DIR
++ Add DIR to the second include path.
++
++-iprefix PREFIX
++ Specify PREFIX for later -iwithprefix options.
++
++-iwithprefix DIR
++ Add PREFIX/DIR to the second include path.
++
++-mv8
++ Emit Sparc v8 code (with integer multiply and divide).
++-msparclite
++ Emit Sparclite code (roughly v7.5).
++
++-print-libgcc-file-name
++ Search for the libgcc.a file, print its absolute file name, and exit.
++
++-Woverloaded-virtual
++ Warn when a derived class function declaration may be an error
++ in defining a C++ virtual function.
++
++-Wtemplate-debugging
++ When using templates in a C++ program, warn if debugging is
++ not yet fully available.
++
+++eN
++ Control how C++ virtual function definitions are used
++ (like cfront 1.x).
++
+diff -ruNb gcc-2.95.3/gcc/objc/objc-parse.c gcc-2.95.4/gcc/objc/objc-parse.c
+--- gcc-2.95.3/gcc/objc/objc-parse.c 2001-03-16 15:13:48.000000000 +0100
++++ gcc-2.95.4/gcc/objc/objc-parse.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,69 +1,68 @@
+
+ /* A Bison parser, made from objc-parse.y
+- by GNU Bison version 1.25
+- */
++ by GNU Bison version 1.28 */
+
+ #define YYBISON 1 /* Identify Bison output. */
+
+-#define IDENTIFIER 258
+-#define TYPENAME 259
+-#define SCSPEC 260
+-#define TYPESPEC 261
+-#define TYPE_QUAL 262
+-#define CONSTANT 263
+-#define STRING 264
+-#define ELLIPSIS 265
+-#define SIZEOF 266
+-#define ENUM 267
+-#define STRUCT 268
+-#define UNION 269
+-#define IF 270
+-#define ELSE 271
+-#define WHILE 272
+-#define DO 273
+-#define FOR 274
+-#define SWITCH 275
+-#define CASE 276
+-#define DEFAULT 277
+-#define BREAK 278
+-#define CONTINUE 279
+-#define RETURN 280
+-#define GOTO 281
+-#define ASM_KEYWORD 282
+-#define TYPEOF 283
+-#define ALIGNOF 284
+-#define ATTRIBUTE 285
+-#define EXTENSION 286
+-#define LABEL 287
+-#define REALPART 288
+-#define IMAGPART 289
+-#define ASSIGN 290
+-#define OROR 291
+-#define ANDAND 292
+-#define EQCOMPARE 293
+-#define ARITHCOMPARE 294
+-#define LSHIFT 295
+-#define RSHIFT 296
+-#define UNARY 297
+-#define PLUSPLUS 298
+-#define MINUSMINUS 299
+-#define HYPERUNARY 300
+-#define POINTSAT 301
+-#define INTERFACE 302
+-#define IMPLEMENTATION 303
+-#define END 304
+-#define SELECTOR 305
+-#define DEFS 306
+-#define ENCODE 307
+-#define CLASSNAME 308
+-#define PUBLIC 309
+-#define PRIVATE 310
+-#define PROTECTED 311
+-#define PROTOCOL 312
+-#define OBJECTNAME 313
+-#define CLASS 314
+-#define ALIAS 315
+-#define OBJC_STRING 316
++#define IDENTIFIER 257
++#define TYPENAME 258
++#define SCSPEC 259
++#define TYPESPEC 260
++#define TYPE_QUAL 261
++#define CONSTANT 262
++#define STRING 263
++#define ELLIPSIS 264
++#define SIZEOF 265
++#define ENUM 266
++#define STRUCT 267
++#define UNION 268
++#define IF 269
++#define ELSE 270
++#define WHILE 271
++#define DO 272
++#define FOR 273
++#define SWITCH 274
++#define CASE 275
++#define DEFAULT 276
++#define BREAK 277
++#define CONTINUE 278
++#define RETURN 279
++#define GOTO 280
++#define ASM_KEYWORD 281
++#define TYPEOF 282
++#define ALIGNOF 283
++#define ATTRIBUTE 284
++#define EXTENSION 285
++#define LABEL 286
++#define REALPART 287
++#define IMAGPART 288
++#define ASSIGN 289
++#define OROR 290
++#define ANDAND 291
++#define EQCOMPARE 292
++#define ARITHCOMPARE 293
++#define LSHIFT 294
++#define RSHIFT 295
++#define UNARY 296
++#define PLUSPLUS 297
++#define MINUSMINUS 298
++#define HYPERUNARY 299
++#define POINTSAT 300
++#define INTERFACE 301
++#define IMPLEMENTATION 302
++#define END 303
++#define SELECTOR 304
++#define DEFS 305
++#define ENCODE 306
++#define CLASSNAME 307
++#define PUBLIC 308
++#define PRIVATE 309
++#define PROTECTED 310
++#define PROTOCOL 311
++#define OBJECTNAME 312
++#define CLASS 313
++#define ALIAS 314
++#define OBJC_STRING 315
+
+ #line 33 "objc-parse.y"
+
+@@ -120,6 +119,17 @@
+ /* 1 if we explained undeclared var errors. */
+ static int undeclared_variable_notice;
+
++/* For __extension__, save/restore the warning flags which are
++ controlled by __extension__. */
++#define SAVE_WARN_FLAGS() \
++ build_int_2 (pedantic | (warn_pointer_arith << 1), 0)
++#define RESTORE_WARN_FLAGS(tval) \
++ do { \
++ int val = TREE_INT_CST_LOW (tval); \
++ pedantic = val & 1; \
++ warn_pointer_arith = (val >> 1) & 1; \
++ } while (0)
++
+ /* Objective-C specific information */
+
+ tree objc_interface_context;
+@@ -150,7 +160,7 @@
+ #define YYFLAG -32768
+ #define YYNTBASE 84
+
+-#define YYTRANSLATE(x) ((unsigned)(x) <= 316 ? yytranslate[x] : 311)
++#define YYTRANSLATE(x) ((unsigned)(x) <= 315 ? yytranslate[x] : 311)
+
+ static const char yytranslate[] = { 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+@@ -178,13 +188,13 @@
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
+- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+- 39, 40, 44, 45, 46, 47, 53, 54, 55, 56,
+- 57, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+- 70, 71, 72, 73, 74, 75
++ 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
++ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
++ 27, 28, 29, 30, 31, 32, 33, 34, 35, 39,
++ 40, 44, 45, 46, 47, 53, 54, 55, 56, 57,
++ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
++ 71, 72, 73, 74, 75
+ };
+
+ #if YYDEBUG != 0
+@@ -431,63 +441,63 @@
+
+ #if YYDEBUG != 0
+ static const short yyrline[] = { 0,
+- 233, 238, 252, 254, 254, 255, 257, 259, 260, 261,
+- 269, 273, 284, 289, 294, 296, 298, 299, 300, 305,
+- 312, 314, 319, 324, 330, 332, 337, 342, 348, 350,
+- 355, 362, 364, 365, 366, 369, 371, 373, 375, 377,
+- 379, 381, 385, 389, 392, 395, 398, 402, 404, 407,
+- 410, 414, 442, 448, 451, 454, 457, 459, 463, 467,
+- 471, 473, 476, 480, 507, 509, 511, 513, 515, 517,
+- 519, 521, 523, 525, 527, 529, 531, 533, 537, 539,
+- 543, 545, 548, 552, 554, 561, 564, 572, 583, 743,
+- 744, 746, 752, 754, 768, 791, 793, 795, 807, 821,
+- 823, 825, 827, 829, 831, 833, 838, 840, 846, 848,
+- 852, 854, 855, 865, 870, 872, 873, 874, 881, 887,
+- 892, 895, 903, 908, 910, 911, 912, 919, 930, 934,
+- 940, 945, 950, 955, 957, 959, 968, 971, 975, 977,
+- 979, 984, 988, 991, 995, 998, 1000, 1012, 1015, 1017,
+- 1019, 1023, 1027, 1029, 1032, 1045, 1048, 1052, 1054, 1062,
+- 1063, 1064, 1068, 1070, 1075, 1077, 1079, 1085, 1086, 1087,
+- 1090, 1092, 1095, 1097, 1100, 1103, 1109, 1116, 1118, 1125,
+- 1132, 1135, 1142, 1145, 1149, 1152, 1156, 1161, 1164, 1168,
+- 1171, 1173, 1175, 1177, 1184, 1186, 1187, 1188, 1193, 1195,
+- 1200, 1208, 1213, 1217, 1220, 1222, 1227, 1229, 1230, 1233,
+- 1233, 1236, 1239, 1241, 1243, 1246, 1248, 1251, 1259, 1270,
+- 1278, 1282, 1293, 1301, 1308, 1310, 1315, 1318, 1323, 1325,
+- 1327, 1334, 1336, 1337, 1345, 1351, 1353, 1355, 1362, 1364,
+- 1370, 1376, 1378, 1380, 1382, 1389, 1391, 1394, 1397, 1401,
+- 1404, 1408, 1411, 1415, 1420, 1422, 1426, 1428, 1430, 1432,
+- 1436, 1438, 1441, 1444, 1447, 1450, 1454, 1456, 1459, 1461,
+- 1466, 1469, 1474, 1476, 1478, 1482, 1506, 1513, 1518, 1524,
+- 1529, 1531, 1536, 1538, 1542, 1546, 1550, 1560, 1562, 1567,
+- 1572, 1575, 1579, 1582, 1586, 1589, 1592, 1595, 1599, 1602,
+- 1606, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1628,
+- 1636, 1644, 1646, 1648, 1652, 1654, 1657, 1660, 1673, 1675,
+- 1680, 1682, 1685, 1699, 1702, 1705, 1707, 1709, 1717, 1725,
+- 1736, 1741, 1744, 1758, 1767, 1771, 1775, 1779, 1785, 1789,
+- 1794, 1797, 1802, 1805, 1806, 1823, 1828, 1831, 1843, 1845,
+- 1855, 1865, 1866, 1874, 1877, 1889, 1893, 1910, 1920, 1929,
+- 1934, 1939, 1944, 1948, 1952, 1963, 1970, 1977, 1984, 1995,
+- 2001, 2004, 2009, 2032, 2066, 2097, 2128, 2143, 2157, 2161,
+- 2165, 2168, 2173, 2175, 2178, 2180, 2184, 2189, 2192, 2198,
+- 2203, 2208, 2210, 2219, 2220, 2226, 2228, 2238, 2240, 2244,
+- 2247, 2253, 2263, 2272, 2281, 2291, 2305, 2310, 2315, 2317,
+- 2326, 2329, 2334, 2337, 2341, 2349, 2351, 2352, 2353, 2354,
+- 2355, 2369, 2372, 2376, 2382, 2388, 2395, 2400, 2406, 2413,
+- 2419, 2425, 2430, 2436, 2443, 2449, 2455, 2461, 2469, 2475,
+- 2481, 2489, 2496, 2502, 2511, 2518, 2526, 2531, 2534, 2544,
+- 2546, 2549, 2551, 2552, 2555, 2560, 2561, 2578, 2585, 2591,
+- 2595, 2598, 2599, 2602, 2610, 2616, 2625, 2635, 2642, 2646,
+- 2651, 2660, 2667, 2671, 2681, 2683, 2684, 2686, 2688, 2689,
+- 2690, 2691, 2693, 2695, 2698, 2706, 2713, 2713, 2720, 2726,
+- 2728, 2734, 2739, 2744, 2753, 2755, 2761, 2763, 2766, 2768,
+- 2769, 2770, 2773, 2779, 2781, 2785, 2788, 2795, 2801, 2806,
+- 2813, 2818, 2823, 2828, 2835, 2839, 2842, 2848, 2850, 2851,
+- 2852, 2855, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864,
+- 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874,
+- 2875, 2875, 2878, 2884, 2889, 2894, 2900, 2902, 2905, 2907,
+- 2914, 2926, 2931, 2937, 2939, 2945, 2949, 2950, 2956, 2958,
+- 2961, 2963, 2969, 2974, 2980, 2987, 2996
++ 244, 249, 263, 265, 265, 266, 268, 270, 271, 272,
++ 280, 284, 295, 300, 305, 307, 309, 310, 311, 316,
++ 323, 325, 330, 335, 341, 343, 348, 353, 359, 361,
++ 366, 373, 375, 376, 377, 380, 382, 384, 386, 388,
++ 390, 392, 396, 400, 403, 406, 409, 413, 415, 418,
++ 421, 425, 453, 459, 462, 465, 468, 470, 474, 478,
++ 482, 484, 487, 491, 518, 520, 522, 524, 526, 528,
++ 530, 532, 534, 536, 538, 540, 542, 544, 548, 550,
++ 554, 556, 559, 563, 565, 572, 575, 583, 594, 754,
++ 755, 757, 763, 765, 779, 802, 804, 806, 818, 832,
++ 834, 836, 838, 840, 842, 844, 849, 851, 857, 859,
++ 863, 865, 866, 876, 881, 883, 884, 885, 892, 898,
++ 903, 906, 914, 919, 921, 922, 923, 930, 941, 945,
++ 951, 956, 961, 966, 968, 970, 979, 982, 986, 988,
++ 990, 995, 999, 1002, 1006, 1009, 1011, 1023, 1026, 1028,
++ 1030, 1034, 1038, 1040, 1043, 1056, 1059, 1063, 1065, 1073,
++ 1074, 1075, 1079, 1081, 1086, 1088, 1090, 1096, 1097, 1098,
++ 1101, 1103, 1106, 1108, 1111, 1114, 1120, 1127, 1129, 1136,
++ 1143, 1146, 1153, 1156, 1160, 1163, 1167, 1172, 1175, 1179,
++ 1182, 1184, 1186, 1188, 1195, 1197, 1198, 1199, 1204, 1206,
++ 1211, 1219, 1224, 1228, 1231, 1233, 1238, 1240, 1241, 1244,
++ 1244, 1247, 1250, 1252, 1254, 1257, 1259, 1262, 1270, 1281,
++ 1289, 1293, 1304, 1312, 1319, 1321, 1326, 1329, 1334, 1336,
++ 1338, 1345, 1347, 1348, 1356, 1362, 1364, 1366, 1373, 1375,
++ 1381, 1387, 1389, 1391, 1393, 1400, 1402, 1405, 1408, 1412,
++ 1415, 1419, 1422, 1426, 1431, 1433, 1437, 1439, 1441, 1443,
++ 1447, 1449, 1452, 1455, 1458, 1461, 1465, 1467, 1470, 1472,
++ 1477, 1480, 1485, 1487, 1489, 1493, 1517, 1524, 1529, 1535,
++ 1540, 1542, 1547, 1549, 1553, 1557, 1561, 1571, 1573, 1578,
++ 1583, 1586, 1590, 1593, 1597, 1600, 1603, 1606, 1610, 1613,
++ 1617, 1621, 1623, 1625, 1627, 1629, 1631, 1633, 1635, 1639,
++ 1647, 1655, 1657, 1659, 1663, 1665, 1668, 1671, 1684, 1686,
++ 1691, 1693, 1696, 1710, 1713, 1716, 1718, 1720, 1728, 1736,
++ 1747, 1752, 1755, 1769, 1778, 1782, 1786, 1790, 1796, 1800,
++ 1805, 1808, 1813, 1816, 1817, 1834, 1839, 1842, 1854, 1856,
++ 1866, 1876, 1877, 1885, 1888, 1900, 1904, 1921, 1931, 1940,
++ 1945, 1950, 1955, 1959, 1963, 1974, 1981, 1988, 1995, 2006,
++ 2012, 2015, 2020, 2043, 2077, 2108, 2139, 2154, 2168, 2172,
++ 2176, 2179, 2184, 2186, 2189, 2191, 2195, 2200, 2203, 2209,
++ 2214, 2219, 2221, 2230, 2231, 2237, 2239, 2249, 2251, 2255,
++ 2258, 2264, 2274, 2283, 2292, 2302, 2316, 2321, 2326, 2328,
++ 2337, 2340, 2345, 2348, 2352, 2361, 2363, 2364, 2365, 2366,
++ 2367, 2381, 2384, 2388, 2394, 2400, 2407, 2412, 2418, 2425,
++ 2431, 2437, 2442, 2448, 2455, 2461, 2467, 2473, 2481, 2487,
++ 2493, 2501, 2508, 2514, 2523, 2530, 2538, 2543, 2546, 2556,
++ 2558, 2561, 2563, 2564, 2567, 2572, 2573, 2590, 2597, 2603,
++ 2607, 2610, 2611, 2614, 2622, 2628, 2637, 2647, 2654, 2658,
++ 2663, 2672, 2679, 2683, 2693, 2695, 2696, 2698, 2700, 2701,
++ 2702, 2703, 2705, 2707, 2710, 2718, 2725, 2725, 2732, 2738,
++ 2740, 2746, 2751, 2756, 2765, 2767, 2773, 2775, 2778, 2780,
++ 2781, 2782, 2785, 2791, 2793, 2797, 2800, 2807, 2813, 2818,
++ 2825, 2830, 2835, 2840, 2847, 2851, 2854, 2860, 2862, 2863,
++ 2864, 2867, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876,
++ 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886,
++ 2887, 2887, 2890, 2896, 2901, 2906, 2912, 2914, 2917, 2919,
++ 2926, 2938, 2943, 2949, 2951, 2957, 2961, 2962, 2968, 2970,
++ 2973, 2975, 2981, 2986, 2992, 2999, 3008
+ };
+ #endif
+
+@@ -1675,6 +1685,7 @@
+ };
+ /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+ #line 3 "/usr/lib/bison.simple"
++/* This file comes from bison-1.28. */
+
+ /* Skeleton output parser for bison,
+ Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+@@ -1691,46 +1702,66 @@
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
++ Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
+
+ /* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+-#ifndef alloca
++/* This is the parser code that is written into each bison parser
++ when the %semantic_parser declaration is not specified in the grammar.
++ It was written by Richard Stallman by simplifying the hairy parser
++ used when %semantic_parser is specified. */
++
++#ifndef YYSTACK_USE_ALLOCA
++#ifdef alloca
++#define YYSTACK_USE_ALLOCA
++#else /* alloca not defined */
+ #ifdef __GNUC__
++#define YYSTACK_USE_ALLOCA
+ #define alloca __builtin_alloca
+ #else /* not GNU C. */
+-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
++#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
++#define YYSTACK_USE_ALLOCA
+ #include <alloca.h>
+ #else /* not sparc */
+-#if defined (MSDOS) && !defined (__TURBOC__)
++/* We think this test detects Watcom and Microsoft C. */
++/* This used to test MSDOS, but that is a bad idea
++ since that symbol is in the user namespace. */
++#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
++#if 0 /* No need for malloc.h, which pollutes the namespace;
++ instead, just don't use alloca. */
+ #include <malloc.h>
++#endif
+ #else /* not MSDOS, or __TURBOC__ */
+ #if defined(_AIX)
+-#include <malloc.h>
++/* I don't know what this was needed for, but it pollutes the namespace.
++ So I turned it off. rms, 2 May 1997. */
++/* #include <malloc.h> */
+ #pragma alloca
+-#else /* not MSDOS, __TURBOC__, or _AIX */
+-#ifdef __hpux
+-#ifdef __cplusplus
+-extern "C" {
+-void *alloca (unsigned int);
+-};
+-#else /* not __cplusplus */
+-void *alloca ();
+-#endif /* not __cplusplus */
++#define YYSTACK_USE_ALLOCA
++#else /* not MSDOS, or __TURBOC__, or _AIX */
++#if 0
++#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
++ and on HPUX 10. Eventually we can turn this on. */
++#define YYSTACK_USE_ALLOCA
++#define alloca __builtin_alloca
+ #endif /* __hpux */
++#endif
+ #endif /* not _AIX */
+ #endif /* not MSDOS, or __TURBOC__ */
+-#endif /* not sparc. */
+-#endif /* not GNU C. */
+-#endif /* alloca not defined. */
++#endif /* not sparc */
++#endif /* not GNU C */
++#endif /* alloca not defined */
++#endif /* YYSTACK_USE_ALLOCA not defined */
+
+-/* This is the parser code that is written into each bison parser
+- when the %semantic_parser declaration is not specified in the grammar.
+- It was written by Richard Stallman by simplifying the hairy parser
+- used when %semantic_parser is specified. */
++#ifdef YYSTACK_USE_ALLOCA
++#define YYSTACK_ALLOC alloca
++#else
++#define YYSTACK_ALLOC malloc
++#endif
+
+ /* Note: there must be only one dollar sign in this file.
+ It is replaced by the list of actions, each action
+@@ -1740,8 +1771,8 @@
+ #define yyclearin (yychar = YYEMPTY)
+ #define YYEMPTY -2
+ #define YYEOF 0
+-#define YYACCEPT return(0)
+-#define YYABORT return(1)
++#define YYACCEPT goto yyacceptlab
++#define YYABORT goto yyabortlab
+ #define YYERROR goto yyerrlab1
+ /* Like YYERROR except do call yyerror.
+ This remains here temporarily to ease the
+@@ -1823,10 +1854,10 @@
+ #define YYMAXDEPTH 10000
+ #endif
+
+-/* Prevent warning if -Wstrict-prototypes. */
+-#ifdef __GNUC__
+-int yyparse (void);
+-#endif
++/* Define __yy_memcpy. Note that the size argument
++ should be passed with type unsigned int, because that is what the non-GCC
++ definitions require. With GCC, __builtin_memcpy takes an arg
++ of type size_t, but it can handle unsigned int. */
+
+ #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
+ #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
+@@ -1839,7 +1870,7 @@
+ __yy_memcpy (to, from, count)
+ char *to;
+ char *from;
+- int count;
++ unsigned int count;
+ {
+ register char *f = from;
+ register char *t = to;
+@@ -1854,10 +1885,10 @@
+ /* This is the most reliable way to avoid incompatibilities
+ in available built-in functions on various systems. */
+ static void
+-__yy_memcpy (char *to, char *from, int count)
++__yy_memcpy (char *to, char *from, unsigned int count)
+ {
+- register char *f = from;
+ register char *t = to;
++ register char *f = from;
+ register int i = count;
+
+ while (i-- > 0)
+@@ -1867,7 +1898,7 @@
+ #endif
+ #endif
+
+-#line 196 "/usr/lib/bison.simple"
++#line 217 "/usr/lib/bison.simple"
+
+ /* The user can define YYPARSE_PARAM as the name of an argument to be passed
+ into yyparse. The argument should have type void *.
+@@ -1888,6 +1919,15 @@
+ #define YYPARSE_PARAM_DECL
+ #endif /* not YYPARSE_PARAM */
+
++/* Prevent warning if -Wstrict-prototypes. */
++#ifdef __GNUC__
++#ifdef YYPARSE_PARAM
++int yyparse (void *);
++#else
++int yyparse (void);
++#endif
++#endif
++
+ int
+ yyparse(YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+@@ -1916,6 +1956,7 @@
+ #endif
+
+ int yystacksize = YYINITDEPTH;
++ int yyfree_stacks = 0;
+
+ #ifdef YYPURE
+ int yychar;
+@@ -2000,18 +2041,32 @@
+ if (yystacksize >= YYMAXDEPTH)
+ {
+ yyerror("parser stack overflow");
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
+ return 2;
+ }
+ yystacksize *= 2;
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+- yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
+- __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
+- yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
+- __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
++#ifndef YYSTACK_USE_ALLOCA
++ yyfree_stacks = 1;
++#endif
++ yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
++ __yy_memcpy ((char *)yyss, (char *)yyss1,
++ size * (unsigned int) sizeof (*yyssp));
++ yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
++ __yy_memcpy ((char *)yyvs, (char *)yyvs1,
++ size * (unsigned int) sizeof (*yyvsp));
+ #ifdef YYLSP_NEEDED
+- yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
+- __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
++ yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
++ __yy_memcpy ((char *)yyls, (char *)yyls1,
++ size * (unsigned int) sizeof (*yylsp));
+ #endif
+ #endif /* no yyoverflow */
+
+@@ -2172,14 +2227,14 @@
+ switch (yyn) {
+
+ case 1:
+-#line 234 "objc-parse.y"
++#line 245 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids an empty source file");
+ finish_file ();
+ ;
+ break;}
+ case 2:
+-#line 239 "objc-parse.y"
++#line 250 "objc-parse.y"
+ {
+ /* In case there were missing closebraces,
+ get us back to the global binding level. */
+@@ -2189,15 +2244,15 @@
+ ;
+ break;}
+ case 3:
+-#line 253 "objc-parse.y"
++#line 264 "objc-parse.y"
+ {yyval.ttype = NULL_TREE; ;
+ break;}
+ case 5:
+-#line 254 "objc-parse.y"
++#line 265 "objc-parse.y"
+ {yyval.ttype = NULL_TREE; ;
+ break;}
+ case 10:
+-#line 262 "objc-parse.y"
++#line 273 "objc-parse.y"
+ { STRIP_NOPS (yyvsp[-2].ttype);
+ if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
+@@ -2207,11 +2262,11 @@
+ error ("argument of `asm' is not a constant string"); ;
+ break;}
+ case 11:
+-#line 270 "objc-parse.y"
+-{ pedantic = yyvsp[-1].itype; ;
++#line 281 "objc-parse.y"
++{ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 12:
+-#line 275 "objc-parse.y"
++#line 286 "objc-parse.y"
+ { if (pedantic)
+ error ("ANSI C forbids data definition with no type or storage class");
+ else if (!flag_traditional)
+@@ -2223,45 +2278,45 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 13:
+-#line 285 "objc-parse.y"
++#line 296 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 14:
+-#line 290 "objc-parse.y"
++#line 301 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 15:
+-#line 295 "objc-parse.y"
++#line 306 "objc-parse.y"
+ { pedwarn ("empty declaration"); ;
+ break;}
+ case 16:
+-#line 297 "objc-parse.y"
++#line 308 "objc-parse.y"
+ { shadow_tag (yyvsp[-1].ttype); ;
+ break;}
+ case 19:
+-#line 301 "objc-parse.y"
++#line 312 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C does not allow extra `;' outside of a function"); ;
+ break;}
+ case 20:
+-#line 307 "objc-parse.y"
++#line 318 "objc-parse.y"
+ { if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 0))
+ YYERROR1;
+ reinit_parse_for_function (); ;
+ break;}
+ case 21:
+-#line 312 "objc-parse.y"
++#line 323 "objc-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 22:
+-#line 314 "objc-parse.y"
++#line 325 "objc-parse.y"
+ { finish_function (0);
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -2269,25 +2324,25 @@
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 23:
+-#line 320 "objc-parse.y"
++#line 331 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 24:
+-#line 325 "objc-parse.y"
++#line 336 "objc-parse.y"
+ { if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 0))
+ YYERROR1;
+ reinit_parse_for_function (); ;
+ break;}
+ case 25:
+-#line 330 "objc-parse.y"
++#line 341 "objc-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 26:
+-#line 332 "objc-parse.y"
++#line 343 "objc-parse.y"
+ { finish_function (0);
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -2295,25 +2350,25 @@
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 27:
+-#line 338 "objc-parse.y"
++#line 349 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 28:
+-#line 343 "objc-parse.y"
++#line 354 "objc-parse.y"
+ { if (! start_function (NULL_TREE, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 0))
+ YYERROR1;
+ reinit_parse_for_function (); ;
+ break;}
+ case 29:
+-#line 348 "objc-parse.y"
++#line 359 "objc-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 30:
+-#line 350 "objc-parse.y"
++#line 361 "objc-parse.y"
+ { finish_function (0);
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -2321,72 +2376,72 @@
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 31:
+-#line 356 "objc-parse.y"
++#line 367 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 36:
+-#line 370 "objc-parse.y"
++#line 381 "objc-parse.y"
+ { yyval.code = ADDR_EXPR; ;
+ break;}
+ case 37:
+-#line 372 "objc-parse.y"
++#line 383 "objc-parse.y"
+ { yyval.code = NEGATE_EXPR; ;
+ break;}
+ case 38:
+-#line 374 "objc-parse.y"
++#line 385 "objc-parse.y"
+ { yyval.code = CONVERT_EXPR; ;
+ break;}
+ case 39:
+-#line 376 "objc-parse.y"
++#line 387 "objc-parse.y"
+ { yyval.code = PREINCREMENT_EXPR; ;
+ break;}
+ case 40:
+-#line 378 "objc-parse.y"
++#line 389 "objc-parse.y"
+ { yyval.code = PREDECREMENT_EXPR; ;
+ break;}
+ case 41:
+-#line 380 "objc-parse.y"
++#line 391 "objc-parse.y"
+ { yyval.code = BIT_NOT_EXPR; ;
+ break;}
+ case 42:
+-#line 382 "objc-parse.y"
++#line 393 "objc-parse.y"
+ { yyval.code = TRUTH_NOT_EXPR; ;
+ break;}
+ case 43:
+-#line 386 "objc-parse.y"
++#line 397 "objc-parse.y"
+ { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
+ break;}
+ case 44:
+-#line 391 "objc-parse.y"
++#line 402 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 46:
+-#line 397 "objc-parse.y"
++#line 408 "objc-parse.y"
+ { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+ break;}
+ case 47:
+-#line 399 "objc-parse.y"
++#line 410 "objc-parse.y"
+ { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 49:
+-#line 405 "objc-parse.y"
++#line 416 "objc-parse.y"
+ { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
+ break;}
+ case 50:
+-#line 408 "objc-parse.y"
++#line 419 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+- pedantic = yyvsp[-1].itype; ;
++ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 51:
+-#line 411 "objc-parse.y"
++#line 422 "objc-parse.y"
+ { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
+ overflow_warning (yyval.ttype); ;
+ break;}
+ case 52:
+-#line 415 "objc-parse.y"
++#line 426 "objc-parse.y"
+ { tree label = lookup_label (yyvsp[0].ttype);
+ if (pedantic)
+ pedwarn ("ANSI C forbids `&&'");
+@@ -2401,7 +2456,7 @@
+ ;
+ break;}
+ case 53:
+-#line 443 "objc-parse.y"
++#line 454 "objc-parse.y"
+ { skip_evaluation--;
+ if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
+ && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
+@@ -2409,49 +2464,49 @@
+ yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
+ break;}
+ case 54:
+-#line 449 "objc-parse.y"
++#line 460 "objc-parse.y"
+ { skip_evaluation--;
+ yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
+ break;}
+ case 55:
+-#line 452 "objc-parse.y"
++#line 463 "objc-parse.y"
+ { skip_evaluation--;
+ yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
+ break;}
+ case 56:
+-#line 455 "objc-parse.y"
++#line 466 "objc-parse.y"
+ { skip_evaluation--;
+ yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
+ break;}
+ case 57:
+-#line 458 "objc-parse.y"
++#line 469 "objc-parse.y"
+ { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
+ break;}
+ case 58:
+-#line 460 "objc-parse.y"
++#line 471 "objc-parse.y"
+ { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
+ break;}
+ case 59:
+-#line 464 "objc-parse.y"
++#line 475 "objc-parse.y"
+ { skip_evaluation++; ;
+ break;}
+ case 60:
+-#line 468 "objc-parse.y"
++#line 479 "objc-parse.y"
+ { skip_evaluation++; ;
+ break;}
+ case 62:
+-#line 474 "objc-parse.y"
++#line 485 "objc-parse.y"
+ { tree type = groktypename (yyvsp[-2].ttype);
+ yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
+ break;}
+ case 63:
+-#line 477 "objc-parse.y"
++#line 488 "objc-parse.y"
+ { start_init (NULL_TREE, NULL, 0);
+ yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
+ really_start_incremental_init (yyvsp[-2].ttype); ;
+ break;}
+ case 64:
+-#line 481 "objc-parse.y"
++#line 492 "objc-parse.y"
+ { char *name;
+ tree result = pop_init_level (0);
+ tree type = yyvsp[-5].ttype;
+@@ -2478,90 +2533,90 @@
+ ;
+ break;}
+ case 66:
+-#line 510 "objc-parse.y"
++#line 521 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 67:
+-#line 512 "objc-parse.y"
++#line 523 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 68:
+-#line 514 "objc-parse.y"
++#line 525 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 69:
+-#line 516 "objc-parse.y"
++#line 527 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 70:
+-#line 518 "objc-parse.y"
++#line 529 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 71:
+-#line 520 "objc-parse.y"
++#line 531 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 72:
+-#line 522 "objc-parse.y"
++#line 533 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 73:
+-#line 524 "objc-parse.y"
++#line 535 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 74:
+-#line 526 "objc-parse.y"
++#line 537 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 75:
+-#line 528 "objc-parse.y"
++#line 539 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 76:
+-#line 530 "objc-parse.y"
++#line 541 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 77:
+-#line 532 "objc-parse.y"
++#line 543 "objc-parse.y"
+ { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 78:
+-#line 534 "objc-parse.y"
++#line 545 "objc-parse.y"
+ { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
+ skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
+ break;}
+ case 79:
+-#line 537 "objc-parse.y"
++#line 548 "objc-parse.y"
+ { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
+ yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 80:
+-#line 540 "objc-parse.y"
++#line 551 "objc-parse.y"
+ { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
+ skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
+ break;}
+ case 81:
+-#line 543 "objc-parse.y"
++#line 554 "objc-parse.y"
+ { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
+ yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 82:
+-#line 546 "objc-parse.y"
++#line 557 "objc-parse.y"
+ { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
+ skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
+ break;}
+ case 83:
+-#line 549 "objc-parse.y"
++#line 560 "objc-parse.y"
+ { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
+ - (yyvsp[-4].ttype == boolean_false_node)); ;
+ break;}
+ case 84:
+-#line 552 "objc-parse.y"
++#line 563 "objc-parse.y"
+ { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
+ yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 85:
+-#line 555 "objc-parse.y"
++#line 566 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
+ /* Make sure first operand is calculated only once. */
+@@ -2570,12 +2625,12 @@
+ skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
+ break;}
+ case 86:
+-#line 562 "objc-parse.y"
++#line 573 "objc-parse.y"
+ { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
+ yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 87:
+-#line 565 "objc-parse.y"
++#line 576 "objc-parse.y"
+ { char class;
+ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
+ class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
+@@ -2585,7 +2640,7 @@
+ ;
+ break;}
+ case 88:
+-#line 573 "objc-parse.y"
++#line 584 "objc-parse.y"
+ { char class;
+ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
+ /* This inhibits warnings in truthvalue_conversion. */
+@@ -2596,7 +2651,7 @@
+ ;
+ break;}
+ case 89:
+-#line 585 "objc-parse.y"
++#line 596 "objc-parse.y"
+ {
+ yyval.ttype = lastiddecl;
+ if (!yyval.ttype || yyval.ttype == error_mark_node)
+@@ -2757,11 +2812,11 @@
+ ;
+ break;}
+ case 91:
+-#line 745 "objc-parse.y"
++#line 756 "objc-parse.y"
+ { yyval.ttype = combine_strings (yyvsp[0].ttype); ;
+ break;}
+ case 92:
+-#line 747 "objc-parse.y"
++#line 758 "objc-parse.y"
+ { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
+ if (class == 'e' || class == '1'
+ || class == '2' || class == '<')
+@@ -2769,11 +2824,11 @@
+ yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 93:
+-#line 753 "objc-parse.y"
++#line 764 "objc-parse.y"
+ { yyval.ttype = error_mark_node; ;
+ break;}
+ case 94:
+-#line 755 "objc-parse.y"
++#line 766 "objc-parse.y"
+ { if (current_function_decl == 0)
+ {
+ error ("braced-group within expression allowed only inside a function");
+@@ -2789,7 +2844,7 @@
+ yyval.ttype = expand_start_stmt_expr (); ;
+ break;}
+ case 95:
+-#line 769 "objc-parse.y"
++#line 780 "objc-parse.y"
+ { tree rtl_exp;
+ if (pedantic)
+ pedwarn ("ANSI C forbids braced-groups within expressions");
+@@ -2814,15 +2869,15 @@
+ ;
+ break;}
+ case 96:
+-#line 792 "objc-parse.y"
++#line 803 "objc-parse.y"
+ { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 97:
+-#line 794 "objc-parse.y"
++#line 805 "objc-parse.y"
+ { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 98:
+-#line 796 "objc-parse.y"
++#line 807 "objc-parse.y"
+ {
+ if (doing_objc_thang)
+ {
+@@ -2836,7 +2891,7 @@
+ ;
+ break;}
+ case 99:
+-#line 808 "objc-parse.y"
++#line 819 "objc-parse.y"
+ {
+ tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
+
+@@ -2852,80 +2907,80 @@
+ ;
+ break;}
+ case 100:
+-#line 822 "objc-parse.y"
++#line 833 "objc-parse.y"
+ { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
+ break;}
+ case 101:
+-#line 824 "objc-parse.y"
++#line 835 "objc-parse.y"
+ { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
+ break;}
+ case 102:
+-#line 826 "objc-parse.y"
++#line 837 "objc-parse.y"
+ { yyval.ttype = build_message_expr (yyvsp[0].ttype); ;
+ break;}
+ case 103:
+-#line 828 "objc-parse.y"
++#line 839 "objc-parse.y"
+ { yyval.ttype = build_selector_expr (yyvsp[0].ttype); ;
+ break;}
+ case 104:
+-#line 830 "objc-parse.y"
++#line 841 "objc-parse.y"
+ { yyval.ttype = build_protocol_expr (yyvsp[0].ttype); ;
+ break;}
+ case 105:
+-#line 832 "objc-parse.y"
++#line 843 "objc-parse.y"
+ { yyval.ttype = build_encode_expr (yyvsp[0].ttype); ;
+ break;}
+ case 106:
+-#line 834 "objc-parse.y"
++#line 845 "objc-parse.y"
+ { yyval.ttype = build_objc_string_object (yyvsp[0].ttype); ;
+ break;}
+ case 108:
+-#line 841 "objc-parse.y"
++#line 852 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 110:
+-#line 849 "objc-parse.y"
++#line 860 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 113:
+-#line 857 "objc-parse.y"
++#line 868 "objc-parse.y"
+ { c_mark_varargs ();
+ if (pedantic)
+ pedwarn ("ANSI C does not permit use of `varargs.h'"); ;
+ break;}
+ case 114:
+-#line 867 "objc-parse.y"
++#line 878 "objc-parse.y"
+ { ;
+ break;}
+ case 119:
+-#line 883 "objc-parse.y"
++#line 894 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 120:
+-#line 888 "objc-parse.y"
++#line 899 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 121:
+-#line 893 "objc-parse.y"
++#line 904 "objc-parse.y"
+ { shadow_tag_warned (yyvsp[-1].ttype, 1);
+ pedwarn ("empty declaration"); ;
+ break;}
+ case 122:
+-#line 896 "objc-parse.y"
++#line 907 "objc-parse.y"
+ { pedwarn ("empty declaration"); ;
+ break;}
+ case 123:
+-#line 905 "objc-parse.y"
++#line 916 "objc-parse.y"
+ { ;
+ break;}
+ case 128:
+-#line 920 "objc-parse.y"
++#line 931 "objc-parse.y"
+ { yyval.itype = suspend_momentary ();
+ pending_xref_error ();
+ declspec_stack = tree_cons (prefix_attributes,
+@@ -2935,131 +2990,131 @@
+ &current_declspecs, &prefix_attributes); ;
+ break;}
+ case 129:
+-#line 931 "objc-parse.y"
++#line 942 "objc-parse.y"
+ { prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ;
+ break;}
+ case 130:
+-#line 936 "objc-parse.y"
++#line 947 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 131:
+-#line 941 "objc-parse.y"
++#line 952 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 132:
+-#line 946 "objc-parse.y"
++#line 957 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 133:
+-#line 951 "objc-parse.y"
++#line 962 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 134:
+-#line 956 "objc-parse.y"
++#line 967 "objc-parse.y"
+ { shadow_tag (yyvsp[-1].ttype); ;
+ break;}
+ case 135:
+-#line 958 "objc-parse.y"
++#line 969 "objc-parse.y"
+ { pedwarn ("empty declaration"); ;
+ break;}
+ case 136:
+-#line 960 "objc-parse.y"
+-{ pedantic = yyvsp[-1].itype; ;
++#line 971 "objc-parse.y"
++{ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 137:
+-#line 970 "objc-parse.y"
++#line 981 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 138:
+-#line 972 "objc-parse.y"
++#line 983 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
+ break;}
+ case 139:
+-#line 976 "objc-parse.y"
++#line 987 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 140:
+-#line 978 "objc-parse.y"
++#line 989 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 141:
+-#line 980 "objc-parse.y"
++#line 991 "objc-parse.y"
+ { if (extra_warnings)
+ warning ("`%s' is not at beginning of declaration",
+ IDENTIFIER_POINTER (yyvsp[0].ttype));
+ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 142:
+-#line 985 "objc-parse.y"
++#line 996 "objc-parse.y"
+ { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 143:
+-#line 990 "objc-parse.y"
++#line 1001 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 144:
+-#line 992 "objc-parse.y"
++#line 1003 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
+ break;}
+ case 145:
+-#line 997 "objc-parse.y"
++#line 1008 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 146:
+-#line 999 "objc-parse.y"
++#line 1010 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 147:
+-#line 1001 "objc-parse.y"
++#line 1012 "objc-parse.y"
+ { if (extra_warnings)
+ warning ("`%s' is not at beginning of declaration",
+ IDENTIFIER_POINTER (yyvsp[0].ttype));
+ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 148:
+-#line 1014 "objc-parse.y"
++#line 1025 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 149:
+-#line 1016 "objc-parse.y"
++#line 1027 "objc-parse.y"
+ { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
+ break;}
+ case 150:
+-#line 1018 "objc-parse.y"
++#line 1029 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 151:
+-#line 1020 "objc-parse.y"
++#line 1031 "objc-parse.y"
+ { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 152:
+-#line 1025 "objc-parse.y"
++#line 1036 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
+ TREE_STATIC (yyval.ttype) = 1; ;
+ break;}
+ case 153:
+-#line 1028 "objc-parse.y"
++#line 1039 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 154:
+-#line 1030 "objc-parse.y"
++#line 1041 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
+ TREE_STATIC (yyval.ttype) = 1; ;
+ break;}
+ case 155:
+-#line 1033 "objc-parse.y"
++#line 1044 "objc-parse.y"
+ { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
+ warning ("`%s' is not at beginning of declaration",
+ IDENTIFIER_POINTER (yyvsp[0].ttype));
+@@ -3067,150 +3122,150 @@
+ TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
+ break;}
+ case 156:
+-#line 1047 "objc-parse.y"
++#line 1058 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 157:
+-#line 1049 "objc-parse.y"
++#line 1060 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
+ break;}
+ case 158:
+-#line 1053 "objc-parse.y"
++#line 1064 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 159:
+-#line 1055 "objc-parse.y"
++#line 1066 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 162:
+-#line 1065 "objc-parse.y"
++#line 1076 "objc-parse.y"
+ { /* For a typedef name, record the meaning, not the name.
+ In case of `foo foo, bar;'. */
+ yyval.ttype = lookup_name (yyvsp[0].ttype); ;
+ break;}
+ case 163:
+-#line 1069 "objc-parse.y"
++#line 1080 "objc-parse.y"
+ { yyval.ttype = get_static_reference (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 164:
+-#line 1071 "objc-parse.y"
++#line 1082 "objc-parse.y"
+ { yyval.ttype = get_object_reference (yyvsp[0].ttype); ;
+ break;}
+ case 165:
+-#line 1076 "objc-parse.y"
++#line 1087 "objc-parse.y"
+ { yyval.ttype = get_object_reference (yyvsp[0].ttype); ;
+ break;}
+ case 166:
+-#line 1078 "objc-parse.y"
++#line 1089 "objc-parse.y"
+ { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
+ break;}
+ case 167:
+-#line 1080 "objc-parse.y"
++#line 1091 "objc-parse.y"
+ { yyval.ttype = groktypename (yyvsp[-1].ttype); ;
+ break;}
+ case 175:
+-#line 1102 "objc-parse.y"
++#line 1113 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 176:
+-#line 1104 "objc-parse.y"
++#line 1115 "objc-parse.y"
+ { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
+ yyval.ttype = yyvsp[-1].ttype;
+ ;
+ break;}
+ case 177:
+-#line 1111 "objc-parse.y"
++#line 1122 "objc-parse.y"
+ { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
+ yyvsp[-1].ttype, prefix_attributes);
+ start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
+ break;}
+ case 178:
+-#line 1116 "objc-parse.y"
++#line 1127 "objc-parse.y"
+ { finish_init ();
+ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
+ break;}
+ case 179:
+-#line 1119 "objc-parse.y"
++#line 1130 "objc-parse.y"
+ { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
+ yyvsp[0].ttype, prefix_attributes);
+ finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
+ ;
+ break;}
+ case 180:
+-#line 1127 "objc-parse.y"
++#line 1138 "objc-parse.y"
+ { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
+ yyvsp[-1].ttype, prefix_attributes);
+ start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
+ break;}
+ case 181:
+-#line 1132 "objc-parse.y"
++#line 1143 "objc-parse.y"
+ { finish_init ();
+ decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes);
+ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
+ break;}
+ case 182:
+-#line 1136 "objc-parse.y"
++#line 1147 "objc-parse.y"
+ { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
+ yyvsp[0].ttype, prefix_attributes);
+ finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 183:
+-#line 1144 "objc-parse.y"
++#line 1155 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 184:
+-#line 1146 "objc-parse.y"
++#line 1157 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 185:
+-#line 1151 "objc-parse.y"
++#line 1162 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 186:
+-#line 1153 "objc-parse.y"
++#line 1164 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 187:
+-#line 1158 "objc-parse.y"
++#line 1169 "objc-parse.y"
+ { yyval.ttype = yyvsp[-2].ttype; ;
+ break;}
+ case 188:
+-#line 1163 "objc-parse.y"
++#line 1174 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 189:
+-#line 1165 "objc-parse.y"
++#line 1176 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 190:
+-#line 1170 "objc-parse.y"
++#line 1181 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 191:
+-#line 1172 "objc-parse.y"
++#line 1183 "objc-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 192:
+-#line 1174 "objc-parse.y"
++#line 1185 "objc-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
+ break;}
+ case 193:
+-#line 1176 "objc-parse.y"
++#line 1187 "objc-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
+ break;}
+ case 194:
+-#line 1178 "objc-parse.y"
++#line 1189 "objc-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 200:
+-#line 1196 "objc-parse.y"
++#line 1207 "objc-parse.y"
+ { really_start_incremental_init (NULL_TREE);
+ /* Note that the call to clear_momentary
+ is in process_init_element. */
+ push_momentary (); ;
+ break;}
+ case 201:
+-#line 1201 "objc-parse.y"
++#line 1212 "objc-parse.y"
+ { yyval.ttype = pop_init_level (0);
+ if (yyval.ttype == error_mark_node
+ && ! (yychar == STRING || yychar == CONSTANT))
+@@ -3219,36 +3274,36 @@
+ pop_momentary_nofree (); ;
+ break;}
+ case 202:
+-#line 1209 "objc-parse.y"
++#line 1220 "objc-parse.y"
+ { yyval.ttype = error_mark_node; ;
+ break;}
+ case 203:
+-#line 1215 "objc-parse.y"
++#line 1226 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids empty initializer braces"); ;
+ break;}
+ case 209:
+-#line 1231 "objc-parse.y"
++#line 1242 "objc-parse.y"
+ { set_init_label (yyvsp[-1].ttype); ;
+ break;}
+ case 212:
+-#line 1238 "objc-parse.y"
++#line 1249 "objc-parse.y"
+ { push_init_level (0); ;
+ break;}
+ case 213:
+-#line 1240 "objc-parse.y"
++#line 1251 "objc-parse.y"
+ { process_init_element (pop_init_level (0)); ;
+ break;}
+ case 214:
+-#line 1242 "objc-parse.y"
++#line 1253 "objc-parse.y"
+ { process_init_element (yyvsp[0].ttype); ;
+ break;}
+ case 218:
+-#line 1253 "objc-parse.y"
++#line 1264 "objc-parse.y"
+ { set_init_label (yyvsp[0].ttype); ;
+ break;}
+ case 219:
+-#line 1261 "objc-parse.y"
++#line 1272 "objc-parse.y"
+ { push_c_function_context ();
+ if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 1))
+@@ -3259,16 +3314,16 @@
+ reinit_parse_for_function (); ;
+ break;}
+ case 220:
+-#line 1270 "objc-parse.y"
++#line 1281 "objc-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 221:
+-#line 1278 "objc-parse.y"
++#line 1289 "objc-parse.y"
+ { finish_function (1);
+ pop_c_function_context (); ;
+ break;}
+ case 222:
+-#line 1284 "objc-parse.y"
++#line 1295 "objc-parse.y"
+ { push_c_function_context ();
+ if (! start_function (current_declspecs, yyvsp[0].ttype,
+ prefix_attributes, NULL_TREE, 1))
+@@ -3279,197 +3334,197 @@
+ reinit_parse_for_function (); ;
+ break;}
+ case 223:
+-#line 1293 "objc-parse.y"
++#line 1304 "objc-parse.y"
+ { store_parm_decls (); ;
+ break;}
+ case 224:
+-#line 1301 "objc-parse.y"
++#line 1312 "objc-parse.y"
+ { finish_function (1);
+ pop_c_function_context (); ;
+ break;}
+ case 227:
+-#line 1317 "objc-parse.y"
++#line 1328 "objc-parse.y"
+ { yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 228:
+-#line 1319 "objc-parse.y"
++#line 1330 "objc-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 229:
+-#line 1324 "objc-parse.y"
++#line 1335 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 230:
+-#line 1326 "objc-parse.y"
++#line 1337 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 231:
+-#line 1328 "objc-parse.y"
++#line 1339 "objc-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 232:
+-#line 1335 "objc-parse.y"
++#line 1346 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 235:
+-#line 1347 "objc-parse.y"
++#line 1358 "objc-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 236:
+-#line 1352 "objc-parse.y"
++#line 1363 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 237:
+-#line 1354 "objc-parse.y"
++#line 1365 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 238:
+-#line 1356 "objc-parse.y"
++#line 1367 "objc-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 239:
+-#line 1363 "objc-parse.y"
++#line 1374 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 241:
+-#line 1372 "objc-parse.y"
++#line 1383 "objc-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 242:
+-#line 1377 "objc-parse.y"
++#line 1388 "objc-parse.y"
+ { yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 243:
+-#line 1379 "objc-parse.y"
++#line 1390 "objc-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 244:
+-#line 1381 "objc-parse.y"
++#line 1392 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 245:
+-#line 1383 "objc-parse.y"
++#line 1394 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 246:
+-#line 1390 "objc-parse.y"
++#line 1401 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 248:
+-#line 1396 "objc-parse.y"
++#line 1407 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 249:
+-#line 1398 "objc-parse.y"
++#line 1409 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 250:
+-#line 1403 "objc-parse.y"
++#line 1414 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 251:
+-#line 1405 "objc-parse.y"
++#line 1416 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 252:
+-#line 1410 "objc-parse.y"
++#line 1421 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 253:
+-#line 1412 "objc-parse.y"
++#line 1423 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 254:
+-#line 1417 "objc-parse.y"
++#line 1428 "objc-parse.y"
+ { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
+ /* Start scope of tag before parsing components. */
+ ;
+ break;}
+ case 255:
+-#line 1421 "objc-parse.y"
++#line 1432 "objc-parse.y"
+ { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
+ break;}
+ case 256:
+-#line 1423 "objc-parse.y"
++#line 1434 "objc-parse.y"
+ { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
+ yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
+ ;
+ break;}
+ case 257:
+-#line 1427 "objc-parse.y"
++#line 1438 "objc-parse.y"
+ { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
+ break;}
+ case 258:
+-#line 1429 "objc-parse.y"
++#line 1440 "objc-parse.y"
+ { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
+ break;}
+ case 259:
+-#line 1431 "objc-parse.y"
++#line 1442 "objc-parse.y"
+ { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
+ break;}
+ case 260:
+-#line 1433 "objc-parse.y"
++#line 1444 "objc-parse.y"
+ { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
+ yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
+ ;
+ break;}
+ case 261:
+-#line 1437 "objc-parse.y"
++#line 1448 "objc-parse.y"
+ { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
+ break;}
+ case 262:
+-#line 1439 "objc-parse.y"
++#line 1450 "objc-parse.y"
+ { yyvsp[0].itype = suspend_momentary ();
+ yyval.ttype = start_enum (yyvsp[-1].ttype); ;
+ break;}
+ case 263:
+-#line 1442 "objc-parse.y"
++#line 1453 "objc-parse.y"
+ { yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype));
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 264:
+-#line 1445 "objc-parse.y"
++#line 1456 "objc-parse.y"
+ { yyvsp[0].itype = suspend_momentary ();
+ yyval.ttype = start_enum (NULL_TREE); ;
+ break;}
+ case 265:
+-#line 1448 "objc-parse.y"
++#line 1459 "objc-parse.y"
+ { yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
+ resume_momentary (yyvsp[-5].itype); ;
+ break;}
+ case 266:
+-#line 1451 "objc-parse.y"
++#line 1462 "objc-parse.y"
+ { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
+ break;}
+ case 270:
+-#line 1462 "objc-parse.y"
++#line 1473 "objc-parse.y"
+ { if (pedantic && ! flag_isoc9x)
+ pedwarn ("comma at end of enumerator list"); ;
+ break;}
+ case 271:
+-#line 1468 "objc-parse.y"
++#line 1479 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 272:
+-#line 1470 "objc-parse.y"
++#line 1481 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
+ pedwarn ("no semicolon at end of struct or union"); ;
+ break;}
+ case 273:
+-#line 1475 "objc-parse.y"
++#line 1486 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 274:
+-#line 1477 "objc-parse.y"
++#line 1488 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 275:
+-#line 1479 "objc-parse.y"
++#line 1490 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("extra semicolon in struct or union specified"); ;
+ break;}
+ case 276:
+-#line 1483 "objc-parse.y"
++#line 1494 "objc-parse.y"
+ {
+ tree interface = lookup_interface (yyvsp[-1].ttype);
+
+@@ -3484,7 +3539,7 @@
+ ;
+ break;}
+ case 277:
+-#line 1508 "objc-parse.y"
++#line 1519 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -3492,14 +3547,14 @@
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 278:
+-#line 1514 "objc-parse.y"
++#line 1525 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids member declarations with no members");
+ shadow_tag(yyvsp[0].ttype);
+ yyval.ttype = NULL_TREE; ;
+ break;}
+ case 279:
+-#line 1519 "objc-parse.y"
++#line 1530 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -3507,144 +3562,144 @@
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 280:
+-#line 1525 "objc-parse.y"
++#line 1536 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids member declarations with no members");
+ shadow_tag(yyvsp[0].ttype);
+ yyval.ttype = NULL_TREE; ;
+ break;}
+ case 281:
+-#line 1530 "objc-parse.y"
++#line 1541 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 282:
+-#line 1532 "objc-parse.y"
++#line 1543 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+- pedantic = yyvsp[-1].itype; ;
++ RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
+ break;}
+ case 284:
+-#line 1539 "objc-parse.y"
++#line 1550 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 285:
+-#line 1544 "objc-parse.y"
++#line 1555 "objc-parse.y"
+ { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
+ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
+ break;}
+ case 286:
+-#line 1548 "objc-parse.y"
++#line 1559 "objc-parse.y"
+ { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
+ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
+ break;}
+ case 287:
+-#line 1551 "objc-parse.y"
++#line 1562 "objc-parse.y"
+ { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
+ decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
+ break;}
+ case 289:
+-#line 1563 "objc-parse.y"
++#line 1574 "objc-parse.y"
+ { if (yyvsp[-2].ttype == error_mark_node)
+ yyval.ttype = yyvsp[-2].ttype;
+ else
+ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
+ break;}
+ case 290:
+-#line 1568 "objc-parse.y"
++#line 1579 "objc-parse.y"
+ { yyval.ttype = error_mark_node; ;
+ break;}
+ case 291:
+-#line 1574 "objc-parse.y"
++#line 1585 "objc-parse.y"
+ { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 292:
+-#line 1576 "objc-parse.y"
++#line 1587 "objc-parse.y"
+ { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 293:
+-#line 1581 "objc-parse.y"
++#line 1592 "objc-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 294:
+-#line 1583 "objc-parse.y"
++#line 1594 "objc-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 295:
+-#line 1588 "objc-parse.y"
++#line 1599 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 297:
+-#line 1594 "objc-parse.y"
++#line 1605 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 298:
+-#line 1596 "objc-parse.y"
++#line 1607 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 299:
+-#line 1601 "objc-parse.y"
++#line 1612 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 300:
+-#line 1603 "objc-parse.y"
++#line 1614 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 301:
+-#line 1608 "objc-parse.y"
++#line 1619 "objc-parse.y"
+ { yyval.ttype = yyvsp[-1].ttype; ;
+ break;}
+ case 302:
+-#line 1611 "objc-parse.y"
++#line 1622 "objc-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 303:
+-#line 1613 "objc-parse.y"
++#line 1624 "objc-parse.y"
+ { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 304:
+-#line 1615 "objc-parse.y"
++#line 1626 "objc-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 305:
+-#line 1617 "objc-parse.y"
++#line 1628 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 306:
+-#line 1619 "objc-parse.y"
++#line 1630 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
+ break;}
+ case 307:
+-#line 1621 "objc-parse.y"
++#line 1632 "objc-parse.y"
+ { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
+ break;}
+ case 308:
+-#line 1623 "objc-parse.y"
++#line 1634 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 309:
+-#line 1625 "objc-parse.y"
++#line 1636 "objc-parse.y"
+ { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
+ break;}
+ case 310:
+-#line 1629 "objc-parse.y"
++#line 1640 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 311:
+-#line 1638 "objc-parse.y"
++#line 1649 "objc-parse.y"
+ {
+ if (pedantic && yyvsp[0].ends_in_label)
+ pedwarn ("ANSI C forbids label at end of compound statement");
+ ;
+ break;}
+ case 313:
+-#line 1647 "objc-parse.y"
++#line 1658 "objc-parse.y"
+ { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
+ break;}
+ case 314:
+-#line 1649 "objc-parse.y"
++#line 1660 "objc-parse.y"
+ { yyval.ends_in_label = 0; ;
+ break;}
+ case 318:
+-#line 1661 "objc-parse.y"
++#line 1672 "objc-parse.y"
+ { emit_line_note (input_filename, lineno);
+ pushlevel (0);
+ clear_last_expr ();
+@@ -3655,12 +3710,12 @@
+ ;
+ break;}
+ case 320:
+-#line 1676 "objc-parse.y"
++#line 1687 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids label declarations"); ;
+ break;}
+ case 323:
+-#line 1687 "objc-parse.y"
++#line 1698 "objc-parse.y"
+ { tree link;
+ for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
+ {
+@@ -3671,19 +3726,19 @@
+ ;
+ break;}
+ case 324:
+-#line 1701 "objc-parse.y"
++#line 1712 "objc-parse.y"
+ {;
+ break;}
+ case 326:
+-#line 1705 "objc-parse.y"
++#line 1716 "objc-parse.y"
+ { compstmt_count++; ;
+ break;}
+ case 327:
+-#line 1708 "objc-parse.y"
++#line 1719 "objc-parse.y"
+ { yyval.ttype = convert (void_type_node, integer_zero_node); ;
+ break;}
+ case 328:
+-#line 1710 "objc-parse.y"
++#line 1721 "objc-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_end_bindings (getdecls (), 1, 0);
+ yyval.ttype = poplevel (1, 1, 0);
+@@ -3693,7 +3748,7 @@
+ pop_momentary (); ;
+ break;}
+ case 329:
+-#line 1718 "objc-parse.y"
++#line 1729 "objc-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_end_bindings (getdecls (), kept_level_p (), 0);
+ yyval.ttype = poplevel (kept_level_p (), 0, 0);
+@@ -3703,7 +3758,7 @@
+ pop_momentary (); ;
+ break;}
+ case 330:
+-#line 1726 "objc-parse.y"
++#line 1737 "objc-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_end_bindings (getdecls (), kept_level_p (), 0);
+ yyval.ttype = poplevel (kept_level_p (), 0, 0);
+@@ -3713,7 +3768,7 @@
+ pop_momentary (); ;
+ break;}
+ case 333:
+-#line 1746 "objc-parse.y"
++#line 1757 "objc-parse.y"
+ { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
+ c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0,
+ compstmt_count);
+@@ -3723,7 +3778,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 334:
+-#line 1760 "objc-parse.y"
++#line 1771 "objc-parse.y"
+ { stmt_count++;
+ compstmt_count++;
+ emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
+@@ -3733,43 +3788,43 @@
+ position_after_white_space (); ;
+ break;}
+ case 335:
+-#line 1768 "objc-parse.y"
++#line 1779 "objc-parse.y"
+ { expand_loop_continue_here (); ;
+ break;}
+ case 336:
+-#line 1772 "objc-parse.y"
++#line 1783 "objc-parse.y"
+ { yyval.filename = input_filename; ;
+ break;}
+ case 337:
+-#line 1776 "objc-parse.y"
++#line 1787 "objc-parse.y"
+ { yyval.lineno = lineno; ;
+ break;}
+ case 338:
+-#line 1781 "objc-parse.y"
++#line 1792 "objc-parse.y"
+ { ;
+ break;}
+ case 339:
+-#line 1786 "objc-parse.y"
++#line 1797 "objc-parse.y"
+ { ;
+ break;}
+ case 340:
+-#line 1791 "objc-parse.y"
++#line 1802 "objc-parse.y"
+ { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
+ break;}
+ case 341:
+-#line 1796 "objc-parse.y"
++#line 1807 "objc-parse.y"
+ { yyval.ends_in_label = 0; ;
+ break;}
+ case 342:
+-#line 1798 "objc-parse.y"
++#line 1809 "objc-parse.y"
+ { yyval.ends_in_label = 1; ;
+ break;}
+ case 343:
+-#line 1804 "objc-parse.y"
++#line 1815 "objc-parse.y"
+ { stmt_count++; ;
+ break;}
+ case 345:
+-#line 1807 "objc-parse.y"
++#line 1818 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ /* It appears that this should not be done--that a non-lvalue array
+@@ -3788,19 +3843,19 @@
+ clear_momentary (); ;
+ break;}
+ case 346:
+-#line 1824 "objc-parse.y"
++#line 1835 "objc-parse.y"
+ { c_expand_start_else ();
+ yyvsp[-1].itype = stmt_count;
+ position_after_white_space (); ;
+ break;}
+ case 347:
+-#line 1828 "objc-parse.y"
++#line 1839 "objc-parse.y"
+ { c_expand_end_cond ();
+ if (extra_warnings && stmt_count == yyvsp[-3].itype)
+ warning ("empty body in an else-statement"); ;
+ break;}
+ case 348:
+-#line 1832 "objc-parse.y"
++#line 1843 "objc-parse.y"
+ { c_expand_end_cond ();
+ /* This warning is here instead of in simple_if, because we
+ do not want a warning if an empty if is followed by an
+@@ -3811,11 +3866,11 @@
+ "empty body in an if-statement"); ;
+ break;}
+ case 349:
+-#line 1844 "objc-parse.y"
++#line 1855 "objc-parse.y"
+ { c_expand_end_cond (); ;
+ break;}
+ case 350:
+-#line 1846 "objc-parse.y"
++#line 1857 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
+ /* The emit_nop used to come before emit_line_note,
+@@ -3827,7 +3882,7 @@
+ emit_nop (); ;
+ break;}
+ case 351:
+-#line 1856 "objc-parse.y"
++#line 1867 "objc-parse.y"
+ { /* Don't start the loop till we have succeeded
+ in parsing the end test. This is to make sure
+ that we end every loop we start. */
+@@ -3838,11 +3893,11 @@
+ position_after_white_space (); ;
+ break;}
+ case 352:
+-#line 1865 "objc-parse.y"
++#line 1876 "objc-parse.y"
+ { expand_end_loop (); ;
+ break;}
+ case 353:
+-#line 1868 "objc-parse.y"
++#line 1879 "objc-parse.y"
+ { emit_line_note (input_filename, lineno);
+ expand_exit_loop_if_false (NULL_PTR,
+ truthvalue_conversion (yyvsp[-2].ttype));
+@@ -3850,12 +3905,12 @@
+ clear_momentary (); ;
+ break;}
+ case 354:
+-#line 1875 "objc-parse.y"
++#line 1886 "objc-parse.y"
+ { expand_end_loop ();
+ clear_momentary (); ;
+ break;}
+ case 355:
+-#line 1879 "objc-parse.y"
++#line 1890 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
+ /* See comment in `while' alternative, above. */
+@@ -3868,12 +3923,12 @@
+ ;
+ break;}
+ case 356:
+-#line 1891 "objc-parse.y"
++#line 1902 "objc-parse.y"
+ { yyvsp[0].lineno = lineno;
+ yyval.filename = input_filename; ;
+ break;}
+ case 357:
+-#line 1894 "objc-parse.y"
++#line 1905 "objc-parse.y"
+ {
+ /* Start the loop. Doing this after parsing
+ all the expressions ensures we will end the loop. */
+@@ -3891,7 +3946,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 358:
+-#line 1910 "objc-parse.y"
++#line 1921 "objc-parse.y"
+ { /* Emit the increment expression, with a line number. */
+ emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
+ expand_loop_continue_here ();
+@@ -3904,7 +3959,7 @@
+ expand_end_loop (); ;
+ break;}
+ case 359:
+-#line 1921 "objc-parse.y"
++#line 1932 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
+ c_expand_start_case (yyvsp[-1].ttype);
+@@ -3914,7 +3969,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 360:
+-#line 1929 "objc-parse.y"
++#line 1940 "objc-parse.y"
+ { expand_end_case (yyvsp[-3].ttype);
+ if (yychar == CONSTANT || yychar == STRING)
+ pop_momentary_nofree ();
+@@ -3922,33 +3977,33 @@
+ pop_momentary (); ;
+ break;}
+ case 361:
+-#line 1935 "objc-parse.y"
++#line 1946 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ if ( ! expand_exit_something ())
+ error ("break statement not within loop or switch"); ;
+ break;}
+ case 362:
+-#line 1940 "objc-parse.y"
++#line 1951 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ if (! expand_continue_loop (NULL_PTR))
+ error ("continue statement not within a loop"); ;
+ break;}
+ case 363:
+-#line 1945 "objc-parse.y"
++#line 1956 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
+ c_expand_return (NULL_TREE); ;
+ break;}
+ case 364:
+-#line 1949 "objc-parse.y"
++#line 1960 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
+ c_expand_return (yyvsp[-1].ttype); ;
+ break;}
+ case 365:
+-#line 1953 "objc-parse.y"
++#line 1964 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
+ STRIP_NOPS (yyvsp[-2].ttype);
+@@ -3960,7 +4015,7 @@
+ error ("argument of `asm' is not a constant string"); ;
+ break;}
+ case 366:
+-#line 1964 "objc-parse.y"
++#line 1975 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
+ c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
+@@ -3968,7 +4023,7 @@
+ input_filename, lineno); ;
+ break;}
+ case 367:
+-#line 1971 "objc-parse.y"
++#line 1982 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
+ c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
+@@ -3976,7 +4031,7 @@
+ input_filename, lineno); ;
+ break;}
+ case 368:
+-#line 1979 "objc-parse.y"
++#line 1990 "objc-parse.y"
+ { stmt_count++;
+ emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
+ c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
+@@ -3984,7 +4039,7 @@
+ input_filename, lineno); ;
+ break;}
+ case 369:
+-#line 1985 "objc-parse.y"
++#line 1996 "objc-parse.y"
+ { tree decl;
+ stmt_count++;
+ emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
+@@ -3997,7 +4052,7 @@
+ ;
+ break;}
+ case 370:
+-#line 1996 "objc-parse.y"
++#line 2007 "objc-parse.y"
+ { if (pedantic)
+ pedwarn ("ANSI C forbids `goto *expr;'");
+ stmt_count++;
+@@ -4005,7 +4060,7 @@
+ expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
+ break;}
+ case 373:
+-#line 2011 "objc-parse.y"
++#line 2022 "objc-parse.y"
+ {
+ /* The value returned by this action is */
+ /* 1 if everything is OK */
+@@ -4028,14 +4083,14 @@
+ ;
+ break;}
+ case 374:
+-#line 2032 "objc-parse.y"
++#line 2043 "objc-parse.y"
+ {
+ if (yyvsp[-1].itype)
+ iterator_for_loop_end (yyvsp[-3].ttype);
+ ;
+ break;}
+ case 375:
+-#line 2067 "objc-parse.y"
++#line 2078 "objc-parse.y"
+ { register tree value = check_case_value (yyvsp[-1].ttype);
+ register tree label
+ = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
+@@ -4068,7 +4123,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 376:
+-#line 2098 "objc-parse.y"
++#line 2109 "objc-parse.y"
+ { register tree value1 = check_case_value (yyvsp[-3].ttype);
+ register tree value2 = check_case_value (yyvsp[-1].ttype);
+ register tree label
+@@ -4101,7 +4156,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 377:
+-#line 2129 "objc-parse.y"
++#line 2140 "objc-parse.y"
+ {
+ tree duplicate;
+ register tree label
+@@ -4118,7 +4173,7 @@
+ position_after_white_space (); ;
+ break;}
+ case 378:
+-#line 2144 "objc-parse.y"
++#line 2155 "objc-parse.y"
+ { tree label = define_label (input_filename, lineno, yyvsp[-2].ttype);
+ stmt_count++;
+ emit_nop ();
+@@ -4130,52 +4185,52 @@
+ position_after_white_space (); ;
+ break;}
+ case 379:
+-#line 2159 "objc-parse.y"
++#line 2170 "objc-parse.y"
+ { emit_line_note (input_filename, lineno);
+ yyval.ttype = NULL_TREE; ;
+ break;}
+ case 380:
+-#line 2162 "objc-parse.y"
++#line 2173 "objc-parse.y"
+ { emit_line_note (input_filename, lineno); ;
+ break;}
+ case 381:
+-#line 2167 "objc-parse.y"
++#line 2178 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 383:
+-#line 2174 "objc-parse.y"
++#line 2185 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 386:
+-#line 2181 "objc-parse.y"
++#line 2192 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 387:
+-#line 2186 "objc-parse.y"
++#line 2197 "objc-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+ break;}
+ case 388:
+-#line 2191 "objc-parse.y"
++#line 2202 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
+ break;}
+ case 389:
+-#line 2193 "objc-parse.y"
++#line 2204 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
+ break;}
+ case 390:
+-#line 2199 "objc-parse.y"
++#line 2210 "objc-parse.y"
+ { pushlevel (0);
+ clear_parm_order ();
+ declare_parm_level (0); ;
+ break;}
+ case 391:
+-#line 2203 "objc-parse.y"
++#line 2214 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ parmlist_tags_warning ();
+ poplevel (0, 0, 0); ;
+ break;}
+ case 393:
+-#line 2211 "objc-parse.y"
++#line 2222 "objc-parse.y"
+ { tree parm;
+ if (pedantic)
+ pedwarn ("ANSI C forbids forward parameter declarations");
+@@ -4185,19 +4240,19 @@
+ clear_parm_order (); ;
+ break;}
+ case 394:
+-#line 2219 "objc-parse.y"
++#line 2230 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype; ;
+ break;}
+ case 395:
+-#line 2221 "objc-parse.y"
++#line 2232 "objc-parse.y"
+ { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
+ break;}
+ case 396:
+-#line 2227 "objc-parse.y"
++#line 2238 "objc-parse.y"
+ { yyval.ttype = get_parm_info (0); ;
+ break;}
+ case 397:
+-#line 2229 "objc-parse.y"
++#line 2240 "objc-parse.y"
+ { yyval.ttype = get_parm_info (0);
+ /* Gcc used to allow this as an extension. However, it does
+ not work for all targets, and thus has been disabled.
+@@ -4209,23 +4264,23 @@
+ ;
+ break;}
+ case 398:
+-#line 2239 "objc-parse.y"
++#line 2250 "objc-parse.y"
+ { yyval.ttype = get_parm_info (1); ;
+ break;}
+ case 399:
+-#line 2241 "objc-parse.y"
++#line 2252 "objc-parse.y"
+ { yyval.ttype = get_parm_info (0); ;
+ break;}
+ case 400:
+-#line 2246 "objc-parse.y"
++#line 2257 "objc-parse.y"
+ { push_parm_decl (yyvsp[0].ttype); ;
+ break;}
+ case 401:
+-#line 2248 "objc-parse.y"
++#line 2259 "objc-parse.y"
+ { push_parm_decl (yyvsp[0].ttype); ;
+ break;}
+ case 402:
+-#line 2255 "objc-parse.y"
++#line 2266 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -4236,7 +4291,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 403:
+-#line 2264 "objc-parse.y"
++#line 2275 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -4247,7 +4302,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 404:
+-#line 2273 "objc-parse.y"
++#line 2284 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -4258,7 +4313,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 405:
+-#line 2282 "objc-parse.y"
++#line 2293 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -4269,7 +4324,7 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 406:
+-#line 2292 "objc-parse.y"
++#line 2303 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+@@ -4280,19 +4335,19 @@
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 407:
+-#line 2306 "objc-parse.y"
++#line 2317 "objc-parse.y"
+ { pushlevel (0);
+ clear_parm_order ();
+ declare_parm_level (1); ;
+ break;}
+ case 408:
+-#line 2310 "objc-parse.y"
++#line 2321 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ parmlist_tags_warning ();
+ poplevel (0, 0, 0); ;
+ break;}
+ case 410:
+-#line 2318 "objc-parse.y"
++#line 2329 "objc-parse.y"
+ { tree t;
+ for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
+ if (TREE_VALUE (t) == NULL_TREE)
+@@ -4300,28 +4355,29 @@
+ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
+ break;}
+ case 411:
+-#line 2328 "objc-parse.y"
++#line 2339 "objc-parse.y"
+ { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+ break;}
+ case 412:
+-#line 2330 "objc-parse.y"
++#line 2341 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 413:
+-#line 2336 "objc-parse.y"
++#line 2347 "objc-parse.y"
+ { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+ break;}
+ case 414:
+-#line 2338 "objc-parse.y"
++#line 2349 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 415:
+-#line 2343 "objc-parse.y"
+-{ yyval.itype = pedantic;
+- pedantic = 0; ;
++#line 2354 "objc-parse.y"
++{ yyval.ttype = SAVE_WARN_FLAGS();
++ pedantic = 0;
++ warn_pointer_arith = 0; ;
+ break;}
+ case 421:
+-#line 2356 "objc-parse.y"
++#line 2368 "objc-parse.y"
+ {
+ if (objc_implementation_context)
+ {
+@@ -4334,27 +4390,27 @@
+ ;
+ break;}
+ case 422:
+-#line 2371 "objc-parse.y"
++#line 2383 "objc-parse.y"
+ { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+ break;}
+ case 423:
+-#line 2373 "objc-parse.y"
++#line 2385 "objc-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 424:
+-#line 2378 "objc-parse.y"
++#line 2390 "objc-parse.y"
+ {
+ objc_declare_class (yyvsp[-1].ttype);
+ ;
+ break;}
+ case 425:
+-#line 2384 "objc-parse.y"
++#line 2396 "objc-parse.y"
+ {
+ objc_declare_alias (yyvsp[-2].ttype, yyvsp[-1].ttype);
+ ;
+ break;}
+ case 426:
+-#line 2390 "objc-parse.y"
++#line 2402 "objc-parse.y"
+ {
+ objc_interface_context = objc_ivar_context
+ = start_class (CLASS_INTERFACE_TYPE, yyvsp[-2].ttype, NULL_TREE, yyvsp[-1].ttype);
+@@ -4362,20 +4418,20 @@
+ ;
+ break;}
+ case 427:
+-#line 2396 "objc-parse.y"
++#line 2408 "objc-parse.y"
+ {
+ continue_class (objc_interface_context);
+ ;
+ break;}
+ case 428:
+-#line 2401 "objc-parse.y"
++#line 2413 "objc-parse.y"
+ {
+ finish_class (objc_interface_context);
+ objc_interface_context = NULL_TREE;
+ ;
+ break;}
+ case 429:
+-#line 2407 "objc-parse.y"
++#line 2419 "objc-parse.y"
+ {
+ objc_interface_context
+ = start_class (CLASS_INTERFACE_TYPE, yyvsp[-1].ttype, NULL_TREE, yyvsp[0].ttype);
+@@ -4383,14 +4439,14 @@
+ ;
+ break;}
+ case 430:
+-#line 2414 "objc-parse.y"
++#line 2426 "objc-parse.y"
+ {
+ finish_class (objc_interface_context);
+ objc_interface_context = NULL_TREE;
+ ;
+ break;}
+ case 431:
+-#line 2420 "objc-parse.y"
++#line 2432 "objc-parse.y"
+ {
+ objc_interface_context = objc_ivar_context
+ = start_class (CLASS_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype);
+@@ -4398,20 +4454,20 @@
+ ;
+ break;}
+ case 432:
+-#line 2426 "objc-parse.y"
++#line 2438 "objc-parse.y"
+ {
+ continue_class (objc_interface_context);
+ ;
+ break;}
+ case 433:
+-#line 2431 "objc-parse.y"
++#line 2443 "objc-parse.y"
+ {
+ finish_class (objc_interface_context);
+ objc_interface_context = NULL_TREE;
+ ;
+ break;}
+ case 434:
+-#line 2437 "objc-parse.y"
++#line 2449 "objc-parse.y"
+ {
+ objc_interface_context
+ = start_class (CLASS_INTERFACE_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
+@@ -4419,14 +4475,14 @@
+ ;
+ break;}
+ case 435:
+-#line 2444 "objc-parse.y"
++#line 2456 "objc-parse.y"
+ {
+ finish_class (objc_interface_context);
+ objc_interface_context = NULL_TREE;
+ ;
+ break;}
+ case 436:
+-#line 2450 "objc-parse.y"
++#line 2462 "objc-parse.y"
+ {
+ objc_implementation_context = objc_ivar_context
+ = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-1].ttype, NULL_TREE, NULL_TREE);
+@@ -4434,14 +4490,14 @@
+ ;
+ break;}
+ case 437:
+-#line 2456 "objc-parse.y"
++#line 2468 "objc-parse.y"
+ {
+ objc_ivar_chain
+ = continue_class (objc_implementation_context);
+ ;
+ break;}
+ case 438:
+-#line 2462 "objc-parse.y"
++#line 2474 "objc-parse.y"
+ {
+ objc_implementation_context
+ = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[0].ttype, NULL_TREE, NULL_TREE);
+@@ -4450,7 +4506,7 @@
+ ;
+ break;}
+ case 439:
+-#line 2470 "objc-parse.y"
++#line 2482 "objc-parse.y"
+ {
+ objc_implementation_context = objc_ivar_context
+ = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
+@@ -4458,14 +4514,14 @@
+ ;
+ break;}
+ case 440:
+-#line 2476 "objc-parse.y"
++#line 2488 "objc-parse.y"
+ {
+ objc_ivar_chain
+ = continue_class (objc_implementation_context);
+ ;
+ break;}
+ case 441:
+-#line 2482 "objc-parse.y"
++#line 2494 "objc-parse.y"
+ {
+ objc_implementation_context
+ = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE);
+@@ -4474,7 +4530,7 @@
+ ;
+ break;}
+ case 442:
+-#line 2490 "objc-parse.y"
++#line 2502 "objc-parse.y"
+ {
+ objc_interface_context
+ = start_class (CATEGORY_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
+@@ -4482,14 +4538,14 @@
+ ;
+ break;}
+ case 443:
+-#line 2497 "objc-parse.y"
++#line 2509 "objc-parse.y"
+ {
+ finish_class (objc_interface_context);
+ objc_interface_context = NULL_TREE;
+ ;
+ break;}
+ case 444:
+-#line 2503 "objc-parse.y"
++#line 2515 "objc-parse.y"
+ {
+ objc_implementation_context
+ = start_class (CATEGORY_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
+@@ -4498,7 +4554,7 @@
+ ;
+ break;}
+ case 445:
+-#line 2513 "objc-parse.y"
++#line 2525 "objc-parse.y"
+ {
+ remember_protocol_qualifiers ();
+ objc_interface_context
+@@ -4506,7 +4562,7 @@
+ ;
+ break;}
+ case 446:
+-#line 2519 "objc-parse.y"
++#line 2531 "objc-parse.y"
+ {
+ forget_protocol_qualifiers();
+ finish_protocol(objc_interface_context);
+@@ -4514,13 +4570,13 @@
+ ;
+ break;}
+ case 447:
+-#line 2528 "objc-parse.y"
++#line 2540 "objc-parse.y"
+ {
+ yyval.ttype = NULL_TREE;
+ ;
+ break;}
+ case 449:
+-#line 2536 "objc-parse.y"
++#line 2548 "objc-parse.y"
+ {
+ if (yyvsp[-2].code == LT_EXPR && yyvsp[0].code == GT_EXPR)
+ yyval.ttype = yyvsp[-1].ttype;
+@@ -4529,32 +4585,32 @@
+ ;
+ break;}
+ case 452:
+-#line 2550 "objc-parse.y"
++#line 2562 "objc-parse.y"
+ { objc_public_flag = 2; ;
+ break;}
+ case 453:
+-#line 2551 "objc-parse.y"
++#line 2563 "objc-parse.y"
+ { objc_public_flag = 0; ;
+ break;}
+ case 454:
+-#line 2552 "objc-parse.y"
++#line 2564 "objc-parse.y"
+ { objc_public_flag = 1; ;
+ break;}
+ case 455:
+-#line 2557 "objc-parse.y"
++#line 2569 "objc-parse.y"
+ {
+ yyval.ttype = NULL_TREE;
+ ;
+ break;}
+ case 457:
+-#line 2562 "objc-parse.y"
++#line 2574 "objc-parse.y"
+ {
+ if (pedantic)
+ pedwarn ("extra semicolon in struct or union specified");
+ ;
+ break;}
+ case 458:
+-#line 2580 "objc-parse.y"
++#line 2592 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -4562,7 +4618,7 @@
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 459:
+-#line 2586 "objc-parse.y"
++#line 2598 "objc-parse.y"
+ { yyval.ttype = yyvsp[0].ttype;
+ current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+@@ -4570,15 +4626,15 @@
+ resume_momentary (yyvsp[-1].itype); ;
+ break;}
+ case 460:
+-#line 2592 "objc-parse.y"
++#line 2604 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 461:
+-#line 2597 "objc-parse.y"
++#line 2609 "objc-parse.y"
+ { yyval.ttype = NULL_TREE; ;
+ break;}
+ case 464:
+-#line 2604 "objc-parse.y"
++#line 2616 "objc-parse.y"
+ {
+ yyval.ttype = add_instance_variable (objc_ivar_context,
+ objc_public_flag,
+@@ -4587,7 +4643,7 @@
+ ;
+ break;}
+ case 465:
+-#line 2611 "objc-parse.y"
++#line 2623 "objc-parse.y"
+ {
+ yyval.ttype = add_instance_variable (objc_ivar_context,
+ objc_public_flag,
+@@ -4595,7 +4651,7 @@
+ ;
+ break;}
+ case 466:
+-#line 2617 "objc-parse.y"
++#line 2629 "objc-parse.y"
+ {
+ yyval.ttype = add_instance_variable (objc_ivar_context,
+ objc_public_flag,
+@@ -4604,7 +4660,7 @@
+ ;
+ break;}
+ case 467:
+-#line 2627 "objc-parse.y"
++#line 2639 "objc-parse.y"
+ {
+ remember_protocol_qualifiers ();
+ if (objc_implementation_context)
+@@ -4614,7 +4670,7 @@
+ ;
+ break;}
+ case 468:
+-#line 2635 "objc-parse.y"
++#line 2647 "objc-parse.y"
+ {
+ forget_protocol_qualifiers ();
+ add_class_method (objc_implementation_context, yyvsp[0].ttype);
+@@ -4623,20 +4679,20 @@
+ ;
+ break;}
+ case 469:
+-#line 2642 "objc-parse.y"
++#line 2654 "objc-parse.y"
+ {
+ continue_method_def ();
+ ;
+ break;}
+ case 470:
+-#line 2646 "objc-parse.y"
++#line 2658 "objc-parse.y"
+ {
+ finish_method_def ();
+ objc_method_context = NULL_TREE;
+ ;
+ break;}
+ case 471:
+-#line 2652 "objc-parse.y"
++#line 2664 "objc-parse.y"
+ {
+ remember_protocol_qualifiers ();
+ if (objc_implementation_context)
+@@ -4646,7 +4702,7 @@
+ ;
+ break;}
+ case 472:
+-#line 2660 "objc-parse.y"
++#line 2672 "objc-parse.y"
+ {
+ forget_protocol_qualifiers ();
+ add_instance_method (objc_implementation_context, yyvsp[0].ttype);
+@@ -4655,28 +4711,28 @@
+ ;
+ break;}
+ case 473:
+-#line 2667 "objc-parse.y"
++#line 2679 "objc-parse.y"
+ {
+ continue_method_def ();
+ ;
+ break;}
+ case 474:
+-#line 2671 "objc-parse.y"
++#line 2683 "objc-parse.y"
+ {
+ finish_method_def ();
+ objc_method_context = NULL_TREE;
+ ;
+ break;}
+ case 476:
+-#line 2683 "objc-parse.y"
++#line 2695 "objc-parse.y"
+ {yyval.ttype = NULL_TREE; ;
+ break;}
+ case 481:
+-#line 2690 "objc-parse.y"
++#line 2702 "objc-parse.y"
+ {yyval.ttype = NULL_TREE; ;
+ break;}
+ case 485:
+-#line 2700 "objc-parse.y"
++#line 2712 "objc-parse.y"
+ {
+ /* Remember protocol qualifiers in prototypes. */
+ remember_protocol_qualifiers ();
+@@ -4684,7 +4740,7 @@
+ ;
+ break;}
+ case 486:
+-#line 2706 "objc-parse.y"
++#line 2718 "objc-parse.y"
+ {
+ /* Forget protocol qualifiers here. */
+ forget_protocol_qualifiers ();
+@@ -4692,7 +4748,7 @@
+ ;
+ break;}
+ case 488:
+-#line 2714 "objc-parse.y"
++#line 2726 "objc-parse.y"
+ {
+ /* Remember protocol qualifiers in prototypes. */
+ remember_protocol_qualifiers ();
+@@ -4700,7 +4756,7 @@
+ ;
+ break;}
+ case 489:
+-#line 2720 "objc-parse.y"
++#line 2732 "objc-parse.y"
+ {
+ /* Forget protocol qualifiers here. */
+ forget_protocol_qualifiers ();
+@@ -4708,94 +4764,94 @@
+ ;
+ break;}
+ case 491:
+-#line 2730 "objc-parse.y"
++#line 2742 "objc-parse.y"
+ {
+ yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE);
+ ;
+ break;}
+ case 492:
+-#line 2735 "objc-parse.y"
++#line 2747 "objc-parse.y"
+ {
+ yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[0].ttype, NULL_TREE);
+ ;
+ break;}
+ case 493:
+-#line 2740 "objc-parse.y"
++#line 2752 "objc-parse.y"
+ {
+ yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 494:
+-#line 2745 "objc-parse.y"
++#line 2757 "objc-parse.y"
+ {
+ yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 503:
+-#line 2775 "objc-parse.y"
++#line 2787 "objc-parse.y"
+ { current_declspecs = TREE_VALUE (declspec_stack);
+ prefix_attributes = TREE_PURPOSE (declspec_stack);
+ declspec_stack = TREE_CHAIN (declspec_stack);
+ resume_momentary (yyvsp[-2].itype); ;
+ break;}
+ case 504:
+-#line 2780 "objc-parse.y"
++#line 2792 "objc-parse.y"
+ { shadow_tag (yyvsp[-1].ttype); ;
+ break;}
+ case 505:
+-#line 2782 "objc-parse.y"
++#line 2794 "objc-parse.y"
+ { pedwarn ("empty declaration"); ;
+ break;}
+ case 506:
+-#line 2787 "objc-parse.y"
++#line 2799 "objc-parse.y"
+ { push_parm_decl (yyvsp[0].ttype); ;
+ break;}
+ case 507:
+-#line 2789 "objc-parse.y"
++#line 2801 "objc-parse.y"
+ { push_parm_decl (yyvsp[0].ttype); ;
+ break;}
+ case 508:
+-#line 2797 "objc-parse.y"
++#line 2809 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+ yyvsp[0].ttype)); ;
+ break;}
+ case 509:
+-#line 2802 "objc-parse.y"
++#line 2814 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+ yyvsp[0].ttype)); ;
+ break;}
+ case 510:
+-#line 2807 "objc-parse.y"
++#line 2819 "objc-parse.y"
+ { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
+ yyvsp[-1].ttype),
+ build_tree_list (prefix_attributes,
+ yyvsp[0].ttype)); ;
+ break;}
+ case 511:
+-#line 2815 "objc-parse.y"
++#line 2827 "objc-parse.y"
+ {
+ yyval.ttype = NULL_TREE;
+ ;
+ break;}
+ case 512:
+-#line 2819 "objc-parse.y"
++#line 2831 "objc-parse.y"
+ {
+ /* oh what a kludge! */
+ yyval.ttype = (tree)1;
+ ;
+ break;}
+ case 513:
+-#line 2824 "objc-parse.y"
++#line 2836 "objc-parse.y"
+ {
+ pushlevel (0);
+ ;
+ break;}
+ case 514:
+-#line 2828 "objc-parse.y"
++#line 2840 "objc-parse.y"
+ {
+ /* returns a tree list node generated by get_parm_info */
+ yyval.ttype = yyvsp[0].ttype;
+@@ -4803,119 +4859,119 @@
+ ;
+ break;}
+ case 517:
+-#line 2843 "objc-parse.y"
++#line 2855 "objc-parse.y"
+ {
+ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 522:
+-#line 2856 "objc-parse.y"
++#line 2868 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 523:
+-#line 2857 "objc-parse.y"
++#line 2869 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 524:
+-#line 2858 "objc-parse.y"
++#line 2870 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 525:
+-#line 2859 "objc-parse.y"
++#line 2871 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 526:
+-#line 2860 "objc-parse.y"
++#line 2872 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 527:
+-#line 2861 "objc-parse.y"
++#line 2873 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 528:
+-#line 2862 "objc-parse.y"
++#line 2874 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 529:
+-#line 2863 "objc-parse.y"
++#line 2875 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 530:
+-#line 2864 "objc-parse.y"
++#line 2876 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 531:
+-#line 2865 "objc-parse.y"
++#line 2877 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 532:
+-#line 2866 "objc-parse.y"
++#line 2878 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 533:
+-#line 2867 "objc-parse.y"
++#line 2879 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 534:
+-#line 2868 "objc-parse.y"
++#line 2880 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 535:
+-#line 2869 "objc-parse.y"
++#line 2881 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 536:
+-#line 2870 "objc-parse.y"
++#line 2882 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 537:
+-#line 2871 "objc-parse.y"
++#line 2883 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 538:
+-#line 2872 "objc-parse.y"
++#line 2884 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 539:
+-#line 2873 "objc-parse.y"
++#line 2885 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 540:
+-#line 2874 "objc-parse.y"
++#line 2886 "objc-parse.y"
+ { yyval.ttype = get_identifier (token_buffer); ;
+ break;}
+ case 543:
+-#line 2880 "objc-parse.y"
++#line 2892 "objc-parse.y"
+ {
+ yyval.ttype = build_keyword_decl (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 544:
+-#line 2885 "objc-parse.y"
++#line 2897 "objc-parse.y"
+ {
+ yyval.ttype = build_keyword_decl (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
+ ;
+ break;}
+ case 545:
+-#line 2890 "objc-parse.y"
++#line 2902 "objc-parse.y"
+ {
+ yyval.ttype = build_keyword_decl (NULL_TREE, yyvsp[-2].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 546:
+-#line 2895 "objc-parse.y"
++#line 2907 "objc-parse.y"
+ {
+ yyval.ttype = build_keyword_decl (NULL_TREE, NULL_TREE, yyvsp[0].ttype);
+ ;
+ break;}
+ case 550:
+-#line 2908 "objc-parse.y"
++#line 2920 "objc-parse.y"
+ {
+ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 551:
+-#line 2916 "objc-parse.y"
++#line 2928 "objc-parse.y"
+ {
+ if (TREE_CHAIN (yyvsp[0].ttype) == NULL_TREE)
+ /* just return the expr., remove a level of indirection */
+@@ -4926,76 +4982,76 @@
+ ;
+ break;}
+ case 552:
+-#line 2928 "objc-parse.y"
++#line 2940 "objc-parse.y"
+ {
+ yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 553:
+-#line 2932 "objc-parse.y"
++#line 2944 "objc-parse.y"
+ {
+ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype);
+ ;
+ break;}
+ case 555:
+-#line 2940 "objc-parse.y"
++#line 2952 "objc-parse.y"
+ {
+ yyval.ttype = get_class_reference (yyvsp[0].ttype);
+ ;
+ break;}
+ case 556:
+-#line 2947 "objc-parse.y"
++#line 2959 "objc-parse.y"
+ { objc_receiver_context = 1; ;
+ break;}
+ case 557:
+-#line 2949 "objc-parse.y"
++#line 2961 "objc-parse.y"
+ { objc_receiver_context = 0; ;
+ break;}
+ case 558:
+-#line 2951 "objc-parse.y"
++#line 2963 "objc-parse.y"
+ {
+ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype);
+ ;
+ break;}
+ case 562:
+-#line 2964 "objc-parse.y"
++#line 2976 "objc-parse.y"
+ {
+ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
+ ;
+ break;}
+ case 563:
+-#line 2971 "objc-parse.y"
++#line 2983 "objc-parse.y"
+ {
+ yyval.ttype = build_tree_list (yyvsp[-1].ttype, NULL_TREE);
+ ;
+ break;}
+ case 564:
+-#line 2975 "objc-parse.y"
++#line 2987 "objc-parse.y"
+ {
+ yyval.ttype = build_tree_list (NULL_TREE, NULL_TREE);
+ ;
+ break;}
+ case 565:
+-#line 2982 "objc-parse.y"
++#line 2994 "objc-parse.y"
+ {
+ yyval.ttype = yyvsp[-1].ttype;
+ ;
+ break;}
+ case 566:
+-#line 2989 "objc-parse.y"
++#line 3001 "objc-parse.y"
+ {
+ yyval.ttype = yyvsp[-1].ttype;
+ ;
+ break;}
+ case 567:
+-#line 2998 "objc-parse.y"
++#line 3010 "objc-parse.y"
+ {
+ yyval.ttype = groktypename (yyvsp[-1].ttype);
+ ;
+ break;}
+ }
+ /* the action file gets copied in in place of this dollarsign */
+-#line 498 "/usr/lib/bison.simple"
++#line 543 "/usr/lib/bison.simple"
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+@@ -5190,6 +5246,30 @@
+
+ yystate = yyn;
+ goto yynewstate;
++
++ yyacceptlab:
++ /* YYACCEPT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 0;
++
++ yyabortlab:
++ /* YYABORT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 1;
+ }
+-#line 3003 "objc-parse.y"
++#line 3015 "objc-parse.y"
+
+diff -ruNb gcc-2.95.3/gcc/objc/objc-parse.y gcc-2.95.4/gcc/objc/objc-parse.y
+--- gcc-2.95.3/gcc/objc/objc-parse.y 1999-04-27 00:35:58.000000000 +0200
++++ gcc-2.95.4/gcc/objc/objc-parse.y 2017-11-07 22:10:12.000000000 +0100
+@@ -152,7 +152,7 @@
+ %type <ttype> init maybeasm
+ %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
+ %type <ttype> maybe_attribute attributes attribute attribute_list attrib
+-%type <ttype> any_word
++%type <ttype> any_word extension
+
+ %type <ttype> compstmt
+
+@@ -211,6 +211,17 @@
+ /* 1 if we explained undeclared var errors. */
+ static int undeclared_variable_notice;
+
++/* For __extension__, save/restore the warning flags which are
++ controlled by __extension__. */
++#define SAVE_WARN_FLAGS() \
++ build_int_2 (pedantic | (warn_pointer_arith << 1), 0)
++#define RESTORE_WARN_FLAGS(tval) \
++ do { \
++ int val = TREE_INT_CST_LOW (tval); \
++ pedantic = val & 1; \
++ warn_pointer_arith = (val >> 1) & 1; \
++ } while (0)
++
+ /* Objective-C specific information */
+
+ tree objc_interface_context;
+@@ -267,7 +278,7 @@
+ else
+ error ("argument of `asm' is not a constant string"); }
+ | extension extdef
+- { pedantic = $<itype>1; }
++ { RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ datadef:
+@@ -406,7 +417,7 @@
+ /* __extension__ turns off -pedantic for following primary. */
+ | extension cast_expr %prec UNARY
+ { $$ = $2;
+- pedantic = $<itype>1; }
++ RESTORE_WARN_FLAGS ($1); }
+ | unop cast_expr %prec UNARY
+ { $$ = build_unary_op ($1, $2, 0);
+ overflow_warning ($$); }
+@@ -957,7 +968,7 @@
+ | declmods ';'
+ { pedwarn ("empty declaration"); }
+ | extension decl
+- { pedantic = $<itype>1; }
++ { RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ /* Declspecs which contain at least one type specifier or typedef name.
+@@ -1530,7 +1541,7 @@
+ { $$ = NULL_TREE; }
+ | extension component_decl
+ { $$ = $2;
+- pedantic = $<itype>1; }
++ RESTORE_WARN_FLAGS ($1); }
+ ;
+
+ components:
+@@ -2340,8 +2351,9 @@
+
+ extension:
+ EXTENSION
+- { $<itype>$ = pedantic;
+- pedantic = 0; }
++ { $$ = SAVE_WARN_FLAGS();
++ pedantic = 0;
++ warn_pointer_arith = 0; }
+ ;
+
+ /* Objective-C productions. */
+diff -ruNb gcc-2.95.3/gcc/ONEWS gcc-2.95.4/gcc/ONEWS
+--- gcc-2.95.3/gcc/ONEWS 1998-12-16 21:53:03.000000000 +0100
++++ gcc-2.95.4/gcc/ONEWS 1970-01-01 01:00:00.000000000 +0100
+@@ -1,1071 +0,0 @@
+-Noteworthy changes in GCC after EGCS 1.1.
+------------------------------------------
+-
+-Target specific NEWS
+-
+- RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403. -mcpu=e603e
+- was added to do -mcpu=603e and -msoft-float.
+-
+-Noteworthy changes in GCC for EGCS 1.1.
+----------------------------------------
+-
+-The compiler now implements global common subexpression elimination (gcse) as
+-well as global constant/copy propagation. (link to gcse page).
+-
+-More major improvements have been made to the alias analysis code. A new
+-option to allow front-ends to provide alias information to the optimizers
+-has also been added (-fstrict-aliasing). -fstrict-aliasing is off by default
+-now, but will be enabled by default in the future. (link to alias page)
+-
+-Major changes continue in the exception handling support. This release
+-includes some changes to reduce static overhead for exception handling. It
+-also includes some major changes to the setjmp/longjmp based EH mechanism to
+-make it less pessimistic. And finally, major infrastructure improvements
+-to the dwarf2 EH mechanism have been made to make our EH support extensible.
+-
+-We have fixed the infamous security problems with temporary files.
+-
+-The "regmove" optimization pass has been nearly completely rewritten. It now
+-uses much more information about the target to determine profitability of
+-transformations.
+-
+-The compiler now recomputes register usage information immediately before
+-register allocation. Previously such information was only not kept up to
+-date after instruction combination which led to poor register allocation
+-choices by our priority based register allocator.
+-
+-The register reloading phase of the compiler has been improved to better
+-optimize spill code. This primarily helps targets which generate lots of
+-spills (like the x86 ports and many register poor embedded ports).
+-
+-A few changes in the heuristics used by the register allocator and scheduler
+-have been made which can significantly improve performance for certain
+-applications.
+-
+-The compiler's branch shortening algorithms have been significantly improved
+-to work better on targets which align jump targets.
+-
+-The compiler now supports the "ADDRESSOF" optimization which can significantly
+-reduce the overhead for certain inline calls (and inline calls in general).
+-
+-The compiler now supports a code size optimization switch (-Os). When enabled
+-the compiler will prefer optimizations which improve code size over those
+-which improve code speed.
+-
+-The compiler has been improved to completely eliminate library calls which
+-compute constant values. This is particularly useful on machines which
+-do not have integer mul/div or floating point support on-chip.
+-
+-GCC now supports a "--help" option to print detailed help information.
+-
+-cpplib has been greatly improved. It is probably useable for some sites now
+-(major missing feature is trigraphs).
+-
+-Memory footprint for the compiler has been significantly reduced for certain
+-pathalogical cases.
+-
+-Build time improvements for targets which support lots of sched parameters
+-(alpha and mips primarily).
+-
+-Compile time for certain programs using large constant initializers has been
+-improved (effects glibc significantly).
+-
+-Plus an incredible number of infrastructure changes, warning fixes, bugfixes
+-and local optimizations.
+-
+-Various improvements have been made to better support cross compilations. They
+-are still not easy, but they are improving.
+-
+-Target specific NEWS
+-
+- Sparc: Now includes V8 plus and V9 support, lots of tuning for Ultrasparcs
+- and uses the Haifa scheduler by default.
+-
+- Alpha: EV6 tuned, optimized expansion of memcpy/bzero.
+-
+- x86: Data in the static store is aligned per Intel recommendations. Jump
+- targets are aligned per Intel recommendations. Improved epilogue
+- sequences for Pentium chips. Backend improvements which should help
+- register allocation on all x86 variants. Support for PPro conditional
+- move instructions has been fixed and enabled. Random changes
+- throughout the port to make generated code more Pentium friendly.
+- Improved support for 64bit integer operations.
+- Unixware 7, a System V Release 5 target is now supported.
+- SCO OpenServer targets can support GAS. See gcc/INSTALL for details.
+-
+- RS6000/PowerPC: Includes AIX4.3 support as well as PowerPC64 support.
+- Haifa instruction scheduling is enabled by default now.
+-
+- MIPS: Multiply/Multiply-Add support has been largely rewritten to generate
+- more efficient code. Includes mips16 support.
+-
+- M68K: Various micro-optimizations and Coldfire fixes.
+-
+- M32r: Major improvements to this port.
+-
+- Arm: Includes Thumb and super interworking support.
+-
+-EGCS includes all gcc2 changes up to and including the June 9, 1998 snapshot.
+-
+-
+-Noteworthy changes in GCC version 2.8.1
+----------------------------------------
+-
+-Numerous bugs have been fixed and some minor performance
+-improvements (compilation speed) have been made.
+-
+-Noteworthy changes in GCC version 2.8.0
+----------------------------------------
+-
+-A major change in this release is the addition of a framework for
+-exception handling, currently used by C++. Many internal changes and
+-optimization improvements have been made. These increase the
+-maintainability and portability of GCC. GCC now uses autoconf to
+-compute many host parameters.
+-
+-The following lists changes that add new features or targets.
+-
+-See cp/NEWS for new features of C++ in this release.
+-
+-New tools and features:
+-
+- The Dwarf 2 debugging information format is supported on ELF systems, and
+- is the default for -ggdb where available. It can also be used for C++.
+- The Dwarf version 1 debugging format is also permitted for C++, but
+- does not work well.
+-
+- gcov.c is provided for test coverage analysis and branch profiling
+- analysis is also supported; see -fprofile-arcs, -ftest-coverage,
+- and -fbranch-probabilities.
+-
+- Support for the Checker memory checking tool.
+-
+- New switch, -fstack-check, to check for stack overflow on systems that
+- don't have such built into their ABI.
+-
+- New switches, -Wundef and -Wno-undef to warn if an undefined identifier
+- is evaluated in an #if directive.
+-
+- Options -Wall and -Wimplicit now cause GCC to warn about implicit int
+- in declarations (e.g. `register i;'), since the C Standard committee
+- has decided to disallow this in the next revision of the standard;
+- -Wimplicit-function-declarations and -Wimplicit-int are subsets of
+- this.
+-
+- Option -Wsign-compare causes GCC to warn about comparison of signed and
+- unsigned values.
+-
+- Add -dI option of cccp for cxref.
+-
+-New features in configuration, installation and specs file handling:
+-
+- New option --enable-c-cpplib to configure script.
+-
+- You can use --with-cpu on the configure command to specify the default
+- CPU that GCC should generate code for.
+-
+- The -specs=file switch allows you to override default specs used in
+- invoking programs like cc1, as, etc.
+-
+- Allow including one specs file from another and renaming a specs
+- variable.
+-
+- You can now relocate all GCC files with a single environment variable
+- or a registry entry under Windows 95 and Windows NT.
+-
+-Changes in Objective-C:
+-
+- The Objective-C Runtime Library has been made thread-safe.
+-
+- The Objective-C Runtime Library contains an interface for creating
+- mutexes, condition mutexes, and threads; it requires a back-end
+- implementation for the specific platform and/or thread package.
+- Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads,
+- Solaris, and Windows32. The --enable-threads parameter can be used
+- when configuring GCC to enable and select a thread back-end.
+-
+- Objective-C is now configured as separate front-end language to GCC,
+- making it more convenient to conditionally build it.
+-
+- The internal structures of the Objective-C Runtime Library have
+- changed sufficiently to warrant a new version number; now version 8.
+- Programs compiled with an older version must be recompiled.
+-
+- The Objective-C Runtime Library can be built as a DLL on Windows 95
+- and Windows NT systems.
+-
+- The Objective-C Runtime Library implements +load.
+-
+-The following new targets are supported (see also list under each
+-individual CPU below):
+-
+- Embedded target m32r-elf.
+- Embedded Hitachi Super-H using ELF.
+- RTEMS real-time system on various CPU targets.
+- ARC processor.
+- NEC V850 processor.
+- Matsushita MN10200 processor.
+- Matsushita MN10300 processor.
+- Sparc and PowerPC running on VxWorks.
+- Support both glibc versions 1 and 2 on Linux-based GNU systems.
+-
+-New features for DEC Alpha systems:
+-
+- Allow detailed specification of IEEE fp support:
+- -mieee, -mieee-with-inexact, and -mieee-conformant
+- -mfp-trap-mode=xxx, -mfp-round-mode=xxx, -mtrap-precision=xxx
+- -mcpu=xxx for CPU selection
+- Support scheduling parameters for EV5.
+- Add support for BWX, CIX, and MAX instruction set extensions.
+- Support Linux-based GNU systems.
+- Support VMS.
+-
+-Additional supported processors and systems for MIPS targets:
+-
+- MIPS4 instruction set.
+- R4100, R4300 and R5000 processors.
+- N32 and N64 ABI.
+- IRIX 6.2.
+- SNI SINIX.
+-
+-New features for Intel x86 family:
+-
+- Add scheduling parameters for Pentium and Pentium Pro.
+- Support stabs on Solaris-x86.
+- Intel x86 processors running the SCO OpenServer 5 family.
+- Intel x86 processors running DG/UX.
+- Intel x86 using Cygwin32 or Mingw32 on Windows 95 and Windows NT.
+-
+-New features for Motorola 68k family:
+-
+- Support for 68060 processor.
+- More consistent switches to specify processor.
+- Motorola 68k family running AUX.
+- 68040 running pSOS, ELF object files, DBX debugging.
+- Coldfire variant of Motorola m68k family.
+-
+-New features for the HP PA RISC:
+-
+- -mspace and -mno-space
+- -mlong-load-store and -mno-long-load-store
+- -mbig-switch -mno-big-switch
+-
+- GCC on the PA requires either gas-2.7 or the HP assembler; for best
+- results using GAS is highly recommended. GAS is required for -g and
+- exception handling support.
+-
+-New features for SPARC-based systems:
+-
+- The ultrasparc cpu.
+- The sparclet cpu, supporting only a.out file format.
+- Sparc running SunOS 4 with the GNU assembler.
+- Sparc running the Linux-based GNU system.
+- Embedded Sparc processors running the ELF object file format.
+- -mcpu=xxx
+- -mtune=xxx
+- -malign-loops=xxx
+- -malign-jumps=xxx
+- -malign-functions=xxx
+- -mimpure-text and -mno-impure-text
+-
+- Options -mno-v8 and -mno-sparclite are no longer supported on SPARC
+- targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930,
+- and -mf934 are deprecated and will be deleted in GCC 2.9. Use
+- -mcpu=xxx instead.
+-
+-New features for rs6000 and PowerPC systems:
+-
+- Solaris 2.51 running on PowerPC's.
+- The Linux-based GNU system running on PowerPC's.
+- -mcpu=604e,602,603e,620,801,823,mpc505,821,860,power2
+- -mtune=xxx
+- -mrelocatable-lib, -mno-relocatable-lib
+- -msim, -mmve, -memb
+- -mupdate, -mno-update
+- -mfused-madd, -mno-fused-madd
+-
+- -mregnames
+- -meabi
+- -mcall-linux, -mcall-solaris, -mcall-sysv-eabi, -mcall-sysv-noeabi
+- -msdata, -msdata=none, -msdata=default, -msdata=sysv, -msdata=eabi
+- -memb, -msim, -mmvme
+- -myellowknife, -mads
+- wchar_t is now of type long as per the ABI, not unsigned short.
+- -p/-pg support
+- -mcpu=403 now implies -mstrict-align.
+- Implement System V profiling.
+-
+- Aix 4.1 GCC targets now default to -mcpu=common so that programs
+- compiled can be moved between rs6000 and powerpc based systems. A
+- consequence of this is that -static won't work, and that some programs
+- may be slightly slower.
+-
+- You can select the default value to use for -mcpu=xxx on rs6000 and
+- powerpc targets by using the --with-cpu=xxx option when configuring the
+- compiler. In addition, a new options, -mtune=xxx was added that
+- selects the machine to schedule for but does not select the
+- architecture level.
+-
+- Directory names used for storing the multilib libraries on System V
+- and embedded PowerPC systems have been shortened to work with commands
+- like tar that have fixed limits on pathname size.
+-
+-New features for the Hitachi H8/300(H):
+-
+- -malign-300
+- -ms (for the Hitachi H8/S processor)
+- -mint32
+-
+-New features for the ARM:
+-
+- -march=xxx, -mtune=xxx, -mcpu=xxx
+- Support interworking with Thumb code.
+- ARM processor with a.out object format, COFF, or AOF assembler.
+- ARM on "semi-hosted" platform.
+- ARM running NetBSD.
+- ARM running the Linux-based GNU system.
+-
+-New feature for Solaris systems:
+-
+- GCC installation no longer makes a copy of system include files,
+- thus insulating GCC better from updates to the operating system.
+-
+-
+-Noteworthy changes in GCC version 2.7.2
+----------------------------------------
+-
+-A few bugs have been fixed (most notably the generation of an
+-invalid assembler opcode on some RS/6000 systems).
+-
+-Noteworthy changes in GCC version 2.7.1
+----------------------------------------
+-
+-This release fixes numerous bugs (mostly minor) in GCC 2.7.0, but
+-also contains a few new features, mostly related to specific targets.
+-
+-Major changes have been made in code to support Windows NT.
+-
+-The following new targets are supported:
+-
+- 2.9 BSD on PDP-11
+- Linux on m68k
+- HP/UX version 10 on HP PA RISC (treated like version 9)
+- DEC Alpha running Windows NT
+-
+-When parsing C, GCC now recognizes C++ style `//' comments unless you
+-specify `-ansi' or `-traditional'.
+-
+-The PowerPC System V targets (powerpc-*-sysv, powerpc-*-eabi) now use the
+-calling sequence specified in the System V Application Binary Interface
+-Processor Supplement (PowerPC Processor ABI Supplement) rather than the calling
+-sequence used in GCC version 2.7.0. That calling sequence was based on the AIX
+-calling sequence without function descriptors. To compile code for that older
+-calling sequence, either configure the compiler for powerpc-*-eabiaix or use
+-the -mcall-aix switch when compiling and linking.
+-
+-Noteworthy changes in GCC version 2.7.0
+----------------------------------------
+-
+-GCC now works better on systems that use ".obj" and ".exe" instead of
+-".o" and no extension. This involved changes to the driver program,
+-gcc.c, to convert ".o" names to ".obj" and to GCC's Makefile to use
+-".obj" and ".exe" in filenames that are not targets. In order to
+-build GCC on such systems, you may need versions of GNU make and/or
+-compatible shells. At this point, this support is preliminary.
+-
+-Object file extensions of ".obj" and executable file extensions of
+-".exe" are allowed when using appropriate version of GNU Make.
+-
+-Numerous enhancements were made to the __attribute__ facility including
+-more attributes and more places that support it. We now support the
+-"packed", "nocommon", "noreturn", "volatile", "const", "unused",
+-"transparent_union", "constructor", "destructor", "mode", "section",
+-"align", "format", "weak", and "alias" attributes. Each of these
+-names may also be specified with added underscores, e.g., "__packed__".
+-__attribute__ may now be applied to parameter definitions, function
+-definitions, and structure, enum, and union definitions.
+-
+-GCC now supports returning more structures in registers, as specified by
+-many calling sequences (ABIs), such as on the HP PA RISC.
+-
+-A new option '-fpack-struct' was added to automatically pack all structure
+-members together without holes.
+-
+-There is a new library (cpplib) and program (cppmain) that at some
+-point will replace cpp (aka cccp). To use cppmain as cpp now, pass
+-the option CCCP=cppmain to make. The library is already used by the
+-fix-header program, which should speed up the fixproto script.
+-
+-New options for supported targets:
+-
+- GNU on many targets.
+- NetBSD on MIPS, m68k, VAX, and x86.
+- LynxOS on x86, m68k, Sparc, and RS/6000.
+- VxWorks on many targets.
+-
+- Windows/NT on x86 architecture. Initial support for Windows/NT on Alpha
+- (not fully working).
+-
+- Many embedded targets, specifically UDI on a29k, aout, coff, elf,
+- and vsta "operating systems" on m68k, m88k, mips, sparc, and x86.
+-
+-Additional support for x86 (i386, i486, and Pentium):
+-
+- Work with old and new linkers for Linux-based GNU systems,
+- supporting both a.out and ELF.
+- FreeBSD on x86.
+- Stdcall convention.
+- -malign-double, -mregparm=, -malign-loops= and -malign-jumps= switches.
+- On ISC systems, support -Xp like -posix.
+-
+-Additions for RS/6000:
+-
+- Instruction scheduling information for PowerPC 403.
+- AIX 4.1 on PowerPC.
+- -mstring and -mno-string.
+- -msoft-float and floating-point emulation included.
+- Preliminary support for PowerPC System V.4 with or without the GNU as.
+- Preliminary support for EABI.
+- Preliminary support for 64-bit systems.
+- Both big and little endian systems.
+-
+-New features for MIPS-based systems:
+-
+- r4650.
+- mips4 and R8000.
+- Irix 6.0.
+- 64-bit ABI.
+- Allow dollar signs in labels on SGI/Irix 5.x.
+-
+-New support for HP PA RISC:
+-
+- Generation of PIC (requires binutils-2.5.2.u6 or later).
+- HP-UX version 9 on HP PA RISC (dynamically links even with -g).
+- Processor variants for HP PA RISC: 700, 7100, and 7100LC.
+- Automatic generation of long calls when needed.
+- -mfast-indirect-calls for kernels and static binaries.
+-
+- The called routine now copies arguments passed by invisible reference,
+- as required by the calling standard.
+-
+-Other new miscellaneous target-specific support:
+-
+- -mno-multm on a29k.
+- -mold-align for i960.
+- Configuration for "semi-hosted" ARM.
+- -momit-leaf-frame-pointer for M88k.
+- SH3 variant of Hitachi Super-H and support both big and little endian.
+-
+-Changes to Objective-C:
+-
+- Bare-bones implementation of NXConstantString has been added,
+- which is invoked by the @"string" directive.
+-
+- Class * has been changed to Class to conform to the NextSTEP and
+- OpenStep runtime.
+-
+- Enhancements to make dynamic loading easier.
+-
+- The module version number has been updated to Version 7, thus existing
+- code will need to be recompiled to use the current run-time library.
+-
+-GCC now supports the ISO Normative Addendum 1 to the C Standard.
+-As a result:
+-
+- The header <iso646.h> defines macros for C programs written
+- in national variants of ISO 646.
+-
+- The following digraph tokens are supported:
+- <: :> <% %> %: %:%:
+- These behave like the following, respectively:
+- [ ] { } # ##
+-
+- Digraph tokens are supported unless you specify the `-traditional'
+- option; you do not need to specify `-ansi' or `-trigraphs'. Except
+- for contrived and unlikely examples involving preprocessor
+- stringizing, digraph interpretation doesn't change the meaning of
+- programs; this is unlike trigraph interpretation, which changes the
+- meanings of relatively common strings.
+-
+- The macro __STDC_VERSION__ has the value 199409L.
+-
+- As usual, for full conformance to the standard, you also need a
+- C library that conforms.
+-
+-The following lists changes that have been made to g++. If some
+-features mentioned below sound unfamiliar, you will probably want to
+-look at the recently-released public review copy of the C++ Working
+-Paper. For PostScript and PDF (Adobe Acrobat) versions, see the
+-archive at ftp://research.att.com/dist/stdc++/WP. For HTML and ASCII
+-versions, see ftp://ftp.cygnus.com/pub/g++. On the web, see
+-http://www.cygnus.com/~mrs/wp-draft.
+-
+-The scope of variables declared in the for-init-statement has been changed
+-to conform to http://www.cygnus.com/~mrs/wp-draft/stmt.html#stmt.for; as a
+-result, packages such as groff 1.09 will not compile unless you specify the
+--fno-for-scope flag. PLEASE DO NOT REPORT THIS AS A BUG; this is a change
+-mandated by the C++ standardization committee.
+-
+-Binary incompatibilities:
+-
+- The builtin 'bool' type is now the size of a machine word on RISC targets,
+- for code efficiency; it remains one byte long on CISC targets.
+-
+- Code that does not use #pragma interface/implementation will most
+- likely shrink dramatically, as g++ now only emits the vtable for a
+- class in the translation unit where its first non-inline, non-abstract
+- virtual function is defined.
+-
+- Classes that do not define the copy constructor will sometimes be
+- passed and returned in registers. This may illuminate latent bugs in
+- your code.
+-
+-Support for automatic template instantiation has *NOT* been added, due
+-to a disagreement over design philosophies.
+-
+-Support for exception handling has been improved; more targets are now
+-supported, and throws will use the RTTI mechanism to match against the
+-catch parameter type. Optimization is NOT SUPPORTED with
+--fhandle-exceptions; no need to report this as a bug.
+-
+-Support for Run-Time Type Identification has been added with -frtti.
+-This support is still in alpha; one major restriction is that any file
+-compiled with -frtti must include <typeinfo.h>.
+-
+-Preliminary support for namespaces has been added. This support is far
+-from complete, and probably not useful.
+-
+-Synthesis of compiler-generated constructors, destructors and
+-assignment operators is now deferred until the functions are used.
+-
+-The parsing of expressions such as `a ? b : c = 1' has changed from
+-`(a ? b : c) = 1' to `a : b ? (c = 1)'.
+-
+-The code generated for testing conditions, especially those using ||
+-and &&, is now more efficient.
+-
+-The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
+-or, or_eq, xor and xor_eq are now supported. Use -ansi or
+--foperator-names to enable them.
+-
+-The 'explicit' keyword is now supported. 'explicit' is used to mark
+-constructors and type conversion operators that should not be used
+-implicitly.
+-
+-g++ now accepts the typename keyword, though it currently has no
+-semantics; it can be a no-op in the current template implementation.
+-You may want to start using it in your code, however, since the
+-pending rewrite of the template implementation to compile STL properly
+-(perhaps for 2.8.0, perhaps not) will require you to use it as
+-indicated by the current draft.
+-
+-Handling of user-defined type conversion has been overhauled so that
+-type conversion operators are now found and used properly in
+-expressions and function calls.
+-
+--fno-strict-prototype now only applies to function declarations with
+-"C" linkage.
+-
+-g++ now warns about 'if (x=0)' with -Wparentheses or -Wall.
+-
+-#pragma weak and #pragma pack are supported on System V R4 targets, as
+-are various other target-specific #pragmas supported by gcc.
+-
+-new and delete of const types is now allowed (with no additional
+-semantics).
+-
+-Explicit instantiation of template methods is now supported. Also,
+-'inline template class foo<int>;' can be used to emit only the vtable
+-for a template class.
+-
+-With -fcheck-new, g++ will check the return value of all calls to
+-operator new, and not attempt to modify a returned null pointer.
+-
+-The template instantiation code now handles more conversions when
+-passing to a parameter that does not depend on template arguments.
+-This means that code like 'string s; cout << s;' now works.
+-
+-Invalid jumps in a switch statement past declarations that require
+-initializations are now caught.
+-
+-Functions declared 'extern inline' now have the same linkage semantics
+-as inline member functions. On supported targets, where previously
+-these functions (and vtables, and template instantiations) would have
+-been defined statically, they will now be defined as weak symbols so
+-that only one out-of-line definition is used.
+-
+-collect2 now demangles linker output, and c++filt has become part of
+-the gcc distribution.
+-
+-Noteworthy changes in GCC version 2.6.3:
+-
+-A few more bugs have been fixed.
+-
+-Noteworthy changes in GCC version 2.6.2:
+-
+-A few bugs have been fixed.
+-
+-Names of attributes can now be preceded and followed by double underscores.
+-
+-Noteworthy changes in GCC version 2.6.1:
+-
+-Numerous (mostly minor) bugs have been fixed.
+-
+-The following new configurations are supported:
+-
+- GNU on x86 (instead of treating it like MACH)
+- NetBSD on Sparc and Motorola 68k
+- AIX 4.1 on RS/6000 and PowerPC systems
+- Sequent DYNIX/ptx 1.x and 2.x.
+- Both COFF and ELF configurations on AViiON without using /bin/gcc
+- Windows/NT on x86 architecture; preliminary
+- AT&T DSP1610 digital signal processor chips
+- i960 systems on bare boards using COFF
+- PDP11; target only and not extensively tested
+-
+-The -pg option is now supported for Alpha under OSF/1 V3.0 or later.
+-
+-Files with an extension of ".c++" are treated as C++ code.
+-
+-The -Xlinker and -Wl arguments are now passed to the linker in the
+-position they were specified on the command line. This makes it
+-possible, for example, to pass flags to the linker about specific
+-object files.
+-
+-The use of positional arguments to the configure script is no longer
+-recommended. Use --target= to specify the target; see the GCC manual.
+-
+-The 386 now supports two new switches: -mreg-alloc=<string> changes
+-the default register allocation order used by the compiler, and
+--mno-wide-multiply disables the use of the mul/imul instructions that
+-produce 64 bit results in EAX:EDX from 32 bit operands to do long long
+-multiplies and 32-bit division by constants.
+-
+-Noteworthy changes in GCC version 2.6.0:
+-
+-Numerous bugs have been fixed, in the C and C++ front-ends, as
+-well as in the common compiler code.
+-
+-This release includes the C, Objective-C, and C++ compilers. However,
+-we have moved the files for the C++ compiler (G++) files to a
+-subdirectory, cp. Subsequent releases of GCC will split these files
+-to a separate TAR file.
+-
+-The G++ team has been tracking the development of the ANSI standard for C++.
+-Here are some new features added from the latest working paper:
+-
+- * built-in boolean type 'bool', with constants 'true' and 'false'.
+- * array new and delete (operator new [] and delete []).
+- * WP-conforming lifetime of temporaries.
+- * explicit instantiation of templates (template class A<int>;),
+- along with an option (-fno-implicit-templates) to disable emission
+- of implicitly instantiated templates, obsoletes -fexternal-templates.
+- * static member constants (static const int foo = 4; within the
+- class declaration).
+-
+-Many error messages have been improved to tell the user more about the
+-problem. Conformance checking with -pedantic-errors has been
+-improved. G++ now compiles Fresco.
+-
+-There is now an experimental implementation of virtual functions using
+-thunks instead of Cfront-style vtables, enabled with -fvtable-thunks.
+-This option also enables a heuristic which causes the compiler to only
+-emit the vtable in the translation unit where its first non-inline
+-virtual function is defined; using this option and
+--fno-implicit-templates, users should be able to avoid #pragma
+-interface/implementation altogether.
+-
+-Signatures have been added as a GNU C++ extension. Using the option
+--fhandle-signatures, users are able to turn on recognition of
+-signatures. A short introduction on signatures is in the section
+-`Extension to the C++ Language' in the manual.
+-
+-The `g++' program is now a C program, rather than a shell script.
+-
+-Lots and lots and lots of bugs fixes, in nested types, access control,
+-pointers to member functions, the parser, templates, overload
+-resolution, etc, etc.
+-
+-There have been two major enhancements to the Objective-C compiler:
+-
+-1) Added portability. It now runs on Alpha, and some problems with
+- message forwarding have been addressed on other platforms.
+-
+-2) Selectors have been redefined to be pointers to structs like:
+- { void *sel_id, char *sel_types }, where the sel_id is the unique
+- identifier, the selector itself is no longer unique.
+-
+- Programmers should use the new function sel_eq to test selector
+- equivalence.
+-
+-The following major changes have been made to the base compiler and
+-machine-specific files.
+-
+-- The MIL-STD-1750A is a new port, but still preliminary.
+-
+-- The h8/300h is now supported; both the h8/300 and h8/300h ports come
+- with 32 bit IEEE 754 software floating point support.
+-
+-- The 64-bit Sparc (v9) and 64-bit MIPS chips are supported.
+-
+-- NetBSD is supported on m68k, Intel x86, and pc523 systems and FreeBSD
+- on x86.
+-
+-- COFF is supported on x86, m68k, and Sparc systems running LynxOS.
+-
+-- 68K systems from Bull and Concurrent are supported and System V
+- Release 4 is supported on the Atari.
+-
+-- GCC supports GAS on the Motorola 3300 (sysV68) and debugging
+- (assuming GAS) on the Plexus 68K system. (However, GAS does not yet
+- work on those systems).
+-
+-- System V Release 4 is supported on MIPS (Tandem).
+-
+-- For DG/UX, an ELF configuration is now supported, and both the ELF
+- and BCS configurations support ELF and COFF object file formats.
+-
+-- OSF/1 V2.0 is supported on Alpha.
+-
+-- Function profiling is also supported on Alpha.
+-
+-- GAS and GDB is supported for Irix 5 (MIPS).
+-
+-- "common mode" (code that will run on both POWER and PowerPC
+- architectures) is now supported for the RS/6000 family; the
+- compiler knows about more PPC chips.
+-
+-- Both NeXTStep 2.1 and 3 are supported on 68k-based architectures.
+-
+-- On the AMD 29k, the -msoft-float is now supported, as well as
+- -mno-sum-in-toc for RS/6000, -mapp-regs and -mflat for Sparc, and
+- -membedded-pic for MIPS.
+-
+-- GCC can now convert division by integer constants into the equivalent
+- multiplication and shift operations when that is faster than the
+- division.
+-
+-- Two new warning options, -Wbad-function-cast and
+- -Wmissing-declarations have been added.
+-
+-- Configurations may now add machine-specific __attribute__ options on
+- type; many machines support the `section' attribute.
+-
+-- The -ffast-math flag permits some optimization that violate strict
+- IEEE rules, such as converting X * 0.0 to 0.0.
+-
+-Noteworthy changes in GCC version 2.5.8:
+-
+-This release only fixes a few serious bugs. These include fixes for a
+-bug that prevented most programs from working on the RS/6000, a bug
+-that caused invalid assembler code for programs with a `switch'
+-statement on the NS32K, a G++ problem that caused undefined names in
+-some configurations, and several less serious problems, some of which
+-can affect most configuration.
+-
+-Noteworthy change in GCC version 2.5.7:
+-
+-This release only fixes a few bugs, one of which was causing bootstrap
+-compare errors on some systems.
+-
+-Noteworthy change in GCC version 2.5.6:
+-
+-A few backend bugs have been fixed, some of which only occur on one
+-machine.
+-
+-The C++ compiler in 2.5.6 includes:
+-
+- * fixes for some common crashes
+- * correct handling of nested types that are referenced as `foo::bar'
+- * spurious warnings about friends being declared static and never
+- defined should no longer appear
+- * enums that are local to a method in a class, or a class that's
+- local to a function, are now handled correctly. For example:
+- class foo { void bar () { enum { x, y } E; x; } };
+- void bar () { class foo { enum { x, y } E; E baz; }; }
+-
+-Noteworthy change in GCC version 2.5.5:
+-
+-A large number of C++ bugs have been fixed.
+-
+-The fixproto script adds prototypes conditionally on __cplusplus.
+-
+-Noteworthy change in GCC version 2.5.4:
+-
+-A bug fix in passing of structure arguments for the HP-PA architecture
+-makes code compiled with GCC 2.5.4 incompatible with code compiled
+-with earlier versions (if it passes struct arguments of 33 to 64 bits,
+-interspersed with other types of arguments).
+-
+-Noteworthy change in gcc version 2.5.3:
+-
+-The method of "mangling" C++ function names has been changed. So you
+-must recompile all C++ programs completely when you start using GCC
+-2.5. Also, GCC 2.5 requires libg++ version 2.5. Earlier libg++
+-versions won't work with GCC 2.5. (This is generally true--GCC
+-version M.N requires libg++ version M.N.)
+-
+-Noteworthy GCC changes in version 2.5:
+-
+-* There is now support for the IBM 370 architecture as a target.
+-Currently the only operating system supported is MVS; GCC does not run
+-on MVS, so you must produce .s files using GCC as a cross compiler,
+-then transfer them to MVS to assemble them. This port is not reliable
+-yet.
+-
+-* The Power PC is now supported.
+-
+-* The i860-based Paragon machine is now supported.
+-
+-* The Hitachi 3050 (an HP-PA machine) is now supported.
+-
+-* The variable __GNUC_MINOR__ holds the minor version number of GCC, as
+-an integer. For version 2.5.X, the value is 5.
+-
+-* In C, initializers for static and global variables are now processed
+-an element at a time, so that they don't need a lot of storage.
+-
+-* The C syntax for specifying which structure field comes next in an
+-initializer is now `.FIELDNAME='. The corresponding syntax for
+-array initializers is now `[INDEX]='. For example,
+-
+- char whitespace[256]
+- = { [' '] = 1, ['\t'] = 1, ['\n'] = 1 };
+-
+-This was changed to accord with the syntax proposed by the Numerical
+-C Extensions Group (NCEG).
+-
+-* Complex numbers are now supported in C. Use the keyword __complex__
+-to declare complex data types. See the manual for details.
+-
+-* GCC now supports `long double' meaningfully on the Sparc (128-bit
+-floating point) and on the 386 (96-bit floating point). The Sparc
+-support is enabled on Solaris 2.x because earlier system versions
+-(SunOS 4) have bugs in the emulation.
+-
+-* All targets now have assertions for cpu, machine and system. So you
+-can now use assertions to distinguish among all supported targets.
+-
+-* Nested functions in C may now be inline. Just declare them inline
+-in the usual way.
+-
+-* Packed structure members are now supported fully; it should be possible
+-to access them on any supported target, no matter how little alignment
+-they have.
+-
+-* To declare that a function does not return, you must now write
+-something like this (works only in 2.5):
+-
+- void fatal () __attribute__ ((noreturn));
+-
+-or like this (works in older versions too):
+-
+- typedef void voidfn ();
+-
+- volatile voidfn fatal;
+-
+-It used to be possible to do so by writing this:
+-
+- volatile void fatal ();
+-
+-but it turns out that ANSI C requires that to mean something
+-else (which is useless).
+-
+-Likewise, to declare that a function is side-effect-free
+-so that calls may be deleted or combined, write
+-something like this (works only in 2.5):
+-
+- int computation () __attribute__ ((const));
+-
+-or like this (works in older versions too):
+-
+- typedef int intfn ();
+-
+- const intfn computation;
+-
+-* The new option -iwithprefixbefore specifies a directory to add to
+-the search path for include files in the same position where -I would
+-put it, but uses the specified prefix just like -iwithprefix.
+-
+-* Basic block profiling has been enhanced to record the function the
+-basic block comes from, and if the module was compiled for debugging,
+-the line number and filename. A default version of the basic block
+-support module has been added to libgcc2 that appends the basic block
+-information to a text file 'bb.out'. Machine descriptions can now
+-override the basic block support module in the target macro file.
+-
+-New features in g++:
+-
+-* The new flag `-fansi-overloading' for C++. Use a newly implemented
+-scheme of argument matching for C++. It makes g++ more accurately
+-obey the rules set down in Chapter 13 of the Annotated C++ Reference
+-Manual (the ARM). This option will be turned on by default in a
+-future release.
+-
+-* The -finline-debug flag is now gone (it was never really used by the
+- compiler).
+-
+-* Recognizing the syntax for pointers to members, e.g., "foo::*bar", has been
+- dramatically improved. You should not get any syntax errors or incorrect
+- runtime results while using pointers to members correctly; if you do, it's
+- a definite bug.
+-
+-* Forward declaration of an enum is now flagged as an error.
+-
+-* Class-local typedefs are now working properly.
+-
+-* Nested class support has been significantly improved. The compiler
+- will now (in theory) support up to 240 nested classes before hitting
+- other system limits (like memory size).
+-
+-* There is a new C version of the `g++' driver, to replace the old
+- shell script. This should significantly improve the performance of
+- executing g++ on a system where a user's PATH environment variable
+- references many NFS-mounted filesystems. This driver also works
+- under MS-DOS and OS/2.
+-
+-* The ANSI committee working on the C++ standard has adopted a new
+- keyword `mutable'. This will allow you to make a specific member be
+- modifiable in an otherwise const class.
+-
+-Noteworthy GCC changes in version 2.4.4:
+-
+- A crash building g++ on various hosts (including m68k) has been
+- fixed. Also the g++ compiler no longer reports incorrect
+- ambiguities in some situations where they do not exist, and
+- const template member functions are now being found properly.
+-
+-Noteworthy GCC changes in version 2.4:
+-
+-* On each target, the default is now to return short structures
+-compatibly with the "usual" compiler on that target.
+-
+-For most targets, this means the default is to return all structures
+-in memory, like long structures, in whatever way is used on that
+-target. Use -freg-struct-return to enable returning short structures
+-(and unions) in registers.
+-
+-This change means that newly compiled binaries are incompatible with
+-binaries compiled with previous versions of GCC.
+-
+-On some targets, GCC is itself the usual compiler. On these targets,
+-the default way to return short structures is still in registers.
+-Use -fpcc-struct-return to tell GCC to return them in memory.
+-
+-* There is now a floating point emulator which can imitate the way all
+-supported target machines do floating point arithmetic.
+-
+-This makes it possible to have cross compilation to and from the VAX,
+-and between machines of different endianness. However, this works
+-only when the target machine description is updated to use the new
+-facilities, and not all have been updated.
+-
+-This also makes possible support for longer floating point types.
+-GCC 2.4 supports extended format on the 68K if you use `long double',
+-for targets that have a 68881. (When we have run time library
+-routines for extended floating point, then `long double' will use
+-extended format on all 68K targets.)
+-
+-We expect to support extended floating point on the i386 and Sparc in
+-future versions.
+-
+-* Building GCC now automatically fixes the system's header files.
+-This should require no attention.
+-
+-* GCC now installs an unsigned data type as size_t when it fixes the
+-header files (on all but a handful of old target machines).
+-Therefore, the bug that size_t failed to be unsigned is fixed.
+-
+-* Building and installation are now completely separate.
+-All new files are constructed during the build process;
+-installation just copies them.
+-
+-* New targets supported: Clipper, Hitachi SH, Hitachi 8300, and Sparc
+-Lite.
+-
+-* A totally new and much better Objective C run time system is included.
+-
+-* Objective C supports many new features. Alas, I can't describe them
+-since I don't use that language; however, they are the same ones
+-supported in recent versions of the NeXT operating system.
+-
+-* The builtin functions __builtin_apply_args, __builtin_apply and
+-__builtin_return let you record the arguments and returned
+-value of a function without knowing their number or type.
+-
+-* The builtin string variables __FUNCTION__ and __PRETTY_FUNCTION__
+-give the name of the function in the source, and a pretty-printed
+-version of the name. The two are the same in C, but differ in C++.
+-
+-* Casts to union types do not yield lvalues.
+-
+-* ## before an empty rest argument discards the preceding sequence
+-of non-whitespace characters from the macro definition.
+-(This feature is subject to change.)
+-
+-
+-New features specific to C++:
+-
+-* The manual contains a new section ``Common Misunderstandings with
+-GNU C++'' that C++ users should read.
+-
+-* #pragma interface and #pragma implementation let you use the same
+-C++ source file for both interface and implementation.
+-However, this mechanism is still in transition.
+-
+-* Named returned values let you avoid an extra constructor call
+-when a function result has a class type.
+-
+-* The C++ operators <? and >? yield min and max, respectively.
+-
+-* C++ gotos can exit a block safely even if the block has
+-aggregates that require destructors.
+-
+-* gcc defines the macro __GNUG__ when compiling C++ programs.
+-
+-* GNU C++ now correctly distinguishes between the prefix and postfix
+-forms of overloaded operator ++ and --. To avoid breaking old
+-code, if a class defines only the prefix form, the compiler
+-accepts either ++obj or obj++, unless -pedantic is used.
+-
+-* If you are using version 2.3 of libg++, you need to rebuild it with
+-`make CC=gcc' to avoid mismatches in the definition of `size_t'.
+-
+-Newly documented compiler options:
+-
+--fnostartfiles
+- Omit the standard system startup files when linking.
+-
+--fvolatile-global
+- Consider memory references to extern and global data items to
+- be volatile.
+-
+--idirafter DIR
+- Add DIR to the second include path.
+-
+--iprefix PREFIX
+- Specify PREFIX for later -iwithprefix options.
+-
+--iwithprefix DIR
+- Add PREFIX/DIR to the second include path.
+-
+--mv8
+- Emit Sparc v8 code (with integer multiply and divide).
+--msparclite
+- Emit Sparclite code (roughly v7.5).
+-
+--print-libgcc-file-name
+- Search for the libgcc.a file, print its absolute file name, and exit.
+-
+--Woverloaded-virtual
+- Warn when a derived class function declaration may be an error
+- in defining a C++ virtual function.
+-
+--Wtemplate-debugging
+- When using templates in a C++ program, warn if debugging is
+- not yet fully available.
+-
+-+eN
+- Control how C++ virtual function definitions are used
+- (like cfront 1.x).
+-
+diff -ruNb gcc-2.95.3/gcc/po/gcc.pot gcc-2.95.4/gcc/po/gcc.pot
+--- gcc-2.95.3/gcc/po/gcc.pot 2001-03-16 15:13:48.000000000 +0100
++++ gcc-2.95.4/gcc/po/gcc.pot 1970-01-01 01:00:00.000000000 +0100
+@@ -1,8407 +0,0 @@
+-# SOME DESCRIPTIVE TITLE.
+-# Copyright (C) YEAR Free Software Foundation, Inc.
+-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+-#
+-#, fuzzy
+-msgid ""
+-msgstr ""
+-"Project-Id-Version: PACKAGE VERSION\n"
+-"POT-Creation-Date: 1999-07-27 01:41-0600\n"
+-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+-"Language-Team: LANGUAGE <LL@li.org>\n"
+-"MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=CHARSET\n"
+-"Content-Transfer-Encoding: ENCODING\n"
+-
+-#: c-common.c:472
+-#, c-format
+-msgid "`%s' attribute directive ignored"
+-msgstr ""
+-
+-#: c-common.c:480
+-#, c-format
+-msgid "`%s' attribute does not apply to types"
+-msgstr ""
+-
+-#: c-common.c:487
+-#, c-format
+-msgid "wrong number of arguments specified for `%s' attribute"
+-msgstr ""
+-
+-#: c-common.c:503 c-common.c:510 c-common.c:517 c-common.c:530 c-common.c:542
+-#: c-common.c:555 c-common.c:570 c-common.c:582 c-common.c:594 c-common.c:599
+-#: c-common.c:910 c-common.c:1036
+-#, c-format
+-msgid "`%s' attribute ignored"
+-msgstr ""
+-
+-#: c-common.c:632
+-#, c-format
+-msgid "unknown machine mode `%s'"
+-msgstr ""
+-
+-#: c-common.c:635
+-#, c-format
+-msgid "no data type for mode `%s'"
+-msgstr ""
+-
+-#: c-common.c:655
+-msgid "section attribute cannot be specified for local variables"
+-msgstr ""
+-
+-#: c-common.c:662
+-#, c-format
+-msgid "section of `%s' conflicts with previous declaration"
+-msgstr ""
+-
+-#: c-common.c:668
+-#, c-format
+-msgid "section attribute not allowed for `%s'"
+-msgstr ""
+-
+-#: c-common.c:671
+-msgid "section attributes are not supported for this target"
+-msgstr ""
+-
+-#: c-common.c:690
+-msgid "requested alignment is not a constant"
+-msgstr ""
+-
+-#: c-common.c:697
+-msgid "requested alignment is not a power of 2"
+-msgstr ""
+-
+-#: c-common.c:703
+-#, c-format
+-msgid "alignment may not be specified for `%s'"
+-msgstr ""
+-
+-#: c-common.c:724 c-common.c:827
+-#, c-format
+-msgid "argument format specified for non-function `%s'"
+-msgstr ""
+-
+-#: c-common.c:730
+-msgid "unrecognized format specifier"
+-msgstr ""
+-
+-#: c-common.c:746
+-#, c-format
+-msgid "`%s' is an unrecognized format function type"
+-msgstr ""
+-
+-#: c-common.c:766 c-common.c:840
+-msgid "format string has non-constant operand number"
+-msgstr ""
+-
+-#: c-common.c:774
+-msgid "format string arg follows the args to be formatted"
+-msgstr ""
+-
+-#: c-common.c:795 c-common.c:863
+-msgid "format string arg not a string type"
+-msgstr ""
+-
+-#: c-common.c:806
+-msgid "args to be formatted is not ..."
+-msgstr ""
+-
+-#: c-common.c:872
+-msgid "function does not return string type"
+-msgstr ""
+-
+-#: c-common.c:890
+-#, c-format
+-msgid "`%s' defined both normally and as an alias"
+-msgstr ""
+-
+-#: c-common.c:898
+-msgid "alias arg not a string"
+-msgstr ""
+-
+-#: c-common.c:917 c-common.c:934
+-#, c-format
+-msgid "`%s' attribute applies only to functions"
+-msgstr ""
+-
+-#: c-common.c:923 c-common.c:940
+-#, c-format
+-msgid "can't set `%s' attribute after definition"
+-msgstr ""
+-
+-#: c-common.c:1291
+-msgid "too few arguments for format"
+-msgstr ""
+-
+-#: c-common.c:1400
+-msgid "null format string"
+-msgstr ""
+-
+-#: c-common.c:1411
+-msgid "zero-length format string"
+-msgstr ""
+-
+-#: c-common.c:1414
+-msgid "unterminated format string"
+-msgstr ""
+-
+-#: c-common.c:1433
+-msgid "embedded `\\0' in format"
+-msgstr ""
+-
+-#: c-common.c:1435
+-msgid "too many arguments for format"
+-msgstr ""
+-
+-#: c-common.c:1442
+-msgid "spurious trailing `%%' in format"
+-msgstr ""
+-
+-#: c-common.c:1465
+-#, c-format
+-msgid "ANSI C does not support the strftime `%c' flag"
+-msgstr ""
+-
+-#: c-common.c:1469 c-common.c:1533
+-#, c-format
+-msgid "repeated `%c' flag in format"
+-msgstr ""
+-
+-#: c-common.c:1486
+-msgid "ANSI C does not support strftime format width"
+-msgstr ""
+-
+-#: c-common.c:1494
+-msgid "multiple E/O modifiers in format"
+-msgstr ""
+-
+-#: c-common.c:1524
+-msgid "operand number out of range in format"
+-msgstr ""
+-
+-#: c-common.c:1545
+-msgid "use of both ` ' and `+' flags in format"
+-msgstr ""
+-
+-#: c-common.c:1550
+-msgid "use of both `0' and `-' flags in format"
+-msgstr ""
+-
+-#: c-common.c:1576 c-common.c:1610
+-#, c-format
+-msgid "field width is not type int (arg %d)"
+-msgstr ""
+-
+-#: c-common.c:1592
+-msgid "`.' not followed by `*' or digit in format"
+-msgstr ""
+-
+-#: c-common.c:1632
+-#, c-format
+-msgid "ANSI C does not support the `%c' length modifier"
+-msgstr ""
+-
+-#: c-common.c:1639
+-msgid "ANSI C does not support the `Z' length modifier"
+-msgstr ""
+-
+-#: c-common.c:1648
+-msgid "ANSI C does not support the `ll' length modifier"
+-msgstr ""
+-
+-#: c-common.c:1655
+-msgid "ANSI C does not support the `hh' length modifier"
+-msgstr ""
+-
+-#: c-common.c:1668
+-#, c-format
+-msgid "use of `*' and `%c' together in format"
+-msgstr ""
+-
+-#: c-common.c:1674
+-msgid "conversion lacks type at end of format"
+-msgstr ""
+-
+-#: c-common.c:1680 c-common.c:1685
+-#, c-format
+-msgid "ANSI C does not support the `%c' format"
+-msgstr ""
+-
+-#: c-common.c:1707
+-#, c-format
+-msgid "unknown conversion type character `%c' in format"
+-msgstr ""
+-
+-#: c-common.c:1710
+-#, c-format
+-msgid "unknown conversion type character 0x%x in format"
+-msgstr ""
+-
+-#: c-common.c:1717
+-msgid "ANSI C does not support `%%%c'"
+-msgstr ""
+-
+-#: c-common.c:1720
+-msgid "ANSI C does not support `%%O%c'"
+-msgstr ""
+-
+-#: c-common.c:1723
+-#, c-format
+-msgid "width used with `%c' format"
+-msgstr ""
+-
+-#: c-common.c:1725
+-msgid "`%%%c' yields only last 2 digits of year"
+-msgstr ""
+-
+-#: c-common.c:1727
+-msgid "`%%%c' yields only last 2 digits of year in some locales"
+-msgstr ""
+-
+-#: c-common.c:1730
+-#, c-format
+-msgid "precision used with `%c' format"
+-msgstr ""
+-
+-#: c-common.c:1733
+-#, c-format
+-msgid "`a' flag used with `%c' format"
+-msgstr ""
+-
+-#: c-common.c:1739
+-msgid "ANSI C does not support the `a' flag"
+-msgstr ""
+-
+-#. The end of the format string was reached.
+-#: c-common.c:1753
+-msgid "no closing `]' for `%%[' format"
+-msgstr ""
+-
+-#: c-common.c:1758
+-#, c-format
+-msgid "suppression of `%c' conversion in format"
+-msgstr ""
+-
+-#: c-common.c:1764
+-#, c-format
+-msgid "flag `%c' used with type `%c'"
+-msgstr ""
+-
+-#: c-common.c:1773
+-#, c-format
+-msgid "`0' flag ignored with precision specifier and `%c' format"
+-msgstr ""
+-
+-#: c-common.c:1786
+-#, c-format
+-msgid "use of `%c' length character with `%c' type character"
+-msgstr ""
+-
+-#: c-common.c:1824
+-#, c-format
+-msgid "format argument is not a pointer (arg %d)"
+-msgstr ""
+-
+-#: c-common.c:1825
+-#, c-format
+-msgid "format argument is not a pointer to a pointer (arg %d)"
+-msgstr ""
+-
+-#: c-common.c:1843
+-#, c-format
+-msgid "writing into constant object (arg %d)"
+-msgstr ""
+-
+-#: c-common.c:1903
+-#, c-format
+-msgid "%s format, %s arg (arg %d)"
+-msgstr ""
+-
+-#: c-common.c:1921
+-msgid "overflow in constant expression"
+-msgstr ""
+-
+-#: c-common.c:1942
+-msgid "integer overflow in expression"
+-msgstr ""
+-
+-#: c-common.c:1951
+-msgid "floating point overflow in expression"
+-msgstr ""
+-
+-#. This detects cases like converting -129 or 256 to unsigned char.
+-#: c-common.c:1972
+-msgid "large integer implicitly truncated to unsigned type"
+-msgstr ""
+-
+-#: c-common.c:1974
+-msgid "negative integer implicitly converted to unsigned type"
+-msgstr ""
+-
+-#: c-common.c:2007
+-msgid "overflow in implicit constant conversion"
+-msgstr ""
+-
+-#: c-common.c:2028
+-msgid "expression statement has incomplete type"
+-msgstr ""
+-
+-#: c-common.c:2048
+-msgid "case label does not reduce to an integer constant"
+-msgstr ""
+-
+-#: c-common.c:2201
+-msgid "invalid truth-value expression"
+-msgstr ""
+-
+-#: c-common.c:2252
+-#, c-format
+-msgid "invalid operands to binary %s"
+-msgstr ""
+-
+-#: c-common.c:2487 c-common.c:2496
+-msgid "comparison is always false due to limited range of data type"
+-msgstr ""
+-
+-#: c-common.c:2489 c-common.c:2498
+-msgid "comparison is always true due to limited range of data type"
+-msgstr ""
+-
+-#: c-common.c:2564
+-msgid "comparison of unsigned expression >= 0 is always true"
+-msgstr ""
+-
+-#: c-common.c:2573
+-msgid "comparison of unsigned expression < 0 is always false"
+-msgstr ""
+-
+-#: c-common.c:2624
+-msgid "struct type value used where scalar is required"
+-msgstr ""
+-
+-#: c-common.c:2628
+-msgid "union type value used where scalar is required"
+-msgstr ""
+-
+-#: c-common.c:2632
+-msgid "array type value used where scalar is required"
+-msgstr ""
+-
+-#: c-common.c:2764
+-msgid "suggest parentheses around assignment used as truth value"
+-msgstr ""
+-
+-#: c-common.c:2987 c-common.c:3017
+-msgid "invalid use of `restrict'"
+-msgstr ""
+-
+-#: c-convert.c:75 c-typeck.c:1065 c-typeck.c:4073 cp/typeck.c:1760
+-#: cp/typeck.c:6780
+-msgid "void value not ignored as it ought to be"
+-msgstr ""
+-
+-#: c-convert.c:95
+-msgid "conversion to non-scalar type requested"
+-msgstr ""
+-
+-#: c-decl.c:697
+-#, c-format
+-msgid "unknown C standard `%s'"
+-msgstr ""
+-
+-#: c-decl.c:948
+-#, c-format
+-msgid "array `%s' assumed to have one element"
+-msgstr ""
+-
+-#: c-decl.c:1125
+-#, c-format
+-msgid "`struct %s' incomplete in scope ending here"
+-msgstr ""
+-
+-#: c-decl.c:1128
+-#, c-format
+-msgid "`union %s' incomplete in scope ending here"
+-msgstr ""
+-
+-#: c-decl.c:1131
+-#, c-format
+-msgid "`enum %s' incomplete in scope ending here"
+-msgstr ""
+-
+-#: c-decl.c:1247 c-decl.c:1408
+-#, c-format
+-msgid "label `%s' used but not defined"
+-msgstr ""
+-
+-#: c-decl.c:1253 c-decl.c:1415
+-#, c-format
+-msgid "label `%s' defined but not used"
+-msgstr ""
+-
+-#: c-decl.c:1540 c-decl.c:1593
+-#, c-format
+-msgid "shadowing built-in function `%s'"
+-msgstr ""
+-
+-#: c-decl.c:1542
+-#, c-format
+-msgid "shadowing library function `%s'"
+-msgstr ""
+-
+-#: c-decl.c:1548
+-#, c-format
+-msgid "library function `%s' declared as non-function"
+-msgstr ""
+-
+-#: c-decl.c:1552 c-decl.c:1555
+-#, c-format
+-msgid "built-in function `%s' declared as non-function"
+-msgstr ""
+-
+-#: c-decl.c:1559 objc/objc-act.c:2448 objc/objc-act.c:6166
+-#, c-format
+-msgid "`%s' redeclared as different kind of symbol"
+-msgstr ""
+-
+-#: c-decl.c:1560 c-decl.c:1752 c-decl.c:1898 objc/objc-act.c:2450
+-#: objc/objc-act.c:6168 objc/objc-act.c:6222
+-#, c-format
+-msgid "previous declaration of `%s'"
+-msgstr ""
+-
+-#. If types don't match for a built-in, throw away the built-in.
+-#: c-decl.c:1655
+-#, c-format
+-msgid "conflicting types for built-in function `%s'"
+-msgstr ""
+-
+-#: c-decl.c:1698 c-decl.c:1717
+-#, c-format
+-msgid "conflicting types for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:1740
+-msgid ""
+-"A parameter list with an ellipsis can't match an empty parameter name list "
+-"declaration."
+-msgstr ""
+-
+-#: c-decl.c:1747
+-msgid ""
+-"An argument type that has a default promotion can't match an empty parameter "
+-"name list declaration."
+-msgstr ""
+-
+-#: c-decl.c:1762 c-decl.c:1784
+-#, c-format
+-msgid "redefinition of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:1765
+-#, c-format
+-msgid "redeclaration of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:1768
+-#, c-format
+-msgid "conflicting declarations of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:1777 c-decl.c:1789
+-#, c-format
+-msgid "`%s' previously defined here"
+-msgstr ""
+-
+-#: c-decl.c:1778 c-decl.c:1790
+-#, c-format
+-msgid "`%s' previously declared here"
+-msgstr ""
+-
+-#: c-decl.c:1811
+-#, c-format
+-msgid "prototype for `%s' follows"
+-msgstr ""
+-
+-#: c-decl.c:1812 c-decl.c:1819 c-decl.c:1835
+-msgid "non-prototype definition here"
+-msgstr ""
+-
+-#: c-decl.c:1818
+-#, c-format
+-msgid "prototype for `%s' follows and number of arguments doesn't match"
+-msgstr ""
+-
+-#: c-decl.c:1833
+-#, c-format
+-msgid "prototype for `%s' follows and argument %d doesn't match"
+-msgstr ""
+-
+-#: c-decl.c:1850
+-#, c-format
+-msgid "`%s' declared inline after being called"
+-msgstr ""
+-
+-#: c-decl.c:1855
+-#, c-format
+-msgid "`%s' declared inline after its definition"
+-msgstr ""
+-
+-#: c-decl.c:1862
+-#, c-format
+-msgid "static declaration for `%s' follows non-static"
+-msgstr ""
+-
+-#: c-decl.c:1870
+-#, c-format
+-msgid "non-static declaration for `%s' follows static"
+-msgstr ""
+-
+-#: c-decl.c:1877
+-#, c-format
+-msgid "const declaration for `%s' follows non-const"
+-msgstr ""
+-
+-#: c-decl.c:1884
+-#, c-format
+-msgid "type qualifiers for `%s' conflict with previous decl"
+-msgstr ""
+-
+-#: c-decl.c:1897
+-#, c-format
+-msgid "redundant redeclaration of `%s' in same scope"
+-msgstr ""
+-
+-#: c-decl.c:2164
+-#, c-format
+-msgid "nested extern declaration of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:2189
+-#, c-format
+-msgid "`%s' used prior to declaration"
+-msgstr ""
+-
+-#: c-decl.c:2210 c-decl.c:2423
+-#, c-format
+-msgid "`%s' was declared implicitly `extern' and later `static'"
+-msgstr ""
+-
+-#: c-decl.c:2318
+-msgid "type mismatch with previous external decl"
+-msgstr ""
+-
+-#: c-decl.c:2319
+-#, c-format
+-msgid "previous external decl of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:2332
+-msgid "type mismatch with previous implicit declaration"
+-msgstr ""
+-
+-#: c-decl.c:2334
+-#, c-format
+-msgid "previous implicit declaration of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:2351
+-#, c-format
+-msgid "type of external `%s' is not global"
+-msgstr ""
+-
+-#: c-decl.c:2402
+-#, c-format
+-msgid "`%s' was previously implicitly declared to return `int'"
+-msgstr ""
+-
+-#: c-decl.c:2427
+-#, c-format
+-msgid "`%s' was declared `extern' and later `static'"
+-msgstr ""
+-
+-#: c-decl.c:2449
+-#, c-format
+-msgid "extern declaration of `%s' doesn't match global one"
+-msgstr ""
+-
+-#: c-decl.c:2487
+-#, c-format
+-msgid "`%s' locally external but globally static"
+-msgstr ""
+-
+-#: c-decl.c:2523 c-decl.c:2548
+-#, c-format
+-msgid "declaration of `%s' shadows a parameter"
+-msgstr ""
+-
+-#: c-decl.c:2526
+-#, c-format
+-msgid "declaration of `%s' shadows a symbol from the parameter list"
+-msgstr ""
+-
+-#: c-decl.c:2550
+-#, c-format
+-msgid "declaration of `%s' shadows previous local"
+-msgstr ""
+-
+-#: c-decl.c:2553
+-#, c-format
+-msgid "declaration of `%s' shadows global declaration"
+-msgstr ""
+-
+-#: c-decl.c:2641 c-decl.c:2644
+-#, c-format
+-msgid "implicit declaration of function `%s'"
+-msgstr ""
+-
+-#: c-decl.c:2648
+-#, c-format
+-msgid "function `%s' was previously declared within a block"
+-msgstr ""
+-
+-#: c-decl.c:2745
+-#, c-format
+-msgid "label %s referenced outside of any function"
+-msgstr ""
+-
+-#: c-decl.c:2805
+-#, c-format
+-msgid "duplicate label declaration `%s'"
+-msgstr ""
+-
+-#: c-decl.c:2808
+-msgid "this is a previous declaration"
+-msgstr ""
+-
+-#: c-decl.c:2842
+-#, c-format
+-msgid "duplicate label `%s'"
+-msgstr ""
+-
+-#: c-decl.c:3700
+-msgid "unnamed struct/union that defines no instances"
+-msgstr ""
+-
+-#: c-decl.c:3719
+-msgid "useless keyword or type name in empty declaration"
+-msgstr ""
+-
+-#: c-decl.c:3726
+-msgid "two types specified in one empty declaration"
+-msgstr ""
+-
+-#: c-decl.c:3731 c-parse.y:294 c-parse.y:797 c-parse.y:799 c-parse.y:861
+-#: objc-parse.y:295 objc-parse.y:894 objc-parse.y:896 objc-parse.y:958
+-#: objc-parse.y:2782 parse.y:609 parse.y:1659
+-msgid "empty declaration"
+-msgstr ""
+-
+-#: c-decl.c:3796
+-#, c-format
+-msgid "`%s' is usually a function"
+-msgstr ""
+-
+-#: c-decl.c:3810
+-#, c-format
+-msgid "typedef `%s' is initialized"
+-msgstr ""
+-
+-#: c-decl.c:3817
+-#, c-format
+-msgid "function `%s' is initialized like a variable"
+-msgstr ""
+-
+-#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.
+-#: c-decl.c:3824
+-#, c-format
+-msgid "parameter `%s' is initialized"
+-msgstr ""
+-
+-#: c-decl.c:3839 c-typeck.c:4909
+-msgid "variable-sized object may not be initialized"
+-msgstr ""
+-
+-#: c-decl.c:3845
+-#, c-format
+-msgid "variable `%s' has initializer but incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:3851
+-#, c-format
+-msgid "elements of array `%s' have incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:3863
+-#, c-format
+-msgid "declaration of `%s' has `extern' and is initialized"
+-msgstr ""
+-
+-#: c-decl.c:3956
+-msgid "iterator has no initial value"
+-msgstr ""
+-
+-#: c-decl.c:4002
+-#, c-format
+-msgid "initializer fails to determine size of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4007
+-#, c-format
+-msgid "array size missing in `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4023
+-#, c-format
+-msgid "zero or negative size array `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4052
+-#, c-format
+-msgid "storage size of `%s' isn't known"
+-msgstr ""
+-
+-#: c-decl.c:4062
+-#, c-format
+-msgid "storage size of `%s' isn't constant"
+-msgstr ""
+-
+-#: c-decl.c:4188 cp/decl.c:8407
+-#, c-format
+-msgid "size of `%s' is %u bytes"
+-msgstr ""
+-
+-#: c-decl.c:4250
+-#, c-format
+-msgid "ANSI C forbids parameter `%s' shadowing typedef"
+-msgstr ""
+-
+-#: c-decl.c:4489 cp/decl.c:9733
+-msgid "`long long long' is too long for GCC"
+-msgstr ""
+-
+-#: c-decl.c:4493
+-msgid "ANSI C does not support `long long'"
+-msgstr ""
+-
+-#: c-decl.c:4498 cp/decl.c:9738
+-#, c-format
+-msgid "duplicate `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4504 cp/decl.c:9758
+-#, c-format
+-msgid "two or more data types in declaration of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4519 cp/decl.c:9763
+-#, c-format
+-msgid "`%s' fails to be a typedef or built in type"
+-msgstr ""
+-
+-#: c-decl.c:4555
+-#, c-format
+-msgid "type defaults to `int' in declaration of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4583
+-#, c-format
+-msgid "both long and short specified for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4587 cp/decl.c:9898
+-#, c-format
+-msgid "long or short specified with char for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4594 cp/decl.c:9902
+-#, c-format
+-msgid "long or short specified with floating type for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4597
+-msgid "the only valid combination is `long double'"
+-msgstr ""
+-
+-#: c-decl.c:4603
+-#, c-format
+-msgid "both signed and unsigned specified for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4605 cp/decl.c:9891
+-#, c-format
+-msgid "long, short, signed or unsigned invalid for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4611 cp/decl.c:9911
+-#, c-format
+-msgid "long, short, signed or unsigned used invalidly for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4630 cp/decl.c:9932
+-#, c-format
+-msgid "complex invalid for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4706 c-decl.c:5085 cp/decl.c:10761
+-msgid "duplicate `const'"
+-msgstr ""
+-
+-#: c-decl.c:4708 c-decl.c:5089 cp/decl.c:10765
+-msgid "duplicate `restrict'"
+-msgstr ""
+-
+-#: c-decl.c:4710 c-decl.c:5087 cp/decl.c:10763
+-msgid "duplicate `volatile'"
+-msgstr ""
+-
+-#: c-decl.c:4733 cp/decl.c:10125
+-#, c-format
+-msgid "multiple storage classes in declaration of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4742
+-msgid "function definition declared `auto'"
+-msgstr ""
+-
+-#: c-decl.c:4744
+-msgid "function definition declared `register'"
+-msgstr ""
+-
+-#: c-decl.c:4746
+-msgid "function definition declared `typedef'"
+-msgstr ""
+-
+-#: c-decl.c:4757
+-#, c-format
+-msgid "storage class specified for structure field `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4759 cp/decl.c:10167
+-#, c-format
+-msgid "storage class specified for parameter `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4760 cp/decl.c:10168
+-msgid "storage class specified for typename"
+-msgstr ""
+-
+-#: c-decl.c:4771 cp/decl.c:10187
+-#, c-format
+-msgid "`%s' initialized and declared `extern'"
+-msgstr ""
+-
+-#: c-decl.c:4773 cp/decl.c:10190
+-#, c-format
+-msgid "`%s' has both `extern' and initializer"
+-msgstr ""
+-
+-#: c-decl.c:4777 cp/decl.c:10194
+-#, c-format
+-msgid "nested function `%s' declared `extern'"
+-msgstr ""
+-
+-#: c-decl.c:4780 cp/decl.c:10198
+-#, c-format
+-msgid "top-level declaration of `%s' specifies `auto'"
+-msgstr ""
+-
+-#: c-decl.c:4784
+-#, c-format
+-msgid "iterator `%s' has derived type"
+-msgstr ""
+-
+-#: c-decl.c:4790
+-#, c-format
+-msgid "iterator `%s' has noninteger type"
+-msgstr ""
+-
+-#: c-decl.c:4836
+-#, c-format
+-msgid "declaration of `%s' as array of voids"
+-msgstr ""
+-
+-#: c-decl.c:4842
+-#, c-format
+-msgid "declaration of `%s' as array of functions"
+-msgstr ""
+-
+-#: c-decl.c:4870
+-#, c-format
+-msgid "size of array `%s' has non-integer type"
+-msgstr ""
+-
+-#: c-decl.c:4875
+-#, c-format
+-msgid "ANSI C forbids zero-size array `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4882
+-#, c-format
+-msgid "size of array `%s' is negative"
+-msgstr ""
+-
+-#: c-decl.c:4895
+-#, c-format
+-msgid "ANSI C forbids array `%s' whose size can't be evaluated"
+-msgstr ""
+-
+-#: c-decl.c:4897
+-#, c-format
+-msgid "ANSI C forbids variable-size array `%s'"
+-msgstr ""
+-
+-#: c-decl.c:4914 c-decl.c:5110
+-#, c-format
+-msgid "size of array `%s' is too large"
+-msgstr ""
+-
+-#: c-decl.c:4933
+-msgid "array type has incomplete element type"
+-msgstr ""
+-
+-#: c-decl.c:4940 c-decl.c:5156
+-msgid "ANSI C forbids const or volatile function types"
+-msgstr ""
+-
+-#: c-decl.c:4977 cp/decl.c:10490
+-#, c-format
+-msgid "`%s' declared as function returning a function"
+-msgstr ""
+-
+-#: c-decl.c:4982 cp/decl.c:10495
+-#, c-format
+-msgid "`%s' declared as function returning an array"
+-msgstr ""
+-
+-#: c-decl.c:5048 c-decl.c:5121 c-decl.c:5207 c-decl.c:5305
+-msgid "ANSI C forbids qualified function types"
+-msgstr ""
+-
+-#: c-decl.c:5081 cp/decl.c:10757
+-msgid "invalid type modifier within pointer declarator"
+-msgstr ""
+-
+-#: c-decl.c:5176 cp/decl.c:11215
+-#, c-format
+-msgid "variable or field `%s' declared void"
+-msgstr ""
+-
+-#: c-decl.c:5250
+-#, c-format
+-msgid "field `%s' declared as a function"
+-msgstr ""
+-
+-#: c-decl.c:5255
+-#, c-format
+-msgid "field `%s' has incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:5284 c-decl.c:5286 c-decl.c:5293
+-#, c-format
+-msgid "invalid storage class for function `%s'"
+-msgstr ""
+-
+-#: c-decl.c:5311
+-msgid "ANSI C forbids qualified void function return type"
+-msgstr ""
+-
+-#: c-decl.c:5317
+-msgid "`noreturn' function returns non-void value"
+-msgstr ""
+-
+-#: c-decl.c:5329
+-msgid "cannot inline function `main'"
+-msgstr ""
+-
+-#: c-decl.c:5366
+-#, c-format
+-msgid "variable `%s' declared `inline'"
+-msgstr ""
+-
+-#: c-decl.c:5442 c-decl.c:6483
+-msgid "function declaration isn't a prototype"
+-msgstr ""
+-
+-#: c-decl.c:5448 cp/decl.c:11886
+-msgid "parameter names (without types) in function declaration"
+-msgstr ""
+-
+-#: c-decl.c:5478 c-decl.c:6871 c-decl.c:7161 cp/decl.c:11729
+-#, c-format
+-msgid "parameter `%s' has incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:5481 cp/decl.c:11732
+-msgid "parameter has incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:5500
+-#, c-format
+-msgid "parameter `%s' points to incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:5503
+-msgid "parameter points to incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:5574
+-#, c-format
+-msgid "parameter `%s' has just a forward declaration"
+-msgstr ""
+-
+-#: c-decl.c:5617
+-msgid "`void' in parameter list must be the entire list"
+-msgstr ""
+-
+-#: c-decl.c:5646
+-#, c-format
+-msgid "`%s %s' declared inside parameter list"
+-msgstr ""
+-
+-#: c-decl.c:5652
+-#, c-format
+-msgid "anonymous %s declared inside parameter list"
+-msgstr ""
+-
+-#: c-decl.c:5659
+-msgid ""
+-"its scope is only this definition or declaration, which is probably not what "
+-"you want."
+-msgstr ""
+-
+-#: c-decl.c:5701
+-msgid "ANSI C forbids forward references to `enum' types"
+-msgstr ""
+-
+-#: c-decl.c:5747
+-#, c-format
+-msgid "redefinition of `union %s'"
+-msgstr ""
+-
+-#: c-decl.c:5748
+-#, c-format
+-msgid "redefinition of `struct %s'"
+-msgstr ""
+-
+-#: c-decl.c:5840 c-decl.c:5843
+-msgid "union defined inside parms"
+-msgstr ""
+-
+-#: c-decl.c:5841 c-decl.c:5844
+-msgid "structure defined inside parms"
+-msgstr ""
+-
+-#: c-decl.c:5857
+-#, c-format
+-msgid "%s has no named members"
+-msgstr ""
+-
+-#: c-decl.c:5858
+-#, c-format
+-msgid "%s has no members"
+-msgstr ""
+-
+-#: c-decl.c:5900
+-#, c-format
+-msgid "nested redefinition of `%s'"
+-msgstr ""
+-
+-#: c-decl.c:5912
+-#, c-format
+-msgid "bit-field `%s' width not an integer constant"
+-msgstr ""
+-
+-#: c-decl.c:5922
+-#, c-format
+-msgid "bit-field `%s' has invalid type"
+-msgstr ""
+-
+-#: c-decl.c:5932
+-#, c-format
+-msgid "bit-field `%s' type invalid in ANSI C"
+-msgstr ""
+-
+-#: c-decl.c:5942
+-#, c-format
+-msgid "negative width in bit-field `%s'"
+-msgstr ""
+-
+-#: c-decl.c:5948
+-#, c-format
+-msgid "width of `%s' exceeds its type"
+-msgstr ""
+-
+-#: c-decl.c:5952
+-#, c-format
+-msgid "zero width for bit-field `%s'"
+-msgstr ""
+-
+-#: c-decl.c:5967
+-#, c-format
+-msgid "`%s' is narrower than values of its type"
+-msgstr ""
+-
+-#: c-decl.c:6017
+-#, c-format
+-msgid "duplicate member `%s'"
+-msgstr ""
+-
+-#: c-decl.c:6098
+-msgid "union cannot be made transparent"
+-msgstr ""
+-
+-#. This enum is a named one that has been declared already.
+-#: c-decl.c:6190
+-#, c-format
+-msgid "redeclaration of `enum %s'"
+-msgstr ""
+-
+-#: c-decl.c:6224
+-msgid "enum defined inside parms"
+-msgstr ""
+-
+-#: c-decl.c:6264
+-msgid "enumeration values exceed range of largest integer"
+-msgstr ""
+-
+-#: c-decl.c:6347
+-#, c-format
+-msgid "enumerator value for `%s' not integer constant"
+-msgstr ""
+-
+-#: c-decl.c:6360
+-msgid "overflow in enumeration values"
+-msgstr ""
+-
+-#: c-decl.c:6365
+-msgid "ANSI C restricts enumerator values to range of `int'"
+-msgstr ""
+-
+-#: c-decl.c:6440
+-msgid "return-type is an incomplete type"
+-msgstr ""
+-
+-#: c-decl.c:6448
+-msgid "return-type defaults to `int'"
+-msgstr ""
+-
+-#: c-decl.c:6489
+-#, c-format
+-msgid "no previous prototype for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:6496
+-#, c-format
+-msgid "`%s' was used with no prototype before its definition"
+-msgstr ""
+-
+-#: c-decl.c:6502
+-#, c-format
+-msgid "no previous declaration for `%s'"
+-msgstr ""
+-
+-#: c-decl.c:6509
+-#, c-format
+-msgid "`%s' was used with no declaration before its definition"
+-msgstr ""
+-
+-#: c-decl.c:6538 c-decl.c:7250
+-#, c-format
+-msgid "return type of `%s' is not `int'"
+-msgstr ""
+-
+-#: c-decl.c:6554
+-#, c-format
+-msgid "first argument of `%s' should be `int'"
+-msgstr ""
+-
+-#: c-decl.c:6563
+-#, c-format
+-msgid "second argument of `%s' should be `char **'"
+-msgstr ""
+-
+-#: c-decl.c:6572
+-#, c-format
+-msgid "third argument of `%s' should probably be `char **'"
+-msgstr ""
+-
+-#: c-decl.c:6581
+-#, c-format
+-msgid "`%s' takes only zero or two arguments"
+-msgstr ""
+-
+-#: c-decl.c:6584
+-#, c-format
+-msgid "third argument of `%s' is deprecated"
+-msgstr ""
+-
+-#: c-decl.c:6587
+-#, c-format
+-msgid "`%s' is normally a non-static function"
+-msgstr ""
+-
+-#: c-decl.c:6692
+-msgid "parm types given both in parmlist and separately"
+-msgstr ""
+-
+-#: c-decl.c:6713
+-msgid "parameter name omitted"
+-msgstr ""
+-
+-#: c-decl.c:6716 c-decl.c:6816 c-decl.c:7116
+-#, c-format
+-msgid "parameter `%s' declared void"
+-msgstr ""
+-
+-#: c-decl.c:6790
+-msgid "parameter name missing from parameter list"
+-msgstr ""
+-
+-#: c-decl.c:6809 c-decl.c:7109
+-#, c-format
+-msgid "multiple parameters named `%s'"
+-msgstr ""
+-
+-#: c-decl.c:6840
+-#, c-format
+-msgid "type of `%s' defaults to `int'"
+-msgstr ""
+-
+-#: c-decl.c:6878 c-decl.c:7168
+-#, c-format
+-msgid "declaration for parameter `%s' but no such parameter"
+-msgstr ""
+-
+-#: c-decl.c:6925
+-msgid "number of arguments doesn't match prototype"
+-msgstr ""
+-
+-#: c-decl.c:6953
+-#, c-format
+-msgid "promoted argument `%s' doesn't match prototype"
+-msgstr ""
+-
+-#: c-decl.c:6967
+-#, c-format
+-msgid "argument `%s' doesn't match prototype"
+-msgstr ""
+-
+-#: c-decl.c:7139
+-#, c-format
+-msgid "type of parameter `%s' is not declared"
+-msgstr ""
+-
+-#: c-decl.c:7276
+-msgid "function might be possible candidate for attribute `noreturn'"
+-msgstr ""
+-
+-#: c-decl.c:7279
+-msgid "`noreturn' function does return"
+-msgstr ""
+-
+-#. If this function returns non-void and control can drop through,
+-#. complain.
+-#: c-decl.c:7284
+-msgid "control reaches end of non-void function"
+-msgstr ""
+-
+-#: c-decl.c:7289 cp/decl.c:14491
+-msgid "this function may return with or without a value"
+-msgstr ""
+-
+-#: c-decl.c:7310
+-#, c-format
+-msgid "size of return value of `%s' is %u bytes"
+-msgstr ""
+-
+-#: c-decl.c:7390
+-msgid "ANSI C forbids nested functions"
+-msgstr ""
+-
+-#: c-iterate.c:492
+-#, c-format
+-msgid "`for (%s)' appears within implicit iteration"
+-msgstr ""
+-
+-#: c-lex.c:374
+-msgid "carriage return in source file"
+-msgstr ""
+-
+-#: c-lex.c:375
+-msgid "(we only warn about the first carriage return)"
+-msgstr ""
+-
+-#: c-lex.c:420 cp/lex.c:2124
+-msgid "stray '\\' in program"
+-msgstr ""
+-
+-#: c-lex.c:602 cp/lex.c:2280
+-#, c-format
+-msgid "ignoring pragma: %s"
+-msgstr ""
+-
+-#: c-lex.c:667 cp/lex.c:2340
+-msgid "invalid #ident"
+-msgstr ""
+-
+-#: c-lex.c:683 cp/lex.c:2372
+-msgid "undefined or invalid # directive"
+-msgstr ""
+-
+-#: c-lex.c:734 cp/lex.c:2430
+-msgid "invalid #line"
+-msgstr ""
+-
+-#: c-lex.c:805 cp/lex.c:2591
+-msgid "#-lines for entering and leaving files don't match"
+-msgstr ""
+-
+-#: c-lex.c:846
+-msgid "unrecognized text at end of #line"
+-msgstr ""
+-
+-#: c-lex.c:849 cp/lex.c:2602
+-msgid "invalid #-line"
+-msgstr ""
+-
+-#: c-lex.c:929
+-msgid "the meaning of `\\x' varies with -traditional"
+-msgstr ""
+-
+-#: c-lex.c:963 cexp.y:925 cp/lex.c:2667 cppexp.c:600
+-msgid "\\x used with no following hex digits"
+-msgstr ""
+-
+-#: c-lex.c:971 cp/lex.c:2676
+-msgid "hex escape out of range"
+-msgstr ""
+-
+-#: c-lex.c:1011
+-msgid "the meaning of `\\a' varies with -traditional"
+-msgstr ""
+-
+-#: c-lex.c:1027 cexp.y:855 cp/lex.c:2723 cppexp.c:530
+-#, c-format
+-msgid "non-ANSI-standard escape sequence, `\\%c'"
+-msgstr ""
+-
+-#: c-lex.c:1040
+-#, c-format
+-msgid "non-ANSI escape sequence `\\%c'"
+-msgstr ""
+-
+-#: c-lex.c:1044 cp/lex.c:2736 cp/lex.c:2740
+-#, c-format
+-msgid "unknown escape sequence `\\%c'"
+-msgstr ""
+-
+-#: c-lex.c:1046 cp/lex.c:2742
+-#, c-format
+-msgid "unknown escape sequence: `\\' followed by char code 0x%x"
+-msgstr ""
+-
+-#: c-lex.c:1059
+-#, c-format
+-msgid "%s at end of input"
+-msgstr ""
+-
+-#: c-lex.c:1061
+-#, c-format
+-msgid "%s at null character"
+-msgstr ""
+-
+-#: c-lex.c:1063
+-#, c-format
+-msgid "%s before string constant"
+-msgstr ""
+-
+-#: c-lex.c:1065
+-#, c-format
+-msgid "%s before character constant"
+-msgstr ""
+-
+-#: c-lex.c:1067
+-#, c-format
+-msgid "%s before character 0%o"
+-msgstr ""
+-
+-#: c-lex.c:1069
+-#, c-format
+-msgid "%s before `%s'"
+-msgstr ""
+-
+-#: c-lex.c:1128 cp/lex.c:3164
+-msgid "more than one `f' in numeric constant"
+-msgstr ""
+-
+-#: c-lex.c:1134 cp/lex.c:3170
+-msgid "more than one `l' in numeric constant"
+-msgstr ""
+-
+-#: c-lex.c:1140 c-lex.c:1723 cp/lex.c:3176 cp/lex.c:3879
+-msgid "more than one `i' or `j' in numeric constant"
+-msgstr ""
+-
+-#: c-lex.c:1142 c-lex.c:1725
+-msgid "ANSI C forbids imaginary numeric constants"
+-msgstr ""
+-
+-#: c-lex.c:1167 cp/lex.c:3203
+-msgid "both `f' and `l' in floating constant"
+-msgstr ""
+-
+-#: c-lex.c:1180 cp/lex.c:3211
+-msgid "floating point number exceeds range of `float'"
+-msgstr ""
+-
+-#: c-lex.c:1192 cp/lex.c:3218
+-msgid "floating point number exceeds range of `long double'"
+-msgstr ""
+-
+-#: c-lex.c:1203 c-lex.c:1672 cp/lex.c:3224
+-msgid "floating point number exceeds range of `double'"
+-msgstr ""
+-
+-#: c-lex.c:1320 c-lex.c:1322 cccp.c:3039 cp/lex.c:3287 cp/lex.c:3289
+-#: cp/lex.c:3345 cp/lex.c:3347 cp/lex.c:3375 cp/lex.c:3377 cpplib.c:2537
+-msgid "`$' in identifier"
+-msgstr ""
+-
+-#: c-lex.c:1368
+-#, c-format
+-msgid "ANSI does not permit the keyword `%s'"
+-msgstr ""
+-
+-#: c-lex.c:1379
+-#, c-format
+-msgid "invalid identifier `%s'"
+-msgstr ""
+-
+-#: c-lex.c:1489 cp/lex.c:3650
+-msgid "floating constant may not be in radix 16"
+-msgstr ""
+-
+-#: c-lex.c:1495 cp/lex.c:3656
+-msgid "malformed floating constant"
+-msgstr ""
+-
+-#: c-lex.c:1522 cp/lex.c:3561 cp/lex.c:3683
+-msgid "parse error at `..'"
+-msgstr ""
+-
+-#: c-lex.c:1547 cp/lex.c:3708
+-msgid "nondigits in number and not hexadecimal"
+-msgstr ""
+-
+-#: c-lex.c:1593 cp/lex.c:3749
+-msgid "numeric constant with no digits"
+-msgstr ""
+-
+-#: c-lex.c:1596 cp/lex.c:3752
+-msgid "numeric constant contains digits beyond the radix"
+-msgstr ""
+-
+-#: c-lex.c:1625 cp/lex.c:3779
+-msgid "floating constant exponent has no digits"
+-msgstr ""
+-
+-#: c-lex.c:1635
+-msgid "hexadecimal floating constant has no exponent"
+-msgstr ""
+-
+-#. We got an exception from parse_float()
+-#: c-lex.c:1656 cp/lex.c:3807
+-msgid "floating constant out of range"
+-msgstr ""
+-
+-#: c-lex.c:1705 cexp.y:454 cp/lex.c:3861
+-msgid "two `u's in integer constant"
+-msgstr ""
+-
+-#: c-lex.c:1713 cp/lex.c:3869
+-msgid "three `l's in integer constant"
+-msgstr ""
+-
+-#: c-lex.c:1715
+-msgid "ANSI C forbids long long integer constants"
+-msgstr ""
+-
+-#: c-lex.c:1741 c-lex.c:1832 c-lex.c:1869 cexp.y:483 cp/lex.c:3912
+-#: cp/lex.c:3953 cppexp.c:219
+-msgid "integer constant out of range"
+-msgstr ""
+-
+-#: c-lex.c:1819
+-msgid "width of integer constant changes with -traditional"
+-msgstr ""
+-
+-#: c-lex.c:1822
+-msgid "integer constant is unsigned in ANSI C, signed with -traditional"
+-msgstr ""
+-
+-#: c-lex.c:1824
+-msgid "width of integer constant may change on other systems with -traditional"
+-msgstr ""
+-
+-#: c-lex.c:1836
+-msgid "decimal constant is so large that it is unsigned"
+-msgstr ""
+-
+-#: c-lex.c:1847
+-msgid "complex integer constant is too wide for `complex int'"
+-msgstr ""
+-
+-#: c-lex.c:1878
+-#, c-format
+-msgid "missing white space after number `%s'"
+-msgstr ""
+-
+-#: c-lex.c:1917 c-lex.c:2072 cp/lex.c:4013 cp/lex.c:4174 cppexp.c:292
+-msgid "escape sequence out of range for character"
+-msgstr ""
+-
+-#: c-lex.c:1926 cp/lex.c:4022
+-msgid "ANSI C forbids newline in character constant"
+-msgstr ""
+-
+-#: c-lex.c:1975 c-lex.c:2098 cexp.y:661 cp/lex.c:4071 cp/lex.c:4200
+-msgid "Ignoring invalid multibyte character"
+-msgstr ""
+-
+-#: c-lex.c:2009 cexp.y:687 cp/lex.c:4105 cppexp.c:314
+-msgid "malformatted character constant"
+-msgstr ""
+-
+-#: c-lex.c:2011 cexp.y:689 cp/lex.c:4107 cppexp.c:307
+-msgid "empty character constant"
+-msgstr ""
+-
+-#: c-lex.c:2015 cexp.y:693 cp/lex.c:4111 cppexp.c:319
+-msgid "character constant too long"
+-msgstr ""
+-
+-#: c-lex.c:2018 cexp.y:696 cp/lex.c:4114 cppexp.c:323
+-msgid "multi-character character constant"
+-msgstr ""
+-
+-#: c-lex.c:2077
+-msgid "ANSI C forbids newline in string constant"
+-msgstr ""
+-
+-#: c-lex.c:2168
+-msgid "Unterminated string constant"
+-msgstr ""
+-
+-#: c-lex.c:2348 cp/lex.c:1042
+-msgid "YYDEBUG not defined."
+-msgstr ""
+-
+-#: /tmp/sky/share/bison.simple:327 /usr/lib/bison.simple:327
+-msgid "parser stack overflow"
+-msgstr ""
+-
+-#: c-parse.y:235 objc-parse.y:235
+-msgid "ANSI C forbids an empty source file"
+-msgstr ""
+-
+-#: c-parse.y:267 c-parse.y:1852 objc-parse.y:268 objc-parse.y:1961
+-msgid "argument of `asm' is not a constant string"
+-msgstr ""
+-
+-#: c-parse.y:275 objc-parse.y:276
+-msgid "ANSI C forbids data definition with no type or storage class"
+-msgstr ""
+-
+-#: c-parse.y:277 objc-parse.y:278
+-msgid "data definition has no type or storage class"
+-msgstr ""
+-
+-#: c-parse.y:301 objc-parse.y:302
+-msgid "ANSI C does not allow extra `;' outside of a function"
+-msgstr ""
+-
+-#: c-parse.y:414 objc-parse.y:417
+-msgid "ANSI C forbids `&&'"
+-msgstr ""
+-
+-#: c-parse.y:443 objc-parse.y:446
+-msgid "`sizeof' applied to a bit-field"
+-msgstr ""
+-
+-#: c-parse.y:484 objc-parse.y:487
+-msgid "ANSI C forbids constructor expressions"
+-msgstr ""
+-
+-#: c-parse.y:553 objc-parse.y:556
+-msgid "ANSI C forbids omitting the middle term of a ?: expression"
+-msgstr ""
+-
+-#: c-parse.y:599 objc-parse.y:618
+-#, c-format
+-msgid "`%s' undeclared here (not in a function)"
+-msgstr ""
+-
+-#: c-parse.y:609 objc-parse.y:643
+-#, c-format
+-msgid "`%s' undeclared (first use in this function)"
+-msgstr ""
+-
+-#: c-parse.y:614 cp/lex.c:2939 objc-parse.y:648
+-msgid "(Each undeclared identifier is reported only once"
+-msgstr ""
+-
+-#: c-parse.y:615 cp/lex.c:2940 objc-parse.y:649
+-msgid "for each function it appears in.)"
+-msgstr ""
+-
+-#: c-parse.y:642 objc-parse.y:681
+-#, c-format
+-msgid "`%s' implicitly declared as function"
+-msgstr ""
+-
+-#: c-parse.y:648 objc-parse.y:687
+-#, c-format
+-msgid "type mismatch in implicit declaration for built-in function `%s'"
+-msgstr ""
+-
+-#: c-parse.y:657 objc-parse.y:696
+-#, c-format
+-msgid "built-in function `%s' used without declaration"
+-msgstr ""
+-
+-#: c-parse.y:693 objc-parse.y:757 parse.y:1429
+-msgid "braced-group within expression allowed only inside a function"
+-msgstr ""
+-
+-#: c-parse.y:707 objc-parse.y:771
+-msgid "ANSI C forbids braced-groups within expressions"
+-msgstr ""
+-
+-#: c-parse.y:762 objc-parse.y:859
+-msgid "ANSI C does not permit use of `varargs.h'"
+-msgstr ""
+-
+-#: c-parse.y:884 c-parse.y:905 c-parse.y:937 objc-parse.y:981
+-#: objc-parse.y:1002 objc-parse.y:1034 parse.y:1737 parse.y:1744 parse.y:1777
+-#, c-format
+-msgid "`%s' is not at beginning of declaration"
+-msgstr ""
+-
+-#: c-parse.y:1110 objc-parse.y:1216
+-msgid "ANSI C forbids empty initializer braces"
+-msgstr ""
+-
+-#: c-parse.y:1251 c-parse.y:1285
+-msgid "`[*]' in parameter declaration only allowed in ISO C 9x"
+-msgstr ""
+-
+-#: c-parse.y:1370 objc-parse.y:1463 parse.y:2197
+-msgid "comma at end of enumerator list"
+-msgstr ""
+-
+-#: c-parse.y:1378 objc-parse.y:1471
+-msgid "no semicolon at end of struct or union"
+-msgstr ""
+-
+-#: c-parse.y:1387 objc-parse.y:1480 objc-parse.y:2564
+-msgid "extra semicolon in struct or union specified"
+-msgstr ""
+-
+-#: c-parse.y:1408 c-parse.y:1419 objc-parse.y:1515 objc-parse.y:1526
+-msgid "ANSI C forbids member declarations with no members"
+-msgstr ""
+-
+-#: c-parse.y:1533 objc-parse.y:1640
+-msgid "ANSI C forbids label at end of compound statement"
+-msgstr ""
+-
+-#: c-parse.y:1568 objc-parse.y:1677
+-msgid "ANSI C forbids label declarations"
+-msgstr ""
+-
+-#: c-parse.y:1721 objc-parse.y:1830
+-msgid "empty body in an else-statement"
+-msgstr ""
+-
+-#: c-parse.y:1829 objc-parse.y:1938
+-msgid "break statement not within loop or switch"
+-msgstr ""
+-
+-#: c-parse.y:1834 objc-parse.y:1943
+-msgid "continue statement not within a loop"
+-msgstr ""
+-
+-#: c-parse.y:1888 objc-parse.y:1997
+-msgid "ANSI C forbids `goto *expr;'"
+-msgstr ""
+-
+-#: c-parse.y:1909 objc-parse.y:2018
+-msgid "invalid `for (ITERATOR)' syntax"
+-msgstr ""
+-
+-#: c-parse.y:1911 objc-parse.y:2020
+-#, c-format
+-msgid "`%s' is not an iterator"
+-msgstr ""
+-
+-#: c-parse.y:1914 objc-parse.y:2023
+-#, c-format
+-msgid "`for (%s)' inside expansion of same iterator"
+-msgstr ""
+-
+-#: c-parse.y:1970 objc-parse.y:2079
+-msgid "label must have integral type in ANSI C"
+-msgstr ""
+-
+-#: c-parse.y:1976 c-parse.y:2005 cp/expr.c:421 cp/typeck2.c:1560
+-#: objc-parse.y:2085 objc-parse.y:2114
+-msgid "case label not within a switch statement"
+-msgstr ""
+-
+-#: c-parse.y:1979 c-parse.y:2008 objc-parse.y:2088 objc-parse.y:2117
+-msgid "duplicate case value"
+-msgstr ""
+-
+-#: c-parse.y:1980 c-parse.y:2009 objc-parse.y:2089 objc-parse.y:2118
+-msgid "this is the first entry for that value"
+-msgstr ""
+-
+-#: c-parse.y:1983 c-parse.y:2012 cp/expr.c:447 cp/typeck2.c:1635
+-#: objc-parse.y:2092 objc-parse.y:2121
+-msgid "case value out of range"
+-msgstr ""
+-
+-#: c-parse.y:1985 c-parse.y:2016 cp/expr.c:453 objc-parse.y:2094
+-#: objc-parse.y:2125
+-msgid "case label within scope of cleanup or variable array"
+-msgstr ""
+-
+-#: c-parse.y:1995 objc-parse.y:2104
+-msgid "ANSI C forbids case ranges"
+-msgstr ""
+-
+-#: c-parse.y:2014 objc-parse.y:2123
+-msgid "empty case range"
+-msgstr ""
+-
+-#: c-parse.y:2027 cp/expr.c:425 cp/typeck2.c:1562 objc-parse.y:2136
+-msgid "default label not within a switch statement"
+-msgstr ""
+-
+-#: c-parse.y:2030 cp/expr.c:442 cp/typeck2.c:1568 objc-parse.y:2139
+-msgid "multiple default labels in one switch"
+-msgstr ""
+-
+-#: c-parse.y:2031 objc-parse.y:2140
+-msgid "this is the first default label"
+-msgstr ""
+-
+-#: c-parse.y:2104 objc-parse.y:2213
+-msgid "ANSI C forbids forward parameter declarations"
+-msgstr ""
+-
+-#. Gcc used to allow this as an extension. However, it does
+-#. not work for all targets, and thus has been disabled.
+-#. Also, since func (...) and func () are indistinguishable,
+-#. it caused problems with the code in expand_builtin which
+-#. tries to verify that BUILT_IN_NEXT_ARG is being used
+-#. correctly.
+-#: c-parse.y:2127 objc-parse.y:2236
+-msgid "ANSI C requires a named argument before `...'"
+-msgstr ""
+-
+-#: c-parse.y:2212 objc-parse.y:2321
+-msgid "`...' in old-style identifier list"
+-msgstr ""
+-
+-#: /tmp/sky/share/bison.simple:594 /usr/lib/bison.simple:594
+-msgid "parse error; also virtual memory exceeded"
+-msgstr ""
+-
+-#: /tmp/sky/share/bison.simple:598 /usr/lib/bison.simple:598
+-msgid "parse error"
+-msgstr ""
+-
+-#: c-pragma.c:73
+-#, c-format
+-msgid "Alignment must be a small power of two, not %d, in #pragma pack"
+-msgstr ""
+-
+-#: c-pragma.c:89
+-msgid "Out of memory pushing #pragma pack"
+-msgstr ""
+-
+-#: c-pragma.c:117
+-msgid ""
+-"#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
+-msgstr ""
+-
+-#: c-pragma.c:135
+-#, c-format
+-msgid ""
+-"#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, "
+-"<n>)"
+-msgstr ""
+-
+-#: c-pragma.c:269
+-msgid "malformed `#pragma pack'"
+-msgstr ""
+-
+-#: c-pragma.c:278
+-msgid "malformed '#pragma pack(push[,id],<n>)'"
+-msgstr ""
+-
+-#: c-pragma.c:285
+-msgid "malformed '#pragma pack(pop[,id])'"
+-msgstr ""
+-
+-#: c-pragma.c:298
+-msgid "malformed `#pragma weak'"
+-msgstr ""
+-
+-#: c-pragma.c:350 c-pragma.c:368
+-msgid "Out of memory parsing #pragma weak"
+-msgstr ""
+-
+-#: c-typeck.c:115
+-#, c-format
+-msgid "`%s' has an incomplete type"
+-msgstr ""
+-
+-#: c-typeck.c:137 cp/call.c:2254
+-msgid "invalid use of void expression"
+-msgstr ""
+-
+-#: c-typeck.c:146
+-msgid "invalid use of array with unspecified bounds"
+-msgstr ""
+-
+-#: c-typeck.c:154
+-#, c-format
+-msgid "invalid use of undefined type `%s %s'"
+-msgstr ""
+-
+-#. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL.
+-#: c-typeck.c:158
+-#, c-format
+-msgid "invalid use of incomplete typedef `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:385 c-typeck.c:399
+-msgid "function types not truly compatible in ANSI C"
+-msgstr ""
+-
+-#: c-typeck.c:543
+-msgid "types are not quite compatible"
+-msgstr ""
+-
+-#: c-typeck.c:820
+-msgid "sizeof applied to a function type"
+-msgstr ""
+-
+-#: c-typeck.c:826
+-msgid "sizeof applied to a void type"
+-msgstr ""
+-
+-#: c-typeck.c:833
+-msgid "sizeof applied to an incomplete type"
+-msgstr ""
+-
+-#: c-typeck.c:886 c-typeck.c:2767 cp/typeck.c:4245
+-msgid "arithmetic on pointer to an incomplete type"
+-msgstr ""
+-
+-#: c-typeck.c:931
+-msgid "`__alignof' applied to a bit-field"
+-msgstr ""
+-
+-#: c-typeck.c:1108 cp/typeck.c:1798
+-msgid "invalid use of non-lvalue array"
+-msgstr ""
+-
+-#: c-typeck.c:1284
+-#, c-format
+-msgid "structure has no member named `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:1285
+-#, c-format
+-msgid "union has no member named `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:1315
+-#, c-format
+-msgid "request for member `%s' in something not a structure or union"
+-msgstr ""
+-
+-#: c-typeck.c:1348
+-msgid "dereferencing pointer to incomplete type"
+-msgstr ""
+-
+-#: c-typeck.c:1352
+-msgid "dereferencing `void *' pointer"
+-msgstr ""
+-
+-#: c-typeck.c:1369 cp/typeck.c:2394
+-#, c-format
+-msgid "invalid type argument of `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:1388 cp/typeck.c:2420
+-msgid "subscript missing in array reference"
+-msgstr ""
+-
+-#: c-typeck.c:1409 cp/typeck.c:2441
+-msgid "array subscript has type `char'"
+-msgstr ""
+-
+-#: c-typeck.c:1417 c-typeck.c:1512 cp/typeck.c:2448 cp/typeck.c:2526
+-msgid "array subscript is not an integer"
+-msgstr ""
+-
+-#: c-typeck.c:1447
+-msgid "ANSI C forbids subscripting `register' array"
+-msgstr ""
+-
+-#: c-typeck.c:1449 c-typeck.c:1458
+-msgid "ANSI C forbids subscripting non-lvalue array"
+-msgstr ""
+-
+-#: c-typeck.c:1491
+-msgid "subscript has type `char'"
+-msgstr ""
+-
+-#: c-typeck.c:1507 cp/typeck.c:2521
+-msgid "subscripted value is neither array nor pointer"
+-msgstr ""
+-
+-#: c-typeck.c:1563
+-msgid "called object is not a function"
+-msgstr ""
+-
+-#: c-typeck.c:1651
+-#, c-format
+-msgid "too many arguments to function `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:1654 cp/typeck.c:3132
+-msgid "too many arguments to function"
+-msgstr ""
+-
+-#: c-typeck.c:1677
+-#, c-format
+-msgid "type of formal parameter %d is incomplete"
+-msgstr ""
+-
+-#: c-typeck.c:1690
+-#, c-format
+-msgid "%s as integer rather than floating due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1693
+-#, c-format
+-msgid "%s as complex rather than floating due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1696
+-#, c-format
+-msgid "%s as floating rather than integer due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1699
+-#, c-format
+-msgid "%s as floating rather than complex due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1709
+-#, c-format
+-msgid "%s as `float' rather than `double' due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1724
+-#, c-format
+-msgid "%s with different width due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1758
+-#, c-format
+-msgid "%s as unsigned due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1760
+-#, c-format
+-msgid "%s as signed due to prototype"
+-msgstr ""
+-
+-#: c-typeck.c:1793
+-#, c-format
+-msgid "too few arguments to function `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:1796 cp/typeck.c:3235
+-msgid "too few arguments to function"
+-msgstr ""
+-
+-#: c-typeck.c:1837
+-msgid "suggest parentheses around + or - inside shift"
+-msgstr ""
+-
+-#: c-typeck.c:1844
+-msgid "suggest parentheses around && within ||"
+-msgstr ""
+-
+-#: c-typeck.c:1853
+-msgid "suggest parentheses around arithmetic in operand of |"
+-msgstr ""
+-
+-#: c-typeck.c:1856
+-msgid "suggest parentheses around comparison in operand of |"
+-msgstr ""
+-
+-#: c-typeck.c:1865
+-msgid "suggest parentheses around arithmetic in operand of ^"
+-msgstr ""
+-
+-#: c-typeck.c:1868
+-msgid "suggest parentheses around comparison in operand of ^"
+-msgstr ""
+-
+-#: c-typeck.c:1875
+-msgid "suggest parentheses around + or - in operand of &"
+-msgstr ""
+-
+-#: c-typeck.c:1878
+-msgid "suggest parentheses around comparison in operand of &"
+-msgstr ""
+-
+-#: c-typeck.c:1885
+-msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+-msgstr ""
+-
+-#: c-typeck.c:2143 cp/typeck.c:3526
+-msgid "right shift count is negative"
+-msgstr ""
+-
+-#: c-typeck.c:2151 cp/typeck.c:3534
+-msgid "right shift count >= width of type"
+-msgstr ""
+-
+-#: c-typeck.c:2175 cp/typeck.c:3553
+-msgid "left shift count is negative"
+-msgstr ""
+-
+-#: c-typeck.c:2179 cp/typeck.c:3557
+-msgid "left shift count >= width of type"
+-msgstr ""
+-
+-#: c-typeck.c:2203
+-msgid "shift count is negative"
+-msgstr ""
+-
+-#: c-typeck.c:2207
+-msgid "shift count >= width of type"
+-msgstr ""
+-
+-#: c-typeck.c:2249 c-typeck.c:2255
+-msgid "ANSI C forbids comparison of `void *' with function pointer"
+-msgstr ""
+-
+-#: c-typeck.c:2258 c-typeck.c:2300 c-typeck.c:2328
+-msgid "comparison of distinct pointer types lacks a cast"
+-msgstr ""
+-
+-#: c-typeck.c:2273 c-typeck.c:2279 c-typeck.c:2349 c-typeck.c:2355
+-msgid "comparison between pointer and integer"
+-msgstr ""
+-
+-#: c-typeck.c:2295 c-typeck.c:2323
+-msgid "ANSI C forbids ordered comparisons of pointers to functions"
+-msgstr ""
+-
+-#: c-typeck.c:2320
+-msgid "comparison of complete and incomplete pointers"
+-msgstr ""
+-
+-#: c-typeck.c:2336 c-typeck.c:2343
+-msgid "ordered comparison of pointer with integer zero"
+-msgstr ""
+-
+-#: c-typeck.c:2553 cp/typeck.c:3997
+-msgid "comparison between signed and unsigned"
+-msgstr ""
+-
+-#: c-typeck.c:2599 cp/typeck.c:4042
+-msgid "comparison of promoted ~unsigned with constant"
+-msgstr ""
+-
+-#: c-typeck.c:2607 cp/typeck.c:4050
+-msgid "comparison of promoted ~unsigned with unsigned"
+-msgstr ""
+-
+-#: c-typeck.c:2669
+-msgid "pointer of type `void *' used in arithmetic"
+-msgstr ""
+-
+-#: c-typeck.c:2675
+-msgid "pointer to a function used in arithmetic"
+-msgstr ""
+-
+-#: c-typeck.c:2753
+-msgid "pointer of type `void *' used in subtraction"
+-msgstr ""
+-
+-#: c-typeck.c:2755
+-msgid "pointer to a function used in subtraction"
+-msgstr ""
+-
+-#: c-typeck.c:2813
+-msgid "wrong type argument to unary plus"
+-msgstr ""
+-
+-#: c-typeck.c:2824
+-msgid "wrong type argument to unary minus"
+-msgstr ""
+-
+-#: c-typeck.c:2840
+-msgid "wrong type argument to bit-complement"
+-msgstr ""
+-
+-#: c-typeck.c:2851
+-msgid "wrong type argument to abs"
+-msgstr ""
+-
+-#: c-typeck.c:2863
+-msgid "wrong type argument to conjugation"
+-msgstr ""
+-
+-#: c-typeck.c:2877
+-msgid "wrong type argument to unary exclamation mark"
+-msgstr ""
+-
+-#: c-typeck.c:2932 c-typeck.c:2958
+-msgid "wrong type argument to increment"
+-msgstr ""
+-
+-#: c-typeck.c:2933 c-typeck.c:2959
+-msgid "wrong type argument to decrement"
+-msgstr ""
+-
+-#: c-typeck.c:2952
+-msgid "increment of pointer to unknown structure"
+-msgstr ""
+-
+-#: c-typeck.c:2953
+-msgid "decrement of pointer to unknown structure"
+-msgstr ""
+-
+-#: c-typeck.c:3016
+-msgid "invalid lvalue in increment"
+-msgstr ""
+-
+-#: c-typeck.c:3017
+-msgid "invalid lvalue in decrement"
+-msgstr ""
+-
+-#: c-typeck.c:3025 cp/typeck.c:4599
+-msgid "increment"
+-msgstr ""
+-
+-#: c-typeck.c:3025 cp/typeck.c:4599
+-msgid "decrement"
+-msgstr ""
+-
+-#: c-typeck.c:3078
+-msgid "ANSI C forbids the address of a cast expression"
+-msgstr ""
+-
+-#: c-typeck.c:3092
+-msgid "invalid lvalue in unary `&'"
+-msgstr ""
+-
+-#: c-typeck.c:3126
+-#, c-format
+-msgid "attempt to take address of bit-field structure member `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:3296
+-msgid "ANSI C forbids use of conditional expressions as lvalues"
+-msgstr ""
+-
+-#: c-typeck.c:3298
+-msgid "ANSI C forbids use of compound expressions as lvalues"
+-msgstr ""
+-
+-#: c-typeck.c:3299
+-msgid "ANSI C forbids use of cast expressions as lvalues"
+-msgstr ""
+-
+-#: c-typeck.c:3311
+-#, c-format
+-msgid "%s of iterator `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:3319
+-#, c-format
+-msgid "%s of read-only member `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:3323
+-#, c-format
+-msgid "%s of read-only variable `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:3326
+-#, c-format
+-msgid "%s of read-only location"
+-msgstr ""
+-
+-#: c-typeck.c:3344
+-#, c-format
+-msgid "cannot take address of bitfield `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:3371
+-#, c-format
+-msgid "global register variable `%s' used in nested function"
+-msgstr ""
+-
+-#: c-typeck.c:3375
+-#, c-format
+-msgid "register variable `%s' used in nested function"
+-msgstr ""
+-
+-#: c-typeck.c:3382
+-#, c-format
+-msgid "address of global register variable `%s' requested"
+-msgstr ""
+-
+-#: c-typeck.c:3394
+-msgid "cannot put object with volatile field into register"
+-msgstr ""
+-
+-#: c-typeck.c:3398
+-#, c-format
+-msgid "address of register variable `%s' requested"
+-msgstr ""
+-
+-#: c-typeck.c:3482
+-msgid "ANSI C forbids conditional expr with only one void side"
+-msgstr ""
+-
+-#: c-typeck.c:3498 c-typeck.c:3504
+-msgid "ANSI C forbids conditional expr between `void *' and function pointer"
+-msgstr ""
+-
+-#: c-typeck.c:3509 cp/typeck.c:5270
+-msgid "pointer type mismatch in conditional expression"
+-msgstr ""
+-
+-#: c-typeck.c:3516 c-typeck.c:3530 cp/typeck.c:5276 cp/typeck.c:5281
+-msgid "pointer/integer type mismatch in conditional expression"
+-msgstr ""
+-
+-#: c-typeck.c:3522 c-typeck.c:3536
+-msgid "ANSI C forbids conditional expr between 0 and function pointer"
+-msgstr ""
+-
+-#: c-typeck.c:3548 cp/typeck.c:5357
+-msgid "type mismatch in conditional expression"
+-msgstr ""
+-
+-#: c-typeck.c:3658 cp/typeck.c:5410
+-msgid "left-hand operand of comma expression has no effect"
+-msgstr ""
+-
+-#: c-typeck.c:3697
+-msgid "cast specifies array type"
+-msgstr ""
+-
+-#: c-typeck.c:3703
+-msgid "cast specifies function type"
+-msgstr ""
+-
+-#: c-typeck.c:3713
+-msgid "ANSI C forbids casting nonscalar to the same type"
+-msgstr ""
+-
+-#: c-typeck.c:3734
+-msgid "ANSI C forbids casts to union type"
+-msgstr ""
+-
+-#: c-typeck.c:3750
+-msgid "cast to union type from type not present in union"
+-msgstr ""
+-
+-#. There are qualifiers present in IN_OTYPE that are not
+-#. present in IN_TYPE.
+-#: c-typeck.c:3787
+-msgid "cast discards qualifiers from pointer target type"
+-msgstr ""
+-
+-#: c-typeck.c:3802 cp/typeck.c:5830
+-msgid "cast increases required alignment of target type"
+-msgstr ""
+-
+-#: c-typeck.c:3808 cp/typeck.c:5838
+-msgid "cast from pointer to integer of different size"
+-msgstr ""
+-
+-#: c-typeck.c:3813
+-msgid "cast does not match function type"
+-msgstr ""
+-
+-#: c-typeck.c:3825 cp/typeck.c:5846
+-msgid "cast to pointer from integer of different size"
+-msgstr ""
+-
+-#. Now we have handled acceptable kinds of LHS that are not truly lvalues.
+-#. Reject anything strange now.
+-#: c-typeck.c:3968
+-msgid "invalid lvalue in assignment"
+-msgstr ""
+-
+-#. Convert new value to destination type.
+-#: c-typeck.c:3977 c-typeck.c:4001 c-typeck.c:4016 cp/typeck.c:6103
+-msgid "assignment"
+-msgstr ""
+-
+-#: c-typeck.c:4161 c-typeck.c:4230
+-#, c-format
+-msgid "%s makes qualified function pointer from unqualified"
+-msgstr ""
+-
+-#: c-typeck.c:4165 c-typeck.c:4209
+-#, c-format
+-msgid "%s discards qualifiers from pointer target type"
+-msgstr ""
+-
+-#: c-typeck.c:4171
+-msgid "ANSI C prohibits argument conversion to union type"
+-msgstr ""
+-
+-#: c-typeck.c:4201
+-#, c-format
+-msgid "ANSI forbids %s between function pointer and `void *'"
+-msgstr ""
+-
+-#: c-typeck.c:4219
+-#, c-format
+-msgid "pointer targets in %s differ in signedness"
+-msgstr ""
+-
+-#: c-typeck.c:4235
+-#, c-format
+-msgid "%s from incompatible pointer type"
+-msgstr ""
+-
+-#: c-typeck.c:4251
+-#, c-format
+-msgid "%s makes pointer from integer without a cast"
+-msgstr ""
+-
+-#: c-typeck.c:4259
+-#, c-format
+-msgid "%s makes integer from pointer without a cast"
+-msgstr ""
+-
+-#: c-typeck.c:4271 c-typeck.c:4274
+-#, c-format
+-msgid "incompatible type for argument %d of `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:4278
+-#, c-format
+-msgid "incompatible type for argument %d of indirect function call"
+-msgstr ""
+-
+-#: c-typeck.c:4282
+-#, c-format
+-msgid "incompatible types in %s"
+-msgstr ""
+-
+-#. Function name is known; supply it.
+-#: c-typeck.c:4313
+-#, c-format
+-msgid "passing arg %d of `%s'"
+-msgstr ""
+-
+-#. Function name unknown (call through ptr); just give arg number.
+-#: c-typeck.c:4323
+-#, c-format
+-msgid "passing arg %d of pointer to function"
+-msgstr ""
+-
+-#: c-typeck.c:4529
+-msgid "initializer for static variable is not constant"
+-msgstr ""
+-
+-#: c-typeck.c:4535
+-msgid "initializer for static variable uses complicated arithmetic"
+-msgstr ""
+-
+-#: c-typeck.c:4543
+-msgid "aggregate initializer is not constant"
+-msgstr ""
+-
+-#: c-typeck.c:4545
+-msgid "aggregate initializer uses complicated arithmetic"
+-msgstr ""
+-
+-#: c-typeck.c:4709 c-typeck.c:4725 c-typeck.c:4741
+-#, c-format
+-msgid "(near initialization for `%s')"
+-msgstr ""
+-
+-#: c-typeck.c:4789 cp/typeck2.c:769
+-msgid "char-array initialized from wide string"
+-msgstr ""
+-
+-#: c-typeck.c:4796 cp/typeck2.c:776
+-msgid "int-array initialized from non-wide string"
+-msgstr ""
+-
+-#: c-typeck.c:4813 cp/typeck2.c:792
+-msgid "initializer-string for array of chars is too long"
+-msgstr ""
+-
+-#: c-typeck.c:4840
+-msgid "array initialized from non-constant array expression"
+-msgstr ""
+-
+-#: c-typeck.c:4857 c-typeck.c:4859 c-typeck.c:4865 c-typeck.c:4892
+-#: c-typeck.c:6112
+-msgid "initializer element is not constant"
+-msgstr ""
+-
+-#: c-typeck.c:4871 c-typeck.c:4898 c-typeck.c:6118
+-msgid "initializer element is not computable at load time"
+-msgstr ""
+-
+-#: c-typeck.c:4887
+-msgid "initialization"
+-msgstr ""
+-
+-#: c-typeck.c:4935 c-typeck.c:4951 cp/typeck2.c:870
+-msgid "invalid initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5428
+-msgid "extra brace group at end of initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5440
+-msgid "missing braces around initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5471
+-msgid "braces around scalar initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5552
+-msgid "missing initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5565
+-msgid "empty braces in initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5629
+-msgid "empty scalar initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5634
+-msgid "extra elements in scalar initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5697
+-#, c-format
+-msgid "zero or negative array size `%s'"
+-msgstr ""
+-
+-#: c-typeck.c:5768 c-typeck.c:5770
+-msgid "nonconstant array index in initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5772
+-msgid "array index in non-array initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5774
+-msgid "duplicate array index in initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5781
+-msgid "empty index range in initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5785
+-msgid "ANSI C forbids specifying element to initialize"
+-msgstr ""
+-
+-#: c-typeck.c:5815
+-#, c-format
+-msgid "unknown field `%s' specified in initializer"
+-msgstr ""
+-
+-#: c-typeck.c:5818
+-#, c-format
+-msgid "field `%s' already initialized"
+-msgstr ""
+-
+-#: c-typeck.c:5824
+-msgid "ANSI C forbids specifying structure member to initialize"
+-msgstr ""
+-
+-#: c-typeck.c:6134
+-msgid "duplicate initializer"
+-msgstr ""
+-
+-#: c-typeck.c:6487 c-typeck.c:6522
+-msgid "excess elements in struct initializer"
+-msgstr ""
+-
+-#: c-typeck.c:6586
+-msgid "excess elements in union initializer"
+-msgstr ""
+-
+-#: c-typeck.c:6660 c-typeck.c:6671
+-msgid "excess elements in array initializer"
+-msgstr ""
+-
+-#: c-typeck.c:6722
+-msgid "excess elements in scalar initializer"
+-msgstr ""
+-
+-#: c-typeck.c:6762
+-msgid "asm template is not a string constant"
+-msgstr ""
+-
+-#: c-typeck.c:6802
+-msgid "modification by `asm'"
+-msgstr ""
+-
+-#: c-typeck.c:6821 cp/typeck.c:7327
+-msgid "function declared `noreturn' has a `return' statement"
+-msgstr ""
+-
+-#: c-typeck.c:6827 cp/typeck.c:7375
+-msgid "`return' with no value, in function returning non-void"
+-msgstr ""
+-
+-#: c-typeck.c:6834 cp/typeck.c:7406
+-msgid "`return' with a value, in function returning void"
+-msgstr ""
+-
+-#: c-typeck.c:6839
+-msgid "return"
+-msgstr ""
+-
+-#: c-typeck.c:6890
+-msgid "function returns address of local variable"
+-msgstr ""
+-
+-#: c-typeck.c:6919 cp/typeck.c:7547
+-msgid "switch quantity not an integer"
+-msgstr ""
+-
+-#: c-typeck.c:6930
+-msgid "`long' switch expression not converted to `int' in ANSI C"
+-msgstr ""
+-
+-#: calls.c:1664
+-#, c-format
+-msgid "can't inline call to `%s'"
+-msgstr ""
+-
+-#: calls.c:1665 calls.c:1847
+-msgid "called from here"
+-msgstr ""
+-
+-#: calls.c:1703
+-msgid "function call has aggregate value"
+-msgstr ""
+-
+-#: calls.c:1846
+-#, c-format
+-msgid "inlining failed in call to `%s'"
+-msgstr ""
+-
+-#: cccp.c:1313
+-msgid "Too many arguments"
+-msgstr ""
+-
+-#: cccp.c:1327
+-msgid "Filename missing after `-include' option"
+-msgstr ""
+-
+-#: cccp.c:1335
+-msgid "Filename missing after `-imacros' option"
+-msgstr ""
+-
+-#: cccp.c:1341
+-msgid "Filename missing after `-iprefix' option"
+-msgstr ""
+-
+-#: cccp.c:1423
+-msgid "Output filename specified twice"
+-msgstr ""
+-
+-#: cccp.c:1425
+-msgid "Filename missing after -o option"
+-msgstr ""
+-
+-#: cccp.c:1440
+-msgid "Filename missing after -pcp option"
+-msgstr ""
+-
+-#: cccp.c:1571
+-#, c-format
+-msgid "Filename missing after %s option"
+-msgstr ""
+-
+-#: cccp.c:1621
+-#, c-format
+-msgid "GNU CPP version %s"
+-msgstr ""
+-
+-#: cccp.c:1637
+-msgid "Macro name missing after -D option"
+-msgstr ""
+-
+-#: cccp.c:1649
+-msgid "Assertion missing after -A option"
+-msgstr ""
+-
+-#: cccp.c:1672
+-msgid "Macro name missing after -U option"
+-msgstr ""
+-
+-#: cccp.c:1736 cppmain.c:68 toplev.c:1294 toplev.c:5102 toplev.c:5178
+-#: toplev.c:5347 toplev.c:5350 toplev.c:5503
+-#, c-format
+-msgid "Invalid option `%s'"
+-msgstr ""
+-
+-#: cccp.c:1914
+-msgid "#include \"...\" search starts here:\n"
+-msgstr ""
+-
+-#: cccp.c:1917
+-msgid "#include <...> search starts here:\n"
+-msgstr ""
+-
+-#: cccp.c:1926
+-msgid "End of search list.\n"
+-msgstr ""
+-
+-#: cccp.c:1929
+-msgid ""
+-"The following default directories have been omitted from the search path:\n"
+-msgstr ""
+-
+-#: cccp.c:1933
+-msgid "End of omitted list.\n"
+-msgstr ""
+-
+-#: cccp.c:1941
+-msgid "-MG must be specified with one of -M or -MM"
+-msgstr ""
+-
+-#: cccp.c:2080
+-#, c-format
+-msgid "Input file `%s' is a directory"
+-msgstr ""
+-
+-#: cccp.c:2154 cccp.c:5296
+-msgid "file does not end in newline"
+-msgstr ""
+-
+-#: cccp.c:2174 cccp.c:2184
+-msgid "I/O error on output"
+-msgstr ""
+-
+-#: cccp.c:2181
+-msgid "I/O error on `-pcp' output"
+-msgstr ""
+-
+-#: cccp.c:2329
+-#, c-format
+-msgid "%lu trigraph(s) encountered"
+-msgstr ""
+-
+-#: cccp.c:2639
+-msgid "preprocessing directive not recognized within macro arg"
+-msgstr ""
+-
+-#: cccp.c:2783 cccp.c:8068 cccp.c:8102
+-msgid "unterminated string or character constant"
+-msgstr ""
+-
+-#: cccp.c:2786 cccp.c:8070
+-msgid "possible real start of unterminated constant"
+-msgstr ""
+-
+-#: cccp.c:2805
+-msgid "unterminated character constant"
+-msgstr ""
+-
+-#: cccp.c:2811 cccp.c:8114
+-msgid "string constant runs past end of line"
+-msgstr ""
+-
+-#: cccp.c:2905 cccp.c:7584 cccp.c:7949 cccp.c:8938
+-msgid "multiline `//' comment"
+-msgstr ""
+-
+-#: cccp.c:2989 cccp.c:7560 cccp.c:8002 cccp.c:8909 cpplib.c:269 cpplib.c:343
+-msgid "`/*' within comment"
+-msgstr ""
+-
+-#: cccp.c:3009 cccp.c:8033
+-msgid "unterminated comment"
+-msgstr ""
+-
+-#: cccp.c:3298
+-#, c-format
+-msgid "recursive use of macro `%s'"
+-msgstr ""
+-
+-#: cccp.c:3548
+-#, c-format
+-msgid "unterminated `#%s' conditional"
+-msgstr ""
+-
+-#: cccp.c:3733 cccp.c:7641 cpplib.c:512
+-msgid "`#' followed by integer"
+-msgstr ""
+-
+-#: cccp.c:3745 cccp.c:7650
+-msgid "invalid preprocessing directive"
+-msgstr ""
+-
+-#: cccp.c:3751 cccp.c:7656 cccp.c:7718
+-msgid "invalid preprocessing directive name"
+-msgstr ""
+-
+-#: cccp.c:4130
+-#, c-format
+-msgid "Predefined macro `%s' used inside `#if' during precompilation"
+-msgstr ""
+-
+-#: cccp.c:4139
+-msgid "cccp error: not in any file?!"
+-msgstr ""
+-
+-#: cccp.c:4278 cppexp.c:475
+-msgid "`defined' without an identifier"
+-msgstr ""
+-
+-#: cccp.c:4282
+-msgid "cccp error: invalid special hash type"
+-msgstr ""
+-
+-#: cccp.c:4336 cpplib.c:972
+-msgid "ANSI C does not allow `#import'"
+-msgstr ""
+-
+-#: cccp.c:4338 cpplib.c:974
+-msgid "ANSI C does not allow `#include_next'"
+-msgstr ""
+-
+-#: cccp.c:4344
+-msgid "using `#import' is not recommended"
+-msgstr ""
+-
+-#: cccp.c:4345
+-msgid ""
+-"The fact that a certain header file need not be processed more than once\n"
+-"should be indicated in the header file, not where it is used.\n"
+-"The best way to do this is with a conditional of this form:\n"
+-"\n"
+-" #ifndef _FOO_H_INCLUDED\n"
+-" #define _FOO_H_INCLUDED\n"
+-" ... <real contents of file> ...\n"
+-" #endif /* Not _FOO_H_INCLUDED */\n"
+-"\n"
+-"Then users can use `#include' any number of times.\n"
+-"GNU C automatically avoids processing the file more than once\n"
+-"when it is equipped with such a conditional.\n"
+-msgstr ""
+-
+-#: cccp.c:4466
+-msgid "VAX-C-style include specification found, use '#include <filename.h>' !"
+-msgstr ""
+-
+-#: cccp.c:4518 cpplib.c:1011
+-#, c-format
+-msgid "`#%s' expects \"FILENAME\" or <FILENAME>"
+-msgstr ""
+-
+-#: cccp.c:4541 cpplib.c:1032
+-#, c-format
+-msgid "empty file name in `#%s'"
+-msgstr ""
+-
+-#: cccp.c:4681 cccp.c:4685 cpplib.c:1097 cpplib.c:1145
+-#, c-format
+-msgid "No include path in which to find %s"
+-msgstr ""
+-
+-#: cccp.c:5242
+-#, c-format
+-msgid "directory `%s' specified in #include"
+-msgstr ""
+-
+-#: cccp.c:5404 cccp.c:5439
+-msgid "Bad format encountered while reading precompiled file"
+-msgstr ""
+-
+-#: cccp.c:5732 cpphash.c:639
+-#, c-format
+-msgid "another parameter follows `%s'"
+-msgstr ""
+-
+-#: cccp.c:5746 cpphash.c:643
+-msgid "invalid character in macro parameter name"
+-msgstr ""
+-
+-#: cccp.c:5756
+-msgid "ANSI C does not allow macro with variable arguments"
+-msgstr ""
+-
+-#: cccp.c:5775 cccp.c:5785 cpphash.c:666
+-msgid "badly punctuated parameter list in `#define'"
+-msgstr ""
+-
+-#: cccp.c:5790 cpphash.c:676
+-msgid "unterminated parameter list in `#define'"
+-msgstr ""
+-
+-#: cccp.c:5800
+-#, c-format
+-msgid "duplicate argument name `%.*s' in `#define'"
+-msgstr ""
+-
+-#: cccp.c:5807
+-#, c-format
+-msgid "reserved name `%s' used as argument name in `#define'"
+-msgstr ""
+-
+-#: cccp.c:5852 cccp.c:5857 cpphash.c:740
+-#, c-format
+-msgid "missing white space after `#define %.*s'"
+-msgstr ""
+-
+-#: cccp.c:5929 cpplib.c:654
+-#, c-format
+-msgid "`%.*s' redefined"
+-msgstr ""
+-
+-#: cccp.c:5972 cpplib.c:590
+-msgid "invalid assertion name"
+-msgstr ""
+-
+-#: cccp.c:5972 cpplib.c:590
+-msgid "invalid macro name"
+-msgstr ""
+-
+-#: cccp.c:5976
+-#, c-format
+-msgid "invalid assertion name `%.*s'"
+-msgstr ""
+-
+-#: cccp.c:5977
+-#, c-format
+-msgid "invalid macro name `%.*s'"
+-msgstr ""
+-
+-#: cccp.c:6118 cpphash.c:326
+-msgid "`##' at start of macro definition"
+-msgstr ""
+-
+-#: cccp.c:6189 cpphash.c:379
+-msgid "`##' at end of macro definition"
+-msgstr ""
+-
+-#: cccp.c:6203 cpphash.c:391
+-msgid "`#' operator is not followed by a macro argument name"
+-msgstr ""
+-
+-#: cccp.c:6298 cpphash.c:481
+-#, c-format
+-msgid "macro argument `%.*s' is stringified."
+-msgstr ""
+-
+-#: cccp.c:6301 cpphash.c:487
+-#, c-format
+-msgid "macro arg `%.*s' would be stringified with -traditional."
+-msgstr ""
+-
+-#: cccp.c:6354 cpphash.c:537
+-msgid "`#' operator should be followed by a macro argument name"
+-msgstr ""
+-
+-#: cccp.c:6396 cpplib.c:2731
+-msgid "ANSI C does not allow `#assert'"
+-msgstr ""
+-
+-#: cccp.c:6414 cpplib.c:2740
+-msgid "missing token-sequence in `#assert'"
+-msgstr ""
+-
+-#: cccp.c:6428
+-msgid "empty token-sequence in `#assert'"
+-msgstr ""
+-
+-#: cccp.c:6448
+-msgid "`defined' redefined as assertion"
+-msgstr ""
+-
+-#: cccp.c:6475 cpplib.c:2797
+-msgid "ANSI C does not allow `#unassert'"
+-msgstr ""
+-
+-#: cccp.c:6502
+-msgid "empty token list in `#unassert'"
+-msgstr ""
+-
+-#: cccp.c:6572
+-msgid "ANSI C does not allow testing assertions"
+-msgstr ""
+-
+-#: cccp.c:6672
+-msgid "unterminated token sequence in `#assert' or `#unassert'"
+-msgstr ""
+-
+-#: cccp.c:6812 cccp.c:6831 cccp.c:6852 cccp.c:6888 cccp.c:6905 cccp.c:6929
+-msgid "invalid format `#line' directive"
+-msgstr ""
+-
+-#: cccp.c:6823
+-msgid "line number out of range in `#line' directive"
+-msgstr ""
+-
+-#: cccp.c:6878
+-msgid "garbage at end of `#line' directive"
+-msgstr ""
+-
+-#: cccp.c:6966 cpplib.c:1367
+-#, c-format
+-msgid "undefining `%s'"
+-msgstr ""
+-
+-#: cccp.c:6974
+-msgid "garbage after `#undef' directive"
+-msgstr ""
+-
+-#: cccp.c:6994 cpplib.c:1405
+-#, c-format
+-msgid "#error %s"
+-msgstr ""
+-
+-#: cccp.c:7015 cpplib.c:1427
+-msgid "ANSI C does not allow `#warning'"
+-msgstr ""
+-
+-#. Use `pedwarn' not `warning', because #warning isn't in the C Standard;
+-#. if -pedantic-errors is given, #warning should cause an error.
+-#: cccp.c:7019 cpplib.c:1431
+-#, c-format
+-msgid "#warning %s"
+-msgstr ""
+-
+-#: cccp.c:7051 cpplib.c:1448
+-msgid "ANSI C does not allow `#ident'"
+-msgstr ""
+-
+-#: cccp.c:7082 cpplib.c:1482
+-msgid "`#pragma once' is obsolete"
+-msgstr ""
+-
+-#: cccp.c:7104
+-#, c-format
+-msgid "`#pragma implementation' for \"%s\" appears after its #include"
+-msgstr ""
+-
+-#: cccp.c:7134
+-msgid "You are in a maze of twisty compiler features, all different"
+-msgstr ""
+-
+-#: cccp.c:7149 cpplib.c:1533
+-msgid "ANSI C does not allow `#sccs'"
+-msgstr ""
+-
+-#: cccp.c:7193 cpplib.c:1573
+-msgid "`#elif' not within a conditional"
+-msgstr ""
+-
+-#: cccp.c:7197 cpplib.c:1577
+-msgid "`#elif' after `#else'"
+-msgstr ""
+-
+-#: cccp.c:7305 cpplib.c:1661
+-#, c-format
+-msgid "`#%s' with no argument"
+-msgstr ""
+-
+-#: cccp.c:7306
+-#, c-format
+-msgid "`#%s' argument starts with punctuation"
+-msgstr ""
+-
+-#: cccp.c:7313
+-#, c-format
+-msgid "`#%s' argument starts with a digit"
+-msgstr ""
+-
+-#: cccp.c:7315 cpplib.c:1685
+-#, c-format
+-msgid "garbage at end of `#%s' argument"
+-msgstr ""
+-
+-#: cccp.c:7686
+-#, c-format
+-msgid "`#%s' not within a conditional"
+-msgstr ""
+-
+-#: cccp.c:7694
+-msgid "`#else' or `#elif' after `#else'"
+-msgstr ""
+-
+-#: cccp.c:7765
+-msgid "text following `#else' violates ANSI standard"
+-msgstr ""
+-
+-#: cccp.c:7769 cpplib.c:1916
+-msgid "`#else' not within a conditional"
+-msgstr ""
+-
+-#: cccp.c:7777 cpplib.c:1924
+-msgid "`#else' after `#else'"
+-msgstr ""
+-
+-#: cccp.c:7810
+-msgid "text following `#endif' violates ANSI standard"
+-msgstr ""
+-
+-#: cccp.c:7814 cpplib.c:1956
+-msgid "unbalanced `#endif'"
+-msgstr ""
+-
+-#: cccp.c:7909
+-msgid "text following `#else' or `#endif' violates ANSI standard"
+-msgstr ""
+-
+-#: cccp.c:8391
+-msgid "unterminated macro call"
+-msgstr ""
+-
+-#: cccp.c:8414 cpphash.c:1139
+-#, c-format
+-msgid "arguments given to macro `%s'"
+-msgstr ""
+-
+-#: cccp.c:8425 cpphash.c:1150
+-#, c-format
+-msgid "macro `%s' used without args"
+-msgstr ""
+-
+-#: cccp.c:8427 cpphash.c:1152
+-#, c-format
+-msgid "macro `%s' used with just one arg"
+-msgstr ""
+-
+-#: cccp.c:8429 cpphash.c:1154
+-#, c-format
+-msgid "macro `%s' used with only %d args"
+-msgstr ""
+-
+-#: cccp.c:8432 cpphash.c:1160
+-#, c-format
+-msgid "macro `%s' used with too many (%d) args"
+-msgstr ""
+-
+-#: cccp.c:9412 cccp.c:9511 cccp.c:9596 cpperror.c:107 toplev.c:1659
+-msgid "warning: "
+-msgstr ""
+-
+-#: cccp.c:9608
+-msgid "formfeed in preprocessing directive"
+-msgstr ""
+-
+-#: cccp.c:9609
+-msgid "carriage return in preprocessing directive"
+-msgstr ""
+-
+-#: cccp.c:9610
+-msgid "vertical tab in preprocessing directive"
+-msgstr ""
+-
+-#: cccp.c:9646
+-msgid "In file included from "
+-msgstr ""
+-
+-#: cccp.c:9648
+-msgid ""
+-",\n"
+-" from "
+-msgstr ""
+-
+-#: cccp.c:10210 cccp.c:10226
+-#, c-format
+-msgid "malformed option `-D %s'"
+-msgstr ""
+-
+-#: cccp.c:10338 cccp.c:10345
+-#, c-format
+-msgid "malformed option `%s %s'"
+-msgstr ""
+-
+-#: cccp.c:10386
+-msgid "Directory name missing after command line option"
+-msgstr ""
+-
+-#: ../libiberty/cplus-dem.c:4395 cccp.c:10634 gcc.c:5316
+-msgid "Internal gcc abort."
+-msgstr ""
+-
+-#: cccp.c:10664 toplev.c:2511
+-msgid "output pipe has been closed"
+-msgstr ""
+-
+-#: cccp.c:10670
+-msgid "Memory exhausted."
+-msgstr ""
+-
+-#: cexp.y:197 cppexp.c:954
+-msgid "comma operator in operand of `#if'"
+-msgstr ""
+-
+-#: cexp.y:248 cexp.y:265 cppexp.c:861 cppexp.c:879
+-msgid "division by zero in #if"
+-msgstr ""
+-
+-#: cexp.y:367 cppexp.c:436
+-#, c-format
+-msgid "`%.*s' is not defined"
+-msgstr ""
+-
+-#: cexp.y:448
+-msgid "too many `l's in integer constant"
+-msgstr ""
+-
+-#: cexp.y:459
+-msgid "Floating point numbers not allowed in #if expressions"
+-msgstr ""
+-
+-#: cexp.y:461
+-#, c-format
+-msgid "missing white space after number `%.*s'"
+-msgstr ""
+-
+-#: cexp.y:480 cppexp.c:216
+-msgid "integer constant contains digits beyond the radix"
+-msgstr ""
+-
+-#: cexp.y:489 cppexp.c:226
+-msgid "integer constant is so large that it is unsigned"
+-msgstr ""
+-
+-#: cexp.y:539 cppexp.c:487
+-#, c-format
+-msgid "`%s' not allowed in operand of `#if'"
+-msgstr ""
+-
+-#: cexp.y:776 cppexp.c:423
+-msgid "string constants not allowed in #if expressions"
+-msgstr ""
+-
+-#: cexp.y:808
+-msgid "Invalid token in expression"
+-msgstr ""
+-
+-#: cexp.y:898 cppexp.c:573
+-msgid "octal escape sequence out of range"
+-msgstr ""
+-
+-#: cexp.y:929 cppexp.c:604
+-msgid "hex escape sequence out of range"
+-msgstr ""
+-
+-#: cexp.y:942 cppexp.c:618
+-msgid "integer overflow in preprocessor expression"
+-msgstr ""
+-
+-#: cexp.y:1000
+-msgid "Junk after end of expression."
+-msgstr ""
+-
+-#: collect2.c:501
+-msgid "internal error"
+-msgstr ""
+-
+-#: collect2.c:536 collect2.c:546
+-msgid "out of memory"
+-msgstr ""
+-
+-#: ../libiberty/cplus-dem.c:4601 ../libiberty/cplus-dem.c:4612 collect2.c:561
+-#: cp/decl.c:5474 gcc.c:5243 gcc.c:5258 toplev.c:2315 toplev.c:2332
+-#: toplev.c:2353 toplev.c:2367
+-msgid "virtual memory exhausted"
+-msgstr ""
+-
+-#: collect2.c:1072
+-msgid "no arguments"
+-msgstr ""
+-
+-#: collect2.c:1449 collect2.c:1601 collect2.c:1626
+-#, c-format
+-msgid "fopen %s"
+-msgstr ""
+-
+-#: collect2.c:1452 collect2.c:1458 collect2.c:1606 collect2.c:1629
+-#, c-format
+-msgid "fclose %s"
+-msgstr ""
+-
+-#: collect2.c:1455
+-#, c-format
+-msgid "%s"
+-msgstr ""
+-
+-#: collect2.c:1467
+-#, c-format
+-msgid "collect2 version %s"
+-msgstr ""
+-
+-#: collect2.c:1556
+-#, c-format
+-msgid "%d constructor(s) found\n"
+-msgstr ""
+-
+-#: collect2.c:1557
+-#, c-format
+-msgid "%d destructor(s) found\n"
+-msgstr ""
+-
+-#: collect2.c:1558
+-#, c-format
+-msgid "%d frame table(s) found\n"
+-msgstr ""
+-
+-#: collect2.c:1689
+-#, c-format
+-msgid "%s terminated with signal %d [%s]"
+-msgstr ""
+-
+-#: collect2.c:1690
+-#, c-format
+-msgid "%s terminated with signal %d [%s], core dumped"
+-msgstr ""
+-
+-#: collect2.c:1710
+-#, c-format
+-msgid "%s returned %d exit status"
+-msgstr ""
+-
+-#: collect2.c:1738
+-#, c-format
+-msgid "[cannot find %s]"
+-msgstr ""
+-
+-#: collect2.c:1753
+-#, c-format
+-msgid "cannot find `%s'"
+-msgstr ""
+-
+-#: collect2.c:1764 collect2.c:1767
+-#, c-format
+-msgid "redirecting stdout: %s"
+-msgstr ""
+-
+-#: collect2.c:1810
+-#, c-format
+-msgid "[Leaving %s]\n"
+-msgstr ""
+-
+-#: collect2.c:2032
+-#, c-format
+-msgid ""
+-"\n"
+-"write_c_file - output name is %s, prefix is %s\n"
+-msgstr ""
+-
+-#: collect2.c:2256
+-msgid "cannot find `nm'"
+-msgstr ""
+-
+-#: collect2.c:2266 collect2.c:2703
+-msgid "pipe"
+-msgstr ""
+-
+-#: collect2.c:2270 collect2.c:2707
+-msgid "fdopen"
+-msgstr ""
+-
+-#: collect2.c:2296 collect2.c:2733
+-#, c-format
+-msgid "dup2 %d 1"
+-msgstr ""
+-
+-#: collect2.c:2299 collect2.c:2302 collect2.c:2315 collect2.c:2736
+-#: collect2.c:2739 collect2.c:2752
+-#, c-format
+-msgid "close %d"
+-msgstr ""
+-
+-#: collect2.c:2305
+-#, c-format
+-msgid "execvp %s"
+-msgstr ""
+-
+-#: collect2.c:2359
+-#, c-format
+-msgid "init function found in object %s"
+-msgstr ""
+-
+-#: collect2.c:2367
+-#, c-format
+-msgid "fini function found in object %s"
+-msgstr ""
+-
+-#: collect2.c:2390 collect2.c:2791
+-msgid "fclose"
+-msgstr ""
+-
+-#: collect2.c:2433
+-#, c-format
+-msgid "unable to open file '%s'"
+-msgstr ""
+-
+-#: collect2.c:2435
+-#, c-format
+-msgid "unable to stat file '%s'"
+-msgstr ""
+-
+-#: collect2.c:2441
+-#, c-format
+-msgid "unable to mmap file '%s'"
+-msgstr ""
+-
+-#: collect2.c:2592
+-msgid "not found\n"
+-msgstr ""
+-
+-#: collect2.c:2594 collect2.c:2770
+-#, c-format
+-msgid "dynamic dependency %s not found"
+-msgstr ""
+-
+-#: collect2.c:2614
+-#, c-format
+-msgid "bad magic number in file '%s'"
+-msgstr ""
+-
+-#: collect2.c:2636
+-msgid "dynamic dependencies.\n"
+-msgstr ""
+-
+-#: collect2.c:2694
+-msgid "cannot find `ldd'"
+-msgstr ""
+-
+-#: collect2.c:2742
+-#, c-format
+-msgid "execv %s"
+-msgstr ""
+-
+-#: collect2.c:2755
+-msgid ""
+-"\n"
+-"ldd output with constructors/destructors.\n"
+-msgstr ""
+-
+-#: collect2.c:2782
+-#, c-format
+-msgid "unable to open dynamic dependency '%s'"
+-msgstr ""
+-
+-#: collect2.c:2883
+-#, c-format
+-msgid "%s: not a COFF file"
+-msgstr ""
+-
+-#: collect2.c:3030
+-#, c-format
+-msgid "%s: cannot open as COFF file"
+-msgstr ""
+-
+-#: collect2.c:3105
+-#, c-format
+-msgid "Library lib%s not found"
+-msgstr ""
+-
+-#: collect2.c:3229
+-#, c-format
+-msgid "open %s"
+-msgstr ""
+-
+-#: collect2.c:3252
+-msgid "incompatibilities between object file & expected values"
+-msgstr ""
+-
+-#: collect2.c:3325
+-#, c-format
+-msgid ""
+-"\n"
+-"Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n"
+-msgstr ""
+-
+-#: collect2.c:3334
+-msgid "string section missing"
+-msgstr ""
+-
+-#: collect2.c:3337
+-msgid "section pointer missing"
+-msgstr ""
+-
+-#: collect2.c:3385
+-msgid "no symbol table found"
+-msgstr ""
+-
+-#: collect2.c:3398
+-msgid "no cmd_strings found"
+-msgstr ""
+-
+-#: collect2.c:3410
+-msgid ""
+-"\n"
+-"Updating header and load commands.\n"
+-"\n"
+-msgstr ""
+-
+-#: collect2.c:3417
+-#, c-format
+-msgid "load command map, %d cmds, new size %ld.\n"
+-msgstr ""
+-
+-#: collect2.c:3448
+-msgid ""
+-"writing load commands.\n"
+-"\n"
+-msgstr ""
+-
+-#: collect2.c:3468
+-#, c-format
+-msgid "close %s"
+-msgstr ""
+-
+-#: collect2.c:3542
+-msgid "could not convert 0x%l.8x into a region"
+-msgstr ""
+-
+-#: collect2.c:3546
+-#, c-format
+-msgid "%s function, region %d, offset = %ld (0x%.8lx)\n"
+-msgstr ""
+-
+-#: collect2.c:3673
+-msgid "bad magic number"
+-msgstr ""
+-
+-#: collect2.c:3674
+-msgid "bad header version"
+-msgstr ""
+-
+-#: collect2.c:3675
+-msgid "bad raw header version"
+-msgstr ""
+-
+-#: collect2.c:3676
+-msgid "raw header buffer too small"
+-msgstr ""
+-
+-#: collect2.c:3677
+-msgid "old raw header file"
+-msgstr ""
+-
+-#: collect2.c:3678
+-msgid "unsupported version"
+-msgstr ""
+-
+-#: collect2.c:3680
+-#, c-format
+-msgid "unknown {de,en}code_mach_o_hdr return value %d"
+-msgstr ""
+-
+-#: collect2.c:3700
+-#, c-format
+-msgid "fstat %s"
+-msgstr ""
+-
+-#: collect2.c:3737 collect2.c:3785
+-#, c-format
+-msgid "lseek %s 0"
+-msgstr ""
+-
+-#: collect2.c:3741
+-#, c-format
+-msgid "read %s"
+-msgstr ""
+-
+-#: collect2.c:3744
+-#, c-format
+-msgid "read %ld bytes, expected %ld, from %s"
+-msgstr ""
+-
+-#: collect2.c:3765
+-#, c-format
+-msgid "msync %s"
+-msgstr ""
+-
+-#: collect2.c:3772
+-#, c-format
+-msgid "munmap %s"
+-msgstr ""
+-
+-#: collect2.c:3789
+-#, c-format
+-msgid "write %s"
+-msgstr ""
+-
+-#: collect2.c:3792
+-#, c-format
+-msgid "wrote %ld bytes, expected %ld, to %s"
+-msgstr ""
+-
+-#: combine.c:12026
+-#, c-format
+-msgid ""
+-";; Combiner statistics: %d attempts, %d substitutions (%d requiring new "
+-"space),\n"
+-";; %d successes.\n"
+-"\n"
+-msgstr ""
+-
+-#: combine.c:12036
+-#, c-format
+-msgid ""
+-"\n"
+-";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n"
+-";; %d successes.\n"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:996
+-msgid "invalid %%Q value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1002 config/alpha/alpha.c:2931
+-msgid "invalid %%C value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1008 config/alpha/alpha.c:2795
+-#: config/rs6000/rs6000.c:2781
+-msgid "invalid %%N value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1014 config/alpha/alpha.c:2866
+-#: config/rs6000/rs6000.c:2745
+-msgid "invalid %%M value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1020 config/alpha/alpha.c:2858
+-#: config/rs6000/rs6000.c:2710
+-msgid "invalid %%m value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1120 config/alpha/alpha.c:2819 config/romp/romp.c:675
+-msgid "invalid %%L value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1125 config/rs6000/rs6000.c:2789
+-msgid "invalid %%O value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1131 config/alpha/alpha.c:2803
+-#: config/rs6000/rs6000.c:2808
+-msgid "invalid %%P value"
+-msgstr ""
+-
+-#: config/a29k/a29k.c:1141
+-msgid "invalid %%V value"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:162
+-#, c-format
+-msgid "bad value `%s' for -mtrap-precision switch"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:176
+-#, c-format
+-msgid "bad value `%s' for -mfp-rounding-mode switch"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:191
+-#, c-format
+-msgid "bad value `%s' for -mfp-trap-mode switch"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:240
+-#, c-format
+-msgid "bad value `%s' for -mcpu switch"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:248
+-msgid "fp software completion requires -mtrap-precision=i"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:256
+-msgid "rounding mode not supported for VAX floats"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:261
+-msgid "trap mode not supported for VAX floats"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:290
+-#, c-format
+-msgid "L%d cache latency unknown for %s"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:305
+-#, c-format
+-msgid "bad value `%s' for -mmemory-latency"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:2777
+-msgid "invalid %%r value"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:2788 config/rs6000/rs6000.c:2816
+-msgid "invalid %%R value"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:2811 config/romp/romp.c:717 config/romp/romp.c:724
+-msgid "invalid %%h value"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:2901
+-msgid "invalid %%U value"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:2909 config/alpha/alpha.c:2920 config/romp/romp.c:683
+-#: config/rs6000/rs6000.c:2824
+-msgid "invalid %%s value"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:2966 config/rs6000/rs6000.c:2598
+-msgid "invalid %%E value"
+-msgstr ""
+-
+-#: config/alpha/alpha.c:2987 config/romp/romp.c:958
+-#: config/rs6000/rs6000.c:3107
+-msgid "invalid %%xn code"
+-msgstr ""
+-
+-#: config/arc/arc.c:103
+-#, c-format
+-msgid "bad value (%s) for -mcpu switch"
+-msgstr ""
+-
+-#: config/arc/arc.c:1649 config/m32r/m32r.c:1868
+-msgid "invalid operand to %R code"
+-msgstr ""
+-
+-#: config/arc/arc.c:1681 config/m32r/m32r.c:1891
+-msgid "invalid operand to %H/%L code"
+-msgstr ""
+-
+-#: config/arc/arc.c:1705 config/m32r/m32r.c:1968
+-msgid "invalid operand to %U code"
+-msgstr ""
+-
+-#: config/arc/arc.c:1716
+-msgid "invalid operand to %V code"
+-msgstr ""
+-
+-#. Unknown flag.
+-#: config/arc/arc.c:1723 config/m32r/m32r.c:2007 config/sparc/sparc.c:5161
+-msgid "invalid operand output code"
+-msgstr ""
+-
+-#: config/arm/arm.c:297
+-#, c-format
+-msgid "switch -mcpu=%s conflicts with -mtune= switch"
+-msgstr ""
+-
+-#: config/arm/arm.c:307 config/rs6000/rs6000.c:287 config/sparc/sparc.c:296
+-#, c-format
+-msgid "bad value (%s) for %s switch"
+-msgstr ""
+-
+-#: config/arm/arm.c:443
+-msgid "target CPU does not support APCS-32"
+-msgstr ""
+-
+-#: config/arm/arm.c:448
+-msgid "target CPU does not support APCS-26"
+-msgstr ""
+-
+-#: config/arm/arm.c:454
+-msgid "target CPU does not support interworking"
+-msgstr ""
+-
+-#: config/arm/arm.c:462
+-msgid "interworking forces APCS-32 to be used"
+-msgstr ""
+-
+-#: config/arm/arm.c:468
+-msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
+-msgstr ""
+-
+-#: config/arm/arm.c:473
+-msgid "-g with -fomit-frame-pointer may not give sensible debugging"
+-msgstr ""
+-
+-#: config/arm/arm.c:479
+-msgid "-fpic and -mapcs-reent are incompatible"
+-msgstr ""
+-
+-#: config/arm/arm.c:482
+-msgid "APCS reentrant code not supported. Ignored"
+-msgstr ""
+-
+-#: config/arm/arm.c:490
+-msgid "Passing floating point arguments in fp regs not yet supported"
+-msgstr ""
+-
+-#: config/arm/arm.c:515
+-#, c-format
+-msgid "Invalid floating point emulation option: -mfpe-%s"
+-msgstr ""
+-
+-#: config/arm/arm.c:538
+-msgid "Structure size boundary can only be set to 8 or 32"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:264
+-#, c-format
+-msgid "Invalid register class letter %c"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:367
+-msgid "ACCUM_HIGH_REGS class in limit_reload_class"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:394
+-msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class"
+-msgstr ""
+-
+-#. Register 'yl' is invalid for QImode, so we should never
+-#. see it.
+-#: config/dsp16xx/dsp16xx.c:403
+-msgid "YL found in limit_reload_class"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:1220 config/dsp16xx/dsp16xx.c:1247
+-msgid "Stack size > 32k"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:1476
+-msgid "Invalid addressing mode"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:1635
+-msgid "Bad register extension code"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:1693
+-msgid "Invalid offset in ybase addressing"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:1696
+-msgid "Invalid register in ybase addressing"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:1726 config/dsp16xx/dsp16xx.c:1962
+-msgid "inline float constants not supported on this host"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:1868
+-msgid "Invalid shift operator in emit_1600_core_shift"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:2147
+-msgid "Invalid mode for gen_tst_reg"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:2218
+-msgid "Invalid mode for integer comparison in gen_compare_reg"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.c:2246
+-msgid "Invalid register for compare"
+-msgstr ""
+-
+-#: config/h8300/h8300.c:2960 config/h8300/h8300.c:2972
+-msgid "Only initialized variables can be placed into the 8-bit area."
+-msgstr ""
+-
+-#: config/i370/i370.c:283
+-msgid "virtual memory exhausted\n"
+-msgstr ""
+-
+-#: config/i386/dgux.c:179
+-#, c-format
+-msgid "Internal gcc abort from %s:%d"
+-msgstr ""
+-
+-#: config/i386/dgux.c:183
+-msgid "The local variable `insn' has the value:"
+-msgstr ""
+-
+-#: config/i386/i386.c:282
+-#, c-format
+-msgid "Register '%c' is unknown"
+-msgstr ""
+-
+-#: config/i386/i386.c:286
+-#, c-format
+-msgid "Register '%c' already specified in allocation order"
+-msgstr ""
+-
+-#: config/i386/i386.c:310
+-#, c-format
+-msgid "bad value (%s) for -march= switch"
+-msgstr ""
+-
+-#: config/i386/i386.c:324
+-#, c-format
+-msgid "-mcpu=%s does not support -march=%s"
+-msgstr ""
+-
+-#: config/i386/i386.c:334 config/mips/mips.c:4266
+-#, c-format
+-msgid "bad value (%s) for -mcpu= switch"
+-msgstr ""
+-
+-#: config/i386/i386.c:344
+-#, c-format
+-msgid "-mregparm=%d is not between 0 and %d"
+-msgstr ""
+-
+-#: config/i386/i386.c:364
+-#, c-format
+-msgid "-malign-loops=%d is not between 0 and %d"
+-msgstr ""
+-
+-#: config/i386/i386.c:378
+-#, c-format
+-msgid "-malign-jumps=%d is not between 0 and %d"
+-msgstr ""
+-
+-#: config/i386/i386.c:388
+-#, c-format
+-msgid "-malign-functions=%d is not between 0 and %d"
+-msgstr ""
+-
+-#: config/i386/i386.c:399
+-#, c-format
+-msgid "-mpreferred_stack_boundary=%d is not between 2 and 31"
+-msgstr ""
+-
+-#: config/i386/i386.c:409
+-#, c-format
+-msgid "-mbranch-cost=%d is not between 0 and 5"
+-msgstr ""
+-
+-#: config/i386/i386.c:1228
+-msgid "Source is not offsettable"
+-msgstr ""
+-
+-#: config/i386/i386.c:1231
+-msgid "Pushing non-word aligned size"
+-msgstr ""
+-
+-#. We can't handle floating point constants;
+-#. PRINT_OPERAND must handle them.
+-#: config/i386/i386.c:2938 config/pdp11/pdp11.c:1474 dwarf2out.c:2821
+-#: final.c:3625
+-msgid "floating constant misused"
+-msgstr ""
+-
+-#: config/i386/i386.c:2981
+-msgid "invalid UNSPEC as operand"
+-msgstr ""
+-
+-#: config/i386/i386.c:2987 config/pdp11/pdp11.c:1521 dwarf2out.c:2870
+-#: final.c:3672
+-msgid "invalid expression as operand"
+-msgstr ""
+-
+-#: config/i386/i386.c:3170 config/i386/i386.c:3207 config/sparc/sparc.c:5111
+-msgid "Invalid %%C operand"
+-msgstr ""
+-
+-#: config/i386/winnt.c:298
+-#, c-format
+-msgid "`%s' declared as both exported to and imported from a DLL."
+-msgstr ""
+-
+-#: config/i386/winnt.c:326
+-#, c-format
+-msgid "initialized variable `%s' is marked dllimport"
+-msgstr ""
+-
+-#: config/i386/winnt.c:335
+-#, c-format
+-msgid "static variable `%s' is marked dllimport"
+-msgstr ""
+-
+-#: config/m32r/m32r.c:79
+-#, c-format
+-msgid "bad value (%s) for -mmodel switch"
+-msgstr ""
+-
+-#: config/m32r/m32r.c:88
+-#, c-format
+-msgid "bad value (%s) for -msdata switch"
+-msgstr ""
+-
+-#: config/m32r/m32r.c:374
+-msgid "const objects cannot go in .sdata/.sbss"
+-msgstr ""
+-
+-#: config/m32r/m32r.c:1838
+-#, c-format
+-msgid "invalid operand to %s code"
+-msgstr ""
+-
+-#: config/m32r/m32r.c:1845
+-#, c-format
+-msgid "invalid operand to %p code"
+-msgstr ""
+-
+-#: config/m32r/m32r.c:1953
+-msgid "invalid operand to %T/%B code"
+-msgstr ""
+-
+-#: config/m32r/m32r.c:1976
+-msgid "invalid operand to %N code"
+-msgstr ""
+-
+-#: config/m68k/m68k.c:100
+-#, c-format
+-msgid "-malign-loops=%d is not between 1 and %d"
+-msgstr ""
+-
+-#: config/m68k/m68k.c:111
+-#, c-format
+-msgid "-malign-jumps=%d is not between 1 and %d"
+-msgstr ""
+-
+-#: config/m68k/m68k.c:122
+-#, c-format
+-msgid "-malign-functions=%d is not between 1 and %d"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:866
+-#, c-format
+-msgid "Internal gcc monitor: short-branch(%x)"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2264
+-msgid "Internal gcc error: Can't express symbolic location"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2545
+-#, c-format
+-msgid "argument #%d is a structure"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2754
+-msgid "%R not followed by %B/C/D/E"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2822
+-#, c-format
+-msgid "invalid %x/X value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2827
+-msgid "invalid %H value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2833
+-msgid "invalid %h value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2839
+-msgid "invalid %Q value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2845
+-msgid "invalid %q value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2851
+-#, c-format
+-msgid "invalid %o value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2858
+-#, c-format
+-msgid "invalid %p value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2871 config/m88k/m88k.c:2876
+-#, c-format
+-msgid "invalid %s/S value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2887
+-msgid "invalid %P operand"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2918
+-msgid "invalid %B value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2935
+-msgid "invalid %C value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2948
+-msgid "invalid %D value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2956
+-#, c-format
+-msgid "invalid %E value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2961
+-#, c-format
+-msgid "`%d' operand isn't a register"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2972
+-msgid "invalid %r value"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2979
+-msgid "operand is r0"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:2993
+-msgid "operand is const_double"
+-msgstr ""
+-
+-#: config/m88k/m88k.c:3012
+-msgid "invalid code"
+-msgstr ""
+-
+-#: config/mips/mips.c:4067
+-#, c-format
+-msgid "-mips%d not supported"
+-msgstr ""
+-
+-#: config/mips/mips.c:4074
+-#, c-format
+-msgid "bad value (%s) for -mips switch"
+-msgstr ""
+-
+-#: config/mips/mips.c:4093
+-#, c-format
+-msgid "bad value (%s) for -mabi= switch"
+-msgstr ""
+-
+-#: config/mips/mips.c:4123
+-#, c-format
+-msgid "-mabi=%s does not support -mips%d"
+-msgstr ""
+-
+-#: config/mips/mips.c:4140
+-msgid "The -mabi=32 support does not work yet."
+-msgstr ""
+-
+-#: config/mips/mips.c:4144
+-msgid "This target does not support the -mabi switch."
+-msgstr ""
+-
+-#: config/mips/mips.c:4279
+-#, c-format
+-msgid "-mcpu=%s does not support -mips%d"
+-msgstr ""
+-
+-#: config/mips/mips.c:4285
+-msgid "Only MIPS-III or MIPS-IV CPUs can support 64 bit fp registers"
+-msgstr ""
+-
+-#: config/mips/mips.c:4288
+-msgid "Only MIPS-III or MIPS-IV CPUs can support 64 bit gp registers"
+-msgstr ""
+-
+-#: config/mips/mips.c:4307
+-msgid "-G is incompatible with PIC code which is the default"
+-msgstr ""
+-
+-#: config/mips/mips.c:4323
+-msgid "-membedded-pic and -mabicalls are incompatible"
+-msgstr ""
+-
+-#: config/mips/mips.c:4326
+-msgid "-G and -membedded-pic are incompatible"
+-msgstr ""
+-
+-#: config/mips/mips.c:4378
+-#, c-format
+-msgid "Invalid option `entry%s'"
+-msgstr ""
+-
+-#: config/mips/mips.c:4381
+-msgid "-mentry is only meaningful with -mips-16"
+-msgstr ""
+-
+-#: config/mips/mips.c:4696
+-msgid "internal error: %%) found without a %%( in assembler pattern"
+-msgstr ""
+-
+-#: config/mips/mips.c:4710
+-msgid "internal error: %%] found without a %%[ in assembler pattern"
+-msgstr ""
+-
+-#: config/mips/mips.c:4723
+-msgid "internal error: %%> found without a %%< in assembler pattern"
+-msgstr ""
+-
+-#: config/mips/mips.c:4736
+-msgid "internal error: %%} found without a %%{ in assembler pattern"
+-msgstr ""
+-
+-#: config/mips/mips.c:4743
+-#, c-format
+-msgid "PRINT_OPERAND: Unknown punctuation '%c'"
+-msgstr ""
+-
+-#: config/mips/mips.c:4752
+-msgid "PRINT_OPERAND null pointer"
+-msgstr ""
+-
+-#: config/mips/mips.c:4862
+-#, c-format
+-msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT"
+-msgstr ""
+-
+-#: config/mips/mips.c:4906
+-msgid "PRINT_OPERAND_ADDRESS, null pointer"
+-msgstr ""
+-
+-#: config/mips/mips.c:5161
+-msgid ""
+-"MIPS ECOFF format does not allow changing filenames within functions with "
+-"#line"
+-msgstr ""
+-
+-#: config/mips/mips.c:5724
+-#, c-format
+-msgid "gp_offset (%ld) or end_offset (%ld) is less than zero."
+-msgstr ""
+-
+-#: config/mips/mips.c:5941
+-#, c-format
+-msgid "fp_offset (%ld) or end_offset (%ld) is less than zero."
+-msgstr ""
+-
+-#: config/mips/mips.c:7910
+-#, c-format
+-msgid "can not handle inconsistent calls to `%s'"
+-msgstr ""
+-
+-#: config/nextstep.c:65
+-msgid "optimization turned on"
+-msgstr ""
+-
+-#: config/nextstep.c:71
+-msgid "optimization turned off"
+-msgstr ""
+-
+-#: config/nextstep.c:86
+-msgid "optimization level restored"
+-msgstr ""
+-
+-#: config/pa/pa.c:134
+-#, c-format
+-msgid ""
+-"Unknown -mschedule= option (%s).\n"
+-"Valid options are 700, 7100, 7100LC, 7200, and 8000\n"
+-msgstr ""
+-
+-#: config/pa/pa.c:159
+-#, c-format
+-msgid ""
+-"Unknown -march= option (%s).\n"
+-"Valid options are 1.0, 1.1, and 2.0\n"
+-msgstr ""
+-
+-#: config/pa/pa.c:164
+-msgid "PIC code generation is not supported in the portable runtime model\n"
+-msgstr ""
+-
+-#: config/pa/pa.c:169
+-msgid "PIC code generation is not compatible with fast indirect calls\n"
+-msgstr ""
+-
+-#: config/pa/pa.c:174
+-msgid "PIC code generation is not compatible with profiling\n"
+-msgstr ""
+-
+-#: config/pa/pa.c:179
+-msgid "Out of line entry/exit sequences are not compatible\n"
+-msgstr ""
+-
+-#: config/pa/pa.c:180
+-msgid "with PIC or profiling\n"
+-msgstr ""
+-
+-#: config/pa/pa.c:185
+-msgid "-g is only supported when using GAS on this processor,"
+-msgstr ""
+-
+-#: config/pa/pa.c:186
+-msgid "-g option disabled."
+-msgstr ""
+-
+-#: config/romp/romp.c:667
+-msgid "invalid %%B value"
+-msgstr ""
+-
+-#: config/romp/romp.c:694 config/rs6000/rs6000.c:2834
+-msgid "invalid %%S value"
+-msgstr ""
+-
+-#: config/romp/romp.c:703 config/romp/romp.c:710 config/rs6000/rs6000.c:2548
+-msgid "invalid %%b value"
+-msgstr ""
+-
+-#: config/romp/romp.c:731 config/romp/romp.c:738
+-msgid "invalid %%H value"
+-msgstr ""
+-
+-#: config/romp/romp.c:750 config/romp/romp.c:761
+-msgid "invalid %%z value"
+-msgstr ""
+-
+-#: config/romp/romp.c:769 config/romp/romp.c:777
+-msgid "invalid %%Z value"
+-msgstr ""
+-
+-#: config/romp/romp.c:784 config/romp/romp.c:793 config/romp/romp.c:800
+-#: config/rs6000/rs6000.c:2680
+-msgid "invalid %%k value"
+-msgstr ""
+-
+-#: config/romp/romp.c:885 config/romp/romp.c:928
+-msgid "invalid %%j value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:317
+-msgid "-mmultiple is not supported on little endian systems"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:324
+-msgid "-mstring is not supported on little endian systems"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:330
+-#, c-format
+-msgid "-f%s ignored for AIX (all code is position independent)"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:345
+-#, c-format
+-msgid "Unknown -mdebug-%s switch"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2427
+-msgid "GOT/TOC register marker not removed:"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2607
+-msgid "invalid %%f value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2616
+-msgid "invalid %%F value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2625
+-msgid "invalid %%G value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2660
+-msgid "invalid %%j code"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2670
+-msgid "invalid %%J code"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2798
+-msgid "invalid %%p value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2860
+-msgid "%%S computed all 1's mask"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2886
+-msgid "%%S computed all 0's mask"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2896
+-msgid "invalid %%t value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2912
+-msgid "invalid %%T value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2927
+-msgid "invalid %%u value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:2935
+-msgid "invalid %%v value"
+-msgstr ""
+-
+-#: config/rs6000/rs6000.c:5729
+-msgid "bad address"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:227
+-#, c-format
+-msgid "%s is not supported by this configuration"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:235
+-#, c-format
+-msgid "-mptr%d not allowed on -m%d"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:259
+-#, c-format
+-msgid "bad value (%s) for -mcmodel= switch"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:264
+-msgid "-mcmodel= is not supported on 32 bit systems"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:326
+-#, c-format
+-msgid "-malign-loops=%s is not between 4 and 128 or is not a power of two"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:341
+-#, c-format
+-msgid "-malign-jumps=%s is not between 4 and 128 or is not a power of two"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:356
+-#, c-format
+-msgid "-malign-functions=%s is not between 4 and 128 or is not a power of two"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:372
+-msgid "profiling does not support code models other than medlow"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5000 config/sparc/sparc.c:5006
+-msgid "Invalid %%Y operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5076
+-msgid "Invalid %%A operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5086
+-msgid "Invalid %%B operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5110
+-msgid "Invalid %%c operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5132
+-msgid "Invalid %%d operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5133
+-msgid "Invalid %%D operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5151
+-msgid "Invalid %%f operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5202
+-msgid "long long constant not a valid immediate operand"
+-msgstr ""
+-
+-#: config/sparc/sparc.c:5205
+-msgid "floating point constant not a valid immediate operand"
+-msgstr ""
+-
+-#: config/v850/v850.c:138
+-#, c-format
+-msgid "%s=%s is not numeric."
+-msgstr ""
+-
+-#: config/v850/v850.c:145
+-#, c-format
+-msgid "%s=%s is too large."
+-msgstr ""
+-
+-#: config/v850/v850.c:301
+-msgid "const_double_split got a bad insn:"
+-msgstr ""
+-
+-#: config/v850/v850.c:792
+-msgid "output_move_single:"
+-msgstr ""
+-
+-#: config/v850/v850.c:2066
+-msgid "a data area attribute cannot be specified for local variables"
+-msgstr ""
+-
+-#: config/v850/v850.c:2074
+-#, c-format
+-msgid "data area of '%s' conflicts with previous declaration"
+-msgstr ""
+-
+-#: config/v850/v850.c:2278
+-#, c-format
+-msgid "Bogus JR construction: %d\n"
+-msgstr ""
+-
+-#: config/v850/v850.c:2299 config/v850/v850.c:2501
+-#, c-format
+-msgid "Bad amount of stack space removal: %d"
+-msgstr ""
+-
+-#: config/v850/v850.c:2477
+-#, c-format
+-msgid "Bogus JARL construction: %d\n"
+-msgstr ""
+-
+-#: config/v850/v850.c:2722
+-msgid "#pragma GHS endXXXX found without previous startXXX"
+-msgstr ""
+-
+-#: config/v850/v850.c:2724
+-msgid "#pragma GHS endXXX does not match previous startXXX"
+-msgstr ""
+-
+-#: config/v850/v850.c:2748
+-msgid "Cannot set interrupt attribute: no current function"
+-msgstr ""
+-
+-#: config/v850/v850.c:2756
+-msgid "Cannot set interrupt attribute: no such identifier"
+-msgstr ""
+-
+-#: config/v850/v850.c:2789
+-msgid "Incomplete #pragma ghs"
+-msgstr ""
+-
+-#: config/v850/v850.c:2796
+-msgid "Nothing follows #pragma ghs"
+-msgstr ""
+-
+-#: config/v850/v850.c:2888
+-#, c-format
+-msgid "Unrecognised GHS pragma: '%s'\n"
+-msgstr ""
+-
+-#: config/v850/v850.c:2894
+-#, c-format
+-msgid "Extra text after valid #pragma: '%s'"
+-msgstr ""
+-
+-#: config/v850/v850.c:2919
+-#, c-format
+-msgid "Unrecognised section name '%s' in GHS section pragma"
+-msgstr ""
+-
+-#: config/v850/v850.c:2930
+-msgid "Missing '=' in GHS section pragma"
+-msgstr ""
+-
+-#: config/v850/v850.c:2951
+-#, c-format
+-msgid "Malformed GHS section pragma: found '%s' instead of a comma"
+-msgstr ""
+-
+-#: config/v850/v850.c:3028
+-msgid "Missing trailing \" in #pragma ghs"
+-msgstr ""
+-
+-#: convert.c:65
+-msgid "cannot convert to a pointer type"
+-msgstr ""
+-
+-#: convert.c:98
+-msgid "pointer value used where a floating point value was expected"
+-msgstr ""
+-
+-#: convert.c:102
+-msgid "aggregate value used where a float was expected"
+-msgstr ""
+-
+-#: convert.c:128
+-msgid "conversion to incomplete type"
+-msgstr ""
+-
+-#: convert.c:385
+-msgid "aggregate value used where an integer was expected"
+-msgstr ""
+-
+-#: convert.c:437
+-msgid "pointer value used where a complex was expected"
+-msgstr ""
+-
+-#: convert.c:441
+-msgid "aggregate value used where a complex was expected"
+-msgstr ""
+-
+-#: cp/call.c:493
+-msgid "unable to call pointer to member function here"
+-msgstr ""
+-
+-#: cp/call.c:605
+-msgid "destructors take no parameters"
+-msgstr ""
+-
+-#: cp/class.c:450
+-msgid ""
+-"object size exceeds built-in limit for virtual function table implementation"
+-msgstr ""
+-
+-#: cp/class.c:452
+-msgid ""
+-"object size exceeds normal limit for virtual function table implementation, "
+-"recompile all source and use -fhuge-objects"
+-msgstr ""
+-
+-#: cp/class.c:899
+-msgid "internal inconsistency: binfo offset error for rtti"
+-msgstr ""
+-
+-#: cp/class.c:1435
+-#, c-format
+-msgid "conflicting access specifications for field `%s', ignored"
+-msgstr ""
+-
+-#. Only give error if the two offsets are different
+-#: cp/class.c:2253
+-msgid "every virtual function must have a unique final overrider"
+-msgstr ""
+-
+-#: cp/class.c:3138
+-msgid "anonymous class type not used to declare any objects"
+-msgstr ""
+-
+-#: cp/class.c:3477
+-#, c-format
+-msgid "bit-fields larger than %d bits"
+-msgstr ""
+-
+-#: cp/class.c:4232
+-msgid "trying to finish struct, but kicked out due to previous parse errors."
+-msgstr ""
+-
+-#: cp/class.c:4662
+-#, c-format
+-msgid "language string `\"%s\"' not recognized"
+-msgstr ""
+-
+-#: cp/class.c:4951 cp/class.c:5139 cp/class.c:5146
+-msgid "not enough type information"
+-msgstr ""
+-
+-#: cp/class.c:5123
+-msgid "invalid operation on uninstantiated type"
+-msgstr ""
+-
+-#: cp/decl.c:1413
+-msgid "internal compiler error: debugging info corrupted"
+-msgstr ""
+-
+-#: cp/decl.c:3888 cp/decl.c:13734
+-msgid "parse errors have confused me too much"
+-msgstr ""
+-
+-#: cp/decl.c:4175
+-#, c-format
+-msgid "variable `%s' shadows local"
+-msgstr ""
+-
+-#: cp/decl.c:4787
+-#, c-format
+-msgid "label `%s' referenced outside of any function"
+-msgstr ""
+-
+-#: cp/decl.c:5040
+-msgid "where case label appears here"
+-msgstr ""
+-
+-#: cp/decl.c:5043
+-msgid "(enclose actions of previous case statements requiring"
+-msgstr ""
+-
+-#: cp/decl.c:5044
+-msgid "destructors in their own binding contours.)"
+-msgstr ""
+-
+-#: cp/decl.c:5065
+-msgid "jump to case label"
+-msgstr ""
+-
+-#: cp/decl.c:7044
+-msgid "an anonymous union cannot have function members"
+-msgstr ""
+-
+-#: cp/decl.c:7094
+-msgid "multiple types in one declaration"
+-msgstr ""
+-
+-#: cp/decl.c:7099
+-msgid "declaration does not declare anything"
+-msgstr ""
+-
+-#: cp/decl.c:7746
+-msgid "assignment (not initialization) in declaration"
+-msgstr ""
+-
+-#: cp/decl.c:8794
+-msgid "cannot declare `main' to be a template"
+-msgstr ""
+-
+-#: cp/decl.c:8796
+-msgid "cannot declare `main' to be inline"
+-msgstr ""
+-
+-#: cp/decl.c:8798
+-msgid "cannot declare `main' to be static"
+-msgstr ""
+-
+-#: cp/decl.c:9371
+-msgid "destructors must be member functions"
+-msgstr ""
+-
+-#: cp/decl.c:9700
+-msgid "`bool' is now a keyword"
+-msgstr ""
+-
+-#: cp/decl.c:9731
+-msgid "ANSI C++ does not support `long long'"
+-msgstr ""
+-
+-#: cp/decl.c:9844
+-msgid "return type specification for destructor invalid"
+-msgstr ""
+-
+-#: cp/decl.c:9849
+-msgid "return type specification for constructor invalid"
+-msgstr ""
+-
+-#: cp/decl.c:9889
+-#, c-format
+-msgid "short, signed or unsigned invalid for `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:9894
+-#, c-format
+-msgid "long and short specified together for `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:9905
+-#, c-format
+-msgid "signed and unsigned given together for `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:10037
+-msgid "only declarations of constructors can be `explicit'"
+-msgstr ""
+-
+-#: cp/decl.c:10043
+-#, c-format
+-msgid "non-member `%s' cannot be declared `mutable'"
+-msgstr ""
+-
+-#: cp/decl.c:10048
+-#, c-format
+-msgid "non-object member `%s' cannot be declared `mutable'"
+-msgstr ""
+-
+-#: cp/decl.c:10060
+-msgid "storage class specifiers invalid in parameter declarations"
+-msgstr ""
+-
+-#: cp/decl.c:10064
+-msgid "typedef declaration invalid in parameter declaration"
+-msgstr ""
+-
+-#: cp/decl.c:10075
+-msgid "virtual outside class declaration"
+-msgstr ""
+-
+-#: cp/decl.c:10080
+-msgid "only members can be declared mutable"
+-msgstr ""
+-
+-#: cp/decl.c:10098
+-#, c-format
+-msgid "type qualifiers specified for signature member function `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:10103
+-#, c-format
+-msgid "`inline' specified for signature member function `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:10109 cp/friend.c:248
+-msgid "`friend' declaration in signature definition"
+-msgstr ""
+-
+-#: cp/decl.c:10114
+-#, c-format
+-msgid "`virtual' specified for signature member function `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:10157
+-#, c-format
+-msgid "storage class specified for %s `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:10202
+-msgid "storage class specifiers invalid in friend function declarations"
+-msgstr ""
+-
+-#: cp/decl.c:10445
+-msgid "overflow in array dimension"
+-msgstr ""
+-
+-#: cp/decl.c:10540
+-msgid "destructor cannot be static member function"
+-msgstr ""
+-
+-#: cp/decl.c:10562
+-msgid "constructor cannot be static member function"
+-msgstr ""
+-
+-#: cp/decl.c:10565
+-msgid "constructors cannot be declared virtual"
+-msgstr ""
+-
+-#: cp/decl.c:10580
+-msgid "return value type specifier for constructor ignored"
+-msgstr ""
+-
+-#: cp/decl.c:10586
+-msgid "constructor not allowed in signature"
+-msgstr ""
+-
+-#: cp/decl.c:10605
+-#, c-format
+-msgid "can't initialize friend function `%s'"
+-msgstr ""
+-
+-#. Cannot be both friend and virtual.
+-#: cp/decl.c:10609
+-msgid "virtual functions cannot be friends"
+-msgstr ""
+-
+-#: cp/decl.c:10614
+-msgid "friend declaration not in class definition"
+-msgstr ""
+-
+-#: cp/decl.c:10673
+-#, c-format
+-msgid "cannot declare %s to references"
+-msgstr ""
+-
+-#: cp/decl.c:10707
+-msgid "signature reference"
+-msgstr ""
+-
+-#: cp/decl.c:10723
+-msgid "invalid type: `void &'"
+-msgstr ""
+-
+-#: cp/decl.c:10774
+-msgid "discarding `const' applied to a reference"
+-msgstr ""
+-
+-#: cp/decl.c:10776
+-msgid "discarding `volatile' applied to a reference"
+-msgstr ""
+-
+-#: cp/decl.c:10979
+-msgid "only constructors can be declared `explicit'"
+-msgstr ""
+-
+-#: cp/decl.c:10987
+-#, c-format
+-msgid "const `%s' cannot be declared `mutable'"
+-msgstr ""
+-
+-#: cp/decl.c:10992
+-#, c-format
+-msgid "static `%s' cannot be declared `mutable'"
+-msgstr ""
+-
+-#: cp/decl.c:11115
+-#, c-format
+-msgid "non-object member `%s' cannot be declared mutable"
+-msgstr ""
+-
+-#: cp/decl.c:11121
+-msgid "typedef declaration includes an initializer"
+-msgstr ""
+-
+-#: cp/decl.c:11148
+-msgid "type qualifiers specified for signature type"
+-msgstr ""
+-
+-#: cp/decl.c:11173
+-#, c-format
+-msgid "trying to make class `%s' a friend of global scope"
+-msgstr ""
+-
+-#: cp/decl.c:11209
+-msgid "unnamed variable or field declared void"
+-msgstr ""
+-
+-#: cp/decl.c:11218
+-msgid "variable or field declared void"
+-msgstr ""
+-
+-#: cp/decl.c:11228
+-msgid "cannot use `::' in parameter declaration"
+-msgstr ""
+-
+-#: cp/decl.c:11246
+-#, c-format
+-msgid "declaration of `%s' as void"
+-msgstr ""
+-
+-#: cp/decl.c:11264
+-msgid "parameter of signature member function declared `inline'"
+-msgstr ""
+-
+-#: cp/decl.c:11266
+-msgid "parameter of signature member function declared `auto'"
+-msgstr ""
+-
+-#: cp/decl.c:11268
+-msgid "parameter of signature member function declared `register'"
+-msgstr ""
+-
+-#: cp/decl.c:11435
+-#, c-format
+-msgid "`%s' is neither function nor method; cannot be declared friend"
+-msgstr ""
+-
+-#: cp/decl.c:11446
+-msgid "member functions are implicitly friends of their class"
+-msgstr ""
+-
+-#: cp/decl.c:11560
+-#, c-format
+-msgid "storage class `auto' invalid for function `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:11562
+-#, c-format
+-msgid "storage class `register' invalid for function `%s'"
+-msgstr ""
+-
+-#: cp/decl.c:11573
+-#, c-format
+-msgid ""
+-"storage class `static' invalid for function `%s' declared out of global scope"
+-msgstr ""
+-
+-#: cp/decl.c:11575
+-#, c-format
+-msgid ""
+-"storage class `inline' invalid for function `%s' declared out of global scope"
+-msgstr ""
+-
+-#: cp/decl.c:11582
+-#, c-format
+-msgid "virtual non-class function `%s'"
+-msgstr ""
+-
+-#. FIXME need arm citation
+-#: cp/decl.c:11617
+-msgid "cannot declare static function inside another function"
+-msgstr ""
+-
+-#: cp/decl.c:11665
+-#, c-format
+-msgid "`%s' cannot be declared mutable"
+-msgstr ""
+-
+-#: cp/decl.c:11921
+-msgid ""
+-"invalid integer constant in parameter list, did you forget to give parameter "
+-"name?"
+-msgstr ""
+-
+-#: cp/decl.c:11948
+-msgid "parameter invalidly declared method type"
+-msgstr ""
+-
+-#: cp/decl.c:11958
+-msgid "parameter invalidly declared offset type"
+-msgstr ""
+-
+-#: cp/decl.c:12004
+-msgid "`void' in parameter list must be entire list"
+-msgstr ""
+-
+-#: cp/decl.c:12336
+-msgid "void is not a valid type conversion operator"
+-msgstr ""
+-
+-#: cp/decl.c:12353
+-#, c-format
+-msgid "conversion to %s%s will never use a type conversion operator"
+-msgstr ""
+-
+-#. 13.4.0.3
+-#: cp/decl.c:12381
+-msgid "ANSI C++ prohibits overloading operator ?:"
+-msgstr ""
+-
+-#: cp/decl.c:13392
+-msgid "return type for `main' changed to `int'"
+-msgstr ""
+-
+-#. Give this error as many times as there are occurrences,
+-#. so that users can use Emacs compilation buffers to find
+-#. and fix all such places.
+-#: cp/decl.c:13886
+-msgid "ANSI C++ does not permit named return values"
+-msgstr ""
+-
+-#: cp/decl.c:13902
+-msgid "can't redefine default return value for constructors"
+-msgstr ""
+-
+-#: cp/decl.c:14837 cp/init.c:1782 cp/typeck.c:3129 cp/typeck.c:3232
+-msgid "at this point in file"
+-msgstr ""
+-
+-#: cp/decl2.c:573
+-msgid ""
+-"-fhandle-exceptions has been renamed to -fexceptions (and is now on by "
+-"default)"
+-msgstr ""
+-
+-#: cp/decl2.c:592
+-#, c-format
+-msgid "-f%s is no longer supported"
+-msgstr ""
+-
+-#: cp/decl2.c:990
+-msgid "name missing for member function"
+-msgstr ""
+-
+-#: cp/decl2.c:1060
+-msgid "`__alignof__' applied to a bit-field"
+-msgstr ""
+-
+-#. Something has gone very wrong. Assume we are mistakenly reducing
+-#. an expression instead of a declaration.
+-#: cp/decl2.c:1112
+-msgid "parser may be lost: is there a '{' missing somewhere?"
+-msgstr ""
+-
+-#: cp/decl2.c:1143 cp/decl2.c:1157
+-msgid "ambiguous conversion for array subscript"
+-msgstr ""
+-
+-#: cp/decl2.c:1207
+-msgid "anachronistic use of array size in vector delete"
+-msgstr ""
+-
+-#: cp/decl2.c:1217
+-msgid "cannot delete a function"
+-msgstr ""
+-
+-#: cp/decl2.c:1537
+-msgid "initializer invalid for static member with constructor"
+-msgstr ""
+-
+-#: cp/decl2.c:1539
+-msgid "(you really want to initialize it separately)"
+-msgstr ""
+-
+-#: cp/decl2.c:1648 cp/decl2.c:1817
+-msgid "field declaration not allowed in signature"
+-msgstr ""
+-
+-#: cp/decl2.c:1667
+-msgid "function declarations cannot have initializers in signature"
+-msgstr ""
+-
+-#: cp/decl2.c:1713
+-msgid "field initializer is not constant"
+-msgstr ""
+-
+-#: cp/decl2.c:2245
+-msgid "global anonymous unions must be declared static"
+-msgstr ""
+-
+-#: cp/decl2.c:2254
+-msgid "anonymous union with no members"
+-msgstr ""
+-
+-#: cp/decl2.c:2319
+-msgid "`operator new' must return type `void *'"
+-msgstr ""
+-
+-#: cp/decl2.c:2324
+-msgid "`operator new' takes type `size_t' parameter"
+-msgstr ""
+-
+-#: cp/decl2.c:2326
+-msgid "`operator new' takes type `size_t' as first parameter"
+-msgstr ""
+-
+-#: cp/decl2.c:2351
+-msgid "`operator delete' must return type `void'"
+-msgstr ""
+-
+-#: cp/decl2.c:2355
+-msgid "`operator delete' takes type `void *' as first parameter"
+-msgstr ""
+-
+-#: cp/decl2.c:2366
+-msgid "second argument to `operator delete' must be of type `size_t'"
+-msgstr ""
+-
+-#: cp/decl2.c:2371
+-msgid "too many arguments in declaration of `operator delete'"
+-msgstr ""
+-
+-#: cp/decl2.c:2373
+-msgid "`...' invalid in specification of `operator delete'"
+-msgstr ""
+-
+-#. Overflow occurred. That means there are at least 4 billion
+-#. initialization functions.
+-#: cp/decl2.c:3031
+-msgid "too many initialization functions required"
+-msgstr ""
+-
+-#: cp/decl2.c:3797 cp/typeck.c:5770
+-msgid "cast specifies signature type"
+-msgstr ""
+-
+-#: cp/decl2.c:3818
+-msgid "use of old-style cast"
+-msgstr ""
+-
+-#: cp/error.c:339
+-#, c-format
+-msgid "`%s' not supported by dump_type"
+-msgstr ""
+-
+-#: cp/error.c:530
+-#, c-format
+-msgid "`%s' not supported by dump_type_prefix"
+-msgstr ""
+-
+-#: cp/error.c:613
+-#, c-format
+-msgid "`%s' not supported by dump_type_suffix"
+-msgstr ""
+-
+-#: cp/error.c:947
+-#, c-format
+-msgid "`%s' not supported by dump_decl"
+-msgstr ""
+-
+-#: cp/error.c:1794
+-#, c-format
+-msgid "`%s' not supported by dump_expr"
+-msgstr ""
+-
+-#: cp/except.c:627
+-msgid "invalid catch parameter"
+-msgstr ""
+-
+-#: cp/except.c:1046
+-msgid " in thrown expression"
+-msgstr ""
+-
+-#: cp/expr.c:386
+-msgid "pointers are not permitted as case values"
+-msgstr ""
+-
+-#: cp/expr.c:389
+-msgid "ANSI C++ forbids range expressions in switch statement"
+-msgstr ""
+-
+-#: cp/expr.c:431
+-msgid "duplicate (or overlapping) case value"
+-msgstr ""
+-
+-#: cp/expr.c:449
+-msgid "empty range specified"
+-msgstr ""
+-
+-#: cp/expr.c:455
+-msgid "`default' label within scope of cleanup or variable array"
+-msgstr ""
+-
+-#: cp/friend.c:208
+-#, c-format
+-msgid "method `%s::%s' is already a friend of class"
+-msgstr ""
+-
+-#: cp/friend.c:212
+-#, c-format
+-msgid "function `%s' is already a friend of class `%s'"
+-msgstr ""
+-
+-#: cp/friend.c:277
+-#, c-format
+-msgid "class `%s' is implicitly friends with itself"
+-msgstr ""
+-
+-#: cp/friend.c:431
+-msgid " declares a non-template function"
+-msgstr ""
+-
+-#: cp/friend.c:434
+-msgid " (if this is not what you intended, make sure"
+-msgstr ""
+-
+-#: cp/friend.c:435
+-msgid " the function template has already been declared,"
+-msgstr ""
+-
+-#: cp/friend.c:436
+-msgid " and add <> after the function name here)"
+-msgstr ""
+-
+-#: cp/friend.c:437
+-msgid " -Wno-non-template-friend disables this warning."
+-msgstr ""
+-
+-#: cp/init.c:208
+-msgid "initializer list treated as compound expression"
+-msgstr ""
+-
+-#: cp/init.c:301
+-msgid " will be re-ordered to match declaration order"
+-msgstr ""
+-
+-#: cp/init.c:456
+-msgid " will be re-ordered to match inheritance order"
+-msgstr ""
+-
+-#: cp/init.c:942
+-msgid "base class initializer specified, but no base class to initialize"
+-msgstr ""
+-
+-#: cp/init.c:948
+-msgid "initializer for unnamed base class ambiguous"
+-msgstr ""
+-
+-#: cp/init.c:975
+-msgid "no base class to initialize"
+-msgstr ""
+-
+-#: cp/init.c:1006
+-msgid " will be re-ordered to precede member initializations"
+-msgstr ""
+-
+-#. Handle bad initializers like:
+-#. class COMPLEX {
+-#. public:
+-#. double re, im;
+-#. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;};
+-#. ~COMPLEX() {};
+-#. };
+-#.
+-#. int main(int argc, char **argv) {
+-#. COMPLEX zees(1.0, 0.0)[10];
+-#. }
+-#.
+-#: cp/init.c:1114
+-msgid "bad array initializer"
+-msgstr ""
+-
+-#: cp/init.c:1739
+-msgid "object missing in use of pointer-to-member construct"
+-msgstr ""
+-
+-#: cp/init.c:1976
+-msgid "new of array type fails to specify size"
+-msgstr ""
+-
+-#: cp/init.c:1987
+-msgid "size in array new must have integral type"
+-msgstr ""
+-
+-#: cp/init.c:1993
+-msgid "zero size array reserves no space"
+-msgstr ""
+-
+-#: cp/init.c:2068
+-msgid "new cannot be applied to a reference type"
+-msgstr ""
+-
+-#: cp/init.c:2074
+-msgid "new cannot be applied to a function type"
+-msgstr ""
+-
+-#: cp/init.c:2126
+-msgid "call to Java constructor, while `jclass' undefined"
+-msgstr ""
+-
+-#: cp/init.c:2201
+-msgid "invalid type `void' for new"
+-msgstr ""
+-
+-#: cp/init.c:2257
+-msgid "constructors take parameter lists"
+-msgstr ""
+-
+-#: cp/init.c:2270
+-#, c-format
+-msgid "call to Java constructor, while `%s' undefined"
+-msgstr ""
+-
+-#: cp/init.c:2385 cp/typeck2.c:626 cp/typeck2.c:1470
+-msgid "initializer list being treated as compound expression"
+-msgstr ""
+-
+-#: cp/init.c:2388
+-msgid "initializer list appears where operand should be used"
+-msgstr ""
+-
+-#: cp/init.c:2859
+-msgid "initialization of array from dissimilar array type"
+-msgstr ""
+-
+-#: cp/init.c:2873
+-msgid "initializer ends prematurely"
+-msgstr ""
+-
+-#: cp/init.c:2923
+-msgid "cannot initialize multi-dimensional array with initializer"
+-msgstr ""
+-
+-#: cp/init.c:3063
+-msgid "unknown array size in delete"
+-msgstr ""
+-
+-#: cp/init.c:3315
+-msgid "type to vector delete is neither pointer or array type"
+-msgstr ""
+-
+-#: cp/lex.c:186
+-msgid "type name expected before `*'"
+-msgstr ""
+-
+-#: cp/lex.c:208
+-msgid "cannot declare references to references"
+-msgstr ""
+-
+-#: cp/lex.c:213
+-msgid "cannot declare pointers to references"
+-msgstr ""
+-
+-#: cp/lex.c:217
+-msgid "type name expected before `&'"
+-msgstr ""
+-
+-#: cp/lex.c:1260 cp/lex.c:1830
+-msgid "parse error at end of saved function text"
+-msgstr ""
+-
+-#: cp/lex.c:1301
+-msgid "end of file encountered inside string constant"
+-msgstr ""
+-
+-#: cp/lex.c:1303
+-msgid "end of file encountered inside character constant"
+-msgstr ""
+-
+-#: cp/lex.c:1320 cp/lex.c:4179
+-msgid "ANSI C++ forbids newline in string constant"
+-msgstr ""
+-
+-#: cp/lex.c:1516
+-msgid "parse error in method specification"
+-msgstr ""
+-
+-#: cp/lex.c:1613
+-msgid "function body for constructor missing"
+-msgstr ""
+-
+-#: cp/lex.c:2058
+-#, c-format
+-msgid "semicolon missing after %s declaration"
+-msgstr ""
+-
+-#. Used to test incremental compilation.
+-#: cp/lex.c:2368
+-msgid "#pragma newworld"
+-msgstr ""
+-
+-#: cp/lex.c:2579
+-msgid "badly nested C headers from preprocessor"
+-msgstr ""
+-
+-#: cp/lex.c:2963
+-#, c-format
+-msgid "name lookup of `%s' changed"
+-msgstr ""
+-
+-#: cp/lex.c:3178 cp/lex.c:3881
+-msgid "ANSI C++ forbids imaginary numeric constants"
+-msgstr ""
+-
+-#: cp/lex.c:3427
+-#, c-format
+-msgid "invalid modifier `%s' for language string"
+-msgstr ""
+-
+-#: cp/lex.c:3526
+-#, c-format
+-msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy"
+-msgstr ""
+-
+-#: cp/lex.c:3825
+-#, c-format
+-msgid "floating point number exceeds range of `%s'"
+-msgstr ""
+-
+-#: cp/lex.c:3871
+-msgid "ANSI C++ forbids long long integer constants"
+-msgstr ""
+-
+-#: cp/lex.c:3956
+-msgid "decimal integer constant is so large that it is unsigned"
+-msgstr ""
+-
+-#: cp/lex.c:3967
+-msgid "complex integer constant is too wide for `__complex int'"
+-msgstr ""
+-
+-#: cp/lex.c:4252
+-msgid "Unterminated string"
+-msgstr ""
+-
+-#: cp/lex.c:4401
+-#, c-format
+-msgid "use of `operator %s' is not standard C++"
+-msgstr ""
+-
+-#: cp/lex.c:4794
+-msgid "invalid #pragma vtable"
+-msgstr ""
+-
+-#: cp/lex.c:4800
+-msgid "use `+e2' option to enable #pragma vtable"
+-msgstr ""
+-
+-#: cp/lex.c:4809 cp/lex.c:4823
+-msgid "trailing characters ignored"
+-msgstr ""
+-
+-#: cp/lex.c:4818
+-msgid "invalid #pragma unit"
+-msgstr ""
+-
+-#: cp/lex.c:4841
+-msgid "invalid `#pragma interface'"
+-msgstr ""
+-
+-#: cp/lex.c:4849
+-msgid "garbage after `#pragma interface' ignored"
+-msgstr ""
+-
+-#: cp/lex.c:4898
+-msgid "invalid `#pragma implementation'"
+-msgstr ""
+-
+-#: cp/lex.c:4906
+-msgid "garbage after `#pragma implementation' ignored"
+-msgstr ""
+-
+-#: cp/lex.c:4938
+-msgid "`#pragma implementation' can only appear at top-level"
+-msgstr ""
+-
+-#: cp/method.c:762
+-msgid "ANSI C++ forbids floating-point template arguments"
+-msgstr ""
+-
+-#: cp/method.c:905
+-#, c-format
+-msgid "conversion of %s as template parameter"
+-msgstr ""
+-
+-#: cp/method.c:1897
+-msgid "methods cannot be converted to function pointers"
+-msgstr ""
+-
+-#: cp/method.c:1902
+-#, c-format
+-msgid "ambiguous request for method pointer `%s'"
+-msgstr ""
+-
+-#: cp/method.c:2019
+-#, c-format
+-msgid "request for member `%s' is ambiguous in multiple inheritance lattice"
+-msgstr ""
+-
+-#: parse.y:560
+-msgid "invalid default template argument"
+-msgstr ""
+-
+-#: parse.y:780
+-msgid "no base initializers given following ':'"
+-msgstr ""
+-
+-#: parse.y:803
+-msgid "base initializers not allowed for non-member functions"
+-msgstr ""
+-
+-#: parse.y:805
+-msgid "only constructors take base initializers"
+-msgstr ""
+-
+-#: parse.y:822 parse.y:828
+-msgid "anachronistic old style base class initializer"
+-msgstr ""
+-
+-#. Handle `Class<Class<Type>>' without space in the `>>'
+-#: parse.y:945
+-msgid "`>>' should be `> >' in template class name"
+-msgstr ""
+-
+-#: parse.y:992 parse.y:1001
+-#, c-format
+-msgid "ANSI C++ forbids an empty condition for `%s'"
+-msgstr ""
+-
+-#: parse.y:1098
+-msgid "ANSI C++ forbids `&&'"
+-msgstr ""
+-
+-#: parse.y:1204
+-msgid "ANSI C++ forbids initialization of new expression with `='"
+-msgstr ""
+-
+-#: parse.y:1234
+-msgid "ANSI C++ forbids constructor-expressions"
+-msgstr ""
+-
+-#: parse.y:1433
+-msgid "ANSI C++ forbids braced-groups within expressions"
+-msgstr ""
+-
+-#: parse.y:1837 parse.y:1852
+-msgid "sigof type specifier"
+-msgstr ""
+-
+-#: parse.y:1842 parse.y:2371 parse.y:2392
+-msgid "`sigof' applied to non-aggregate expression"
+-msgstr ""
+-
+-#: parse.y:1857
+-msgid "`sigof' applied to non-aggregate type"
+-msgstr ""
+-
+-#: parse.y:2203
+-#, c-format
+-msgid "storage class specifier `%s' not allowed after struct or class"
+-msgstr ""
+-
+-#: parse.y:2205
+-#, c-format
+-msgid "type specifier `%s' not allowed after struct or class"
+-msgstr ""
+-
+-#: parse.y:2207
+-#, c-format
+-msgid "type qualifier `%s' not allowed after struct or class"
+-msgstr ""
+-
+-#: parse.y:2209
+-msgid "no body nor ';' separates two class, struct or union declarations"
+-msgstr ""
+-
+-#: parse.y:2366 parse.y:2387
+-msgid "`sigof' as base signature specifier"
+-msgstr ""
+-
+-#: parse.y:2377 parse.y:2398
+-msgid "`sigof' in struct or class declaration"
+-msgstr ""
+-
+-#: parse.y:2413
+-msgid "multiple access specifiers"
+-msgstr ""
+-
+-#: parse.y:2431
+-msgid "multiple `virtual' specifiers"
+-msgstr ""
+-
+-#: parse.y:2446
+-msgid "access specifier not allowed in signature"
+-msgstr ""
+-
+-#: parse.y:2470
+-msgid "missing ';' before right brace"
+-msgstr ""
+-
+-#: parse.y:2712
+-msgid "ANSI C++ forbids array dimensions with parenthesized type in new"
+-msgstr ""
+-
+-#: parse.y:3218
+-msgid "ANSI C++ forbids label declarations"
+-msgstr ""
+-
+-#: parse.y:3364
+-msgid "ANSI C++ forbids computed gotos"
+-msgstr ""
+-
+-#: parse.y:3372
+-msgid "label must be followed by statement"
+-msgstr ""
+-
+-#: parse.y:3475
+-msgid "ANSI C++ forbids compound statements inside for initializations"
+-msgstr ""
+-
+-#. This helps us recover from really nasty
+-#. parse errors, for example, a missing right
+-#. parenthesis.
+-#: parse.y:3560 parse.y:3570
+-msgid "possibly missing ')'"
+-msgstr ""
+-
+-#: parse.y:3667 parse.y:3672
+-msgid "type specifier omitted for parameter"
+-msgstr ""
+-
+-#: cp/pt.c:1787
+-msgid " a template type parameter must begin with `class' or `typename'"
+-msgstr ""
+-
+-#: cp/pt.c:2704
+-msgid "because it is the address of an object with static linkage"
+-msgstr ""
+-
+-#: cp/pt.c:4238
+-#, c-format
+-msgid "testing %s for template parms"
+-msgstr ""
+-
+-#: cp/pt.c:4335
+-#, c-format
+-msgid "template instantiation depth exceeds maximum of %d"
+-msgstr ""
+-
+-#: cp/pt.c:4337
+-msgid " (use -ftemplate-depth-NN to increase the maximum)"
+-msgstr ""
+-
+-#: cp/pt.c:6150
+-msgid "creating array with size zero"
+-msgstr ""
+-
+-#: cp/pt.c:6618
+-#, c-format
+-msgid "use of `%s' in template"
+-msgstr ""
+-
+-#: cp/pt.c:7656
+-msgid "incomplete type unification"
+-msgstr ""
+-
+-#: cp/pt.c:8493
+-#, c-format
+-msgid "use of `%s' in template type unification"
+-msgstr ""
+-
+-#: cp/repo.c:263
+-msgid "-frepo must be used with -c"
+-msgstr ""
+-
+-#: cp/repo.c:353
+-#, c-format
+-msgid "mysterious repository information in %s"
+-msgstr ""
+-
+-#: cp/repo.c:368
+-#, c-format
+-msgid "can't create repository information file `%s'"
+-msgstr ""
+-
+-#: cp/rtti.c:104
+-msgid "`headof' applied to non-pointer type"
+-msgstr ""
+-
+-#: cp/rtti.c:197
+-msgid "typeid of overloaded function"
+-msgstr ""
+-
+-#: cp/rtti.c:223
+-msgid "taking dynamic typeid of object with -fno-rtti"
+-msgstr ""
+-
+-#: cp/rtti.c:269
+-msgid "cannot use typeid with -fno-rtti"
+-msgstr ""
+-
+-#: cp/rtti.c:275 cp/rtti.c:425
+-msgid "must #include <typeinfo> before using typeid"
+-msgstr ""
+-
+-#: cp/rtti.c:430
+-msgid "requesting typeid with -fno-rtti"
+-msgstr ""
+-
+-#: cp/search.c:1919
+-msgid "adjusting pointers for covariant returns"
+-msgstr ""
+-
+-#: cp/search.c:1930
+-msgid "invalid covariant return type (must use pointer or reference)"
+-msgstr ""
+-
+-#. This shouldn't happen, I don't want errors!
+-#: cp/search.c:2438
+-msgid "recoverable compiler error, fixups for virtual function"
+-msgstr ""
+-
+-#: cp/search.c:2714
+-msgid "recoverable internal compiler error, nobody's in charge!"
+-msgstr ""
+-
+-#: cp/sig.c:473
+-msgid "conformance check with signature containing class declarations"
+-msgstr ""
+-
+-#: cp/sig.c:736
+-msgid "signature with opaque type implemented by multiple classes"
+-msgstr ""
+-
+-#: cp/sig.c:807
+-msgid "invalid assignment to signature pointer or reference"
+-msgstr ""
+-
+-#: cp/spew.c:367
+-msgid "keyword 'export' not implemented and will be ignored"
+-msgstr ""
+-
+-#: cp/tree.c:177
+-#, c-format
+-msgid "non-lvalue in %s"
+-msgstr ""
+-
+-#: cp/tree.c:1690 cp/tree.c:1982
+-msgid "initializer contains unrecognized tree code"
+-msgstr ""
+-
+-#: cp/tree.c:2723
+-msgid "`com_interface' only supported with -fvtable-thunks"
+-msgstr ""
+-
+-#: cp/tree.c:2732
+-msgid "`com_interface' attribute can only be applied to class definitions"
+-msgstr ""
+-
+-#: cp/tree.c:2749
+-msgid "requested init_priority is not an integer constant"
+-msgstr ""
+-
+-#: cp/tree.c:2770
+-msgid ""
+-"can only use init_priority attribute on file-scope definitions of objects of "
+-"class type"
+-msgstr ""
+-
+-#: cp/tree.c:2776
+-msgid "requested init_priority is out of range"
+-msgstr ""
+-
+-#: cp/tree.c:2785
+-msgid "requested init_priority is reserved for internal use"
+-msgstr ""
+-
+-#: cp/typeck.c:1561 cp/typeck.c:1638
+-msgid "ANSI C++ forbids taking the sizeof a function type"
+-msgstr ""
+-
+-#: cp/typeck.c:1567
+-msgid "ANSI C++ forbids taking the sizeof a method type"
+-msgstr ""
+-
+-#: cp/typeck.c:1573
+-msgid "ANSI C++ forbids taking the sizeof a void type"
+-msgstr ""
+-
+-#: cp/typeck.c:1598
+-msgid "`sizeof' applied to a signature type"
+-msgstr ""
+-
+-#: cp/typeck.c:1627
+-msgid "sizeof applied to a bit-field"
+-msgstr ""
+-
+-#: cp/typeck.c:1703
+-msgid "`__alignof' applied to a signature type"
+-msgstr ""
+-
+-#: cp/typeck.c:1923
+-msgid "signature name in scope resolution ignored"
+-msgstr ""
+-
+-#: cp/typeck.c:2230
+-msgid "invalid reference to NULL ptr, use ptr-to-member instead"
+-msgstr ""
+-
+-#: cp/typeck.c:2387
+-#, c-format
+-msgid "invalid use of `%s' on pointer to member"
+-msgstr ""
+-
+-#: cp/typeck.c:2390
+-msgid "cannot dereference signature pointer/reference"
+-msgstr ""
+-
+-#: cp/typeck.c:2396
+-msgid "invalid type argument"
+-msgstr ""
+-
+-#: cp/typeck.c:2477
+-msgid "ANSI C++ forbids subscripting non-lvalue array"
+-msgstr ""
+-
+-#: cp/typeck.c:2488
+-msgid "subscripting array declared `register'"
+-msgstr ""
+-
+-#: cp/typeck.c:2660 cp/typeck.c:2800
+-msgid "pointer to member function called, but not in class scope"
+-msgstr ""
+-
+-#: cp/typeck.c:2798
+-msgid ""
+-"invalid call to member function needing `this' in static member function "
+-"scope"
+-msgstr ""
+-
+-#: cp/typeck.c:2956
+-msgid "ANSI C++ forbids calling `main' from within program"
+-msgstr ""
+-
+-#: cp/typeck.c:3168
+-msgid "parameter type of called function is incomplete"
+-msgstr ""
+-
+-#: cp/typeck.c:3576
+-#, c-format
+-msgid "%s rotate count is negative"
+-msgstr ""
+-
+-#: cp/typeck.c:3581
+-#, c-format
+-msgid "%s rotate count >= width of type"
+-msgstr ""
+-
+-#: cp/typeck.c:3610 cp/typeck.c:3618
+-msgid "ANSI C++ forbids comparison of `void *' with function pointer"
+-msgstr ""
+-
+-#: cp/typeck.c:3612
+-msgid "ANSI C++ forbids conversion of a pointer to member to `void *'"
+-msgstr ""
+-
+-#: cp/typeck.c:3636 cp/typeck.c:3641 cp/typeck.c:3791 cp/typeck.c:3796
+-msgid "ANSI C++ forbids comparison between pointer and integer"
+-msgstr ""
+-
+-#: cp/typeck.c:4137
+-msgid "ANSI C++ forbids using pointer of type `void *' in arithmetic"
+-msgstr ""
+-
+-#: cp/typeck.c:4143
+-msgid "ANSI C++ forbids using pointer to a function in arithmetic"
+-msgstr ""
+-
+-#: cp/typeck.c:4149
+-msgid "ANSI C++ forbids using pointer to a method in arithmetic"
+-msgstr ""
+-
+-#: cp/typeck.c:4155
+-msgid "ANSI C++ forbids using pointer to a member in arithmetic"
+-msgstr ""
+-
+-#: cp/typeck.c:4228
+-msgid "ANSI C++ forbids using pointer of type `void *' in subtraction"
+-msgstr ""
+-
+-#: cp/typeck.c:4230
+-msgid "ANSI C++ forbids using pointer to a function in subtraction"
+-msgstr ""
+-
+-#: cp/typeck.c:4232
+-msgid "ANSI C++ forbids using pointer to a method in subtraction"
+-msgstr ""
+-
+-#: cp/typeck.c:4234
+-msgid "ANSI C++ forbids using pointer to a member in subtraction"
+-msgstr ""
+-
+-#: cp/typeck.c:4347
+-msgid "taking address of temporary"
+-msgstr ""
+-
+-#: cp/typeck.c:4530
+-#, c-format
+-msgid "ANSI C++ forbids %sing an enum"
+-msgstr ""
+-
+-#: cp/typeck.c:4572
+-msgid "cast to non-reference type used as lvalue"
+-msgstr ""
+-
+-#. ARM $3.4
+-#: cp/typeck.c:4652
+-msgid "taking address of function `main'"
+-msgstr ""
+-
+-#. An expression like &memfn.
+-#: cp/typeck.c:4708
+-msgid "taking the address of a non-static member function"
+-msgstr ""
+-
+-#: cp/typeck.c:4710
+-msgid "taking the address of a bound member function"
+-msgstr ""
+-
+-#: cp/typeck.c:4739
+-msgid "taking the address of a cast to non-reference type"
+-msgstr ""
+-
+-#: cp/typeck.c:4755
+-msgid "unary `&'"
+-msgstr ""
+-
+-#: cp/typeck.c:4977
+-msgid "address of `this' not available"
+-msgstr ""
+-
+-#: cp/typeck.c:5076
+-msgid "ANSI C++ forbids omitting the middle term of a ?: expression"
+-msgstr ""
+-
+-#: cp/typeck.c:5164 cp/typeck.c:5169
+-msgid "enumeral and non-enumeral type in conditional expression"
+-msgstr ""
+-
+-#: cp/typeck.c:5220
+-msgid "ANSI C++ forbids conditional expr with only one void side"
+-msgstr ""
+-
+-#: cp/typeck.c:5234 cp/typeck.c:5240
+-msgid "ANSI C++ forbids conditional expr between `void *' and function pointer"
+-msgstr ""
+-
+-#: cp/typeck.c:5321 cp/typeck.c:5347
+-msgid "ambiguous pointer conversion"
+-msgstr ""
+-
+-#: cp/typeck.c:5632
+-msgid "ANSI C++ forbids casting between pointers to functions and objects"
+-msgstr ""
+-
+-#: cp/typeck.c:5751 cp/typeck.c:5756
+-msgid "ANSI C++ forbids casting to an array type"
+-msgstr ""
+-
+-#: cp/typeck.c:6086
+-msgid "ANSI C++ forbids cast to non-reference type used as lvalue"
+-msgstr ""
+-
+-#: cp/typeck.c:6156
+-msgid "assignment to `this' not in constructor or destructor"
+-msgstr ""
+-
+-#: cp/typeck.c:6209
+-msgid "ANSI C++ forbids assignment of arrays"
+-msgstr ""
+-
+-#: cp/typeck.c:6246
+-msgid "return value from function receives multiple initializations"
+-msgstr ""
+-
+-#: cp/typeck.c:6384
+-msgid " in pointer to member function conversion"
+-msgstr ""
+-
+-#: cp/typeck.c:6392
+-msgid " in pointer to member conversion"
+-msgstr ""
+-
+-#: cp/typeck.c:6404 cp/typeck.c:6420
+-msgid " will only work if you are very careful"
+-msgstr ""
+-
+-#: cp/typeck.c:6904
+-#, c-format
+-msgid "ANSI C++ forbids implicit conversion from `void *' in %s"
+-msgstr ""
+-
+-#: cp/typeck.c:6916
+-#, c-format
+-msgid "%s between pointer to members converting across virtual baseclasses"
+-msgstr ""
+-
+-#: cp/typeck.c:7019
+-#, c-format
+-msgid "conflicting function types in %s:"
+-msgstr ""
+-
+-#: cp/typeck.c:7344
+-msgid "returning a value from a destructor"
+-msgstr ""
+-
+-#: cp/typeck.c:7390
+-msgid "return from a constructor: use `this = ...' instead"
+-msgstr ""
+-
+-#: cp/typeck.c:7392
+-msgid "returning a value from a constructor"
+-msgstr ""
+-
+-#: cp/typeck.c:7424
+-msgid "return of void value in function returning non-void"
+-msgstr ""
+-
+-#: cp/typeck.c:7481
+-msgid "returning reference to temporary"
+-msgstr ""
+-
+-#: cp/typeck.c:7488
+-msgid "reference to non-lvalue returned"
+-msgstr ""
+-
+-#: cp/typeck2.c:167
+-msgid " since the following virtual functions are abstract:"
+-msgstr ""
+-
+-#: cp/typeck2.c:350
+-msgid "confused by earlier errors, bailing out"
+-msgstr ""
+-
+-#: cp/typeck2.c:357
+-msgid "Internal compiler error."
+-msgstr ""
+-
+-#: cp/typeck2.c:359
+-#, c-format
+-msgid "Internal compiler error %d."
+-msgstr ""
+-
+-#: cp/typeck2.c:361
+-msgid "Please submit a full bug report."
+-msgstr ""
+-
+-#: cp/typeck2.c:362
+-msgid "See <URL:http://egcs.cygnus.com/faq.html#bugreport> for instructions."
+-msgstr ""
+-
+-#: cp/typeck2.c:584
+-msgid "due to the presence of a constructor"
+-msgstr ""
+-
+-#: cp/typeck2.c:608
+-msgid "comma expression used to initialize return value"
+-msgstr ""
+-
+-#: cp/typeck2.c:617
+-msgid "cannot initialize arrays using this syntax"
+-msgstr ""
+-
+-#: cp/typeck2.c:679
+-msgid "ANSI C++ forbids non-constant aggregate initializer expressions"
+-msgstr ""
+-
+-#: cp/typeck2.c:750
+-msgid "initializing array with parameter list"
+-msgstr ""
+-
+-#: cp/typeck2.c:812
+-msgid "initializer for scalar variable requires one element"
+-msgstr ""
+-
+-#: cp/typeck2.c:909
+-msgid "aggregate has a partly bracketed initializer"
+-msgstr ""
+-
+-#: cp/typeck2.c:939 cp/typeck2.c:1040
+-msgid "non-trivial labeled initializers"
+-msgstr ""
+-
+-#: cp/typeck2.c:956
+-msgid "non-empty initializer for array of empty elements"
+-msgstr ""
+-
+-#: cp/typeck2.c:1006
+-msgid "initializer list for object of class with virtual baseclasses"
+-msgstr ""
+-
+-#: cp/typeck2.c:1012
+-msgid "initializer list for object of class with baseclasses"
+-msgstr ""
+-
+-#: cp/typeck2.c:1018
+-msgid "initializer list for object using virtual functions"
+-msgstr ""
+-
+-#: cp/typeck2.c:1126
+-msgid "index value instead of field name in union initializer"
+-msgstr ""
+-
+-#: cp/typeck2.c:1182
+-msgid "excess elements in aggregate initializer"
+-msgstr ""
+-
+-#: cp/typeck2.c:1309
+-msgid "circular pointer delegation detected"
+-msgstr ""
+-
+-#: cp/typeck2.c:1341
+-msgid "result of `operator->()' yields non-pointer result"
+-msgstr ""
+-
+-#: cp/typeck2.c:1343
+-msgid "base operand of `->' is not a pointer"
+-msgstr ""
+-
+-#: cp/typeck2.c:1458
+-msgid "signature type not allowed in cast or constructor expression"
+-msgstr ""
+-
+-#: cp/typeck2.c:1622
+-#, c-format
+-msgid "duplicate label `%s' in switch statement"
+-msgstr ""
+-
+-#: cp/typeck2.c:1625
+-#, c-format
+-msgid "duplicate label (%d) in switch statement"
+-msgstr ""
+-
+-#: cp/typeck2.c:1632
+-#, c-format
+-msgid "case value out of range for enum %s"
+-msgstr ""
+-
+-#: cp/typeck2.c:1640
+-#, c-format
+-msgid "range values `%s' and `%s' reversed"
+-msgstr ""
+-
+-#: cp/typeck2.c:1644
+-msgid "range values reversed"
+-msgstr ""
+-
+-#: cp/typeck2.c:1659
+-#, c-format
+-msgid "ANSI C++ forbids defining types within %s"
+-msgstr ""
+-
+-#: cp/xref.c:838
+-#, c-format
+-msgid "Can't create cross-reference file `%s'"
+-msgstr ""
+-
+-#: cppalloc.c:34
+-#, c-format
+-msgid "%s: Memory exhausted.\n"
+-msgstr ""
+-
+-#: cpperror.c:66
+-#, c-format
+-msgid "In file included from %s:%ld"
+-msgstr ""
+-
+-#: cpperror.c:70
+-#, c-format
+-msgid ""
+-",\n"
+-" from %s:%ld"
+-msgstr ""
+-
+-#: cpperror.c:117
+-#, c-format
+-msgid "internal error: bad is_error(%d) in v_cpp_message"
+-msgstr ""
+-
+-#: cppexp.c:164
+-msgid "floating point numbers are not allowed in #if expressions"
+-msgstr ""
+-
+-#: cppexp.c:201
+-msgid "invalid number in #if expression"
+-msgstr ""
+-
+-#: cppexp.c:206
+-msgid "too many `l' suffixes in integer constant"
+-msgstr ""
+-
+-#: cppexp.c:211
+-msgid "too many `u' suffixes in integer constant"
+-msgstr ""
+-
+-#: cppexp.c:724
+-msgid "internal error: cpp_lex returns a NAME"
+-msgstr ""
+-
+-#: cppexp.c:773
+-msgid "invalid character in #if"
+-msgstr ""
+-
+-#: cppexp.c:781 cppexp.c:959
+-msgid "syntax error in #if"
+-msgstr ""
+-
+-#: cppexp.c:797
+-msgid "syntax error - missing left operand"
+-msgstr ""
+-
+-#: cppexp.c:803
+-msgid "syntax error - missing right operand"
+-msgstr ""
+-
+-#: cppexp.c:891 cppexp.c:901
+-msgid "syntax error"
+-msgstr ""
+-
+-#: cppexp.c:965
+-msgid "syntax error ':' without preceding '?'"
+-msgstr ""
+-
+-#: cppexp.c:972
+-msgid "bad syntax for ?: operator"
+-msgstr ""
+-
+-#: cppexp.c:989
+-msgid "mismatched parentheses in #if"
+-msgstr ""
+-
+-#: cppexp.c:1003
+-#, c-format
+-msgid "unimplemented operator '%c'\n"
+-msgstr ""
+-
+-#: cppexp.c:1004
+-#, c-format
+-msgid "unimplemented operator '\\%03o'\n"
+-msgstr ""
+-
+-#: cppexp.c:1011
+-msgid "internal error in #if expression"
+-msgstr ""
+-
+-#: cpphash.c:295
+-msgid "internal error: limit < buf in collect_expansion"
+-msgstr ""
+-
+-#: cpphash.c:692
+-#, c-format
+-msgid "duplicate argument name `%s' in `#define'"
+-msgstr ""
+-
+-#: cpphash.c:1015
+-msgid "cpplib internal error: invalid special hash type"
+-msgstr ""
+-
+-#: cpphash.c:1413
+-msgid "internal_error: buffer overrun in macroexpand"
+-msgstr ""
+-
+-#: cpplib.c:394 cpplib.c:470
+-#, c-format
+-msgid "%s in preprocessing directive"
+-msgstr ""
+-
+-#: cpplib.c:599
+-#, c-format
+-msgid "invalid assertion name `%s'"
+-msgstr ""
+-
+-#: cpplib.c:600
+-#, c-format
+-msgid "invalid macro name `%s'"
+-msgstr ""
+-
+-#: cpplib.c:696
+-msgid "macro or `#include' recursion too deep"
+-msgstr ""
+-
+-#: cpplib.c:773
+-msgid "internal error: length < 0 in cpp_expand_to_buffer"
+-msgstr ""
+-
+-#: cpplib.c:983
+-msgid "#import is obsolete, use an #ifndef wrapper in the header file"
+-msgstr ""
+-
+-#: cpplib.c:1001
+-msgid "`#include filename' is obsolete, use `#include <filename.h>'"
+-msgstr ""
+-
+-#: cpplib.c:1024
+-msgid "junk at end of `#include'"
+-msgstr ""
+-
+-#: cpplib.c:1063
+-msgid "cpp internal error: fp == NULL_BUFFER in do_include"
+-msgstr ""
+-
+-#: cpplib.c:1079
+-msgid "#include_next in primary source file"
+-msgstr ""
+-
+-#: cpplib.c:1209 cpplib.c:1216
+-msgid "token after `#line' is not an integer"
+-msgstr ""
+-
+-#: cpplib.c:1222
+-msgid "line number out of range in `#line' command"
+-msgstr ""
+-
+-#: cpplib.c:1237
+-msgid "garbage at end of `#line' command"
+-msgstr ""
+-
+-#: cpplib.c:1241 cpplib.c:1263
+-msgid "invalid format `#line' command"
+-msgstr ""
+-
+-#: cpplib.c:1298
+-#, c-format
+-msgid "token after `#line %d' is not a string"
+-msgstr ""
+-
+-#: cpplib.c:1335
+-msgid "token after #undef is not an identifier"
+-msgstr ""
+-
+-#: cpplib.c:1352
+-msgid "junk on line after #undef"
+-msgstr ""
+-
+-#: cpplib.c:1493
+-msgid "`#pragma once' outside include file"
+-msgstr ""
+-
+-#: cpplib.c:1517
+-#, c-format
+-msgid "`#pragma implementation' for `%s' appears after file is included"
+-msgstr ""
+-
+-#: cpplib.c:1677
+-#, c-format
+-msgid "`#%s' with invalid argument"
+-msgstr ""
+-
+-#: cpplib.c:1784
+-#, c-format
+-msgid "`%s' after `#else'"
+-msgstr ""
+-
+-#: cpplib.c:1812
+-msgid "invalid preprocessor directive name"
+-msgstr ""
+-
+-#: cpplib.c:2011
+-#, c-format
+-msgid "text following `%s' violates ANSI standard"
+-msgstr ""
+-
+-#: cpplib.c:2191
+-msgid "missing '>' in `#include <FILENAME>'"
+-msgstr ""
+-
+-#: cpplib.c:2209 cpplib.c:2462
+-#, c-format
+-msgid "internal error: unrecognized escape \\r%c"
+-msgstr ""
+-
+-#: cpplib.c:2621
+-msgid "internal error: \\r escape inside string constant"
+-msgstr ""
+-
+-#: cpplib.c:2659
+-msgid "assertion predicate is not an identifier"
+-msgstr ""
+-
+-#: cpplib.c:2692
+-msgid "un-terminated assertion answer"
+-msgstr ""
+-
+-#: cpplib.c:2709
+-msgid "empty token sequence in assertion"
+-msgstr ""
+-
+-#: cpplib.c:2748
+-msgid "junk at end of `#assert'"
+-msgstr ""
+-
+-#: cpplib.c:2757
+-#, c-format
+-msgid "`%s' re-asserted"
+-msgstr ""
+-
+-#: cpplib.c:2768
+-msgid "cpp internal error: base->type != T_ASSERT in do_assert"
+-msgstr ""
+-
+-#: cpplib.c:2809
+-msgid "junk at end of `#unassert'"
+-msgstr ""
+-
+-#: cpplib.c:2898
+-msgid "cpp internal error: ip->mark != -1 in parse_set_mark"
+-msgstr ""
+-
+-#: cpplib.c:2912
+-msgid "cpp internal error: ip->mark == -1 in parse_clear_mark"
+-msgstr ""
+-
+-#: cpplib.c:2927
+-msgid "cpp internal error: ip->mark == -1 in parse_goto_mark"
+-msgstr ""
+-
+-#: cpplib.c:3254 gcc.c:5287
+-#, c-format
+-msgid "%s: %s"
+-msgstr ""
+-
+-#: cpplib.c:3262
+-#, c-format
+-msgid "%s: %s: %s"
+-msgstr ""
+-
+-#: cse.c:8798
+-#, c-format
+-msgid ";; Processing block from %d to %d, %d sets.\n"
+-msgstr ""
+-
+-#: dwarf2out.c:554 dwarfout.c:1679
+-#, c-format
+-msgid "internal regno botch: regno = %d\n"
+-msgstr ""
+-
+-#: emit-rtl.c:973
+-msgid ""
+-"Unable to access real part of complex value in a hard register on this target"
+-msgstr ""
+-
+-#: emit-rtl.c:996
+-msgid ""
+-"Unable to access imaginary part of complex value in a hard register on this "
+-"target"
+-msgstr ""
+-
+-#: except.c:816
+-msgid "additional handler after ..."
+-msgstr ""
+-
+-#: except.c:989
+-msgid "Cannot duplicate non-existant exception region."
+-msgstr ""
+-
+-#: except.c:1084
+-msgid "exception handling disabled, use -fexceptions to enable"
+-msgstr ""
+-
+-#: except.c:1760
+-msgid "Compiler Bug: Never issued previous false_label"
+-msgstr ""
+-
+-#: except.c:2389
+-#, c-format
+-msgid "Counted %d copies of EH region %d in list.\n"
+-msgstr ""
+-
+-#: except.c:2778
+-msgid "Duplicate call to __builtin_eh_return"
+-msgstr ""
+-
+-#: except.c:2798
+-msgid "function uses __builtin_eh_return"
+-msgstr ""
+-
+-#: expr.c:5459 expr.c:5468 expr.c:5477 expr.c:5482 expr.c:5637 expr.c:5650
+-msgid "unsupported wide integer operation"
+-msgstr ""
+-
+-#: expr.c:5702
+-#, c-format
+-msgid "prior parameter's size depends on `%s'"
+-msgstr ""
+-
+-#: expr.c:6098
+-msgid "returned value in block_exit_expr"
+-msgstr ""
+-
+-#: expr.c:8411
+-msgid "offset outside bounds of constant string"
+-msgstr ""
+-
+-#: expr.c:9006
+-#, c-format
+-msgid "CUMULATIVE_ARGS type defined badly; see %s, line %d"
+-msgstr ""
+-
+-#: expr.c:9013
+-msgid "argument of `__builtin_args_info' must be constant"
+-msgstr ""
+-
+-#: expr.c:9019
+-msgid "argument of `__builtin_args_info' out of range"
+-msgstr ""
+-
+-#: expr.c:9025
+-msgid "missing argument in `__builtin_args_info'"
+-msgstr ""
+-
+-#: expr.c:9054
+-msgid "`va_start' used in function with fixed args"
+-msgstr ""
+-
+-#: expr.c:9073
+-msgid "second parameter of `va_start' not last named argument"
+-msgstr ""
+-
+-#. Evidently an out of date version of <stdarg.h>; can't validate
+-#. va_start's second argument, but can still work as intended.
+-#: expr.c:9078
+-msgid "`__builtin_next_arg' called without an argument"
+-msgstr ""
+-
+-#: expr.c:9189
+-msgid "invalid arg to `__builtin_frame_address'"
+-msgstr ""
+-
+-#: expr.c:9191
+-msgid "invalid arg to `__builtin_return_address'"
+-msgstr ""
+-
+-#: expr.c:9204
+-msgid "unsupported arg to `__builtin_frame_address'"
+-msgstr ""
+-
+-#: expr.c:9206
+-msgid "unsupported arg to `__builtin_return_address'"
+-msgstr ""
+-
+-#: expr.c:9664
+-msgid "__builtin_longjmp second argument must be 1"
+-msgstr ""
+-
+-#: expr.c:9678
+-msgid "__builtin_trap not supported by this target"
+-msgstr ""
+-
+-#. just do library call, if unknown builtin
+-#: expr.c:9705
+-#, c-format
+-msgid "built-in function `%s' not currently supported"
+-msgstr ""
+-
+-#: final.c:1324
+-msgid "Negative insn length"
+-msgstr ""
+-
+-#: final.c:2914
+-msgid "Could not split insn"
+-msgstr ""
+-
+-#: final.c:3310
+-#, c-format
+-msgid "invalid `asm': %s"
+-msgstr ""
+-
+-#: final.c:3312
+-#, c-format
+-msgid "Internal compiler error, output_operand_lossage `%s'"
+-msgstr ""
+-
+-#: final.c:3448
+-#, c-format
+-msgid "operand number missing after %-letter"
+-msgstr ""
+-
+-#: final.c:3450 final.c:3483
+-msgid "operand number out of range"
+-msgstr ""
+-
+-#: final.c:3496
+-msgid "invalid %%-code"
+-msgstr ""
+-
+-#: final.c:3521
+-msgid "`%l' operand isn't a label"
+-msgstr ""
+-
+-#: flow.c:5074
+-#, c-format
+-msgid ""
+-"verify_flow_info: Head insn %d for block %d not found in the insn stream.\n"
+-msgstr ""
+-
+-#: flow.c:5084
+-#, c-format
+-msgid "verify_flow_info: Insn %d is in multiple basic blocks (%d and %d)"
+-msgstr ""
+-
+-#: flow.c:5094
+-#, c-format
+-msgid ""
+-"verify_flow_info: End insn %d for block %d not found in the insn stream.\n"
+-msgstr ""
+-
+-#: flow.c:5127 flow.c:5155
+-#, c-format
+-msgid "verify_flow_info: Basic block %i edge lists are corrupted\n"
+-msgstr ""
+-
+-#: flow.c:5170
+-msgid ""
+-"verify_flow_info: Basic block contains only CODE_LABEL and no "
+-"NOTE_INSN_BASIC_BLOCK note\n"
+-msgstr ""
+-
+-#: flow.c:5178
+-#, c-format
+-msgid "verify_flow_info: NOTE_INSN_BASIC_BLOCK is missing for block %d\n"
+-msgstr ""
+-
+-#: flow.c:5194
+-#, c-format
+-msgid ""
+-"verify_flow_info: NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d\n"
+-msgstr ""
+-
+-#: flow.c:5205
+-#, c-format
+-msgid "verify_flow_info: Incorrect insn in the middle of basic block %d\n"
+-msgstr ""
+-
+-#: flow.c:5239
+-msgid "verify_flow_info: Insn outside basic block\n"
+-msgstr ""
+-
+-#: fold-const.c:2817 fold-const.c:2830
+-#, c-format
+-msgid "comparison is always %d due to width of bitfield"
+-msgstr ""
+-
+-#: fold-const.c:3868 fold-const.c:3885
+-#, c-format
+-msgid "comparison is always %d"
+-msgstr ""
+-
+-#: fold-const.c:4016
+-msgid "`or' of unmatched not-equal tests is always 1"
+-msgstr ""
+-
+-#: fold-const.c:4021
+-msgid "`and' of mutually exclusive equal-tests is always 0"
+-msgstr ""
+-
+-#: function.c:5407
+-#, c-format
+-msgid "`%s' might be used uninitialized in this function"
+-msgstr ""
+-
+-#: function.c:5413
+-#, c-format
+-msgid "variable `%s' might be clobbered by `longjmp' or `vfork'"
+-msgstr ""
+-
+-#: function.c:5431
+-#, c-format
+-msgid "argument `%s' might be clobbered by `longjmp' or `vfork'"
+-msgstr ""
+-
+-#: function.c:6004
+-msgid "function returns an aggregate"
+-msgstr ""
+-
+-#: function.c:6422
+-#, c-format
+-msgid "unused parameter `%s'"
+-msgstr ""
+-
+-#: gcc.c:941
+-#, c-format
+-msgid "Ambiguous abbreviation %s"
+-msgstr ""
+-
+-#: gcc.c:968
+-#, c-format
+-msgid "Incomplete `%s' option"
+-msgstr ""
+-
+-#: gcc.c:979
+-#, c-format
+-msgid "Missing argument to `%s' option"
+-msgstr ""
+-
+-#: gcc.c:992
+-#, c-format
+-msgid "Extraneous argument to `%s' option"
+-msgstr ""
+-
+-#: gcc.c:1177
+-msgid "Using builtin specs.\n"
+-msgstr ""
+-
+-#: gcc.c:1262
+-#, c-format
+-msgid ""
+-"Setting spec %s to '%s'\n"
+-"\n"
+-msgstr ""
+-
+-#: gcc.c:1460
+-#, c-format
+-msgid "Reading specs from %s\n"
+-msgstr ""
+-
+-#: gcc.c:1512 gcc.c:1530
+-msgid "specs %%include syntax malformed after %ld characters"
+-msgstr ""
+-
+-#: gcc.c:1538
+-#, c-format
+-msgid "Could not find specs file %s\n"
+-msgstr ""
+-
+-#: gcc.c:1554 gcc.c:1562 gcc.c:1571 gcc.c:1580
+-msgid "specs %%rename syntax malformed after %ld characters"
+-msgstr ""
+-
+-#: gcc.c:1589
+-#, c-format
+-msgid "specs %s spec was not found to be renamed"
+-msgstr ""
+-
+-#: gcc.c:1596
+-#, c-format
+-msgid "rename spec %s to %s\n"
+-msgstr ""
+-
+-#: gcc.c:1598
+-#, c-format
+-msgid ""
+-"spec is '%s'\n"
+-"\n"
+-msgstr ""
+-
+-#: gcc.c:1611
+-msgid "specs unknown %% command after %ld characters"
+-msgstr ""
+-
+-#: gcc.c:1622 gcc.c:1635
+-#, c-format
+-msgid "specs file malformed after %ld characters"
+-msgstr ""
+-
+-#: gcc.c:1692
+-msgid "spec file has no spec for linking"
+-msgstr ""
+-
+-#: gcc.c:2178
+-#, c-format
+-msgid "file path prefix `%s%s' never used"
+-msgstr ""
+-
+-#: gcc.c:2181
+-#, c-format
+-msgid "file path prefix `%s' never used"
+-msgstr ""
+-
+-#: gcc.c:2237
+-msgid "-pipe not supported"
+-msgstr ""
+-
+-#: gcc.c:2273
+-msgid ""
+-"\n"
+-"Go ahead? (y or n) "
+-msgstr ""
+-
+-#: gcc.c:2337
+-#, c-format
+-msgid "Internal compiler error: program %s got fatal signal %d"
+-msgstr ""
+-
+-#: gcc.c:2828
+-msgid "argument to `-Xlinker' is missing"
+-msgstr ""
+-
+-#: gcc.c:2845
+-msgid "argument to `-specs' is missing"
+-msgstr ""
+-
+-#: gcc.c:2860
+-msgid "argument to `-specs=' is missing"
+-msgstr ""
+-
+-#: gcc.c:2880
+-msgid "argument to `-b' is missing"
+-msgstr ""
+-
+-#: gcc.c:2893
+-msgid "argument to `-B' is missing"
+-msgstr ""
+-
+-#: gcc.c:2945
+-msgid "argument to `-V' is missing"
+-msgstr ""
+-
+-#: gcc.c:2966 gcc.c:2973 gcc.c:2980
+-msgid "invalid version number format"
+-msgstr ""
+-
+-#: gcc.c:3051
+-msgid "cannot specify -o with -c or -S and multiple compilations"
+-msgstr ""
+-
+-#: gcc.c:3212
+-msgid "Warning: -pipe ignored since -save-temps specified"
+-msgstr ""
+-
+-#: gcc.c:3221
+-msgid "argument to `-x' is missing"
+-msgstr ""
+-
+-#: gcc.c:3249
+-#, c-format
+-msgid "argument to `-%s' is missing"
+-msgstr ""
+-
+-#: gcc.c:3307
+-#, c-format
+-msgid "Warning: `-x %s' after last input file has no effect"
+-msgstr ""
+-
+-#: gcc.c:3503
+-msgid "Invalid specification! Bug in cc."
+-msgstr ""
+-
+-#: gcc.c:4083
+-msgid "Warning: use of obsolete %%[ operator in specs"
+-msgstr ""
+-
+-#: gcc.c:4101
+-#, c-format
+-msgid "Processing spec %c%s%c, which is '%s'\n"
+-msgstr ""
+-
+-#: gcc.c:4919
+-#, c-format
+-msgid "unrecognized option `-%s'"
+-msgstr ""
+-
+-#: gcc.c:4989
+-#, c-format
+-msgid "gcc version %s\n"
+-msgstr ""
+-
+-#: gcc.c:4991
+-#, c-format
+-msgid "gcc driver version %s executing gcc version %s\n"
+-msgstr ""
+-
+-#: gcc.c:4999
+-msgid "No input files"
+-msgstr ""
+-
+-#: gcc.c:5042
+-#, c-format
+-msgid "%s: %s compiler not installed on this system"
+-msgstr ""
+-
+-#: gcc.c:5147
+-#, c-format
+-msgid "%s: linker input file unused since linking not done"
+-msgstr ""
+-
+-#: gcc.c:5190
+-#, c-format
+-msgid "language %s not recognized"
+-msgstr ""
+-
+-#: gcov.c:277
+-msgid "error: virtual memory exhausted"
+-msgstr ""
+-
+-#: gcov.c:289
+-msgid "Internal gcc abort.\n"
+-msgstr ""
+-
+-#: gcov.c:298
+-msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n"
+-msgstr ""
+-
+-#: gcov.c:416
+-#, c-format
+-msgid "Could not open basic block file %s.\n"
+-msgstr ""
+-
+-#: gcov.c:425
+-#, c-format
+-msgid "Could not open data file %s.\n"
+-msgstr ""
+-
+-#: gcov.c:426
+-msgid "Assuming that all execution counts are zero.\n"
+-msgstr ""
+-
+-#: gcov.c:432
+-#, c-format
+-msgid "Could not open program flow graph file %s.\n"
+-msgstr ""
+-
+-#: gcov.c:443
+-#, c-format
+-msgid "No executable code associated with file %s.\n"
+-msgstr ""
+-
+-#: gcov.c:744 profile.c:1495
+-msgid ".da file contents exhausted too early\n"
+-msgstr ""
+-
+-#: gcov.c:747 profile.c:1498
+-msgid ".da file contents not exhausted\n"
+-msgstr ""
+-
+-#: gcov.c:928
+-msgid "%6.2f%% of %d source lines executed in function %s\n"
+-msgstr ""
+-
+-#: gcov.c:932
+-#, c-format
+-msgid "No executable source lines in function %s\n"
+-msgstr ""
+-
+-#: gcov.c:939
+-msgid "%6.2f%% of %d branches executed in function %s\n"
+-msgstr ""
+-
+-#: gcov.c:943
+-msgid "%6.2f%% of %d branches taken at least once in function %s\n"
+-msgstr ""
+-
+-#: gcov.c:948
+-#, c-format
+-msgid "No branches in function %s\n"
+-msgstr ""
+-
+-#: gcov.c:950
+-msgid "%6.2f%% of %d calls executed in function %s\n"
+-msgstr ""
+-
+-#: gcov.c:954
+-#, c-format
+-msgid "No calls in function %s\n"
+-msgstr ""
+-
+-#: gcov.c:1086
+-#, c-format
+-msgid "didn't use all bb entries of graph, function %s\n"
+-msgstr ""
+-
+-#: gcov.c:1088
+-#, c-format
+-msgid "block_num = %ld, num_blocks = %d\n"
+-msgstr ""
+-
+-#: gcov.c:1126
+-#, c-format
+-msgid "ERROR: too many basic blocks in .bb file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1203
+-msgid "%6.2f%% of %d source lines executed in file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1207
+-#, c-format
+-msgid "No executable source lines in file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1214
+-msgid "%6.2f%% of %d branches executed in file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1218
+-msgid "%6.2f%% of %d branches taken at least once in file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1223
+-#, c-format
+-msgid "No branches in file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1225
+-msgid "%6.2f%% of %d calls executed in file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1229
+-#, c-format
+-msgid "No calls in file %s\n"
+-msgstr ""
+-
+-#: gcov.c:1241
+-#, c-format
+-msgid "Could not open source file %s.\n"
+-msgstr ""
+-
+-#: gcov.c:1291
+-#, c-format
+-msgid "Could not open output file %s.\n"
+-msgstr ""
+-
+-#: gcov.c:1299
+-#, c-format
+-msgid "Creating %s.\n"
+-msgstr ""
+-
+-#: gcov.c:1343
+-#, c-format
+-msgid "call %d never executed\n"
+-msgstr ""
+-
+-#: gcov.c:1346
+-msgid "call %d returns = %d%%\n"
+-msgstr ""
+-
+-#: gcov.c:1352
+-#, c-format
+-msgid "branch %d never executed\n"
+-msgstr ""
+-
+-#: gcov.c:1355
+-msgid "branch %d taken = %d%%\n"
+-msgstr ""
+-
+-#: gcov.c:1365
+-#, c-format
+-msgid "Unexpected EOF while reading source file %s.\n"
+-msgstr ""
+-
+-#: ../libiberty/getopt.c:682
+-#, c-format
+-msgid "%s: option `%s' is ambiguous\n"
+-msgstr ""
+-
+-#: ../libiberty/getopt.c:707
+-#, c-format
+-msgid "%s: option `--%s' doesn't allow an argument\n"
+-msgstr ""
+-
+-#: ../libiberty/getopt.c:712
+-#, c-format
+-msgid "%s: option `%c%s' doesn't allow an argument\n"
+-msgstr ""
+-
+-#: ../libiberty/getopt.c:730 ../libiberty/getopt.c:903
+-#, c-format
+-msgid "%s: option `%s' requires an argument\n"
+-msgstr ""
+-
+-#. --option
+-#: ../libiberty/getopt.c:759
+-#, c-format
+-msgid "%s: unrecognized option `--%s'\n"
+-msgstr ""
+-
+-#. +option or -option
+-#: ../libiberty/getopt.c:763
+-#, c-format
+-msgid "%s: unrecognized option `%c%s'\n"
+-msgstr ""
+-
+-#. 1003.2 specifies the format of this message.
+-#: ../libiberty/getopt.c:789
+-#, c-format
+-msgid "%s: illegal option -- %c\n"
+-msgstr ""
+-
+-#: ../libiberty/getopt.c:792
+-#, c-format
+-msgid "%s: invalid option -- %c\n"
+-msgstr ""
+-
+-#. 1003.2 specifies the format of this message.
+-#: ../libiberty/getopt.c:822 ../libiberty/getopt.c:952
+-#, c-format
+-msgid "%s: option requires an argument -- %c\n"
+-msgstr ""
+-
+-#: ../libiberty/getopt.c:869
+-#, c-format
+-msgid "%s: option `-W %s' is ambiguous\n"
+-msgstr ""
+-
+-#: ../libiberty/getopt.c:887
+-#, c-format
+-msgid "%s: option `-W %s' doesn't allow an argument\n"
+-msgstr ""
+-
+-#: integrate.c:146
+-msgid "varargs function cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:149
+-msgid "function using alloca cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:152
+-msgid "function with nested functions cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:159 integrate.c:201
+-msgid "function too large to be inline"
+-msgstr ""
+-
+-#: integrate.c:169
+-msgid "no prototype, and parameter address used; cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:176 integrate.c:230
+-msgid "inline functions not supported for this return value type"
+-msgstr ""
+-
+-#: integrate.c:180
+-msgid "function with varying-size return value cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:187
+-msgid "function with varying-size parameter cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:189
+-msgid "function with transparent unit parameter cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:208
+-msgid "function with computed jump cannot inline"
+-msgstr ""
+-
+-#: integrate.c:212
+-msgid "function with nonlocal goto cannot be inline"
+-msgstr ""
+-
+-#: integrate.c:224
+-msgid "function with complex parameters cannot be inline"
+-msgstr ""
+-
+-#: objc/objc-act.c:667
+-msgid "Objective-C text in C source file"
+-msgstr ""
+-
+-#: objc/objc-act.c:878
+-#, c-format
+-msgid "object does not conform to the `%s' protocol"
+-msgstr ""
+-
+-#: objc/objc-act.c:916
+-#, c-format
+-msgid "class `%s' does not implement the `%s' protocol"
+-msgstr ""
+-
+-#: objc/objc-act.c:998
+-#, c-format
+-msgid "`%s' cannot be statically allocated"
+-msgstr ""
+-
+-#: objc/objc-act.c:999
+-msgid "statically allocated objects not supported"
+-msgstr ""
+-
+-#: objc/objc-act.c:1060
+-#, c-format
+-msgid "Unexpected type for `id' (%s)"
+-msgstr ""
+-
+-#: objc/objc-act.c:1064
+-msgid "Undefined type `id', please import <objc/objc.h>"
+-msgstr ""
+-
+-#: objc/objc-act.c:1113 objc/objc-act.c:5363
+-#, c-format
+-msgid "Cannot find protocol declaration for `%s'"
+-msgstr ""
+-
+-#: objc-parse.y:1490 objc/objc-act.c:1350 objc/objc-act.c:5897
+-#: objc/objc-act.c:6207 objc/objc-act.c:6255 objc/objc-act.c:6291
+-#, c-format
+-msgid "Cannot find interface declaration for `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:2425
+-#, c-format
+-msgid "Cannot find class `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:2427
+-#, c-format
+-msgid "Class `%s' already exists"
+-msgstr ""
+-
+-#. fatal did not work with 2 args...should fix
+-#: objc/objc-act.c:2559
+-#, c-format
+-msgid "Cannot find interface declaration for `%s', superclass of `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:2567
+-#, c-format
+-msgid "Circular inheritance in interface declaration for `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:3616 objc/objc-act.c:3633
+-msgid "inconsistent instance variable specification"
+-msgstr ""
+-
+-#: objc/objc-act.c:4846
+-#, c-format
+-msgid "multiple declarations for method `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:4963
+-#, c-format
+-msgid "invalid receiver type `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:5031 objc/objc-act.c:5057 objc/objc-act.c:5105
+-#, c-format
+-msgid "`%s' does not respond to `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:5037 objc/objc-act.c:7329
+-#, c-format
+-msgid "no super class declared in interface for `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:5135
+-msgid "cannot find class (factory) method."
+-msgstr ""
+-
+-#: objc/objc-act.c:5136 objc/objc-act.c:5180
+-#, c-format
+-msgid "return type for `%s' defaults to id"
+-msgstr ""
+-
+-#: objc/objc-act.c:5153
+-#, c-format
+-msgid "method `%s' not implemented by protocol."
+-msgstr ""
+-
+-#: objc/objc-act.c:5162
+-msgid "return type defaults to id"
+-msgstr ""
+-
+-#: objc/objc-act.c:5179
+-msgid "cannot find method."
+-msgstr ""
+-
+-#. Historically, a class method that produced objects (factory
+-#. method) would assign `self' to the instance that it
+-#. allocated. This would effectively turn the class method into
+-#. an instance method. Following this assignment, the instance
+-#. variables could be accessed. That practice, while safe,
+-#. violates the simple rule that a class method should not refer
+-#. to an instance variable. It's better to catch the cases
+-#. where this is done unknowingly than to support the above
+-#. paradigm.
+-#: objc/objc-act.c:5438
+-#, c-format
+-msgid "instance variable `%s' accessed in class method"
+-msgstr ""
+-
+-#: objc/objc-act.c:5694
+-#, c-format
+-msgid "duplicate definition of class method `%s'."
+-msgstr ""
+-
+-#: objc/objc-act.c:5700
+-#, c-format
+-msgid "duplicate declaration of class method `%s'."
+-msgstr ""
+-
+-#: objc/objc-act.c:5740
+-#, c-format
+-msgid "duplicate definition of instance method `%s'."
+-msgstr ""
+-
+-#: objc/objc-act.c:5746
+-#, c-format
+-msgid "duplicate declaration of instance method `%s'."
+-msgstr ""
+-
+-#: objc/objc-act.c:5786
+-#, c-format
+-msgid "duplicate interface declaration for category `%s(%s)'"
+-msgstr ""
+-
+-#: objc/objc-act.c:5872
+-#, c-format
+-msgid "instance variable `%s' is declared private"
+-msgstr ""
+-
+-#: objc/objc-act.c:5919
+-#, c-format
+-msgid "instance variable `%s' is declared %s"
+-msgstr ""
+-
+-#: objc/objc-act.c:5929
+-msgid "static access to object of type `id'"
+-msgstr ""
+-
+-#: objc/objc-act.c:5966 objc/objc-act.c:6060
+-#, c-format
+-msgid "incomplete implementation of class `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:5970 objc/objc-act.c:6065
+-#, c-format
+-msgid "incomplete implementation of category `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:5975 objc/objc-act.c:6070
+-#, c-format
+-msgid "method definition for `%c%s' not found"
+-msgstr ""
+-
+-#: objc/objc-act.c:6111
+-#, c-format
+-msgid "%s `%s' does not fully implement the `%s' protocol"
+-msgstr ""
+-
+-#: objc/objc-act.c:6179
+-#, c-format
+-msgid "reimplementation of class `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:6220
+-#, c-format
+-msgid "conflicting super class name `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:6235
+-#, c-format
+-msgid "duplicate interface declaration for class `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:6481
+-#, c-format
+-msgid "duplicate declaration for protocol `%s'"
+-msgstr ""
+-
+-#: objc/objc-act.c:7370
+-msgid "[super ...] must appear in a method context"
+-msgstr ""
+-
+-#: objc/objc-act.c:8325 objc/objc-act.c:8341
+-#, c-format
+-msgid "potential selector conflict for method `%s'"
+-msgstr ""
+-
+-#: objc-parse.y:677
+-#, c-format
+-msgid "Instance variable `%s' implicitly declared as function"
+-msgstr ""
+-
+-#: objc-parse.y:719
+-#, c-format
+-msgid "local declaration of `%s' hides instance variable"
+-msgstr ""
+-
+-#: objc-parse.y:2364
+-msgid "`@end' must appear in an implementation context"
+-msgstr ""
+-
+-#: objc-parse.y:2632 objc-parse.y:2657
+-msgid "method definition not in class context"
+-msgstr ""
+-
+-#: profile.c:805
+-msgid "-fprofile-arcs does not support computed gotos"
+-msgstr ""
+-
+-#: profile.c:1215
+-msgid "Arc profiling: some arc counts were bad."
+-msgstr ""
+-
+-#: profile.c:1448
+-#, c-format
+-msgid "file %s not found, execution counts assumed to be zero."
+-msgstr ""
+-
+-#: protoize.c:622 protoize.c:642
+-#, c-format
+-msgid ""
+-"\n"
+-"%s: virtual memory exceeded\n"
+-msgstr ""
+-
+-#: protoize.c:693
+-#, c-format
+-msgid "%s: internal abort\n"
+-msgstr ""
+-
+-#: protoize.c:783
+-#, c-format
+-msgid "%s: error writing file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:827
+-#, c-format
+-msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+-msgstr ""
+-
+-#: protoize.c:830
+-#, c-format
+-msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+-msgstr ""
+-
+-#: protoize.c:917
+-#, c-format
+-msgid "%s: warning: no read access for file `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:925
+-#, c-format
+-msgid "%s: warning: no write access for file `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:933
+-#, c-format
+-msgid "%s: warning: no write access for dir containing `%s'\n"
+-msgstr ""
+-
+-#. Catch cases like /.. where we try to backup to a
+-#. point above the absolute root of the logical file
+-#. system.
+-#: protoize.c:1325
+-#, c-format
+-msgid "%s: invalid file name: %s\n"
+-msgstr ""
+-
+-#: protoize.c:1476
+-#, c-format
+-msgid "%s: %s: can't get status: %s\n"
+-msgstr ""
+-
+-#: protoize.c:1497
+-#, c-format
+-msgid ""
+-"\n"
+-"%s: fatal error: aux info file corrupted at line %d\n"
+-msgstr ""
+-
+-#: protoize.c:1821
+-#, c-format
+-msgid "%s:%d: declaration of function `%s' takes different forms\n"
+-msgstr ""
+-
+-#: protoize.c:2072
+-#, c-format
+-msgid "%s: compiling `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:2096
+-#, c-format
+-msgid "%s: wait: %s\n"
+-msgstr ""
+-
+-#: protoize.c:2101
+-#, c-format
+-msgid "%s: subprocess got fatal signal %d\n"
+-msgstr ""
+-
+-#: protoize.c:2109
+-#, c-format
+-msgid "%s: %s exited with status %d\n"
+-msgstr ""
+-
+-#: protoize.c:2161
+-#, c-format
+-msgid "%s: warning: missing SYSCALLS file `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:2170 protoize.c:2199
+-#, c-format
+-msgid "%s: can't read aux info file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2215 protoize.c:2243
+-#, c-format
+-msgid "%s: can't get status of aux info file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2265
+-#, c-format
+-msgid "%s: can't open aux info file `%s' for reading: %s\n"
+-msgstr ""
+-
+-#: protoize.c:2283
+-#, c-format
+-msgid "%s: error reading aux info file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2296
+-#, c-format
+-msgid "%s: error closing aux info file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2312
+-#, c-format
+-msgid "%s: can't delete aux info file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2380 protoize.c:4376
+-#, c-format
+-msgid "%s: can't delete file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2457
+-#, c-format
+-msgid "%s: warning: can't link file `%s' to `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2467
+-#, c-format
+-msgid "%s: warning: can't delete file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:2591
+-#, c-format
+-msgid "%s: conflicting extern definitions of '%s'\n"
+-msgstr ""
+-
+-#: protoize.c:2595
+-#, c-format
+-msgid "%s: declarations of '%s' will not be converted\n"
+-msgstr ""
+-
+-#: protoize.c:2597
+-#, c-format
+-msgid "%s: conflict list for '%s' follows:\n"
+-msgstr ""
+-
+-#: protoize.c:2630
+-#, c-format
+-msgid "%s: warning: using formals list from %s(%d) for function `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:2670
+-#, c-format
+-msgid "%s: %d: `%s' used but missing from SYSCALLS\n"
+-msgstr ""
+-
+-#: protoize.c:2676
+-#, c-format
+-msgid "%s: %d: warning: no extern definition for `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:2707
+-#, c-format
+-msgid "%s: warning: no static definition for `%s' in file `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:2713
+-#, c-format
+-msgid "%s: multiple static defs of `%s' in file `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:2886 protoize.c:2889
+-#, c-format
+-msgid "%s: %d: warning: source too confusing\n"
+-msgstr ""
+-
+-#: protoize.c:3095
+-#, c-format
+-msgid "%s: %d: warning: varargs function declaration not converted\n"
+-msgstr ""
+-
+-#: protoize.c:3110
+-#, c-format
+-msgid "%s: declaration of function `%s' not converted\n"
+-msgstr ""
+-
+-#: protoize.c:3233
+-#, c-format
+-msgid "%s: warning: too many parameter lists in declaration of `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:3254
+-#, c-format
+-msgid ""
+-"\n"
+-"%s: warning: too few parameter lists in declaration of `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:3352
+-#, c-format
+-msgid "%s: %d: warning: found `%s' but expected `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:3530
+-#, c-format
+-msgid "%s: local declaration for function `%s' not inserted\n"
+-msgstr ""
+-
+-#: protoize.c:3557
+-#, c-format
+-msgid ""
+-"\n"
+-"%s: %d: warning: can't add declaration of `%s' into macro call\n"
+-msgstr ""
+-
+-#: protoize.c:3631
+-#, c-format
+-msgid "%s: global declarations for file `%s' not inserted\n"
+-msgstr ""
+-
+-#: protoize.c:3722 protoize.c:3752
+-#, c-format
+-msgid "%s: definition of function `%s' not converted\n"
+-msgstr ""
+-
+-#: protoize.c:3741
+-#, c-format
+-msgid "%s: %d: warning: definition of %s not converted\n"
+-msgstr ""
+-
+-#: protoize.c:4071
+-#, c-format
+-msgid "%s: found definition of `%s' at %s(%d)\n"
+-msgstr ""
+-
+-#. If we make it here, then we did not know about this
+-#. function definition.
+-#: protoize.c:4087
+-#, c-format
+-msgid "%s: %d: warning: `%s' excluded by preprocessing\n"
+-msgstr ""
+-
+-#: protoize.c:4090
+-#, c-format
+-msgid "%s: function definition not converted\n"
+-msgstr ""
+-
+-#: protoize.c:4149
+-#, c-format
+-msgid "%s: `%s' not converted\n"
+-msgstr ""
+-
+-#: protoize.c:4157
+-#, c-format
+-msgid "%s: would convert file `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:4160
+-#, c-format
+-msgid "%s: converting file `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:4170
+-#, c-format
+-msgid "%s: can't get status for file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:4206
+-#, c-format
+-msgid "%s: can't open file `%s' for reading: %s\n"
+-msgstr ""
+-
+-#: protoize.c:4221
+-#, c-format
+-msgid ""
+-"\n"
+-"%s: error reading input file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:4255
+-#, c-format
+-msgid "%s: can't create/open clean file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:4356
+-#, c-format
+-msgid "%s: warning: file `%s' already saved in `%s'\n"
+-msgstr ""
+-
+-#: protoize.c:4363
+-#, c-format
+-msgid "%s: can't link file `%s' to `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:4390
+-#, c-format
+-msgid "%s: can't create/open output file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:4419
+-#, c-format
+-msgid "%s: can't change mode of file `%s': %s\n"
+-msgstr ""
+-
+-#: protoize.c:4570
+-#, c-format
+-msgid "%s: cannot get working directory: %s\n"
+-msgstr ""
+-
+-#: protoize.c:4668
+-#, c-format
+-msgid "%s: input file names must have .c suffixes: %s\n"
+-msgstr ""
+-
+-#: real.c:770 real.c:937
+-msgid "conversion from NaN to int"
+-msgstr ""
+-
+-#: real.c:793
+-msgid "conversion from NaN to unsigned int"
+-msgstr ""
+-
+-#: real.c:2646
+-msgid "floating point overflow"
+-msgstr ""
+-
+-#: real.c:4275 real.c:6548 real.c:6629
+-msgid "overflow on truncation to integer"
+-msgstr ""
+-
+-#: real.c:4347
+-msgid "overflow on truncation to unsigned integer"
+-msgstr ""
+-
+-#: real.c:5693
+-#, c-format
+-msgid "%s: argument domain error"
+-msgstr ""
+-
+-#: real.c:5694
+-#, c-format
+-msgid "%s: function singularity"
+-msgstr ""
+-
+-#: real.c:5695
+-#, c-format
+-msgid "%s: overflow range error"
+-msgstr ""
+-
+-#: real.c:5696
+-#, c-format
+-msgid "%s: underflow range error"
+-msgstr ""
+-
+-#: real.c:5697
+-#, c-format
+-msgid "%s: total loss of precision"
+-msgstr ""
+-
+-#: real.c:5698
+-#, c-format
+-msgid "%s: partial loss of precision"
+-msgstr ""
+-
+-#: real.c:5699
+-#, c-format
+-msgid "%s: NaN - producing operation"
+-msgstr ""
+-
+-#: reg-stack.c:764
+-#, c-format
+-msgid "Output constraint %d must specify a single register"
+-msgstr ""
+-
+-#: reg-stack.c:784
+-msgid "Output regs must be grouped at top of stack"
+-msgstr ""
+-
+-#: reg-stack.c:821
+-msgid "Implicitly popped regs must be grouped at top of stack"
+-msgstr ""
+-
+-#: reg-stack.c:840
+-#, c-format
+-msgid "Output operand %d must use `&' constraint"
+-msgstr ""
+-
+-#: regclass.c:593
+-#, c-format
+-msgid "can't use '%s' as a %s register"
+-msgstr ""
+-
+-#: regclass.c:604
+-#, c-format
+-msgid "unknown register name: %s"
+-msgstr ""
+-
+-#: regclass.c:616
+-msgid "register used for two global register variables"
+-msgstr ""
+-
+-#: regclass.c:621
+-msgid "call-clobbered register used for global register variable"
+-msgstr ""
+-
+-#: reload.c:1242
+-msgid "cannot reload integer constant operand in `asm'"
+-msgstr ""
+-
+-#: reload.c:1264
+-msgid "impossible register constraint in `asm'"
+-msgstr ""
+-
+-#: reload.c:3389
+-msgid "`&' constraint used with no register class"
+-msgstr ""
+-
+-#: reload.c:3537
+-msgid "Unable to generate reloads for:"
+-msgstr ""
+-
+-#: reload.c:3538 reload.c:3754
+-msgid "inconsistent operand constraints in an `asm'"
+-msgstr ""
+-
+-#: reload1.c:1192
+-msgid "frame size too large for reliable stack checking"
+-msgstr ""
+-
+-#: reload1.c:1195
+-msgid "try reducing the number of local variables"
+-msgstr ""
+-
+-#: reload1.c:1606
+-msgid ""
+-"Two dissimilar machine modes both need groups of consecutive regs of the "
+-"same class"
+-msgstr ""
+-
+-#: reload1.c:2264
+-msgid "`asm' needs too many reloads"
+-msgstr ""
+-
+-#: reload1.c:2266
+-msgid "Unable to find a register to spill."
+-msgstr ""
+-
+-#. The error message is still correct - we know only that it wasn't
+-#. an asm statement that caused the problem, but one of the global
+-#. registers declared by the users might have screwed us.
+-#: reload1.c:2304 reload1.c:2312
+-#, c-format
+-msgid "fixed or forbidden register %d (%s) was spilled for class %s."
+-msgstr ""
+-
+-#: reload1.c:2306
+-msgid "This may be due to a compiler bug or to impossible asm"
+-msgstr ""
+-
+-#: reload1.c:2307
+-msgid "statements or clauses."
+-msgstr ""
+-
+-#: reload1.c:2308
+-msgid "This is the instruction:"
+-msgstr ""
+-
+-#: reload1.c:2310
+-msgid "Invalid `asm' statement:"
+-msgstr ""
+-
+-#: reload1.c:4319
+-msgid "`asm' operand requires impossible reload"
+-msgstr ""
+-
+-#. It's the compiler's fault.
+-#: reload1.c:5583
+-msgid "Could not find a spill register"
+-msgstr ""
+-
+-#: reload1.c:5588
+-msgid "`asm' operand constraint incompatible with operand size"
+-msgstr ""
+-
+-#. It's the compiler's fault.
+-#: reload1.c:7181
+-msgid "VOIDmode on an output"
+-msgstr ""
+-
+-#: reload1.c:7182
+-msgid "output operand is constant in `asm'"
+-msgstr ""
+-
+-#: stmt.c:749
+-#, c-format
+-msgid "jump to `%s' invalidly jumps into binding contour"
+-msgstr ""
+-
+-#: stmt.c:976 stmt.c:3398
+-#, c-format
+-msgid "label `%s' used before containing binding contour"
+-msgstr ""
+-
+-#: stmt.c:1102 stmt.c:1159
+-msgid "`asm' cannot be used with `-fcheck-memory-usage'"
+-msgstr ""
+-
+-#: stmt.c:1173
+-#, c-format
+-msgid "unknown register name `%s' in `asm'"
+-msgstr ""
+-
+-#: stmt.c:1188
+-msgid "too many alternatives in `asm'"
+-msgstr ""
+-
+-#: stmt.c:1198
+-msgid "operand constraints for `asm' differ in number of alternatives"
+-msgstr ""
+-
+-#: stmt.c:1244
+-msgid "output operand constraint lacks `='"
+-msgstr ""
+-
+-#: stmt.c:1254
+-#, c-format
+-msgid "output constraint `%c' for operand %d is not at the beginning"
+-msgstr ""
+-
+-#: stmt.c:1263
+-#, c-format
+-msgid "output operand constraint %d contains `+'"
+-msgstr ""
+-
+-#: stmt.c:1272
+-msgid "operand constraint contains '+' or '=' at illegal position."
+-msgstr ""
+-
+-#: stmt.c:1278 stmt.c:1430
+-msgid "`%%' constraint used with last operand"
+-msgstr ""
+-
+-#: stmt.c:1295
+-msgid "matching constraint not valid in output operand"
+-msgstr ""
+-
+-#: stmt.c:1343
+-#, c-format
+-msgid "output number %d not directly addressable"
+-msgstr ""
+-
+-#: stmt.c:1368
+-#, c-format
+-msgid "more than %d operands in `asm'"
+-msgstr ""
+-
+-#: stmt.c:1404
+-#, c-format
+-msgid "hard register `%s' listed as input operand to `asm'"
+-msgstr ""
+-
+-#: stmt.c:1421
+-#, c-format
+-msgid "input operand constraint contains `%c'"
+-msgstr ""
+-
+-#: stmt.c:1460
+-msgid "matching constraint references invalid operand number"
+-msgstr ""
+-
+-#. ??? Leave this only until we have experience with what
+-#. happens in combine and elsewhere when constraints are
+-#. not satisfied.
+-#: stmt.c:1501 stmt.c:1525
+-#, c-format
+-msgid "asm operand %d probably doesn't match constraints"
+-msgstr ""
+-
+-#: stmt.c:3360
+-#, c-format
+-msgid "unused variable `%s'"
+-msgstr ""
+-
+-#: stmt.c:4912
+-#, c-format
+-msgid "enumeration value `%s' not handled in switch"
+-msgstr ""
+-
+-#: stmt.c:4939 stmt.c:4959
+-#, c-format
+-msgid "case value `%ld' not in enumerated type"
+-msgstr ""
+-
+-#: stmt.c:4942 stmt.c:4962
+-#, c-format
+-msgid "case value `%ld' not in enumerated type `%s'"
+-msgstr ""
+-
+-#: stor-layout.c:110
+-msgid "type size can't be explicitly evaluated"
+-msgstr ""
+-
+-#: stor-layout.c:112
+-msgid "variable-size type declared outside of any function"
+-msgstr ""
+-
+-#: toplev.c:1429
+-#, c-format
+-msgid "%s: warnings being treated as errors\n"
+-msgstr ""
+-
+-#: toplev.c:1454
+-#, c-format
+-msgid "%s: %s: I/O error\n"
+-msgstr ""
+-
+-#: toplev.c:1491
+-msgid "internal error--unrecognizable insn:"
+-msgstr ""
+-
+-#: toplev.c:1493
+-msgid "internal error--insn does not satisfy its constraints:"
+-msgstr ""
+-
+-#: toplev.c:1548
+-msgid "At top level:\n"
+-msgstr ""
+-
+-#: toplev.c:1551
+-#, c-format
+-msgid "In method `%s':\n"
+-msgstr ""
+-
+-#: toplev.c:1552
+-#, c-format
+-msgid "In function `%s':\n"
+-msgstr ""
+-
+-#: toplev.c:1586
+-#, c-format
+-msgid "In file included from %s:%d"
+-msgstr ""
+-
+-#: toplev.c:1587
+-#, c-format
+-msgid ""
+-",\n"
+-" from %s:%d"
+-msgstr ""
+-
+-#: toplev.c:2224
+-msgid "sorry, not implemented: "
+-msgstr ""
+-
+-#: toplev.c:2280
+-msgid "internal gcc abort"
+-msgstr ""
+-
+-#: toplev.c:2829
+-#, c-format
+-msgid "`%s' used but never defined"
+-msgstr ""
+-
+-#: toplev.c:2832
+-#, c-format
+-msgid "`%s' declared `static' but never defined"
+-msgstr ""
+-
+-#: toplev.c:2853
+-#, c-format
+-msgid "`%s' defined but not used"
+-msgstr ""
+-
+-#: toplev.c:3186
+-msgid "-ffunction-sections not supported for this target."
+-msgstr ""
+-
+-#: toplev.c:3191
+-msgid "-fdata-sections not supported for this target."
+-msgstr ""
+-
+-#: toplev.c:3199
+-msgid "-ffunction-sections disabled; it makes profiling impossible."
+-msgstr ""
+-
+-#: toplev.c:3205
+-msgid "-ffunction-sections may affect debugging on some targets."
+-msgstr ""
+-
+-#: toplev.c:3268
+-msgid "Errors detected in input file (your bison.simple is out of date)\n"
+-msgstr ""
+-
+-#: toplev.c:3552
+-#, c-format
+-msgid "invalid register name `%s' for register variable"
+-msgstr ""
+-
+-#: toplev.c:5052
+-#, c-format
+-msgid "unrecognised gcc debugging option: %c"
+-msgstr ""
+-
+-#: toplev.c:5187
+-msgid "`-a' option (basic block profile) not supported"
+-msgstr ""
+-
+-#: toplev.c:5195
+-msgid "`-ax' option (jump profiling) not supported"
+-msgstr ""
+-
+-#: toplev.c:5252
+-#, c-format
+-msgid "use -gdwarf -g%d for DWARF v1, level %d"
+-msgstr ""
+-
+-#: toplev.c:5255
+-msgid "use -gdwarf-2 for DWARF v2"
+-msgstr ""
+-
+-#: toplev.c:5260
+-#, c-format
+-msgid "ignoring option `%s' due to invalid debug level specification"
+-msgstr ""
+-
+-#: toplev.c:5281 toplev.c:5313
+-#, c-format
+-msgid "`-%s' not supported by this configuration of GCC"
+-msgstr ""
+-
+-#: toplev.c:5289
+-#, c-format
+-msgid "`-%s' ignored, conflicts with `-g%s'"
+-msgstr ""
+-
+-#: toplev.c:5333
+-#, c-format
+-msgid "Invalid option `-%s'"
+-msgstr ""
+-
+-#: toplev.c:5370
+-msgid "-Wuninitialized is not supported without -O"
+-msgstr ""
+-
+-#: toplev.c:5389
+-msgid "`-ax' and `-a' are conflicting options. `-a' ignored."
+-msgstr ""
+-
+-#: toplev.c:5410
+-msgid "instruction scheduling not supported on this target machine"
+-msgstr ""
+-
+-#: toplev.c:5414
+-msgid "this target machine does not have delayed branches"
+-msgstr ""
+-
+-#: toplev.c:5428
+-#, c-format
+-msgid "-f%sleading-underscore not supported on this target machine"
+-msgstr ""
+-
+-#: toplev.c:5448
+-#, c-format
+-msgid "Data size %ld.\n"
+-msgstr ""
+-
+-#: toplev.c:5520
+-#, c-format
+-msgid ""
+-"%s%s%s version %s (%s) compiled by GNU C version %s.\n"
+-"%s%s%s version %s (%s) compiled by CC.\n"
+-msgstr ""
+-
+-#: toplev.c:5575
+-msgid "options passed: "
+-msgstr ""
+-
+-#: toplev.c:5604
+-msgid "options enabled: "
+-msgstr ""
+-
+-#: tree.c:1282
+-#, c-format
+-msgid "`%s' and `%s' identical in first %d characters"
+-msgstr ""
+-
+-#: tree.c:4264
+-msgid "arrays of functions are not meaningful"
+-msgstr ""
+-
+-#: tree.c:4321
+-msgid "function return type cannot be function"
+-msgstr ""
+-
+-#: tree.c:5015
+-msgid "invalid initializer for bit string"
+-msgstr ""
+-
+-#: tree.c:5084
+-#, c-format
+-msgid "%s:%d: Expect %s, have %s\n"
+-msgstr ""
+-
+-#: tree.c:5104
+-#, c-format
+-msgid "%s:%d: Expect '%c', have '%s'\n"
+-msgstr ""
+-
+-#: tree.c:5132
+-#, c-format
+-msgid "%s:%d: Expect expression, have '%s'\n"
+-msgstr ""
+-
+-#: varasm.c:657
+-#, c-format
+-msgid "register name not specified for `%s'"
+-msgstr ""
+-
+-#: varasm.c:661
+-#, c-format
+-msgid "invalid register name for `%s'"
+-msgstr ""
+-
+-#: varasm.c:666
+-#, c-format
+-msgid "register name given for non-register variable `%s'"
+-msgstr ""
+-
+-#: varasm.c:671
+-#, c-format
+-msgid "data type of `%s' isn't suitable for a register"
+-msgstr ""
+-
+-#: varasm.c:676
+-#, c-format
+-msgid "register number for `%s' isn't suitable for data type"
+-msgstr ""
+-
+-#: varasm.c:685
+-msgid "global register variable has initial value"
+-msgstr ""
+-
+-#: varasm.c:689
+-msgid "global register variable follows a function definition"
+-msgstr ""
+-
+-#: varasm.c:691
+-msgid "volatile register variables don't work as you might wish"
+-msgstr ""
+-
+-#: varasm.c:1266
+-#, c-format
+-msgid "size of variable `%s' is too large"
+-msgstr ""
+-
+-#: varasm.c:1306
+-#, c-format
+-msgid ""
+-"alignment of `%s' is greater than maximum object file alignment. Using %d."
+-msgstr ""
+-
+-#: varasm.c:1350
+-#, c-format
+-msgid "requested alignment for %s is greater than implemented alignment of %d."
+-msgstr ""
+-
+-#: varasm.c:1890
+-msgid "floating point trap outputting a constant"
+-msgstr ""
+-
+-#: varasm.c:3948
+-msgid "initializer for integer value is too complicated"
+-msgstr ""
+-
+-#: varasm.c:3954
+-msgid "initializer for floating value is not a floating constant"
+-msgstr ""
+-
+-#: varasm.c:4011
+-msgid "unknown set constructor type"
+-msgstr ""
+-
+-#: varasm.c:4169
+-#, c-format
+-msgid "invalid initial value for member `%s'"
+-msgstr ""
+-
+-#: varasm.c:4342
+-#, c-format
+-msgid "weak declaration of `%s' must be public"
+-msgstr ""
+-
+-#: varasm.c:4344
+-#, c-format
+-msgid "weak declaration of `%s' must precede definition"
+-msgstr ""
+-
+-#: varasm.c:4431
+-msgid "only weak aliases are supported in this configuration"
+-msgstr ""
+-
+-#: varasm.c:4436
+-msgid "alias definitions not supported in this configuration; ignored"
+-msgstr ""
+-
+-#: config/arc/arc.h:59 config/mips/mips.h:954
+-msgid "may not use both -EB and -EL"
+-msgstr ""
+-
+-#: config/arm/arm.h:183
+-msgid "-mapcs-26 and -mapcs-32 may not be used together"
+-msgstr ""
+-
+-#: config/arm/arm.h:195
+-msgid "-msoft-float and -mhard_float may not be used together"
+-msgstr ""
+-
+-#: config/arm/arm.h:206
+-msgid "-mbig-endian and -mlittle-endian may not be used together"
+-msgstr ""
+-
+-#: config/arm/riscix.h:72 config/arm/riscix.h:140
+-msgid "-mbsd and -pedantic incompatible"
+-msgstr ""
+-
+-#: config/arm/riscix.h:73 config/arm/riscix.h:141
+-msgid "-mbsd and -mxopen incompatible"
+-msgstr ""
+-
+-#: config/arm/riscix.h:74 config/arm/riscix.h:142
+-msgid "-mxopen and -pedantic incompatible"
+-msgstr ""
+-
+-#: config/dsp16xx/dsp16xx.h:126 config/dsp16xx/dsp16xx.h:135
+-msgid "A -ifile option requires a -map option"
+-msgstr ""
+-
+-#: config/i386/freebsd.h:239
+-msgid "`-p' not supported; use `-pg' and gprof(1)"
+-msgstr ""
+-
+-#: config/i386/sco5.h:804 config/i386/sco5.h:879
+-msgid "-static not valid with -mcoff"
+-msgstr ""
+-
+-#: config/i386/sco5.h:805 config/i386/sco5.h:880
+-msgid "-shared not valid with -mcoff"
+-msgstr ""
+-
+-#: config/i386/sco5.h:806 config/i386/sco5.h:881
+-msgid "-symbolic not valid with -mcoff"
+-msgstr ""
+-
+-#: config/i386/sco5.h:844
+-msgid "-fpic is not valid with -mcoff"
+-msgstr ""
+-
+-#: config/i386/sco5.h:845
+-msgid "-fPIC is not valid with -mcoff"
+-msgstr ""
+-
+-#: config/i386/sco5.h:882
+-msgid "-fpic not valid with -mcoff"
+-msgstr ""
+-
+-#: config/i386/sco5.h:883
+-msgid "-fPIC not valid with -mcoff"
+-msgstr ""
+-
+-#: config/i860/fx2800.h:305
+-msgid "-p option not supported: use -pg instead"
+-msgstr ""
+-
+-#: config/mips/mips.h:811
+-msgid "-pipe is not supported."
+-msgstr ""
+-
+-#: config/mips/mips.h:949
+-msgid "may not use both -mfp64 and -msingle-float"
+-msgstr ""
+-
+-#: config/mips/mips.h:950
+-msgid "may not use both -mfp64 and -m4650"
+-msgstr ""
+-
+-#: config/mips/r3900.h:27 config/mips/r3900.h:41
+-msgid "-mhard-float not supported."
+-msgstr ""
+-
+-#: config/mips/r3900.h:29 config/mips/r3900.h:43
+-msgid "-msingle-float and -msoft-float can not both be specified."
+-msgstr ""
+-
+-#: config/nextstep.h:166 config/nextstep.h:169
+-msgid "-p profiling is no longer supported. Use -pg instead."
+-msgstr ""
+-
+-#: config/vax/vax.h:36 config/vax/vax.h:37
+-msgid "profiling not supported with -mg\n"
+-msgstr ""
+-
+-#: cp/lang-specs.h:34 cp/lang-specs.h:66
+-msgid "GNU C++ does not support -C without using -E"
+-msgstr ""
+-
+-#: cp/lang-specs.h:59 cp/lang-specs.h:81 cp/lang-specs.h:93 gcc.c:627
+-#: gcc.c:653 gcc.c:698
+-msgid "-pg and -fomit-frame-pointer are incompatible"
+-msgstr ""
+-
+-#: gcc.c:599 gcc.c:635 gcc.c:663 gcc.c:680 gcc.c:711
+-msgid "GNU C does not support -C without using -E"
+-msgstr ""
+-
+-#: gcc.c:675
+-msgid "-E required when input is from standard input"
+-msgstr ""
+-
+-#: gcc.c:678
+-msgid "Compilation of header file requested"
+-msgstr ""
+diff -ruNb gcc-2.95.3/gcc/reload1.c gcc-2.95.4/gcc/reload1.c
+--- gcc-2.95.3/gcc/reload1.c 2001-01-25 15:03:21.000000000 +0100
++++ gcc-2.95.4/gcc/reload1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -4278,9 +4278,6 @@
+ spill_reg_order);
+ }
+
+- if (num_eliminable && chain->need_elim)
+- update_eliminable_offsets ();
+-
+ if (n_reloads > 0)
+ {
+ rtx next = NEXT_INSN (insn);
+@@ -4327,6 +4324,10 @@
+ NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED;
+ }
+ }
++
++ if (num_eliminable && chain->need_elim)
++ update_eliminable_offsets ();
++
+ /* Any previously reloaded spilled pseudo reg, stored in this insn,
+ is no longer validly lying around to save a future reload.
+ Note that this does not detect pseudos that were reloaded
+@@ -8071,7 +8072,9 @@
+ }
+ n_occurrences = count_occurrences (PATTERN (insn), reg);
+ if (substed)
+- n_occurrences += count_occurrences (PATTERN (insn), substed);
++ n_occurrences += count_occurrences (PATTERN (insn),
++ eliminate_regs (substed, 0,
++ NULL_RTX));
+ if (n_occurrences > n_inherited)
+ return;
+
+@@ -9967,6 +9970,21 @@
+ }
+ break;
+
++ case USE:
++ /* If this is the USE of a return value, we can't change it. */
++ if (GET_CODE (XEXP (x, 0)) == REG && REG_FUNCTION_VALUE_P (XEXP (x, 0)))
++ {
++ /* Mark the return register as used in an unknown fashion. */
++ rtx reg = XEXP (x, 0);
++ int regno = REGNO (reg);
++ int nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg));
++
++ while (--nregs >= 0)
++ reg_state[regno + nregs].use_index = -1;
++ return;
++ }
++ break;
++
+ case CLOBBER:
+ if (GET_CODE (SET_DEST (x)) == REG)
+ return;
+@@ -9983,12 +10001,23 @@
+ {
+ int regno = REGNO (x);
+ int use_index;
++ int nregs;
+
+ /* Some spurious USEs of pseudo registers might remain.
+ Just ignore them. */
+ if (regno >= FIRST_PSEUDO_REGISTER)
+ return;
+
++ nregs = HARD_REGNO_NREGS (regno, GET_MODE (x));
++
++ /* We can't substitute into multi-hard-reg uses. */
++ if (nregs > 1)
++ {
++ while (--nregs >= 0)
++ reg_state[regno + nregs].use_index = -1;
++ return;
++ }
++
+ /* If this register is already used in some unknown fashion, we
+ can't do anything.
+ If we decrement the index from zero to -1, we can't store more
+diff -ruNb gcc-2.95.3/gcc/rtl.h gcc-2.95.4/gcc/rtl.h
+--- gcc-2.95.3/gcc/rtl.h 2001-01-25 15:03:22.000000000 +0100
++++ gcc-2.95.4/gcc/rtl.h 2017-11-07 22:10:12.000000000 +0100
+@@ -888,6 +888,12 @@
+ /* For a NOTE_INSN_LIVE note, the original basic block number. */
+ #define RANGE_LIVE_ORIG_BLOCK(INSN) (XINT (INSN, 1))
+
++/* Nonzero if we need to distinguish between the return value of this function
++ and the return value of a function called by this function. This helps
++ integrate.c.
++ This is 1 until after the rtl generation pass. */
++extern int rtx_equal_function_value_matters;
++
+ /* Generally useful functions. */
+
+ /* The following functions accept a wide integer argument. Rather than
+diff -ruNb gcc-2.95.3/gcc/testsuite/ChangeLog gcc-2.95.4/gcc/testsuite/ChangeLog
+--- gcc-2.95.3/gcc/testsuite/ChangeLog 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/ChangeLog 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3197 @@
++Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95.2 Released.
++
++Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95.1 Released.
++
++Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95 Released.
++
++Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95 Released.
++
++Sun Jul 25 21:41:37 1999 Jeffrey A Law (law@cygnus.com)
++
++ * README: More listname related changes.
++
++1999-06-05 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/19990502-0.f: Replace with new,
++ shorter, test that still fails after recent changes.
++
++Wed May 19 02:56:18 1999 Raja R Harinath <harinath@cs.umn.edu>
++
++ * gcc.c-torture/compile/990519-1.c: New test.
++
++1999-05-17 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
++
++ * gcc.c-torture/compile/990517-1.c: New test.
++
++ * gcc.c-torture/execute/990326-1.c: Force bitfields to be aligned.
++ (e4, f4): New tests.
++ (main): Call them.
++
++1999-05-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
++
++ * gcc.dg/noreturn-1.c: New test.
++
++Thu May 13 02:02:46 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
++
++ * gcc.c-torture/execute/990513-1.c: New test.
++
++1999-05-10 Richard Henderson <rth@cygnus.com>
++
++ * g++.old-deja/g++.other/null1.C (g): Add overload for long.
++
++1999-05-10 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/erfc.f: Use small single-precision
++ values, to avoid problems on Alphas when not -mieee.
++
++1999-05-08 Craig Burley <craig@jcb-sc.com>
++
++ * gcc.dg/990506-0.c: New test.
++
++1999-05-08 Richard Henderson <rth@cygnus.com>
++
++ * g++.old-deja/g++.benjamin/p12475.C: Use LONG_MAX to find
++ the constant to test. Don't XFAIL 64-bit targets.
++
++ * g++.old-deja/g++.jason/thunk3.C: Don't XFAIL Alpha.
++ * g++.old-deja/g++.law/profile1.C: Likewise.
++
++ * g++.old-deja/g++.other/delete4.C: Define size_t; use it in all
++ operator new instances.
++ * g++.old-deja/g++.other/delete5.C: Likewise.
++
++1999-05-03 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f (main): Declare ABORT as
++ intrinsic.
++
++1999-05-03 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f: Reverse order of two
++ arguments to CTIME_subr, DTIME_subr, ETIME_subr, and TTYNAM_subr.
++
++1999-05-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
++
++ * gcc.dg/compare1.c: New test.
++
++1999-05-02 Joseph S. Myers <jsm28@cam.ac.uk>
++
++ * gcc.dg/cast-qual-1.c, gcc.dg/return-type-1.c, gcc.dg/unused-1.c:
++ New tests.
++
++1999-05-02 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/19990502-1.f: New test.
++
++1999-05-02 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/19990502-0.f: New test.
++
++Sun May 2 01:38:50 1999 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f (main): Declare FTELL as
++ intrinsic.
++
++Sun May 2 01:13:37 1999 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f (main): List libU77
++ intrinsics not currently tested.
++ Add tests for TIME8, CTIME_subr, IARGC, TTYNAM_subr,
++ GETENV, FDATE_subr, DTIME_subr, ETIME_subr, DATE, ITIME,
++ FTELL_subr, MCLOCK, MCLOCK8, and CPU_TIME.
++ Trim blanks off the ends of some printed strings.
++
++Sun May 2 00:06:45 1999 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f (main): Just warn about
++ FSTAT gid disagreement, as it's expected on some systems.
++
++Sat May 1 23:57:18 1999 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f: Generalize sum-checking to
++ use a new function, which allows for some slop.
++ Clean up some commentary.
++ (issum): The new function.
++ (sgladd): Deleted subroutine.
++
++1999-05-01 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f: Modify to be more like
++ libf2c/libU77 version, bringing patches to that version here.
++ Add suitable commentary.
++
++Sun Apr 25 12:28:59 1999 Richard Henderson <rth@cygnus.com>
++
++ * gcc.dg/990424-1.c: New test.
++
++1999-04-24 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/u77-test.f (main): Bug involving
++ LSTAT has been fixed, so turn back on full checking.
++
++1999-04-20 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/19990419-0.f: New test.
++ * g77.f-torture/execute/19990419-1.f: New test.
++
++Sat Apr 17 16:56:48 1999 Richard Henderson <rth@cygnus.com>
++
++ * gcc.dg/uninit-9.c (func): Use __builtin_alloca instead of alloca
++ to avoid the need for a prototype to supress a warning.
++
++Sun Apr 4 04:02:53 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/990404-1.c: New test.
++
++1999-04-03 10:35 -0500 Zack Weinberg <zack@rabi.columbia.edu>
++
++ * gcc.dg/cpp-if1.c: Adjust regexps to accommodate cccp.
++ * gcc.dg/cpp-if3.c: Don't use -pedantic.
++ * gcc.misc-tests/m-un-2.c: Adjust regexps for new format of
++ missing initializer warnings.
++
++Sun Mar 28 00:49:41 1999 Jeffrey A Law (law@cygnus.com)
++
++ * lib/objc-torture.exp: Replace "77" with "Obj-C" in pattern
++ matching strings.
++
++Fri Mar 26 00:50:46 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/990326-1.c: New test from Charles Hannum.
++
++1999-03-26 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/19990325-0.f: New test.
++ * g77.f-torture/execute/19990325-1.f: New test.
++
++Wed Mar 24 22:50:50 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/990324-1.c: New test.
++
++1999-03-13 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/19990313-2.f: New test.
++ * g77.f-torture/execute/19990313-3.f: New test.
++
++1999-03-13 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/19990313-0.f: New test.
++ * g77.f-torture/execute/19990313-1.f: New test.
++
++1999-03-08 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/19981119-0.f: Improve testiness.
++
++1999-03-08 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/19990305-0.f: New test.
++ * g77.f-torture/execute/19981119-0.f: New test.
++
++1999-03-08 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/970625-2.f: call ABORT if final
++ result is not correct, instead of just printing it.
++ Add this checking via newly introduced obfuscation, to
++ trip up buggy front ends.
++
++1999-03-07 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/960317-1.f: Moved from being
++ in execute/. (Somehow I didn't notice "SUBROUTINE...".)
++
++1999-03-06 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/execute/960317-1.f: New (old) test.
++ * g77.f-torture/execute/970625-2.f: Ditto.
++
++Mon Mar 1 23:29:14 1999 Jeffrey A Law (law@cygnus.com)
++
++ * g++.old-deja/g++.law/weak1.C: New test.
++
++1999-02-28 17:59 -0500 Zack Weinberg <zack@rabi.columbia.edu>
++
++ * gcc.c-torture/execute/990119-1.c: Renamed to...
++ * gcc.dg/990119-1.c: this, so it will only be tested once
++ (it's a preprocessor test, it doesn't need to be run at
++ multiple optimization levels).
++
++1999-02-27 13:34 -0500 Zack Weinberg <zack@rabi.columbia.edu>
++
++ * lib/g++.exp: Don't add incdir=$base_dir/../include to
++ ALWAYS_CXXFLAGS.
++
++1999-02-24 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/noncompile/19981216-0.f: Renamed from...
++ * g77.f-torture/compile/19981216-0.f: ...as it is expected
++ to not be compilable by current g77.
++
++1999-02-24 Nick Clifton <nickc@cygnus.com>
++
++ * lib/c-torture.exp: Add -O3 to TORTURE_OPTIONS list.
++
++Mon Feb 22 01:15:08 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/990222-1.c: New test.
++
++1999-02-19 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/19990218-0.f: New test.
++ * g77.f-torture/noncompile/19990218-1.f: New test.
++
++1999-02-18 Craig Burley <craig@jcb-sc.com>
++
++ * g77.f-torture/compile/19981216-0.f: New test.
++
++Sun Feb 14 01:26:29 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/990214-1.c: New test.
++
++Sat Feb 13 00:43:52 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/990213-2.c: New test.
++
++ * gcc.dg/990213-1.c: New test.
++
++Fri Feb 12 11:04:35 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/990106-2.c: Update to work on targets with 16bit
++ ints.
++
++1999-02-11 Nick Clifton <nickc@cygnus.com>
++
++ * lib/gcc.exp (proc gcc_target_compile): Add support for timeout
++ specified by target.
++
++ * lib/chill.exp: Fix typo: doesn'timeout -> doesn't
++
++Thu Feb 11 01:12:12 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/990211-1.c: New test from Nathan SIdwell.
++
++Wed Feb 10 13:08:12 1999 Jonathan Larmour <jlarmour@cygnus.co.uk>
++
++ * gcc.dg/special/ecos.exp: New test driver for new tests with
++ special requirements.
++
++ * gcc.dg/special/alias-1.c: New test.
++ * gcc.dg/special/gcsec-1.c: New test.
++ * gcc.dg/special/weak-1.c: New test.
++ * gcc.dg/special/weak-1a.c: Accompanying file to weak-1.c.
++ * gcc.dg/special/weak-2.c: New test.
++ * gcc.dg/special/weak-2a.c: Accompanying file to weak-2.c.
++ * gcc.dg/special/weak-2b.c: Accompanying file to weak-2.c.
++ * gcc.dg/special/wkali-1.c: New test.
++ * gcc.dg/special/wkali-2.c: New test.
++ * gcc.dg/special/wkali-2a.c: Accompanying file to wkali-2.c.
++ * gcc.dg/special/wkali-2b.c: Accompanying file to wkali-2.c.
++
++Wed Feb 10 12:15:35 1999 Felix Lee <flee@cygnus.com>
++
++ * lib/c-torture.exp (c-torture-compile): Pull out code for
++ analyzing gcc error messages.
++ (c-torture-execute): Likewise. Fix some (harmless) false
++ positives.
++ * lib/gcc.exp (gcc_check_compile): New function.
++
++Mon Feb 8 21:42:57 1999 Richard Henderson <rth@cygnus.com>
++
++ * gcc.c-torture/execute/990208-1.c: New test.
++
++1999-02-07 Jonathan Larmour <jlarmour@cygnus.co.uk>
++
++ * g++.dg/special/ecos.exp: New driver for new tests with special
++ requirements
++
++ * g++.dg/special/conpr-1.C: New test
++ * g++.dg/special/conpr-2.C: New test
++ * g++.dg/special/conpr-2a.C: New test
++ * g++.dg/special/conpr-3.C: New test
++ * g++.dg/special/conpr-3a.C: New test
++ * g++.dg/special/conpr-3b.C: New test
++
++ * lib/g++-dg.exp: New driver file, based on lib/gcc-dg.exp to
++ allow g++ to use the dg driver
++
++ * README: Add comment about g++.dg directory
++
++Sat Feb 6 18:00:38 1999 Jeffrey A Law (law@cygnus.com)
++
++ * README: Update email addresses.
++
++Sat Jan 30 16:22:47 1999 Richard Henderson <rth@cygnus.com>
++
++ * gcc.c-torture/execute/990130-1.c: New test.
++
++Sat Jan 30 11:10:06 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/990130-1.c: New test.
++
++1999-01-27 Felix Lee <flee@cygnus.com>
++
++ * lib/c-torture.exp (c-torture-compile): pull out code for
++ analyzing gcc error messages.
++ (c-torture-execute): ditto, and fix some (harmless) false
++ positives.
++ * lib/gcc.exp (gcc_check_compile): new function.
++
++Sun Jan 17 00:02:33 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/990117-1.c: New test.
++
++ * gcc.c-torture/compile/990117-1.c: New test from Horst von Brand.
++
++ * gcc.c-torture/execute/990117-1.c: New test from HJ Lu.
++
++Fri Jan 15 02:52:00 1999 Jeffrey A Law (law@cygnus.com)
++
++ * g77.f-torture/compile/990115-1.f: New test.
++
++Thu Jan 7 23:39:47 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/990107-1.c: New test
++
++Wed Jan 6 02:21:59 1999 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/990106-2.c: New test.
++
++ * gcc.c-torture/execute/990106-1.c: New test.
++
++Wed Dec 30 23:05:28 1998 Zack Weinberg <zack@rabi.columbia.edu>
++
++ * gcc.c-torture/compile/981223-1.c: New test.
++
++Tue Dec 29 11:33:25 1998 Richard Henderson <rth@cygnus.com>
++
++ * gcc.c-torture/execute/bcp-1.c (bad10): Rename from opt3.
++ (opt3): Rename from opt4 and disable.
++
++1998-12-20 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/ptrmem5.C: New test.
++
++1998-12-15 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/conv5.C: New test.
++
++Fri Dec 11 10:25:57 1998 Jeffrey A Law (law@cygnus.com)
++
++ * g++.old-deja/g++.benjamin/p12475.C: Expect failure on mips64 targets.
++
++Fri Dec 11 01:12:45 1998 Zack Weinberg <zack@rabi.columbia.edu>
++
++ * gcc.c-torture/compile/981211-1.c: New test.
++
++1998-12-09 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * gcc.dg/ultrasp1.c: Empty dg-options, avoid `long long' warnings.
++
++ * g++.old-deja/g++.pt/instantiate6.C: Linker error, not crash.
++
++Tue Dec 8 22:50:04 1998 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
++
++ * gcc.special/930510-1.c: Make C9X safe.
++ * gcc.misc-tests/gcov-1.c Similarly.
++ * gcc.misc-tests/gcov-2.c Similarly.
++
++1998-12-06 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * gcc.dg/ultrasp1.c: New test.
++
++Sun Dec 6 00:40:12 1998 Richard Henderson <rth@cygnus.com>
++
++ * gcc.c-torture/execute/981206.c: New test.
++
++1998-12-06 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.ns/template7.C: New test.
++
++ * g++.old-deja/g++.other/expr1.C: New test.
++
++ * g++.old-deja/g++.eh/tmpl3.C: New test.
++
++ * g++.old-deja/g++.eh/tmpl2.C: New test.
++
++1998-12-04 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/using5.C: Usified using[567].C here.
++ * g++.old-deja/g++.other/using6.C: Removed.
++ * g++.old-deja/g++.other/using7.C: Mark Mitchel removed it.
++
++ * g++.old-deja/g++.pt/spec20.C: Re-insert non-bogus ERROR marks.
++
++1998-12-03 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/overload8.C: New test.
++
++ * g++.old-deja/g++.pt/overload7.C: New test.
++
++ * g++.old-deja/g++.pt/spec20.C: ERROR marks were bogus.
++
++ * lib/old-dejagnu.exp (old-dejagnu): Ignore collect recompiling
++ and relinking messages.
++ * lib/g++.exp (g++_target_compile): Remove .rpo file when
++ compiling with -frepo.
++
++1998-12-01 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/lookup6.C: New test.
++
++1998-11-27 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/explicit76.C: New test.
++
++ * g++.old-deja/g++.pt/friend38.C: New test.
++
++ * g++.old-deja/g++.ns/crash2.C: New test.
++
++ * g++.old-deja/g++.pt/defarg8.C: New test.
++
++ * g++.old-deja/g++.pt/instantiate6.C: New test.
++
++ * g++.old-deja/g++.pt/static6.C: New test.
++
++ * g++.old-deja/g++.pt/decl2.C: New test.
++
++1998-11-26 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/lookup5.C: New test. Not sure the
++ problem is actually related with name lookup, but so what? :-)
++
++ * g++.old-deja/g++.pt/friend37.C: New test.
++
++1998-11-25 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/u77-test.f (main): Avoid testing [f]statb
++ element, which fails on some systems.
++
++ * g77.f-torture/execute/labug1.f: New test.
++
++Sat Nov 21 21:41:05 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980526-1.c: Do nothing if NO_LABEL_VALUES
++ is defined.
++
++1998-11-18 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/compile/981117-1.f: New test.
++
++1998-11-16 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.eh/throw2.C: New test. CV-qualifiers are not
++ properly discarded.
++
++1998-11-07 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
++
++ * README: New file, general information about the testsuite and
++ new description of the various C++ test subdirectories.
++ * README.g++: Eliminate obsolete information, update and move most
++ relevant stuff to README.
++
++Sat Nov 7 02:55:55 1998 Richard Henderson <rth@cygnus.com>
++
++ * gcc.c-torture/compile/981107-1.c: New test.
++
++Mon Nov 2 11:16:03 1998 Doug Evans <devans@canuck.cygnus.com>
++
++ * execute/memcpy-bi.c: New testcase.
++
++1998-10-31 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/sizeof3.C: A similar testcase not involving
++ base classes.
++
++ * g++.old-deja/g++.pt/sizeof2.C: Incorrect specialization of base
++ template is selected.
++
++ * g++.old-deja/g++.ext/arrnew2.C: If new T[n](i) is accepted for
++ classes, it should be accepted for all types.
++
++ * g++.old-deja/g++.eh/sjlj1.C: Test checked sjlj-exception.
++
++ * g++.old-deja/g++.pt/spec24.C: Ensure that template
++ specializations start with template headers.
++
++1998-10-29 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/dcast2.C: Cannot dynamic downcast &x.
++
++ * g++.old-deja/g++.other/init9.C: Test cross initialization of
++ non-POD types.
++
++1998-10-27 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * lib/old-dejagnu.exp (old-dejagnu): Document `Additional sources'.
++
++Thu Oct 22 16:01:44 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
++
++ * compile/981022-1.c, compile/981022-1.x: New test and driver.
++
++Mon Oct 19 14:03:07 1998 Jeffrey A Law (law@cygnus.com)
++
++ * 981019-1.c: New test.
++
++Wed Oct 14 21:11:19 1998 Robert Lipe <robertl@dgii.com>
++
++ * lib/objc-torture.exp (objc-torture-execute): Add -I so we can
++ find objc headers.
++
++1998-10-14 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
++
++ * compile/981001-4.c: Remove use of GCC extension that triggers a
++ compiler bug.
++
++1998-10-13 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * lib/old-dejagnu.exp (old-dejagnu): Support `Additional sources:'.
++
++1998-10-12 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/explicit74.C: New test. Explicit
++ instantiation of template produces incorrect code for delete
++ expression.
++
++ * g++.old-deja/g++.pt/instantiate5.C: New test. `global
++ constructors' name is not unique.
++ * g++.old-deja/g++.pt/instantiate5.cc: Ditto.
++ * g++.old-deja/g++.pt/instantiate5-main.cc: Ditto.
++
++ * g++.old-deja/g++.other/init8.C: New test. Uninitialized
++ automatic array of const is ill-formed.
++
++ * g++.old-deja/g++.pt/ttp53.C: New test. Incorrect substitution
++ of template parameter?
++
++ * g++.old-deja/g++.other/conv3.C: New test. Conversion discards
++ const.
++
++ * g++.old-deja/g++.other/pmf2.C: New test. Invalid
++ pointer-to-member expression.
++
++ * g++.old-deja/g++.other/friend5.C: New test. Bogus friend
++ declaration causes ICE.
++
++1998-10-11 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.ns/main1.C: New test. main() should only be
++ reserved in the global namespace.
++
++ * g++.old-deja/g++.pt/instantiate4.C: New test: -frepo does not
++ generate needed virtual table.
++
++ * lib/old-dejagnu.exp (old-dejagnu): Support `Build then link:'.
++
++1998-10-10 Dariush Eslimi <eslimi@loran.com>
++
++ * g++.old-deja/g++.ext/typeof1.C: New test; typeof based on
++ template-dependent type
++
++1998-10-10 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.brendan/parse3.C: XFAILs, not ERRORs.
++ * g++.old-deja/g++.brendan/parse5.C: XFAILs, not ERRORs.
++ * g++.old-deja/g++.brendan/parse6.C: XFAILs, not ERRORs.
++
++ * g++.old-deja/g++.other/using5.C: New test; using decl from base
++ class should be usable as argument of member function.
++ * g++.old-deja/g++.other/using6.C: New test; using decl from base
++ class should be usable as return type of member function.
++ * g++.old-deja/g++.other/using7.C: New test; using decl from base
++ class should be usable as type of data member.
++
++ * g++.old-deja/g++.ns/extern1.C: Fix XFAIL mark.
++
++Fri Oct 9 19:19:19 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/special/920521-1.c: Fix bogus test.
++
++Thu Oct 8 19:14:05 1998 Nick Clifton <nickc@cygnus.com>
++
++ * gcc.dg/dll-?.c Add thumb to target list.
++ Fix assembler scan patterns to match current assembler output.
++
++1998-10-08 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/expr6.C: New test. operator?: breaks
++ matching of template brackets.
++
++ * g++.old-deja/g++.other/using4.C: New test. Test using
++ declarations of methods from base classes.
++
++ * g++.old-deja/g++.ns/extern1.C: New test. Extern declarations
++ within functions should introduce names into the innermost
++ enclosing namespace.
++
++ * g++.old-deja/g++.other/init7.C: New test. Retry initialization
++ of static locals if first initialization throws.
++
++Wed Oct 7 12:00:20 1998 Jim Wilson <wilson@cygnus.com>
++
++ * gcc.c-torture/compile/981007-1.c: New test for irix6 -O0 core dump.
++
++1998-10-06 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/friend35.C: New test. A template function
++ must be declared before its specializations can be named in friend
++ declarations.
++
++1998-10-05 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/u77-test.f: Add regression test for RAND.
++
++ * g77.f-torture/execute/io1.f: New test.
++
++1998-10-04 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/overload5.C: New test; initialize variable
++ with pointer to template function, for which no argument deduction
++ is possible.
++
++ * g++.old-deja/g++.pt/overload4.C: New test; passing pointer to
++ specialization of template function as argument to template
++ function.
++
++ * g++.old-deja/g++.other/access2.C: New test; Inner class
++ shouldn't have privileged access to Outer's names.
++
++1998-10-03 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/friend34.C: New test; name injection of
++ friend template declared within template class conflicts with
++ nested class of the same name.
++
++ * g++.old-deja/g++.other/badopt1.C: New test; post-increment
++ is ignored.
++
++ * g++.old-deja/g++.other/decl1.C: New test; incorrect parsing of
++ object with direct initializer as function declaration.
++
++ * g++.old-deja/g++.other/decl2.C: New test; duplicate
++ initializers.
++
++ * g++.old-deja/g++.other/null2.C: New test; conditional operator
++ involving const pointer and NULL produces incorrect result.
++
++ * g++.old-deja/g++.other/typename1.C: New test; template-dependent
++ type name without `typename' should be rejected with -pedantic.
++
++Fri Oct 2 21:55:58 1998 Richard Henderson <rth@cygnus.com>
++
++ * g++.old-deja/g++.other/addrof1.C: New test.
++
++Thu Oct 1 19:05:20 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/981001-2.c: New test.
++ * gcc.c-torture/compile/981001-3.c: New test.
++ * gcc.c-torture/compile/981001-4.c: New test.
++
++1998-10-01 Robert Lipe <robertl@dgii.com>
++
++ * lib/objc.exp (objc_target_compile): Add -L during compiles for
++ multilibbed hosts. Idea grafted from g77.exp.
++
++1998-09-30 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/u77-test.f (main): Excise `hostnm' to
++ avoid losing on systems which need -lsocket.
++
++1998-09-28 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/bitfld1.C: Expected failure.
++ * g++.old-deja/g++.other/nested2.C: Ditto.
++ * g++.old-deja/g++.robertl/eb132.C: No longer an expected
++ failure.
++
++1998-09-26 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/bitfld1.C: Built-in operator!= should be
++ preferred over template operator!= for enum bitfields.
++
++1998-09-18 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/nested2.C: Different virtual base classes
++ that happen to have the same base name, but in different scopes,
++ are incorrectly rejected.
++
++1998-09-16 Richard Henderson <rth@cygnus.com>
++
++ * g++.old-deja/g++.brendan/array1.C: Size array via arithmetic based
++ on the native word size instead of an integer literal.
++
++1998-09-15 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/static2.C: Invocation of static data
++ member of type pointer-to-function denoted as non-static member.
++
++ * g++.old-deja/g++.other/typedef5.C: Add some more tests involving
++ checks involving function types and aliases.
++
++1998-09-12 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/typedef5.C: Check whether typedefs can be
++ redefined to the same non-trivial type.
++
++ * g++.old-deja/g++.pt/explicit73.C: Test for proper
++ namespace-qualification of template specializations declared in
++ other namespaces.
++
++ * g++.old-deja/g++.other/friend4.C: Check whether it is possible
++ to declare a subset of the specializations of a template function
++ as friends of specializations of a template class.
++
++ * g++.old-deja/g++.pt/explicit71.C: Make sure specializations of
++ member templates that do not fully specialize the enclosing
++ template class are rejected.
++
++1998-09-11 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/u77-test.f: Fix bad consistency checks.
++
++1998-09-08 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/u77-test.f (main): New file, somewhat
++ altered from libf2c/libU77 version.
++
++1998-09-06 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/io0.f: Test formatted direct i/o too.
++
++1998-09-04 Reid M. Pinchback <reidmp@MIT.EDU>, Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.pt/explicit72.C: Ensure that char and
++ (un)signed char are different types for template specialization
++ purposes.
++
++Thu Sep 3 00:40:32 1998 Ovidiu Predescu <ovidiu@aracnet.com>
++
++ * lib/{objc.exp,objc-torture.exp}: New files for objc testing harness.
++ * objc: ObjC testsuite.
++
++Mon Aug 31 15:19:32 1998 Nick Clifton <nickc@cygnus.com>
++
++ * lib/c-torture.exp: Add support for
++ torture_eval_before_compile and torture_eval_before_execute
++ variables.
++
++Sun Aug 30 17:38:20 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/980626-1.c: Delete this test. We've declared the warning
++ this test triggers valid.
++
++Thu Aug 27 23:59:18 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/980827-1.c: New test.
++
++Wed Aug 26 16:25:38 1998 Nick Clifton <nickc@cygnus.com>
++
++ * lib/c-torture.exp: Add support for
++ torture_eval_before_compile and torture_eval_before_execute
++ variables.
++
++Tue Aug 25 19:42:13 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/980825-1.c: New test.
++
++Mon Aug 24 16:38:52 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/930326-1.x: Fix typo.
++
++1998-08-23 Mark Mitchell <mark@markmitchell.com>
++
++ * lib/old-dejagnu.exp: Make it possible to XFAIL a test that
++ causes an ICE.
++
++Fri Aug 21 23:59:18 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/unsorted/memtst.c: Reduce size of array when
++ STACK_SIZE is defined.
++ * gcc.c-torture/unsorted/stuct.c: Similarly.
++
++ * gcc.c-torture/compile/980821-1.c: New test.
++
++Fri Aug 21 03:14:04 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980526-2.c: Disable for targets with 16bit ints.
++
++1998-08-19 Mark Mitchell <mark@markmitchell.com>
++
++ * lib/old-dejagnu.exp (old-dejagnu): Remove sig6/sig11 handling
++ code.
++
++1998-08-09 Mark Mitchell <mark@markmitchell.com>
++
++ * lib/old-dejagnu.exp: Revise handling of `Internal compiler
++ error'.
++
++Tue Aug 18 19:19:50 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/*.x: Some updates for the h8300 targets.
++
++Sun Aug 16 01:29:19 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/980816-1.c: New test.
++
++ * gcc.dg/980816-1.c: New test.
++
++1998-08-01 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/compile/980729-0.f: New test.
++
++1998-07-30 Ken Raeburn <raeburn@cygnus.com>
++
++ * gcc.c-torture/special/eeprof-1.c: New test, for
++ -finstrument-functions.
++ * gcc.c-torture/special/special.exp: Run it.
++
++Wed Jul 29 00:17:18 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/980729-1.c: New test.
++
++1998-07-26 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/noncompile/980615-0.f: New test.
++
++Sun Jul 26 01:15:56 1998 H.J. Lu (hjl@gnu.org)
++
++ * gcc.dg/980312-1.c: Do link instead of compile.
++ * gcc.dg/980313-1.c: Likewise.
++
++Sun Jul 26 01:05:02 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/980726-1.c: New test.
++
++1998-07-25 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/io0.f: New test.
++
++Fri Jul 17 14:19:32 1998 Nick Clifton <nickc@cygnus.com>
++
++ * gcc.dg/980626-1.c: Expect failures for all toolchains until
++ c-decl.c:grokdeclarator can handle mode attributes.
++
++Thu Jul 16 21:42:50 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980716-1.c: New test.
++
++Mon Jul 13 22:26:37 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/920715-1.x: No longer expected to fail on
++ the mn10200.
++ * gcc.c-torture/execute/strct-varg-1.x: New file. Expect failure on
++ the mn10200.
++ * gcc.c-torture/execute/va-arg-3.x: Similarly.
++ * gcc.c-torture/compile/930326-1.x: Similarly.
++
++1998-07-13 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/auto0.f, g77.f-torture/execute/auto1.f:
++ New test from Craig.
++
++1998-07-12 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/noncompile/980616-0.f: New test.
++
++ * g77.f-torture/execute/970816-3.f: New test from Craig.
++
++Fri Jul 10 23:43:33 1998 Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
++
++ * g++.other/singleton.C: Return error value instead of taking
++ SIGSEGV.
++
++Fri Jul 10 10:02:03 1998 Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++
++ * g++.other/singleton.C: New test. Warning is under dispute.
++ Runtime crash is not.
++
++Thu Jul 9 23:07:45 1998 Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
++
++ * g++.ns/{alias2.C, alias5.C, koenig4.C, lookup3.C ns13.C,
++ ns14.C, ns15.C, template3.C, undef1.C, using4.C, using5.C,
++ using6.C, using7.C}: New namespace tests.
++
++Thu Jul 9 22:44:49 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/partspec1.C: Test matching of partial
++ specialization with typedef'ed names used as array indexes.
++
++Thu Jul 9 00:38:51 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980709-1.c: New test.
++
++ * gcc.dg/980709-1.c: New test.
++
++Tue Jul 7 13:41:27 1998 Richard Henderson <rth@cygnus.com>
++
++ * gcc.c-torture/execute/bcp-1.c: New test.
++
++Tue Jul 7 11:49:04 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980707-1.c: New test.
++
++Mon Jul 6 18:20:27 1998 Kamil Iskra <iskra@student.uci.agh.edu.pl>
++
++ * gcc.c-torture/compile/980706-1.c: New test.
++
++1998-07-01 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/980701-0.f,
++ g77.f-torture/execute/980701-1.f: New test from Craig.
++
++Wed Jul 1 00:52:51 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/compile/980701-1.c: New test.
++
++ * gcc.c-torture/execute/980701-1.c: New test.
++
++Tue Jun 30 11:51:42 1998 Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-ka
++rlsruhe.de>
++
++ * g++.old-deja/g++.robertl/eb132.C: New test.
++ * g++.old-deja/g++.robertl/eb133.C: Likewise.
++
++1998-06-29 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/980628-7.f,
++ g77.f-torture/execute/980628-8.f,
++ g77.f-torture/execute/980628-9.f,
++ g77.f-torture/execute/980628-10.f: New tests from Craig.
++
++ * g77.f-torture/execute/980628-3.f: Remove mail headers.
++
++Sun Jun 28 12:49:02 1998 Jeffrey A Law (law@cygnus.com)
++
++ * g77.f-torture/execute/980628-4.f: New test from Craig.
++ * g77.f-torture/execute/980628-5.f: Likewise.
++ * g77.f-torture/execute/980628-2.f: Likewise.
++ * g77.f-torture/execute/980628-0.f: Likewise.
++ * g77.f-torture/execute/980628-1.f: Likewise.
++ * g77.f-torture/execute/980628-3.f: Likewise.
++ * g77.f-torture/execute/980628-6.f: Likewise.
++
++Sun Jun 28 00:37:26 1998 Jeffrey A Law (law@cygnus.com)
++
++ * lib/g77.exp (default_g77_version): Tweak to make it work in a build
++ directory when nothing has been installed yet.
++
++Sat Jun 27 23:23:18 1998 Carlo Wood <carlo@runaway.xs4all.nl>
++
++ * gcc.c-torture/special/special.exp: Handle newer versions of
++ dejagnu.
++
++Fri Jun 26 17:57:40 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/980626-1.c: New test.
++
++Fri Jun 19 23:26:12 1998 Bruno Haible <haible@ilog.fr>
++
++ * gcc.misc-tests/m-un-2.c: New test.
++ * g++.old-deja/g++.other/warn01.c: Likewise.
++
++Fri Jun 19 14:06:36 1998 Robert Lipe <robertl@dgii.com>
++
++ * gcc.dg/980414-1.c: Move comments outside of ASM to improve
++ compatibility with assmblers with a different comment character.
++ Eliminate use of GAS-specific extensions.
++
++Fri Jun 19 02:05:14 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/ieee/980619-1.c: New test.
++
++Fri Jun 19 00:58:11 1998 Robert Lipe <robertl@dgii.com>
++
++ *lib/g77.exp: Replace search for libf2c.a with search for newly
++ renamed libg2c.a
++
++Wed Jun 17 18:53:12 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980617-1.c: New test.
++
++Fri Jun 12 01:08:49 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980612-1.c: New test.
++
++Mon Jun 8 02:13:42 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/980523-1.c: Only test on ppc-linux.
++ * gcc.dg/980526-1.c, gcc.dg/switch-1.c: Likewise.
++
++ * gcc.c-torture/execute/980608-1.c: New test.
++
++Thu Jun 4 01:39:24 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980604-1.c: New test.
++
++Tue Jun 2 20:51:43 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/980602-1.c: New test.
++ * gcc.c-torture/execute/980602-2.c: Likewise.
++
++1998-06-02 Dave Love <d.love@dl.ac.uk>
++
++ * 970125-0.f: Fix per JCB. Add commentary.
++
++Fri May 29 01:10:12 1998 Peter Leven <leven@lpr.e-technik.tu-muenchen.de>
++
++ * gcc.c-torture/execute/ieee/fp-cmp-1.c: Set up signal handler
++ earlier.
++
++Thu May 28 00:17:42 1998 Catherine Moore <clm@cygnus.com>
++
++ * gcc.c-torture/execute/980526-3.c: New test.
++
++1998-05-27 Manfred Hollstein <manfred@s-direktnet.de>
++
++ * g++.old-deja/g++.jason/thunk2.C: Setup this test to be expected to
++ fail on m68k-motorola-sysv and m88k-motorola-sysv3.
++ * g++.old-deja/g++.jason/thunk3.C: Add m68k-motorola-sysv and
++ m88k-motorola-sysv3 to XFAIL.
++
++Tue May 26 23:58:03 1998 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
++
++ * gcc.dg/980526-1.c: New test.
++ * gcc.c-torture/execute/980526-2.c: New test.
++
++Tue May 26 23:40:40 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/980523-1.c: Change "ppc" to "powerpc".
++
++ * gcc.c-torture/execute/980526-1.c: New test.
++
++1998-05-26 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/alpha2.f: Add runtime test.
++
++1998-05-24 Jason Merrill <jason@yorick.cygnus.com>
++
++ * g++.old-deja/old-deja.exp: Strip leading directories.
++
++ * lib/old-dejagnu.exp: All tests fail if we got an internal compiler
++ error for the line. Don't run multiple tests for the same line.
++
++Sat May 23 23:27:10 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/980523-1.c: New test.
++
++1998-05-23 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/compile/970915-0.f: New test.
++
++1998-05-23 Jason Merrill <jason@yorick.cygnus.com>
++
++ * lib/old-dejagnu.exp: Ignore C++ "instantiated from" mesages.
++
++Thu May 21 23:23:21 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/980520-1.c: New test.
++
++Wed May 20 14:37:15 1998 Manfred Hollstein <manfred@s-direktnet.de>
++
++ * gcc.dg/980502-1.c: Fix return type.
++
++Wed May 20 11:29:48 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/{980502-1.c, clobbers.c}: New tests.
++ * gcc.c-torture/compile/{980504-1.c, 980506-1.c}: Likewise.
++ * gcc.c-torture/compile/{980506-2.c, 980611-1.c}: Likewise.
++ * gcc.c-torture/execute/{980505-1.c, 980505-2.c, 980506-1.c}: Likewise.
++ * gcc.c-torture/execute/{980506-2.c, 980506-3.c}: Likewise.
++
++1998-05-20 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/980520-1.f: New test.
++
++1998-05-15 Dave Love <d.love@dl.ac.uk>
++
++ * lib/mike-g77.exp: New file.
++
++ * g77.f-torture/noncompile/noncompile.exp,
++ g77.f-torture/noncompile/check0.f: New files.
++
++1998-05-14 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/short.f, g77.f-torture/execute/le.f,
++ g77.f-torture/execute/exp.f, g77.f-torture/execute/erfc.f,
++ g77.f-torture/execute/dnrm2.f, g77.f-torture/execute/dcomplex.f,
++ g77.f-torture/execute/cpp.F, g77.f-torture/execute/complex_1.f,
++ g77.f-torture/execute/claus.f, g77.f-torture/execute/cabs.f: Call
++ abort where appropriate.
++
++Tue May 5 19:20:13 1998 Michael Meissner <meissner@cygnus.com>
++
++ * lib/c-torture.exp (TORTURE_OPTIONS): Add -Os to options.
++ * lib/f-torture.exp (TORTURE_OPTIONS): Ditto.
++
++1998-04-29 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/compile/980419-1.f: Removed since doesn't compile.
++
++1998-04-27 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/compile/980427-0.f: New test.
++
++1998-04-24 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/compile/980424-0.f: New test.
++
++1998-04-19 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/compile/980419-2.f (main): New test.
++ * g77.f-torture/compile/970125-0.f: New test.
++ * g77.f-torture/compile/980419-1.f: New test.
++
++Wed Mar 18 16:22:22 1998 Jim Wilson <wilson@cygnus.com>
++
++ * gcc.dg/980313-1.c: New test for fp conditional move on PPro.
++ * gcc.dg/980312-1.c: Fix typo in -march command.
++
++Mon Mar 16 20:01:30 1998 H.J. Lu (hjl@gnu.org)
++
++ * gcc.dg/980312-1.c: New test for fp conditional move on PPro.
++
++Wed Mar 11 13:08:48 1998 Robert Lipe <robertl@dgii.com>
++
++ * g77.f-torture/execute/980310-5.f: Deleted. Craig Burley and
++ Dave Love agree the Fortran source is bogus.
++
++Wed Mar 11 00:03:49 1998 Robert Lipe <robertl@dgii.com>
++
++ * g77.f-torture/compile/980310-1.f, g77.f-torture/compile/980310-2.f
++ g77.f-torture/compile/980310-3.f, g77.f-torture/compile/980310-4.f
++ g77.f-torture/compile/980310-6.f, g77.f-torture/compile/980310-7.f
++ g77.f-torture/compile/980310-8.f: New tests from egcs-bugs archives.
++ * g77.f-torture/execute/980310-5.f: New test from egcs-bugs archives.
++
++Tue Mar 10 00:31:51 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
++
++ * g++.old-deja/g++.other/friend1.C: New test.
++
++1998-02-18 Dave Love <d.love@dl.ac.uk>
++
++ * g77.f-torture/execute/dnrm2.f (dnrm2): Avoid uninitialized (and
++ possibly uninitialized) variables and declare dnrm2.
++
++Fri Feb 13 00:36:07 1998 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.dg/ifelse-1.c: New test.
++
++Mon Feb 9 02:08:47 1998 H.J. Lu (hjl@gnu.org)
++
++ * lib/g77.exp (g77_target_compile): Fix multilibs for libf2c.
++
++ * lib/old-dejagnu.exp (old-dejagnu): Added the
++ "execution test - XFAIL *-*-*" handling in the spirit of
++ "excess errors test -". Changed the "execution test fails"
++ handling to be like "excess errors test fails".
++ * Update various tests accordingly.
++
++Sun Jan 18 01:33:59 1998 Jeffrey A Law (law@cygnus.com)
++
++ * lib/c-torture.exp: Look for .x files instead of .cexp files.
++ * lib/f-torture.exp: Similarly.
++ * gcc.c-torture: Rename all .cexp files to .x files.
++
++Tue Nov 25 16:18:51 1997 Kate Hedstrom (kate@ahab.rutgers.edu)
++
++ * lib/f-torture.exp: Improve error and loop detection.
++
++Fri Sep 26 10:50:53 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/c-torture.exp(c-torture-execute): Fix typo.
++
++ * lib/old-dejagnu.exp(old-dejagnu): Use a name derived from the
++ testcase as the executable name. Keep the executable around if
++ the test fails.
++
++Fri Sep 19 17:19:53 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/c-torture.exp (TORTURE_OPTIONS): Removed unnecessary
++ changes. Only test one -g option, and move it to the end of the
++ list of options to test.
++
++Fri Sep 19 17:58:00 1997 Michael Meissner <meissner@cygnus.com>
++
++ * lib/c-torture.exp (TORTURE_OPTIONS): Check for the environment
++ variable GCC_TORTURE_OPTIONS to supply default switches separated
++ by colons. If no environment variable, run tests with -O0 -g, -O1
++ -g, and -O2 -g as well.
++
++Wed Sep 17 10:12:26 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/plumhall.exp: Don't set PHSRC in this file. Add a few
++ explanatory comments. Fix indentation.
++
++Mon Sep 15 00:36:53 1997 Jeffrey A Law (law@cygnus.com)
++
++ * lib/g++.exp (g++_init): Look for xgcc in $basedir too.
++
++Thu Sep 11 13:54:47 1997 Jeffrey A Law (law@cygnus.com)
++
++ * g++.old-deja/g++.brendan/scope4.C: No longer expected to fail.
++ * g++.old-deja/g++.mike/p7325.C: Likewise.
++ * g++.old-deja/g++.mike/eh51.C: No longer expected to fail on the PA.
++
++Thu Sep 11 10:00:03 1997 Alexandre Oliva (oliva@dcc.unicamp.br)
++
++ * g++.old-deja/g++.brendan/crash20.C: Rework to avoid libg++.
++ * g++.old-deja/g++.brendan/crash30.C: Likewise.
++ * g++.old-deja/g++.brendan/crash39.C: Likewise.
++ * g++.old-deja/g++.law/operators4.C: Likewise.
++
++Thu Sep 11 09:53:40 1997 Joe Buck (jbuck@synopsys.com)
++
++ * g++.old-deja/g++.mike/p658.C: eliminate <bool.h> use.
++ * g++.old-deja/g++.mike/p784.C: Ditto.
++ * g++.old-deja/g++.mike/p785.C: Ditto.
++
++Fri Sep 5 00:21:42 1997 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/cbrt.c: Tweak to work on more targets.
++
++Wed Sep 3 17:15:00 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/c-torture.exp(c-torture-execute): If the previous and the
++ current executables being tested are identical, we don't need to
++ run the executable again. Try to make the executable names
++ unique. Add an optional argument for passing additional compiler
++ flags.
++
++Tue Sep 2 16:34:31 1997 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/gcc-dg.exp (gcc-dg-test): Fix typos setting compile_type.
++
++Thu Jul 31 12:17:24 1997 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/920501-9.c: Fix to work on targets with
++ 32bit or larger longs.
++
++ * gcc.c-torture/execute/961017-2.c: Fix to work on targets which
++ have either a 32bit long or 32bit int.
++
++Wed Jul 9 15:15:40 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * gcc.prms/5403.c: Allow CRLFs to occur at the start of the output
++ too.
++
++Mon Jun 16 15:27:06 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/g++.exp(g++_init): Use g++_include_flags instead of making
++ up the includes ourselves.
++
++Wed Jun 11 17:33:21 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/plumhall.exp: Remove random include, and add a few
++ verbose messages for debugging.
++
++Fri Jun 6 14:23:24 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/g++.exp: Use g++_link_flags from libgloss.exp, instead
++ of trying to do it ourselves.
++
++Wed Jun 4 18:43:55 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * gcc.prms/5403.c: Made regexp a bit less strict.
++
++Tue Jun 3 15:12:39 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/mike-gcc.exp: Don't use global exec_output anymore. Output
++ is returned from remote_load instead.
++ * lib/plumhall.exp: Ditto.
++ * lib/mike-g++.exp: Ditto.
++ * lib/old-dejagnu.exp: Ditto.
++ * lib/c-torture.exp: Ditto.
++
++Fri May 30 23:15:15 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/g++.exp: Use build_wrapper procedure.
++ * lib/gcc.exp: Ditto.
++
++Tue May 20 15:23:27 1997 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/*.c: Include stdlib.h instead of using
++ an old-style decl for malloc. Fixes tests to work when
++ sizeof (int) != sizeof (size_t).
++
++Thu May 15 14:10:39 1997 Mike Meissner <meissner@cygnus.com>
++
++ * lib/gcc.exp (gcc_target_compile): If gcc,no_varargs, define
++ NO_VARARGS when compiling.
++
++Thu May 1 14:49:19 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/plumhall.exp(ph_includes): New procedure.
++ (ph_make): Use it.
++ (ph_compiler): Ditto.
++
++ * lib/g++.exp: Rename test-glue.c to testglue.c.
++ * lib/gcc.exp: Ditto.
++
++Thu Apr 10 14:50:26 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/g++.exp(g++init): Don't try to be smart, always run g++_init
++ to completion when it's called.
++
++Thu Mar 20 09:50:32 1997 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/plumhall.exp (ph_make): Comment out errorCode=NONE test
++ for object files.
++ (ph_summary): Mark skipped testcases as untested, not unresolved.
++
++ * lib/plumhall.exp (ph_make): If unresolved because of bad
++ errorCode, record errorCode in log file.
++ (*): Replace send_log/verbose with verbose -log.
++
++Thu Mar 13 16:09:28 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/plumhall.exp: Use incr_count.
++
++Wed Mar 12 10:01:33 1997 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture: Update to c-torture-1.45.
++
++Sun Feb 23 18:12:04 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/gcc.exp(gcc_init): Add args parameter (which will contain
++ the name of the expect testcase file).
++
++ * lib/g++.exp(g++_init): Ditto.
++
++Thu Feb 20 13:53:05 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/g++.exp(g++_exit): $gluefile lives on the build, not
++ the host.
++
++ * lib/gcc.exp(gcc_exit): New procedure.
++
++Wed Feb 19 15:16:16 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * g++.old-deja/g++.rfg/*: Added "Build don't link" and ERROR
++ specs where appropriate.
++
++ * g++.old-deja/g++.arm/*: Added additional ERROR checks
++ because of new "candidates are" messages, and removed a few
++
++ * Converted all non-old-style g++ testcases to old-style, and
++ moved into g++.old-deja.
++
++Fri Feb 14 11:46:46 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/old-dejagnu.exp(old-dejagnu): Add various "skip if"
++ options.
++
++ * lib/gcc.exp(gcc_init): Don't set gluefile unless the compile
++ succeeded.
++
++ * lib/g++.exp(g++_init): Don't unset gluefile unless it exists.
++
++Thu Feb 13 17:30:46 1997 Michael Meissner <meissner@cygnus.com>
++
++ * lib/gcc.exp (gcc_target_compile): Add support for defining
++ NO_TRAMPOLINES and NO_LABEL_VALUES if the baseboard file indicates
++ the machine doesn't have those features.
++
++Tue Feb 11 12:57:11 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * g++.law/operators4.exp: Don't use LIBS.
++
++Sat Feb 8 14:45:55 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * g++.law/virtual1.exp: Don't use CXX_FLAGS.
++
++ * lib/mike-g++.exp: Don't set the compiler to be tested here.
++ * lib/g++.exp: Set it here instead. Also, allow use of the
++ --tool_exec and --tool_opt options. Change CXX to
++ GXX_UNDER_TEST.
++
++ * g++.old-deja/old-deja.exp: Change CXX to GXX_UNDER_TEST.
++
++ * lib/gcc.exp: Allow use of --tool_exec and --tool_opt.
++
++Fri Feb 7 12:55:45 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/old-dejagnu.exp: Use prune_warnings instead of
++ prune_system_crud.
++ * lib/mike-g++.exp: Ditto.
++ * lib/gcc.exp: Ditto.
++ * lib/g++.exp: Ditto.
++
++ * lib/g++.exp: Include both libstdc++ and libstdc++/stl.
++
++Fri Feb 7 10:41:53 1997 Jeffrey A Law (law@cygnus.com)
++
++ * 941014-2.c: Include stdlib.h
++ * 960327-1.c: Include stdio.h
++ * dbra.c, index-1.c: Don't assume ints are 32bits.
++
++Tue Feb 4 12:51:09 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/gcc.exp: Add gcc,stack_size target feature.
++
++ * lib/g++.exp(g++_target_compile): Add the include and link
++ paths here, not in two other places. And, it's $options, not
++ options.
++
++ * lib/mike-g++.exp(postbase): Remove the code that determines
++ the correct include and link paths.
++ * g++.old-deja/old-deja.exp: Ditto.
++
++Mon Feb 3 19:00:07 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/g++.exp(g++_init): target_compile no longer returns the
++ filename of the result.
++
++Sun Feb 2 14:42:34 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * gcc.misc-tests/gcov.exp: Add -nocomplain to the
++ call to glob.
++
++ * gcc.c-torture/special/special.exp: Change call to
++ gcc_target_compile to include the object file.
++
++Sun Feb 2 17:11:50 1997 Ian Lance Taylor <ian@cygnus.com>
++
++ * gcc.c-torture/special/special.exp: Correct misspelling in last
++ change.
++
++Sat Feb 1 12:34:23 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/plumhall.exp(ph_summary): Log the entire output of the
++ executable. Return -1 if there were any failures, 0 otherwise.
++ (ph_execute): Return -1 if there were any failures, 0 otherwise.
++ (ph_make): Clean up objects and executables that were built
++ if the tests succeeded.
++
++Thu Jan 30 13:45:56 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * g++.old-deja/old-deja.exp: Add -L and -I flags so we include
++ libraries and includes in the build tree as appropriate.
++
++Wed Jan 29 17:19:34 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/c-torture.exp: Instead of looking for the global variable
++ NO_LONG_LONG, check to see if that's a feature of the target.
++
++Wed Jan 29 00:36:25 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * config/default.exp: Minimize. Delete the remainer of the files in
++ config; this functionality is now in devo/dejagnu/config.
++
++ g++.*/*: Pass any additional flags used to compile to postbase;
++ delete CXXFLAGS.
++
++ gcc.c-torture/*: Remove calls to gcc_init and gcc_finish; this
++ is now done by runtest.exp. Use gcc_target_compile instead of
++ compile.
++
++ lib/c-torture.exp: Use gcc_target_compile instead of compile.
++ Remove references to CFLAGS. Use remote_file instead of
++ calling rm -f.
++ (c-torture): Take a list of arguments to use to compile this
++ testcase.
++
++ lib/g++.exp: Simplify. Use target_compile instead of compile.
++ lib/gcc-dg.exp: Ditto.
++ lib/gcc.exp: Ditto.
++ lib/mike-{gcc,g++}.exp: Ditto.
++ lib/old-dejagnu.exp: Ditto.
++ lib/plumhall.exp: Ditto.
++
++Wed Jan 8 14:43:07 1997 Jim Wilson <wilson@cygnus.com>
++
++ * lib/plumhall.exp (ph_make): Use CFLAGS and ANSICFLAGS when linking.
++ (ph_linker): Likewise.
++
++Wed Nov 13 16:04:19 1996 Joern Rennecke <amylaar@cygnus.com>
++
++ * gcc.c-torture/execute/{loop-2e.c,loop-2f.c}: Only use
++ MAP_ANON / MAP_ANONYMOUS if defined;
++ else try to map from /dev/zero .
++
++Tue Nov 12 23:30:12 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/{loop-2e.c,loop-2f.c}: If MAP_ANON
++ isn't defined, then define it to MAP_ANONYMOUS.
++
++Tue Nov 12 11:57:49 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture: Update to c-torture-1.42 release.
++
++Mon Nov 11 12:45:31 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture: Update to c-torture-1.41 release.
++
++Sun Oct 27 18:56:18 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/enum-1.c: New test. Will be in next
++ c-torture release.
++
++Thu Aug 15 11:09:36 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/gcc.exp (gcc_init): Always append the target_info to CFLAGS
++ and LDFLAGS. Fix second case to append the target_info ldflags
++ onto LDFLAGS, not CFLAGS.
++ * lib/g++.exp (g++_init): Add target_info stuff.
++ * lib/old-dejagnu.exp (old-dejagnu-init): Likewise. Add inclusion
++ of libgloss and newlib flags for !native.
++
++ * config/proelf.exp: Load remote.exp and do `push_target hppro'.
++ (GDB): Fix relative path to go up another dir for finding gdb.
++
++Thu Aug 8 17:03:27 1996 Rob Savoye <rob@chinadoll.cygnus.com>
++
++ * lib/gcc.exp(gcc_init): Set CFLAGS and LDFLAGS to their new
++ versions in the target_info array, if they don't exist.
++
++Fri Aug 2 15:39:03 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * config/vx.exp (${tool}_load): Fix syntax of `$shell_id < 0'.
++
++Mon Jul 8 15:45:58 1996 Jim Wilson <wilson@cygnus.com>
++
++ * lib/g++.exp: Change all uses of $base_dir/ to $base_dir/../.
++ * lib/gcc.exp, lib/old-dejagnu.exp: Likewise.
++
++Mon Jul 1 15:53:00 1996 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/old-dejagnu.exp: Don't remove the output file before we've
++ actually tested it. Don't append pwd to the path of the executable
++ we're testing.
++
++Sun Jun 30 14:37:50 1996 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/g++.exp (default_g++_start): Don't pass LDFLAGS, LIBS if -c.
++
++Wed Jun 26 14:15:55 1996 Bob Manson <manson@charmed.cygnus.com>
++
++ * lib/old-dejagnu.exp (old-dejagnu): Add $tmpdir to specify a
++ temporary directory for compiler files, and set it to a default
++ value of /tmp. Set $output as the name of the output file from
++ compiling the testcase. Add a -o option to $cflags_var so the
++ compiler writes the final output file as $output. Set $executable
++ to $output.
++
++ * lib/mike-g++.exp (postbase): Add $tmpdir to specify a temporary
++ directory for compiler files, and set it to /tmp if it doesn't
++ already have a value. Set $output_file to the name of the output
++ file from compiling the testcase. Add a -o option to CXXFLAGS so
++ the compiler writes the final output file as $output. Use $output
++ as the executable to be tested.
++
++Mon Jun 24 17:12:16 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/g++.exp: Also add -Wl,-rpath,... for linux.
++
++Sat Jun 8 15:12:24 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture/execute/pending-1.c: New test. Still
++ pending in Tege's queue.
++
++Wed Apr 24 18:13:45 1996 Jim Wilson <wilson@chestnut.cygnus.com>
++
++ * lib/plumhall.exp (ph_summary): Add arguments name and exec_status.
++ Add variables local_failcnt and local_unresolvedcnt. Call gcc_fail
++ if there were failures. Call unresolved if there were unresolved
++ testcases. Call gcc_fail if program did not run to completion.
++ (ph_make): Pass additional argument name to ph_execute.
++ (ph_execute): Add new argument. Pass additional arguments to
++ ph_summary. Call gcc_fail is there is no execution output.
++
++Wed Apr 24 13:39:23 1996 Jeffrey A Law (law@cygnus.com)
++
++ * lib/plumhall.exp (proc_summary): Output relavent summary
++ lines into the log so specific failures in plumhall can be
++ investigated.
++
++Wed Apr 10 13:23:45 1996 Jeffrey A Law (law@cygnus.com)
++
++ * lib/c-torture.exp: Provide a default value for $NO_LONG_LONG.
++ (c-torture-execute): Don't try to execute tests which use
++ "long long" types if $NO_LONG_LONG is nonzero.
++
++Mon Apr 8 08:52:29 1996 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.c-torture/execute/ieee/ieee.exp: Run c-torture-execute,
++ not c-torture.
++
++ * gcc.ieee: Move from here.
++ * gcc.c-torture/execute/ieee: To here.
++
++Tue Mar 26 23:41:18 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture: Update to c-torture-1.41 release.
++
++Fri Mar 22 15:49:24 1996 Jeffrey A Law (law@cygnus.com)
++
++ * lib/c-torture.exp (c-torture-execute): Remove "$executable",
++ not "$output".
++
++Thu Mar 7 12:37:08 1996 Doug Evans <dje@charmed.cygnus.com>
++
++ * lib/gcc.exp (default_gcc_start): Don't pass $LDFLAGS $LIBS if
++ -c present.
++
++Sat Mar 2 22:36:37 1996 Jeffrey A Law (law@cygnus.com)
++
++ * config/proelf.exp: Handle connecting to a simulator.
++
++Wed Jan 31 00:58:15 1996 Jeffrey A Law (law@cygnus.com)
++
++ * config/proelf.exp: New file. Enough framework that we can
++ run c-torture tests on the proelf targets (or any other target
++ that gdb can connect to for that matter).
++
++Mon Jan 29 08:57:46 1996 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.c-torture/special/special.exp: Delete libs arg to dg-runtest.
++ * gcc.ph/testing/limits/limits.exp: Likewise. Don't pass $CFLAGS.
++
++ * lib/plumhall.exp (ph_execute): Always call ph_summary if
++ exec_output exists.
++
++Sun Jan 28 11:28:43 1996 Doug Evans <dje@charmed.cygnus.com>
++
++ * config/sim.exp (SIM_TIME_LIMIT): New user settable variable.
++ (${tool}_load): Use 240 seconds if SIM_TIME_LIMIT not set.
++
++ * config/*.exp: Update FSF address. Change result of ${tool}_load
++ to pass/fail/unresolved/unsupported/untested. Caller must now
++ call unresolved/unsupported/untested.
++ * lib/*.exp: Update FSF address. Update to handle new results of
++ ${tool}_load.
++ * lib/chill.exp (verbose): Delete.
++
++Sat Jan 27 12:28:07 1996 Doug Evans <dje@charmed.cygnus.com>
++
++ * lib/gcc.exp (default_gcc_start): Change order of args to
++ $LDFLAGS $CFLAGS $LIBS.
++ * lib/gcc-dg.exp (gcc-dg-test): Arguments have changed, update.
++ Save/set/restore CFLAGS. Pass single arg to gcc_start.
++ * gcc.dg/dg.exp: Delete libs arg in call to dg-runtest.
++ (CC,CFLAGS,LIBS): Delete references. Don't pass $CFLAGS to dg-runtest.
++ * gcc.misc-tests/dg-test.exp: Likewise.
++ * gcc.misc-tests/msgs.exp: Likewise.
++ * gcc.prms/prms.exp: Likewise.
++ * gcc.misc-tests/gcov.exp: Delete libs arg in call to dg-runtest.
++ (CFLAGS,LIBS): Delete references. Don't pass $CFLAGS to dg-runtest.
++
++ * lib/dg.exp: Deleted, moved to dejagnu/lib.
++
++Wed Jan 24 18:37:00 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * g++.old-deja/old-deja.exp: Add passing of $mathlib to old-dejagnu.
++
++ * g++.old-deja/old-deja.exp: Move setting of runshlib from here...
++ * lib/old-dejagnu.exp (old-dejagnu-init): ...to here.
++
++ * lib/g++.exp (g++_init): Take out use of -rpath for the sun4, not
++ necessary.
++
++Sat Jan 20 17:22:08 1996 Brendan Kehoe <brendan@cygnus.com>
++
++ * g++.old-deja/old-deja.exp: Move setting of runshlib out of the
++ global for loop; add use of $mathlib.
++ * lib/old-dejagnu.exp (old-dejagnu-init): Put the runshlib
++ settings here; set mathlib for anything but VxWorks.
++
++Mon Jan 22 16:31:57 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture: Update to c-torture-1.40 release.
++
++Wed Jan 3 00:54:33 1996 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.ph/testing/limits/limits.exp: Load ${tool}-dg.exp, not
++ dg.exp.
++
++Sun Dec 3 16:17:42 1995 Jeffrey A. Law <law@sethra.cygnus.com>
++
++ * lib/c-torture.exp (c-torture-execute): Declare "output" as
++ global.
++
++Fri Nov 17 20:01:19 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/g++.exp (LIBS): Define if not already.
++ * lib/gcc-dg.exp (gcc-dg-test): Set executable file as a.out.
++ (gcc-dg-prune): Call prune_gcc_output.
++ * lib/gcc.exp (prune_gcc_output): New proc.
++ * gcc.c-torture/special (921210-1.c): Call prune_system_crud and
++ prune_gcc_output.
++
++Thu Nov 16 09:15:40 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/c-torture.exp (c-torture-compile): Fix calls to `unsupported'.
++ (c-torture-execute): Likewise. Rename `name' to `testcase'.
++
++Wed Nov 15 23:04:36 1995 Jeffrey A Law (law@cygnus.com)
++
++ * gcc.c-torture: Update to c-torture-1.39 release.
++
++Sat Nov 4 12:52:05 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/c-torture.exp (c-torture-execute): Don't return if one option
++ fails, try others as well.
++
++Thu Nov 2 09:28:35 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/c-torture.exp (c-torture-execute): This proc's result is `void'.
++ If compilation fails, mark execute tests as `untested'.
++ If test is marked as unsupported, don't mark compilation and
++ execute tests as failed.
++
++Wed Oct 25 20:57:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/g++.exp (g++_init): Don't link in libg++, and look to
++ libstdc++ for whether or not we want to be doing shared
++ libraries. Delete link_curses since we don't need it anymore.
++ * lib/mike-g++.exp (postbase): Don't link in libg++.
++ * g++.old-deja/old-deja.exp: Likewise.
++
++Mon Oct 23 13:05:11 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/g++.exp (CXX): Default to run `c++' instead of `g++'.
++
++Tue Oct 17 15:24:47 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/g++.exp (g++_init): Also check for libg++.sl for the hppa.
++ For that, add `-Wl,-a,shared_archive'.
++ * g++.old-deja/old-deja.exp: Likewise.
++
++Tue Oct 17 13:09:06 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/c-torture.exp (c-torture-execute): Ensure CFLAGS restored.
++
++Mon Oct 16 23:13:32 1995 Brendan Kehoe <brendan@cygnus.com>
++
++ * lib/mike-g++.exp (postbase): Pay attention to the status of
++ g++_load.
++
++Mon Oct 16 19:28:32 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * g++.old-deja/old-deja.exp: Add $LIBS at the end of the args.
++
++Mon Oct 16 13:48:58 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/gcc.exp (default_gcc_start): No longer need to log program
++ being executed or its output, execute_anywhere does that now.
++ * lib/g++.exp (default_g++_version): Call execute_anywhere.
++ (default_g++_start): Likewise. Delete calls to verbose/send_log.
++
++Thu Oct 12 10:34:58 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * g++.old-deja/old-deja.exp: Updated the shared libg++ tests to be
++ the same as those in lib/g++.exp.
++
++Tue Oct 10 13:47:27 1995 Jeff Law (law@hurl.cygnus.com)
++
++ * gcc.c-torture: Update to c-torture-1.38 release.
++ * gcc.ieee: Related changes.
++
++Fri Oct 6 12:39:17 1995 Rob Savoye <rob@darkstar.cygnus.com>
++
++ * mike-gcc.exp, mike-g++.exp: Use "execute_anywhere" rather than
++ "exec". Minor reformatting changes.
++
++ * config/rom68k.exp (${tool}_load): Make it work in a canadian
++ cross. This means all "exec" calls now work on a remote host as
++ well.
++ * lib/c-torture.exp (c-torture-compile): Make work for a canadian
++ cross. Filter out the extra "\r\n" stuff that expect puts in.
++ (c-torture-execute): Filter out the bogus warnings like
++ c-torture-compile does. Add support for canadian cross.
++ * lib/gcc.exp (default_gcc_version, default_gcc_start)
++ Use execute_anywhere rather than calling exec directly. Now it
++ works for canadian cross testing.
++
++Thu Oct 5 10:06:45 1995 Brendan Kehoe <brendan@rtl.cygnus.com>
++
++ * lib/g++.exp: Add -nocomplain flag to glob. Use catch to put the
++ results into a variable, and check that rather than using file exists.
++
++Wed Oct 4 16:31:02 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/g++.exp: Use glob to see libg++.so.2.7.0, since sun4 doesn't
++ create a libg++.so. For sunos4.1.*, also add -ltermcap.
++
++Tue Sep 26 10:15:14 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * g++.old-deja/old-deja.exp: Create and pass runshlib and
++ lib_curses if there's a shared libg++ in the build tree.
++
++Fri Sep 22 10:47:24 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/mike-{gcc,g++}.exp (postbase): Restore CFLAGS, CXX_FLAGS, LIBS
++ if not supported target.
++
++Fri Sep 22 09:22:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/g++.exp (g++_init): Move empty setting of runshlib and
++ link_curses up to always happen, not just for native builds.
++
++Thu Sep 21 10:23:32 1995 Jeff Law (law@snake.cs.utah.edu)
++
++ * gcc.c-torture: Update to c-torture-1.36 release.
++ * gcc.failure: Related changes.
++
++Wed Sep 20 10:56:26 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/plumhall.exp (PHSRC, PHDST): Allow config files to override.
++
++Tue Sep 19 17:26:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/g++.exp (g++_init): Put the shared and math lib stuff in here.
++ * lib/mike-g++.exp (postbase): Not in here. Still reference
++ runshlib, link_curses, and mathlib for link and run.
++
++ * lib/mike-g++.exp (postbase): If we've built a libg++.so, then
++ pass the runtime shared library options for Solaris, OSF/1, and
++ Irix5, and link with -lcurses to avoid unresolved references.
++
++Wed Sep 13 15:28:10 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/gcc.exp (gcc_init): Return if gcc_initialized is 1, so we
++ only run once.
++
++Wed Sep 13 10:51:52 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/c-torture.exp (c-torture-compile): Don't alter CFLAGS.
++
++Mon Sep 11 11:02:03 1995 Jeff Law (law@snake.cs.utah.edu)
++
++ * gcc.c-torture: Update to c-torture-1.35 release. Note we
++ do not have a framework for the "compat" tests yet.
++
++Sat Sep 9 16:15:20 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/mike-g++.exp (postbase): New local variable `mathlib',
++ set to null if we're testing vxworks5.1. Use that instead of
++ `-lm' in the setting of LIBS for link and run.
++
++Fri Sep 8 13:53:38 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * config/rom68k.exp (${tool}_load): Major changes to make it
++ work. Verified that it does in fact return the stuff in
++ exec_output properly. Catch any Emul or any TRAP other than 0.
++
++Thu Sep 7 23:04:06 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * lib/mike-g++.exp (prebase): Call g++_init at the end to set
++ LDFLAGS properly for targets that need stuff from libgloss.
++ * lib/g++.exp (g++_init): Return if gpp_initialized is 1, so we
++ only run once.
++ (gpp_initialized): New variable.
++
++Wed Sep 6 21:56:13 1995 Rob Savoye <rob@darkstar.cygnus.com>
++
++ * config/rom68k.exp: Load libgloss.exp.
++ * lib/gcc.exp (gcc_init): get proper flags for newlib and libgloss
++ so we can produce a fully linked binary.
++ * lib/g++.exp (g++_init): get proper flags for newlib and libgloss
++ so we can produce a fully linked binary.
++
++Sun Sep 3 13:25:26 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/plumhall.exp (ph_section): Watch for expected failures.
++ Add missing `else'.
++
++ * lib/c-torture.exp (c-torture-execute): Look for .cexp files to
++ run the testcase.
++ (c-torture): Likewise.
++
++Mon Aug 28 11:23:38 1995 Doug Evans <dje@cygnus.com>
++
++ * gcc.dg/dg.exp (scan-assembler, scan-assembler-not): New procs.
++
++ * lib/mike-g++.exp (mike_cleanup): New proc.
++ (prebase): New globals compiler_result, not_compiler_result,
++ target_regexp.
++ (postbase): Likewise. Call mike_cleanup. Pass "--" to regexp to
++ allow leading "-" in pattern. Watch for unsupported tests.
++ If $compiler_result is set, pattern match assembler code,
++ and ditto for $not_compiler_result.
++ * lib/mike-gcc.exp: Likewise.
++
++ * lib/plumhall.exp (ph_execute): Only call ph_summary if
++ execution "succeeded".
++
++Mon Aug 14 14:03:53 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * config/win32.exp: New file.
++ * lib/c-torture.exp (c-torture-execute): Handle $exe_ext.
++
++Fri Aug 4 15:39:54 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/gcc-dg.exp (gcc-dg-prune): Mark testcases that fill ram as
++ unsupported.
++ * lib/mike-{gcc,g++}.exp (postbase): Likewise.
++ * lib/{c-torture.exp,old-dejagnu.exp}: Likewise.
++ * lib/{gcc,g++}.exp (${tool}_check_untested_p): New proc.
++
++ * lib/mike-g++.exp (postbase): Delete alpha-*-* checking of
++ "... without exceptions was ...". That is now handled by
++ prune_system_crud.
++ * lib/old-dejagnu.exp (old-dejagnu): Likewise.
++
++Tue Aug 1 11:09:33 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.misc-tests/{acker1.c,dhry.c,dhry.h,matrix1.c,optbench.c,
++ sieve.c,sort2.c}: New files.
++ * gcc.misc-tests/{acker1.exp,dhry.exp,matrix1.exp,optbench.exp,
++ sieve.exp,sort2.exp}: Drivers for them.
++
++ * lib/mike-gcc.exp (program_output): New user settable variable.
++ (postbase): Call prune_system_crud. Also prune extraneous compiler
++ messages.
++ * lib/mike-g++.exp (program_output): New user settable variable.
++
++ * gcc.misc-tests/mg.exp (compiler_output): Handle multiple lines.
++
++ * config/sh.exp: Deleted (use sim.exp instead).
++
++Fri Jul 28 11:33:46 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * config/vx.exp: Declare CHECKTASK as global.
++ * config/vxworks29k.exp: Reduce to only set CHECKTASK, and load vx.exp.
++ * lib/mike-g++.exp: Load [pwd]/a.out, not `./a.out'.
++ * lib/old-dejagnu.exp: Load [pwd]/$executable.
++
++Wed Jul 26 19:45:39 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
++
++ * config/vxworks29k.exp: New file, for the a29k-vxworks5.1
++ target. Like vx.exp, only includes `vx29k.exp' instead of
++ `vxworks.exp'.
++
++Sun Jul 23 17:38:52 1995 Ian Lance Taylor <ian@cygnus.com>
++
++ * config/sim.exp: Increase time limit from 120 seconds to 240.
++
++Thu Jul 6 11:07:38 1995 Jeffrey A. Law <law@rtl.cygnus.com>
++
++ * gcc.c-torture/execute/950628-1.c: New test.
++
++Sat Jun 10 18:51:41 1995 Jeff Law (law@snake.cs.utah.edu)
++
++ * gcc.c-torture: Update with changes/additions from
++ c-torture-1.34.
++
++Mon Jun 5 17:58:07 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.prms/prms.exp: Pass LDFLAGS to dg-test.
++
++Sun Jun 4 05:13:57 1995 Jeff Law (law@snake.cs.utah.edu)
++
++ * gcc.c-torture/compile/funcptr-1.c: Test case for 7107.
++
++Thu Jun 1 00:06:19 1995 Jeff Law (law@snake.cs.utah.edu)
++
++ * gcc.c-torture/compile/950512-1.c: New test.
++ * gcc.c-torture/execute/strct-pack-4.c, strct-pack-5.c}: Likewise.
++ * gcc.dg/struct-ret-1.c: Likewise.
++
++Wed May 31 14:25:13 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.c-torture/execute/{920410-1.c,921113-1.c,921208-2.c,
++ 930106-1.c,memcpy-1.c}: Use STACK_SIZE if defined.
++
++Tue May 30 11:19:54 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.c-torture/special/920411-1.c: Deleted.
++ * gcc.c-torture/special/special.exp: Delete 920411-1.c.
++
++Mon May 22 16:55:11 1995 Doug Evans <dje@chestnut.cygnus.com>
++
++ * config/sim.exp (${tool}_load): Hack in call to bash to get a
++ cpu limit.
++
++Fri May 12 18:57:54 1995 Torbjorn Granlund <tege@rtl.cygnus.com>
++
++ * gcc.c-torture/execute/{950511-1.c,950512-1.c}: New tests.
++
++Thu May 4 14:23:54 1995 Torbjorn Granlund <tege@adder.cygnus.com>
++
++ From kenner;
++ * gcc.c-torture/execute/va-arg-2.c (f[0-9], f1[0-5]): Verify format
++ is the proper length.
++ * va-arg-3.c: Likewise.
++
++Sun Apr 30 16:02:59 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/dg.exp: Moved to dejagnu/lib. Copy kept here (for awhile).
++ * lib/gcc-dg.exp: New file, gcc interface to dg.exp.
++
++ * lib/gcc.exp (default_gcc_start): Delete old cruft. Delete result.
++ * lib/g++.exp (default_g++_start): Delete old cruft.
++
++Tue Apr 25 17:20:18 1995 Torbjorn Granlund <tege@cygnus.com>
++
++ * gcc.c-torture/execute/memcpy-1.c: Decrease stack requirements from
++ (2 * (1 << 18)) to (2 * (1 << 17)).
++
++ * gcc.c-torture/execute/arith-rand.c: Avoid -0x80000000/-1.
++
++Thu Apr 20 12:21:13 1995 J.T. Conklin <jtc@rtl.cygnus.com>
++
++ * config/rom68k.exp: Renamed from config/idp.exp
++
++Tue Apr 18 13:33:26 1995 Torbjorn Granlund <tege@rtl.cygnus.com>
++
++ * c-torture/compile/921109-2.c
++
++Tue Apr 18 10:45:12 1995 Mike Stump <mrs@cygnus.com>
++
++ * lib/old-dejagnu.exp: We expect Execution test failure if we expected
++ excess errors.
++
++Sat Apr 15 11:16:58 1995 Doug Evans <dje@chestnut.cygnus.com>
++
++ * lib/gcc.exp (default_gcc_start): Handle leading "-" in compiler
++ output.
++ * lib/g++.exp (default_g++_start): Likewise.
++
++Wed Mar 29 16:34:03 1995 Torbjorn Granlund <tege@adder.cygnus.com>
++
++ * gcc.c-torture/compile/950329-1.c: New test.
++
++Tue Mar 28 16:10:33 1995 J.T. Conklin <jtc@rtl.cygnus.com>
++
++ * config/bug.exp (${tool}_load): Updated to use new remote_open
++ and remote_close procs.
++ * config/idp.exp: New file.
++
++Wed Mar 22 15:01:58 1995 Torbjorn Granlund <tege@rtl.cygnus.com>
++
++ * gcc.c-torture/execute/950322-1.c: New test.
++
++Tue Mar 21 21:24:49 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * config/vx.exp (${tool}_load): Clean up testing of return code from
++ vxworks_ld and vxworks_spawn.
++
++Tue Mar 21 17:01:42 1995 Doug Evans <dje@deneb.cygnus.com>
++
++ * lib/c-torture.exp (c-torture-execute): Pass same text to pass/fail.
++
++Mon Mar 13 14:49:42 1995 Mike Stump <mrs@cygnus.com>
++
++ * lib/old-deja.exp: Add `excess errors test - ' error, now one
++ can mark excess errors on a machine by machine basis. Note, the
++ default is to not expect any excess errors, even when excess
++ errors test - is given, so you will want to put an XFAIL ... on
++ these lines. For example, // excess errors test - XFAIL hppa*-*-*
++ mips-*-* alpha-*-* m68k-*-* is how to expect excess errors on
++ those 4 machines, but no others.
++
++Fri Mar 10 12:33:04 1995 J.T. Conklin <jtc@rtl.cygnus.com>
++
++ * gcc.c-torture/execute/execute.exp (c-torture-execute): from here.
++ * lib/c-torture.exp: to here.
++
++Fri Mar 10 10:38:15 1995 Torbjorn Granlund <tege@adder.cygnus.com>
++
++ * gcc.c-torture/execute/950221-1.c: New test.
++ * gcc.c-torture/execute/struct-ret-1.c: New test.
++ * gcc.c-torture/compile/950221-1.c: New test.
++
++ * gcc.c-torture/execute/941101-1.c (f): Fix typo, == was !=.
++
++Fri Mar 3 16:28:35 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.c-torture/execute/arith-1.c (main): Return 0.
++ * gcc.c-torture/execute/arith-rand.c (main): Return 0.
++
++Wed Mar 1 02:08:29 1995 Gerald Baumgartner (gb@lorenzo.cs.purdue.edu)
++
++ * g++.gb: New directory of tests, derived from my signature and
++ class scoping tests.
++
++ * g++.gb/{sig01.C, sig02.C, sig03.C, sig04.C}: New tests.
++ * g++.gb/{sig05.C, sig06.C, sig07.C, sig08.C}: Likewise.
++ * g++.gb/{sig09.C, sig10.C, sig11.C, sig12.C}: Likewise.
++ * g++.gb/{sig13.C, sig14.C, sig15.C, sig16.C}: Likewise.
++ * g++.gb/{sig17.C, sig18.C, sig19.C, sig20.C}: Likewise.
++ * g++.gb/{sig21.C, sig22.C, sig23.C, sig24.C}: Likewise.
++ * g++.gb/sig25.C: Likewise.
++
++ * g++.gb/{sig01.exp, sig02.exp, sig03.exp, sig04.exp}: Run them.
++ * g++.gb/{sig05.exp, sig06.exp, sig07.exp, sig08.exp}: Likewise.
++ * g++.gb/{sig09.exp, sig10.exp, sig11.exp, sig12.exp}: Likewise.
++ * g++.gb/{sig13.exp, sig14.exp, sig15.exp, sig16.exp}: Likewise.
++ * g++.gb/{sig17.exp, sig18.exp, sig19.exp, sig20.exp}: Likewise.
++ * g++.gb/{sig21.exp, sig22.exp, sig23.exp, sig24.exp}: Likewise.
++ * g++.gb/sig25.exp: Likewise.
++
++ * g++.gb/{scope01.C, scope02.C, scope03.C, scope04.C}: New tests.
++ * g++.gb/{scope05.C, scope06.C, scope07.C, scope08.C}: Likewise.
++ * g++.gb/{scope09.C, scope10.C, scope11.C, scope12.C}: Likewise.
++ * g++.gb/scope13.C: Likewise, this test still fails.
++
++ * g++.gb/{scope01.exp, scope02.exp, scope03.exp, scope04.exp}: Run 'em.
++ * g++.gb/{scope05.exp, scope06.exp, scope07.exp, scope08.exp}: Ditto.
++ * g++.gb/{scope09.exp, scope10.exp, scope11.exp, scope12.exp}: Ditto.
++ * g++.gb/scope13.exp: Ditto.
++
++ * g++.gb/README: New file, explains what these tests are about.
++
++Tue Feb 28 10:37:52 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/dg.exp (dg-do): Support `preprocess'.
++ (dg-test): Likewise.
++
++Mon Feb 13 15:18:10 1995 J.T. Conklin <jtc@rtl.cygnus.com>
++
++ * config/udi.exp: change "continue -expect" to "exp_continue".
++
++Sat Feb 11 00:25:20 1995 Torbjorn Granlund (tege@tiny.cygnus.com)
++
++ * gcc.c-torture/execute/{921025-1.c, 930525-1.c}:
++ Delete redundant tests.
++
++ * gcc.c-torture/execute/{941014-1.c, 941014-2.c}: New tests.
++ * gcc.c-torture/execute/{941015-1.c, 941021-1.c}: New tests.
++ * gcc.c-torture/execute/{941025-1.c, 941031-1.c}: New tests.
++ * gcc.c-torture/execute/{941101-1.c, 941110-1.c}: New tests.
++ * gcc.c-torture/execute/{941202-1.c, arith-1.c}: New tests.
++ * gcc.c-torture/execute/{arith-rand.c, complex-3.c}: New tests.
++ * gcc.c-torture/execute/{inst-check.c, loop-1.c}: New tests.
++ * gcc.c-torture/execute/{memcpy-1.c, va-arg-2.c}: New tests.
++
++ * gcc.c-torture/execute/920302-1.c: Use void * instead of long for
++ storing label pointers.
++ * gcc.c-torture/execute/921019-1.c: Likewise.
++ * gcc.c-torture/execute/920501-8.c: Add prototype for sprintf.
++ * gcc.c-torture/execute/930513-1.c: Provide full declaration for
++ parameter fp.
++ * gcc.c-torture/execute/va-arg-1.c (main): Add L suffix to all
++ constants.
++
++ * gcc.c-torture/compile/{920501-14.c, 931127-1.c}:
++ Delete obsolete tests.
++
++ * gcc.c-torture/compile/{940409-1.c, 940718-1.c}: New tests.
++ * gcc.c-torture/compile/{941014-1.c, 941014-2.c}: New tests.
++ * gcc.c-torture/compile/{941014-3.c, 941014-4.c}: New tests.
++ * gcc.c-torture/compile/{941019-1.c, 941111-1.c}: New tests.
++ * gcc.c-torture/compile/{941113-1.c, 950122-1.c}: New tests.
++ * gcc.c-torture/compile/950124-1.c: New test.
++
++ * gcc.c-torture/compile/920902-1.c: Delete 2:nd parameter.
++
++Wed Feb 8 15:30:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
++
++ * lib/mike-g++.exp: Add -lm to LIBS.
++
++Tue Feb 7 17:09:50 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/c-torture.exp (c-torture): Allow relative pathname in $srcdir.
++
++Mon Jan 30 14:33:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
++
++ * lib/mike-g++.exp: Add -lstdc++ to LIBS.
++
++Thu Jan 12 16:41:34 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.misc-tests/dg-test.exp: Only run if $DG_TEST=yes.
++
++Mon Jan 2 11:50:10 1995 Jeff Law (law@snake.cs.utah.edu)
++
++ * g++.law/{arg9.C, arg10.C, arg11.C, arm15.C, arm16.C}: New tests.
++ * g++.law/{bad-error3.C, bad-error4.C, bad-error5.C}: Likewise.
++ * g++.law/{bad-error6.C, bad-error7.C}: Likewise.
++ * g++.law/{bit-fields3.C, casts2.C, casts3.C}: Likewise.
++ * g++.law/{enum8.C, enum9.C, friend5.C}: Likewise.
++ * g++.law/{nest2.C, nest3.C, nest4.C, nest5.C}: Likewise.
++ * g++.law/{nest6.C, next7.C, operators30.C}: Likewise.
++ * g++.law/{operators31.C, operators32.C,
++ * g++.law/{operators33.C, operators34.C}: Likewise.
++ * g++.law/{pic1.C, refs2.C}: Likewise.
++ * g++.law/{refs3.C, refs4.C, static-mem3.C}: Likewise.
++ * g++.law/{static-mem4.C, static-mem5.C, typeck4.C}: Likewise.
++ * g++.law/{vbase1.C, visibility27.C, visibility28.C}: Likewise.
++ * g++.law/{vtable2.exp, vtable3.exp}: Likewise.
++
++ * g++.law/{arg9.exp, arg10.exp, arg11.exp, arm15.exp}: Run them.
++ * g++.law/{arm16.exp, bad-error3.exp, bad-error4.exp: Likewise.
++ * g++.law/{bad-error5.exp, bad-error6.exp}: Likewise.
++ * g++.law/{bad-error7.exp, bit-fields3.exp}: Likewise.
++ * g++.law/{casts2.exp, casts3.exp, enum8.exp}: Likewise.
++ * g++.law/{enum9.exp, friend5.exp}: Likewise.
++ * g++.law/{nest3.exp, nest4.exp}: Likewise.
++ * g++.law/{nest5.exp, nest6.exp, nest7.exp}: Likewise.
++ * g++.law/{operators30.exp, operators31.exp}: Likewise.
++ * g++.law/{operators32.exp, operators33.exp}: Likewise.
++ * g++.law/{operators34.exp}: Likewise.
++ * g++.law/{pic1.exp, refs2.exp, refs3.exp refs4.exp}: Likewise.
++ * g++.law/{static-mem3.exp, static-mem4.exp}: Likewise.
++ * g++.law/{static-mem5.exp, typeck4.exp, vbase1.exp}: Likewise.
++ * g++.law/{visibility27.exp, visibility28.exp}: Likewise.
++ * g++.law/{vtable2.exp, vtable3.exp}: Likewise.
++
++ * g++.law/{union4.exp, visibility17.exp}: Fix expected output.
++ No longer expected to fail.
++ * g++.law/missed-error3.C: Tweak for recent bool changes.
++
++Sun Dec 4 20:54:33 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * config/emb-unix: Deleted.
++ * config/unix.exp (${tool}_load): Use new proc rsh_exec to perform
++ remote execution. Do final link on remote host if REMOTE_LINK is set.
++
++Thu Dec 1 08:43:05 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/dg.exp (dg-test): Fix typo in last patch.
++
++Wed Nov 30 13:25:32 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/dg.exp (dg-test): Fix pattern that searches for expected output
++ (handles multiple occurrences).
++
++Thu Nov 24 19:48:38 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.c-torture/*/*.exp: Pass full pathname to c-torture.
++ * gcc.c-torture/execute/execute.exp (c-torture-execute): Remove
++ $srcdir from pathname in pass/fail messages (but ensure $subdir *is*
++ printed).
++ * lib/c-torture.exp (c-torture-compile): Likewise.
++ (c-torture): Prepend full path if missing.
++ * lib/gcc.exp (gcc_pass): Pass entire pathname of testcase.
++ (gcc_fail): Likewise.
++ * lib/dg.exp (dg-test): Don't delete $subdir from pathname in messages.
++
++Wed Nov 23 13:56:00 1994 J.T. Conklin <jtc@rtl.cygnus.com>
++
++ * lib/netware.exp: Only attach to NetWare i386 systems.
++
++Wed Nov 16 11:27:00 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/dg.exp (dg-test): Don't print $subdir (or above) in pass/fail
++ messages. Add test name to "output pattern match" pass/fail message.
++
++Sat Nov 12 22:11:52 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.dg: New testsuite.
++ * gcc.dg/dg.exp: New file.
++
++ * gcc.misc-tests/{misc.exp,inst-check.c,test-ior.c,test-consts.c,
++ test-switch.c}: Deleted.
++
++ * gcc.misc-tests/msgs.exp: New testcase driver.
++
++Wed Nov 9 14:23:09 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.c-torture/execute/execute.exp (c-torture_execute): New proc.
++ Watch for illegal return values from ${tool}_load.
++ * config/unix.exp (${tool}_load): Fix pass/fail detection for
++ cross targets. Coerce return value >0 to 1.
++
++Tue Nov 8 14:10:33 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * config/unix.exp (${tool}_load): Call program rsh, not proc.
++
++ * config/emb-unix.exp: New file.
++
++ * config/sim.exp: Error if variable $SIM not defined.
++ (${tool}_load): Mark test as "untested" if simulator missing.
++
++ * config/unix.exp: Load remote.exp to get rcp_download.
++ * lib/c-torture.exp: Use different option lists for testcases with
++ and without loops.
++ * gcc.c-torture/execute/execute.exp: Likewise.
++
++Wed Nov 2 14:47:58 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * config/*.exp: Clarify return code from ${tool}_load.
++ Call `unresolved' or `untested' instead of `warning' or `perror'
++ (sometimes you still want to call both though).
++ Add comment that `shell_id' is local to each file.
++ * config/udi.exp (timeout): Set to 30.
++ Don't print warning if connection fails, $connectmode has already
++ printed an error.
++ (${tool}_load): Move verbose messages to level 2.
++ Rework pattern for "Process started" message.
++ Pass `shell_id' to ${connectmode}_download.
++ Retry twice upon timeout. Make resetting of target more robust.
++ (${tool}_exit): Remove /tmp/soc_name. if connected ok (bug in mondfe).
++ Pass `shell_id' to exit_$connectmode.
++ Only call exit_$connectmode if connected.
++ * config/unix.exp (${tool}_load): Check return codes better.
++ * config/vrtx.exp (${tool}_load): Likewise.
++ * config/vx.exp (${tool}_load): Likewise.
++ Delete unneeded global's.
++ * lib/dg.exp (dg-test): Update to reflect clarified return codes
++ from ${tool}_load.
++ (dg-stat): Delete.
++ (dg-init): Delete recording of pass/fail counts.
++ * lib/old-dejagnu.exp (old-dejagnu): Likewise.
++ (old-dejagnu-init): Likewise.
++ (old-dejagnu-stat): Delete contents, empty proc now.
++ * lib/c-torture.exp (TORTURE_OPTIONS): New global.
++ (c-torture): Delete references to lcnt, lpass, lfail.
++ Get option list from TORTURE_OPTIONS.
++ Delete -funroll[-all]-loops if no loops.
++ * lib/g++.exp (g++_init): Delete references to lcnt, lpass, lfail.
++ (g++_stat): Delete contents (empty proc now).
++ * lib/gcc.exp (gcc_init): Delete references to pass/fail counts.
++ (gcc_finish): Likewise.
++ (gcc_stat): Deleted.
++ * lib/mike-gcc.exp (postbase): Delete references to lcnt, lpass, lfail.
++ * gcc.*/*.exp: Delete calls to gcc_stat, dg-stat.
++ * gcc.c-torture/execute/execute.exp: Likewise.
++ Split tests into two parts: compile, execute.
++ Get option list from TORTURE_OPTIONS. Delete -funroll[-all]-loops if
++ no loops. Update to reflect clarified return codes from ${tool}_load.
++
++Fri Oct 21 23:10:16 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/old-dejagnu.exp (process-option): Append ".*" to pattern
++ to grep for.
++ (old-dejagnu): Likewise (where necessary).
++
++Fri Oct 14 17:54:58 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * gcc.misc-tests/gcov.exp: New file, for gcov testing.
++
++ * lib/dg.exp (dg-process-target): Fix processing of selector.
++ Add comment regarding use of `error'.
++
++ * lib/gcc.exp (prune_system_crud): Define if missing.
++ * lib/g++.exp (prune_system_crud): Likewise.
++
++ * lib/{c-torture.exp,dg.exp,mike-g++.exp,old-dejagnu.exp}:
++ Call prune_system_crud.
++ * lib/dg.exp (dg-runtest): New proc.
++ Use perror instead of send_user for tcl errors in testcase.
++ Don't return any value, it's never used.
++ Don't clobber previous definition of `unknown'.
++ Print tcl errors in `dg-final'.
++
++Wed Oct 12 13:05:37 1994 Doug Evans <dje@canuck.cygnus.com>
++
++ * lib/dg.exp (dg-process-target): Improve syntax error messages.
++ (dg-test): Don't print errorInfo, it contains stack backtrace.
++
++Mon Sep 26 12:18:53 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/g++.exp (runtest_file_p): Define if missing.
++
++Sat Sep 24 15:29:23 1994 Doug Evans (dje@cygnus.com)
++
++ * lib/mike-g++.exp: Comment out loading of g++.exp.
++ * lib/g++.exp: Update copyright. Test for existence of $CXX at start.
++ (default_g++_version): Always print something.
++ (default_g++_start): Comment out call to `which'.
++ (g++_start, g++_load): Deleted (must be defined in config file).
++ * lib/gcc.exp: Test for existence of $CC at start.
++ Delete check for tmpdir (done in gcc_init).
++ (default_gcc_version): Always print something.
++ (default_gcc_start): Comment out call to `which'.
++ * config/*.exp: Major cleanup - make cross targets work at least a
++ little better for g++ (by not being "--tool gcc" specific).
++ Rename gcc_xxx to ${tool}_xxx.
++ * g++.old-deja/old-deja.exp: utils.exp is loaded by runtest.exp.
++ * lib/old-dejagnu.exp: ${tool}.exp is loaded by config file.
++
++Thu Sep 22 11:39:17 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/c-torture.exp (c-torture-compile): Rework compiler
++ message processing.
++
++ * gcc.c-torture/compile/initbug1.{c,exp}: Deleted, not part of
++ c-torture.
++
++Wed Sep 21 09:49:43 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * gcc.wendy/wendy.dis: Renamed from wendy.exp to disable the testsuite.
++
++ * lib/dg.exp (dg-process-target): Support { target native }.
++
++Tue Sep 20 17:16:55 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/dg.exp (dg-test): Clean up some comments. Delete code that
++ looked for "... program xxx got fatal signal".
++ Correct regsub munging of `comp_output'.
++ Ignore compiler messages "path prefix not used" and "linker input
++ file unused".
++
++Wed Sep 14 11:44:40 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/gcc.exp (runtest_file_p): Define if missing.
++ * gcc.prms/template.c: Example to work from.
++
++Tue Sep 13 10:30:48 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/gcc.exp (gcc_finish): Delete code to update `testcnt'.
++ * lib/dg.exp (dg-test): Call unsupported testcases as such.
++
++ * gcc.prms/{3324.c,3565.c}: Moved from compile/940713-[12].c.
++ * gcc.prms/1883.c: Moved from compile/940714-1.c.
++ * gcc.prms/{5012.c,4453.c,4723.c,2541.c}: Moved from
++ execute/{940712-1.c,940712-2.c,940713-1.c,940714-1,c}.
++
++ * lib/dg.exp (user option docs): Clean up docs on target/xfail option.
++ (dg-process-target): No longer a varargs proc.
++ Return S/N for target, P/F for xfail. All callers changed.
++ (user option procs): More argument checking.
++ (dg-do): `dg-do-what' now contains 3 elements {what flag P/F}.
++ (dg-output): `dg-output-text' now contains 2 elements {P/F text}.
++ (dg-test): Skip test if not running on selected target in `dg-do'.
++ Update handling of `dg-do-what', `dg-output-text'.
++ Separate execution pass/fail from output pattern match pass/fail.
++ Delete BUILD/XBUILD support (duplicate of LOSE/XLOSE).
++
++Mon Sep 12 13:47:35 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
++
++ * gcc.c-torture/special/special.exp: Don't expect failure for mips
++ target for 920510-1.c.
++
++Mon Sep 12 12:44:39 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/gcc.exp (gcc_init): Move initialized message to verbose level 3.
++ Clean up comment regarding use of passcnt, etc.
++ (gcc_stat): Don't update `testcnt' here.
++ (gcc_finish): Do it here.
++ Might as well reset `but_id' here too.
++ * gcc.c-torture/code_quality/code_quality.exp: Call `runtest_file_p'
++ to determine if the file should be tested.
++ * gcc.c-torture/compile/compile.exp: Likewise.
++ * gcc.c-torture/execute/execute.exp: Likewise.
++ * gcc.c-torture/unsorted/unsorted.exp: Likewise.
++ * gcc.misc-tests/dg-test.exp: Likewise.
++ * gcc.prms/prms.exp: Likewise.
++ * gcc.wendy/wendy.exp: Likewise.
++ * g++.old-deja.exp: Likewise.
++ Move "Testing file" message to verbose level 1.
++
++Fri Sep 9 10:21:18 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * gcc.wendy/t.c: Add DEJAGNU_CFLAGS:"-DNOPAUSE".
++
++Thu Sep 8 16:52:43 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/gcc.exp: Ensure CFLAGS, LIBS, and LDFLAGS are set.
++ (default_gcc_start): Accept optional second list element
++ of compiler flags. Print compiler output at verbosity level 2.
++ Remove setting of CFLAGS, LIBS, LDFLAGS from here.
++ (gcc_init): Delete globals lcnt, lpass, lfail, lxpass, lxfail.
++ Save current values of framework globals passcnt, failcnt, xpasscnt,
++ and xfailcnt in gcc_passcnt, gcc_failcnt, gcc_xpasscnt, and
++ gcc_xfailcnt. Set global `tmpdir' to /tmp if it doesn't exist.
++ (gcc_stat): Use framework globals passcnt, failcnt, xpasscnt, and
++ xfailcnt to compute stats. Update framework global `testcnt' from
++ pass/fail counts.
++ (gcc_finish): New proc. Clean up test environment.
++ (gcc_cpass, gcc_cfail): Rename to gcc_pass/gcc_fail.
++ (gcc_epass, gcc_efail): Delete.
++ * lib/dg.exp (dg-error, dg-warning, dg-bogus): Accept optional 5th
++ argument of line number.
++ (dg-init): If the tool has an init routine, call it.
++ (dg-test): Remove args `cflags_var' and `libs_var'.
++ Pass all compiler options to ${tool}_start.
++ Handle missing line number.
++ (dg-finish): New function.
++ * gcc.c-torture/code_quality/code_quality.exp: Add support for testing
++ particular files. Call gcc_finish at end. Move "skipping test"
++ message to verbosity level 3.
++ * gcc.c-torture/compile/compile.exp: Likewise.
++ * gcc.c-torture/unsorted/unsorted.exp: Likewise.
++ * gcc.c-torture/execute/execute.exp: Likewise.
++ Delete setting of prms_id, bug_id, lcnt, lfail, lpass.
++ Print testcase being tried at verbosity level 1.
++ * gcc.c-torture/special/special.exp: Unset xfail.
++ Delete setting of prms_id, bug_id, lcnt, lfail, lpass.
++ * gcc.c-torture/compile/initbug1.exp: Call gcc_finish.
++ * gcc.c-torture/noncompile/noncompile.exp: Likewise.
++ * gcc.failure/failure.exp: Likewise.
++ * gcc.ieee/ieee.exp: Likewise.
++ * gcc.misc-tests/dg-test.exp: Delete LDFLAGS.
++ Update call to dg-test. Call dg-finish at end.
++ * gcc.misc-tests/mg.exp: Call gcc_finish at end. Unset orig_flags.
++ Delete setting of prms_id, bug_id, lcnt, lfail, lpass.
++ * gcc.misc-tests/misc.exp: Call gcc_finish at end.
++ * gcc.prms/prms.exp: Delete loading of utils.exp (redundant).
++ Delete LDFLAGS. Update call to dg-test. Call dg-finish at end.
++ * gcc.wendy/wendy.exp: Add copyright.
++ Delete setting of tmpdir (done by gcc_init).
++ Call gcc_pass/gcc_fail instead of gcc_[ce]pass/fail.
++ Pass compiler flags to gcc_start. Call gcc_finish at end.
++ * lib/c-torture.exp: Call gcc_pass/gcc_fail instead of
++ gcc_[ce]pass/fail.
++
++Wed Sep 7 11:09:08 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/g++.exp (g++_start): Rename arg to `prog' to avoid varargs
++ confusion.
++ (g++_load): Likewise.
++
++ * config/*.exp (gcc_load): Some were varargs fns and some were not.
++ Rename argument to `prog' to remove the confusion.
++ Varargs fns behave differently too!
++ (g++_load): Likewise.
++
++ * lib/dg.exp (dg-stat): Correct calculation of npass, nfail.
++
++ * config/unix.exp (gcc_load): Rename `args' to `prog' because that's
++ what it is. Delete (always) printing of status value for !native.
++ Simplify verbose code, and include status and exec_output.
++ (g++_load): Use gcc_load.
++
++Sun Sep 4 13:59:27 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
++
++ * gcc.c-torture/noncompile/920928-1.c: Delete obsolete file.
++ * gcc.c-torture/noncompile/noncompile.exp: Delete support for
++ 920928-1.c, 921017-1.c, 940712-1.c, 940714-1.c, 940714-2.c,
++ 940714-3.c as these testcases don't exist anymore. Make
++ va-arg-1.c expected to pass.
++
++Fri Aug 19 12:27:07 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * gcc.misc-tests/misc.exp: Only run specific testcases.
++ * gcc.misc-tests/dg-test.exp: New file. Tests dg.exp.
++ * gcc.misc-tests/dg-[1-9].c: New files.
++
++ * lib/dg.exp: New testsuite driver.
++ * gcc.prms/prms.exp: Use it.
++
++ * README.gcc: New file.
++
++ * lib/gcc.exp (gcc_init): Delete srcdir, no longer referenced.
++ Document and reset `lxpass' and `lxfail'.
++ Simplify "initialized" message.
++ (gcc_stat): Clean up comments a little.
++
++Tue Aug 16 11:16:46 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * gcc.prms/prms.exp: New driver for gcc.prms testsuite directory.
++
++Mon Aug 15 21:20:36 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/old-dejagnu.exp (process-option): New proc.
++ (old-dejagnu-init, old-dejagnu-stat): Likewise.
++ (old-dejagnu): Simplify.
++ * g++.old-deja/old-deja.exp: Update to new version of old-dejagnu.
++
++Sun Aug 14 09:23:53 1994 Jeff Law (law@snake.cs.utah.edu)
++
++ * lib/c-torture.exp (c-torture): Only call setup_xfail if $xfail
++ exists and is not an empty string.
++
++ * gcc.c-torture/special/special.exp (920520-1.c, 930510-1): Set
++ $xfail rather than calling setup_xfail. Clear $xfail when test is
++ finished.
++ (920717-x.c): Add $srcdir/$subdir as "gcc_start" does not do it
++ automatically.
++
++ * gcc.c-torture/noncompile/noncompile.exp (940712-1 test): No
++ longer expected to fail.
++
++ * gcc.c-torture/execute/strct-pack-3.c: Add missing argument to
++ "f" function call.
++
++ * gcc.misc-tests/mg.exp: Call gcc_stat when finished.
++
++ * gcc.c-torture/execute/{920202-1.c, 931208-1.c, 931228-1.c,
++ 940115-1.c, 940122-1.c, bf-pack-1.c, bf64-1.c, comp-goto-1.c,
++ complex-2.c, packed-1.c, strct-pack-2.c strct-pack-3.c,
++ struct-ini-2.c, struct-ini-3.c, va-arg-1.c}: Import from
++ c-torture-1.29.
++
++ * gcc.c-torture/execute/{nest-stdar-1.c, struct-ini-1.c,
++ strct-pack-1.c, strct-varg-1.c}: Renamed to match c-torture-1.29.
++
++ * gcc.c-torture/execute/920612-2.c: Update to c-torture-1.29.
++
++ * gcc.c-torture/noncompile/{931203-1.c, 940112-1.c, 940227-1.c,
++ 940510-1.c, init-1.c, init-2.c}: Import from c-torture-1.29
++
++ * gcc.c-torture/compile/{920928-6.c, 931203-1.c, 940611-1.c,
++ 940712-1.c, calls.c, combine-hang.c, goto-1.c, init-2.c,
++ labels-1.c, packed-1.c, zero-strct-1.c}: Import from c-torture-1.29.
++
++Tue Jul 12 12:49:44 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
++
++ * gcc.execute/{940712-1.c, 940712-2.c, 940713-1.c, 940714-1.c},
++ gcc.noncompile/{940712-1.h, 940712-1a.h, 940712-1b.h, 940712-1.c,
++ 940714-1.c, 940714-2.c, 940714-3.c},
++ gcc.compile/{940713-1.c, 940713-2.c, 940714-1.c},
++ gcc.misc-tests/{mg.c,mg.exp}:
++ New tests.
++ * gcc.noncompile/noncompile.exp: Change accordingly.
++
++Thu Jul 7 14:20:33 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * config/sim.exp, lib/c-torture.exp, lib/gcc.exp:
++ Undo previous clobberage.
++
++Mon Jul 4 17:00:59 1994 Jeff Law (law@snake.cs.utah.edu)
++
++ * gcc.compile/{931102-1.c, 931102-2.c, 931031-1.c}:
++ * gcc.special/{930510-1.c, special.exp}:
++ * gcc.execute/{931031-1.c, 931110-1.c, 931110-2.c, 931102-1.c,
++ 931102-2.c, struct-pack-1.c, divmod-1.c, complex-1.c,
++ struct-varargs-1.c}: New tests from c-torture-1.26.
++
++Tue Jun 28 17:39:42 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
++
++ * gcc.wendy/wendy.exp: add --'s so that -1 isn't parsed as an
++ argument to switch.
++
++Sat May 21 10:39:38 1994 Bill Cox (bill@rtl.cygnus.com)
++
++ * Revert the previous changes. Please see Rob's directory
++ (/lisa/test/rob/progressive/gcc/testsuite) for testing
++ fixes.
++
++Thu May 19 18:00:03 1994 Bill Cox (bill@rtl.cygnus.com)
++
++ * config/sim.exp, config/udi.exp, config/unix.exp, config/vx.exp,
++ g++.brendan/alignof.exp, g++.brendan/arm3.exp, g++.brendan/code-gen5.exp,
++ g++.brendan/crash29.exp, g++.brendan/crash5.exp, g++.brendan/cvt3.exp,
++ g++.brendan/delete1.exp, g++.brendan/nest12.exp, g++.brendan/nest13.exp,
++ g++.brendan/overload3.exp, g++.brendan/redecl1.exp, g++.brendan/visibility2.exp,
++ g++.jason/cond.exp, g++.jason/hmc1.exp, g++.jason/report.exp,
++ g++.law/access1.exp, g++.law/access2.exp, g++.law/arg6.exp,
++ g++.law/arg7.exp, g++.law/arg8.exp, g++.law/arm1.exp,
++ g++.law/arm10.exp, g++.law/arm4.exp, g++.law/arm5.exp,
++ g++.law/ctors15.exp, g++.law/ctors19.exp, g++.law/cvt1.exp,
++ g++.law/cvt12.exp, g++.law/cvt13.exp, g++.law/cvt18.exp,
++ g++.law/cvt22.exp, g++.law/cvt3.exp, g++.law/cvt5.exp,
++ g++.law/cvt6.exp, g++.law/cvt8.exp, g++.law/dtors3.exp,
++ g++.law/except1.exp, g++.law/except3.exp, g++.law/except4.exp,
++ g++.law/except5.exp, g++.law/except6.exp, g++.law/init5.exp,
++ g++.law/init8.exp, g++.law/inline4.exp, g++.law/memoized1.exp,
++ g++.law/missing1.exp, g++.law/operators14.exp, g++.law/operators18.exp,
++ g++.law/operators9.exp, g++.law/scope2.exp, g++.law/temps2.exp,
++ g++.law/temps3.exp, g++.law/temps5.exp, g++.law/typeck2.exp,
++ g++.mike/misc4.exp, g++.mike/misc6.exp, g++.niklas/t118.exp,
++ g++.niklas/t128.exp, g++.niklas/t138.exp, g++.niklas/t139.exp,
++ g++.niklas/t140.exp, g++.niklas/t141.exp, gcc.code_quality/code_quality.exp,
++ gcc.compile/compile.exp, gcc.dje/dje.exp, gcc.execute/execute.exp,
++ gcc.failure/failure.exp, gcc.ieee/ieee.exp, gcc.noncompile/noncompile.exp,
++ gcc.special/special.exp, gcc.unsorted/unsorted.exp, lib/c-torture.exp,
++ lib/chill.exp, lib/g++.exp, lib/gcc.exp, lib/mike-g++.exp, lib/mike-gcc.exp,
++ lib/old-dejagnu.exp: Checkin Rob's 94Q1 testing changes.
++
++Tue May 17 14:55:09 1994 Bill Cox (bill@rtl.cygnus.com)
++
++ * config/udi.exp, gcc.execute/execute.exp, gcc.wendy/wendy.exp,
++ lib/g++.exp, lib/old-dejagnu.exp: Replace error proc calls
++ with perror calls.
++
++Mon May 2 17:41:13 1994 Jason Merrill (jason@deneb.cygnus.com)
++
++ * config/unix.exp (g++_load): Fix syntax.
++
++Thu Apr 14 12:22:10 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
++
++ * gcc.compile/initbug1.exp (CFLAGS): Add space at beginning.
++ * gcc.noncompile/921017-1.c: Deleted obsolete test.
++ * gcc.noncompile/noncompile.exp: Remove code for deleted test.
++ Don't expect va-arg-1.c to fail. Correct expected output for
++ 920928-1.c.
++ * gcc.wendy/d.c, msgs.c, prolog.c, subs.c, z.c: Deleted.
++ * gcc.wendy/hbm4.c: Correct typo.
++ * gcc.wendy/tad1.c, tad2.c: Correct expected output.
++
++Mon Mar 28 13:29:37 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/gcc.exp (gcc_[ce]{pass,fail}): Remove output/executable argument.
++ * gcc.wendy/wendy.exp (wendy_try): Remove `output' argument of
++ gcc_[ce]{pass,fail}. Explicitly remove executable if test passes.
++ * lib/c-torture.exp (c-torture-compile): Ditto.
++
++ Reduce volume of output (remove all the -I's and such).
++ * lib/c-torture.exp (c-torture-compile): New argument OPTION.
++ Call gcc_cpass, gcc_cfail.
++ (c-torture): Pass testing option to c-torture-compile.
++
++Mon Mar 21 12:40:33 1994 Doug Evans (dje@cygnus.com)
++
++ Bring patches over from progressive.
++ * config/default.exp: Exit remote shell cleanly.
++ (g++_exit, g++_start): Add default versions.
++ * config/sim.exp (gcc_load): Use perror, not error.
++
++Sun Mar 20 12:05:32 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * lib/gcc.exp: Don't set CFLAGS if CC not set. It clobbers the value
++ set in site.exp.
++
++Mon Mar 14 19:30:28 1994 Doug Evans (dje@cygnus.com)
++
++ * gcc.wendy/wendy.exp (wendy_first_line): New proc to fetch
++ DEJAGNU_OUTPUT and DEJAGNU_CFLAGS.
++ (wendy_try): New proc to run testcase.
++ (main loop): Call 'em.
++ * gcc.wendy/*.c: Clean up pass to correct expected output.
++
++ * lib/gcc.exp: Minor cleanup work.
++ (gcc_cpass, gcc_cfail, gcc_epass, gcc_efail): New procs.
++
++Wed Mar 9 15:22:54 1994 Doug Evans (dje@canuck.cygnus.com)
++
++ * config/sim.exp (gcc_load): Document return codes better.
++ Don't pass -v to simulator.
++
++Thu Feb 24 07:15:18 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
++
++ * gcc.special/920717-x.c: Fix typo.
++ * gcc.special/special.exp (920717-x.c): Use $srcdir/$subdir to
++ get at sources.
++
++ * lib/mike-gcc.exp: Fix typo.
++
++Tue Feb 15 15:41:47 1994 Rob Savoye (rob@darkstar.cygnus.com)
++
++ * lib/gcc.exp: Minor cleanup work. Find the proper gcc or g++
++ binary to use, transform the name.
++ * config/*.exp: rename everything. Nuke any g++ specific files,
++ it's now a special case of gcc that requires no special support.
++ Add a default.exp for unsupported targets.
++
++Fri Feb 11 12:59:54 1994 Rob Savoye (rob@poseidon.cygnus.com)
++
++ * g++.jason/report.exp, g++.old-deja/old-deja.exp,
++ lib/old-dejagnu.exp: Fix a few patterns to work with the new
++ version of Tcl.
++
++Wed Feb 9 21:35:47 1994 Rob Savoye (rob@darkstar.cygnus.com)
++
++ * lib/c-torture.exp: Made "file prefix*never used a pass, rather
++ than a warning.
++
++Sun Feb 6 16:52:13 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
++
++ * lib/mike-gcc.exp: Add in recent changes from mike-g++.exp.
++
++Mon Jan 3 17:28:25 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
++
++ * gcc.execute/execute.exp: Combine opt_list and foption_list into
++ option_list. Compile every file with only 4/6 option choices
++ (same as C torture) instead of with 12/18 different option
++ choices.
++ * lib/c-torture.exp: Likewise.
++
++ * lib/gcc.exp: Set LIBS, CFLAGS, and LDFLAGS to empty strings if
++ not already set.
++
++Thu Dec 30 17:17:07 1993 Mike Stump (mrs@rtl.cygnus.com)
++
++ * lib/old-deja.exp: Add `excess errors test fails' error, now one
++ can put an XFAIL *-*-* on excess errors.
++
++Sun Dec 19 21:45:34 1993 Jeffrey A. Law (law@snake.cs.utah.edu
++
++ * g++.law: Add more tests derived from g++-bugs snapshots.
++
++ * g++.law/init11.{c,exp}: Delete test. Brendan sez it's
++ equivalent to g++.law/init9.
++
++ * lib/mike-gcc.exp (postbase): Delete the .o file after we've
++ compiled it, and the a.out file after we've run it.
++
++Fri Dec 17 11:29:56 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
++
++ * lib/mike-g++.exp (postbase): Delete the .o file after we've
++ compiled it, and the a.out file after we've run it.
++
++Fri Dec 17 10:18:16 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
++
++ * g++.law/*.exp: Avoid losing arguments added via "append" commands.
++
++Wed Dec 15 20:36:40 1993 Rob Savoye (rob@darkstar.cygnus.com)
++
++ * lib/gcc.exp, lib/g++.exp: Use catch rather than exec to get the
++ version number.
++
++Sun Dec 12 21:10:04 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
++
++ * g++.law: New directory of g++ tests derived from the g++-bugs
++ snapshots.
++
++Thu Dec 09 16:50:41 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * gcc.compile: initbug1.c initbug1.exp testcase added
++
++Mon Dec 06 11:09:52 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * gcc.dje/sizetype-1.exp, dje.exp: minor clean ups
++ * gcc.execute/execute.exp: minor cleanups. added gcc_stat calls. added
++ fixes submitted by Jeff Law (law@cs.utah.edu)
++ * gcc.noncompile/noncompile.exp, lib/mike-gcc.exp: new files from
++ Jeff Law (law@cs.utah.edu)
++
++
++Tue Nov 30 16:34:07 1993 Mike Stump (mrs@cygnus.com)
++
++ * config/unix-g++.exp: Follow the gcc way of doing things.
++ * g++.old-deja/old-deja.exp: Minor updates.
++ * lib/g++.exp: New file, follow the gcc way of doing things.
++ * lib/old-dejagnu.exp: Minor updates.
++ * lib/mike-g++.exp: Always unset errorInfo.
++
++Sat Nov 6 11:34:51 1993 Mike Stump (mrs@cygnus.com)
++
++ * lib/gcc.exp: Fix some errors with the below change, CC and
++ CFLAGS should be global when setting, not local.
++
++Wed Nov 3 11:16:26 1993 Rob Savoye (rob@darkstar.cygnus.com)
++
++ * lib/gcc.exp: Transform tool name.
++
++Wed Oct 27 23:57:29 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * gcc.*/*.exp: Fixd some de-stablizing changes. Sorry.
++
++Wed Oct 27 14:45:50 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * lib/gcc.exp: change gcc_done to gcc_stat
++
++Wed Oct 27 09:57:51 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * Upgraded gcc testsuite to c-torture version 1.25
++
++Sun Oct 24 10:58:03 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * lib/gcc.exp: added reporting code. Changed verbose compile message.
++ * lib/c-torture: added hooks for new reporting code.
++
++Thu Oct 21 18:45:32 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * config/sh-gcc.exp: check if sh-sim exists in the path
++
++Mon Oct 18 11:13:22 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * gcc.code_quality/code_quality.exp: Initial changes for new logic.
++ * gcc.compile/compile.exp: Initial changes for new logic.
++ * gcc.dje/dje.exp, sizetype-1.exp: Initial changes for new logic.
++ * gcc.failure/failure.exp: Initial changes for new logic.
++ * gcc.ieee/ieee.exp: Initial changes for new logic.
++ * gcc.misc-tests/misc.exp: Initial changes for new logic.
++ * gcc.noncompile/non_compile.exp: Initial changes for new logic.
++ * gcc.unsorted/unsorted.exp: Initial changes for new logic.
++ * lib/c-torture.exp: Initial changes for new logic.
++ * lib/gcc.exp: Initial changes for new logic.
++
++Fri Oct 15 00:19:42 1993 Mike Stump (mrs@cygnus.com)
++
++ * lib/mike-g++.exp, lib/old-dejagnu.exp: Make the message not
++ depend upon failure or success. Fully qualify names in failure
++ and success messages. Always remove a.out before starting
++ compile, just in case. Pay more attention to error text output by
++ the compiler. Handle testcases with no known past errors just
++ like all others, so that things are uniform. Other miscellaneous
++ improvements.
++
++Wed Oct 13 15:04:51 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * gcc.cpp: new directory for cpp tests
++
++Mon Oct 4 09:03:41 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * lib/chill.exp: Code reformatted, removed unused code.
++ * config/unix-chill.exp: Code reformatted, removed unused code.
++ * chill.execute/execute.exp: Code reformatted, removed unused code.
++ * chill.execute/oe/orient.exp: Code reformatted, removed unused code.
++
++Mon Oct 4 06:19:26 1993 Ian Lance Taylor (ian@cygnus.com)
++
++ * config/mips-gcc.exp, config/mips-g++.exp: New files. Execution
++ routines not written.
++
++Mon Sep 27 21:07:44 1993 Rob Savoye (rob@darkstar.cygnus.com)
++
++ * config/bug-gcc.exp: Use new procs from bug.exp.
++
++Tue Sep 21 18:21:12 1993 Rob Savoye (rob@darkstar.cygnus.com)
++
++ * config/vx-gcc.exp: Use new vxworks_ld proc, so files get loaded
++ via ftp, rather than depending on NFS.
++ * config/vx-gcc.exp: Use new vxworks_spawn proc to execute test
++ case.
++
++Thu Sep 9 23:09:15 1993 Rob Savoye (rob@darkstar.cygnus.com)
++
++ * config/bug-gcc.exp: Use new download proc.
++
++Tue Sep 14 19:23:58 1993 Jeffrey Wheat (cassidy at deneb.cygnus.com)
++
++ * chill.execute/execute.exp: cleanups, handles errors better
++ * chill.compile/compile.exp: rewrite, based on execute.exp
++ * chill.noncompile/noncompile.exp: rewrite, based on execute.exp
++ * lib/chill.exp: major changes to diff proc and compile and link
++ procs. added chill_fail and chill_pass wrappers to pass and
++ fail. added more comments, and handle error codes better.
++ Added a hack to capture stderr from exec, so noncompile tests
++ can work.
++
++Sat Sep 11 15:30:10 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * chill.execute/execute.exp: rewrite of testsuite driver
++ * lib/chill.exp: rewrite of testsuite driver
++ * config/unix-chill.exp: rewrite of testsuite driver
++
++Wed Aug 25 14:11:13 1993 Bill Cox (bill@rtl.cygnus.com)
++
++ In chill.execute:
++ * iexpr.ch: Standardize uppercase.
++ * tuples.dat: Standardize uppercase.
++ * vary.ch: standardize. Correct varying string assignments.
++ * vary.dat: Add new output lines.
++
++Tue Aug 24 13:45:49 1993 Bill Cox (bill@rtl.cygnus.com)
++
++ In chill.execute:
++ * chprintf.ch: Standardize use of uppercase.
++ * tuples.ch: Standardize and turn arr2 into a DCL,
++ rather than a SYN.
++ * pinits.ch: Standardize.
++
++Mon Aug 23 17:26:58 1993 Per Bothner (bothner@kalessin.cygnus.com)
++
++ * rts.c: Get malloc() from <stdlib.h>, not <malloc.h>.
++ * Makefil: Renamed to Makefile.in.
++ * configure.in: New.
++
++Mon Aug 23 14:24:13 1993 Bill Cox (bill@rtl.cygnus.com)
++
++ In chill.execute:
++ * .cvsignore: Add result/output files.
++ * Makefile: Fix up variables at start. Use MFLAGS
++ everywhere. Correct bool_loc, built_ins entries.
++ Add entry for vary1.ch.
++ * bitarray.ch: Standardize upper-case usage.
++ * bitexpr.ch: Standardize, add output of b1.
++ * params.ch: Use arrayt in along PROC parameters, to
++ avoid novelty problems.
++ * sets.ch: Tiny cleanup.
++ * vary1.ch: Re-indent.
++
++Tue Aug 17 15:42:07 1993 Bill Cox (bill@rtl.cygnus.com)
++
++ * Add PR-related files to Makefiles, .cvsignore files, etc.
++
++Mon Aug 2 15:46:05 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
++
++ * gcc.unsorted: flow.c and loop.c - renamed to avoid conflicts
++ with compiler objects. New names are test-flow.c and test-loop.c
++
++Tue Jul 27 10:08:08 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
++
++ * Upgraded c-torture tests from 1.19 to 1.20
++
++ * new files:
++ * gcc.compile: 930609-1.c 930611-1.c 930618-1.c 930621-1.c
++ * gcc.compile: 930623-1.c 930623-2.c
++ * gcc.noncompile: 930622-1.c 930622-2.c
++ * gcc.failure: 920411-1.c 920627-2.c
++ * gcc.ieee: 920518-1.c 920810-1.c 930529-1.c
++
++Tue Jul 20 15:19:44 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
++
++ * chill.compile/compile.exp chill.execute/execute.exp lib/chill.exp
++ More changes to get testsuite working properly. Needs more work.
++ Added some support for POSIX IEEE Std 1003.3-1991 error messages.
++
++Mon Jul 19 18:40:31 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
++
++ * chill.compile/compile.exp chill.execute/execute.exp lib/chill.exp
++ More changes to get testsuite working properly. Needs more work.
++
++Tue Jul 13 18:38:56 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
++
++ * chill.compile/compile.exp: Added for Dejagnu support
++ * chill.execute/execute.exp: Added for Dejagnu support
++ * lib/chill.exp config/unix-chill.exp : Added for Dejagnu support
++
++Sat Jun 19 07:13:05 1993 Bill Cox (bill@rtl.cygnus.com)
++
++ This should complete moving the CHILL test files.
++ * chill.noncompile(.cvsignore printf.grt
++ in-printf.grt chprintf.grt chprintf.ch):
++ Added test-support files.
++ (Makefile): Modified further.
++ * chill.compile (emptymod.ch gdbme.ch neg_range.ch
++ signal.ch): Added test files.
++ * chill.execute (.cvsignore printf.grt printr.c
++ in-printf.grt rts.c chprintf.grt rts.h): Added
++ test-support files.
++ (Makefile): More corrections.
++
++Fri Jun 18 23:40:54 1993 Bill Cox (bill@rtl.cygnus.com)
++
++ * chill.compile, chill.execute, chill.nocompile: Add CHILL
++ test cases, ready for DejaGnu.
++
++Thu Jun 17 19:14:40 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * Upgraded c-torture tests from 1.18 to 1.19
++
++ * gcc.compile: added test(s):
++ 930607-1.c
++ * gcc.execute: added test(s):
++ 930603-1.c 930603-2.c 930603-3.c 930608-1.c conversion.c inst-check.c
++
++ * added new subdirectory for misc tests: gcc.misc-tests
++ * gcc.misc-test(s): added tests:
++ inst-check.c test-consts.c test-ior.c test-switch.c
++
++Wed Jun 9 16:53:26 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
++
++ * lib/mike-g++.exp: Load `./a.out', not `a.out'.
++
++Mon Jun 7 16:18:40 1993 Ian Lance Taylor (ian@cygnus.com)
++
++ * g++.old-deja/old-deja.exp: Don't delete all the .o files.
++
++Thu Jun 3 13:13:36 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * Upgraded c-torture tests from 1.17 to 1.18
++
++Wed Jun 2 19:02:40 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com)
++
++ * Upgraded c-torture tests from 1.12 to 1.17
++
++Fri Apr 30 09:38:41 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * lib/old-dejagnu.exp:
++ Fixed handling of XFAIL target triplets to correctly
++ recognize wildcard characters. Removed code that
++ appended a unique id tag to the end of the file name
++ printed out by the result of the testcases within a
++ given test file.
++
++Thu Apr 29 19:06:29 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * lib/old-dejagnu.exp:
++ Reworked expected failure handling to trigger off of XFAIL
++ keyword in keyphrase embeded in testcase source code. The
++ XFAIL keyword must be at the end of the keyphrase line. It
++ may optionally be followed by one or more target triplets.
++ It has just occured that the handling of wildcards in the
++ target triplet may not be correct.
++
++Fri Apr 23 13:16:20 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * g++.old-deja/tests:
++ Moved all subdirectories up one level into g++.old-deja .
++
++ * lib/old-dejagnu.exp:
++ Fixed problem with CXXFLAGS not being properly reset, and being
++ corrupted with extraneous "-c" compiler option. This was
++ causing binaries to not be generated for test that needed them.
++ Modified strings passed to "pass" and "fail" so that individual
++ tests from the same test file would be distinguished by an
++ identifier appended to the test file name in the summary logs;
++ this corrected a problem with erroneous diff logs. Added code
++ to search testcases for expected fail and unexpected pass keywords.
++
++Tue Apr 20 18:27:58 1993 Rob Savoye (rob at darkstar.cygnus.com)
++
++ * lib/c-torture.exp: Ignore "file path prefix*unused" message.
++
++Thu Apr 15 11:01:59 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * g++.old-deja/tests/g++.sun/g++.frag/1045608.C:
++ Removed extraneous text from end of "Special g++ Options"
++ keyphrase.
++
++ * lib/old-dejagnu.exp: Added pattern matching to look for new
++ keywords, embedded in testcases comments, which will trigger
++ calls to xpass and xfail.
++
++Wed Apr 14 14:28:01 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * lib/old-dejagnu.exp: Cleaned up pattern matching for keyphrase
++ comments embedded in the testcases, especially the one looking for
++ special compiler options, as well as the pattern matching for the
++ compiler output again.
++
++Mon Apr 12 15:15:37 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * lib/old-dejagnu.exp: Do a proper check of the return value for
++ execute tests. Fixed several problems with the pattern matching
++ of the compiler output which gave erroneous test results.
++ Changed several of the test result messages to be more descriptive.
++ * config/unix-g++.exp: Proc g++_load now actually works and
++ executes the tests passed to it and returns a usable return
++ value.
++
++Sun Apr 11 17:22:37 1993 Rob Savoye (rob at darkstar.cygnus.com)
++
++ * lib/gcc.exp: Exits gracefully if $CC is bogus.
++
++Fri Apr 9 09:41:59 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * lib/old-dejagnu.exp , g++.old-deja/old-deja.exp:
++ Modified both files to properly execute the old style
++ dejagnu tests. The previous versions of these files were
++ experimental and did not function anything near correctly.
++
++Mon Apr 5 21:08:24 1993 Rob Savoye (rob@cygnus.com)
++
++ * Removed all Makefile.in and configure.in files. No configuration
++ needed now.
++
++Fri Apr 2 12:15:17 1993 Mike Werner (mtw@deneb.cygnus.com)
++
++ * lib: relocated old-dejagnu.exp from devo/dejagnu/lib
++
++Sun Mar 28 11:17:48 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
++
++ * gcc.compile/configure.in, gcc.unsorted/configure.in,
++ gcc.special/configure.in, gcc.noncompile/configure.in,
++ gcc.execute/configure.in, gcc.code_quality/configure.in,
++ g++.other/configure.in, g++.old-deja/configure.in,
++ g++.niklas/configure.in, g++.mike/configure.in: Remove extra quote
++ in srcname setting.
++
++Thu Mar 25 20:07:55 1993 Rob Savoye (rob at darkstar.cygnus.com)
++
++ * lib/udi.exp: Fixed mondfe and mondfe_download.
++ * config/udi-gcc.exp: Fixed misc bugs, works with expect 4.x.
++ * config/abug-gcc.exp: Fixed misc bugs, works with expect 4.x.
++
++Thu Mar 25 13:06:41 1993 Ian Lance Taylor (ian@cygnus.com)
++
++ * config/udi-gdb.exp: Check $shell_id after connecting to target.
++ (gdb_exit): Don't remove *_soc files.
++
++Mon Mar 22 14:28:46 1993 Ian Lance Taylor (ian@cygnus.com)
++
++ * lib/c-torture.exp: Don't look for main; instead always use -w
++ -c. This is how the c-torture tests work. Remove the object
++ file if the compilation succeeds.
++ * gcc.execute/execute.exp: Remove executable if test passes.
++ * gcc.noncompile/noncompile.exp: Every test is an expected
++ failure.
++ * gcc.special/special.exp: Added tests from c-torture 1.11,
++ corrected use of existing test.
++ * gcc.execute/920302-1.c, gcc.execute/920501-8.c,
++ gcc.execute/920625-1.c: Updated to c-torture 1.11.
++ * gcc.compile/921103-1.c, gcc.compile/921109-1.c,
++ gcc.compile/921109-2.c, gcc.compile/921109-3.c,
++ gcc.compile/921111-1.c, gcc.compile/921116-2.c,
++ gcc.compile/921118-1.c, gcc.compile/921126-1.c,
++ gcc.compile/921202-1.c, gcc.compile/921202-2.c,
++ gcc.compile/921203-1.c, gcc.compile/921203-2.c,
++ gcc.compile/921206-1.c, gcc.execute/921029-1.c,
++ gcc.execute/921104-1.c, gcc.execute/921110-1.c,
++ gcc.execute/921112-1.c, gcc.execute/921113-1.c,
++ gcc.execute/921117-1.c, gcc.execute/921123-1.c,
++ gcc.execute/921123-2.c, gcc.execute/921124-1.c,
++ gcc.execute/921202-1.c, gcc.execute/921202-2.c,
++ gcc.execute/921204-1.c, gcc.execute/921207-1.c,
++ gcc.execute/921208-1.c, gcc.execute/921208-2.c,
++ gcc.execute/921215-1.c, gcc.execute/921218-1.c,
++ gcc.execute/921218-2.c, gcc.noncompile/921102-1.c,
++ gcc.noncompile/921116-1.c, gcc.unsorted/x.c: Added from
++ c-torture 1.11.
++ * gcc.noncompile/921021-1.c, gcc.unsorted/x11bug.c: Removed to
++ correspond to c-torture 1.11.
++
++ * New file.
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/config/default.exp gcc-2.95.4/gcc/testsuite/config/default.exp
+--- gcc-2.95.3/gcc/testsuite/config/default.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/config/default.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++load_lib "standard.exp"
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990218-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990218-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990218-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990218-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++ program test
++ double precision a,b,c
++ data a,b/1.0d-46,1.0d0/
++ c=fun(a,b)
++ print*,'in main: fun=',c
++ end
++ double precision function fun(a,b)
++ double precision a,b
++ print*,'in sub: a,b=',a,b
++ fun=a*b
++ print*,'in sub: fun=',fun
++ return
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990305-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990305-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990305-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990305-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++* Date: Fri, 5 Mar 1999 00:35:44 -0500 (EST)
++* From: Denes Molnar <molnard@phys.columbia.edu>
++* To: fortran@gnu.org
++* Subject: f771 gets fatal signal 6
++* Content-Type: TEXT/PLAIN; charset=US-ASCII
++* X-UIDL: 8d81e9cbdcc96209c6e9b298d966ba7f
++*
++* Hi,
++*
++*
++* Comiling object from the source code below WORKS FINE with
++* 'g77 -o hwuci2 -c hwuci2.F'
++* but FAILS with fatal signal 6
++* 'g77 -o hwuci2 -O -c hwuci2.F'
++*
++* Any explanations?
++*
++* I am running GNU Fortran 0.5.23 with GCC 2.8.1 (glibc1).
++*
++*
++* Denes Molnar
++*
++* %%%%%%%%%%%%%%%%%%%%%%%%%
++* %the source:
++* %%%%%%%%%%%%%%%%%%%%%%%%%
++*
++CDECK ID>, HWUCI2.
++*CMZ :- -23/08/94 13.22.29 by Mike Seymour
++*-- Author : Ulrich Baur & Nigel Glover, adapted by Ian Knowles
++C-----------------------------------------------------------------------
++ FUNCTION HWUCI2(A,B,Y0)
++C-----------------------------------------------------------------------
++C Integral LOG(A-EPSI-BY(1-Y))/(Y-Y0)
++C-----------------------------------------------------------------------
++ IMPLICIT NONE
++ DOUBLE COMPLEX HWUCI2,HWULI2,EPSI,Y1,Y2,Z1,Z2,Z3,Z4
++ DOUBLE PRECISION A,B,Y0,ZERO,ONE,FOUR,HALF
++ EXTERNAL HWULI2
++ COMMON/SMALL/EPSI
++ PARAMETER (ZERO=0.D0, ONE =1.D0, FOUR= 4.D0, HALF=0.5D0)
++ IF(B.EQ.ZERO)THEN
++ HWUCI2=CMPLX(ZERO,ZERO)
++ ELSE
++ Y1=HALF*(ONE+SQRT(ONE-FOUR*(A+EPSI)/B))
++ Y2=ONE-Y1
++ Z1=Y0/(Y0-Y1)
++ Z2=(Y0-ONE)/(Y0-Y1)
++ Z3=Y0/(Y0-Y2)
++ Z4=(Y0-ONE)/(Y0-Y2)
++ HWUCI2=HWULI2(Z1)-HWULI2(Z2)+HWULI2(Z3)-HWULI2(Z4)
++ ENDIF
++ RETURN
++ END
++*
++* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990419-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990419-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990419-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990419-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++* Test case Toon submitted, cut down to expose the one bug.
++* Belongs in compile/.
++ SUBROUTINE INIERS1
++ IMPLICIT LOGICAL(L)
++ COMMON/COMIOD/ NHIERS1, LERS1
++ inquire(nhiers1, exist=lers1)
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990502-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990502-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990502-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990502-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,66 @@
++* Mailing-List: contact egcs-bugs-help@egcs.cygnus.com; run by ezmlm
++* Precedence: bulk
++* Sender: owner-egcs-bugs@egcs.cygnus.com
++* From: Norbert Conrad <Norbert.Conrad@hrz.uni-giessen.de>
++* Subject: egcs g77 19990524pre Internal compiler error in `print_operand'
++* To: egcs-bugs@egcs.cygnus.com
++* Date: Mon, 31 May 1999 11:46:52 +0200 (CET)
++* Content-Type: text/plain; charset=US-ASCII
++* X-UIDL: 9a00095a5fe4d774b7223de071157374
++*
++* Hi,
++*
++* I ./configure --prefix=/opt and bootstrapped egcs g77 snapshot 19990524
++* on an i686-pc-linux-gnu. The program below gives an internal compiler error.
++*
++*
++* Script started on Mon May 31 11:30:01 1999
++* lx{g010}:/tmp>/opt/bin/g77 -v -O3 -malign-double -c e3.f
++* g77 version gcc-2.95 19990524 (prerelease) (from FSF-g77 version 0.5.24-19990515)
++* Reading specs from /opt/lib/gcc-lib/i686-pc-linux-gnu/gcc-2.95/specs
++* gcc version gcc-2.95 19990524 (prerelease)
++* /opt/lib/gcc-lib/i686-pc-linux-gnu/gcc-2.95/f771 e3.f -quiet -dumpbase e3.f -malign-double -O3 -version -fversion -o /tmp/ccQgeaaa.s
++* GNU F77 version gcc-2.95 19990524 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version gcc-2.95 19990524 (prerelease).
++* GNU Fortran Front End version 0.5.24-19990515
++* e3.f:25: Internal compiler error in `print_operand', at ./config/i386/i386.c:3405
++* Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'.
++* See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details.
++* lx{g010}:/tmp>cat e3.f
++ SUBROUTINE DLASQ2( QQ, EE, TOL2, SMALL2 )
++ DOUBLE PRECISION SMALL2, TOL2
++ DOUBLE PRECISION EE( * ), QQ( * )
++ INTEGER ICONV, N, OFF
++ DOUBLE PRECISION QEMAX, XINF
++ EXTERNAL DLASQ3
++ INTRINSIC MAX, SQRT
++ XINF = 0.0D0
++ ICONV = 0
++ IF( EE( N ).LE.MAX( QQ( N ), XINF, SMALL2 )*TOL2 ) THEN
++ END IF
++ IF( EE( N-2 ).LE.MAX( XINF, SMALL2,
++ $ ( QQ( N ) / ( QQ( N )+EE( N-1 ) ) )* QQ( N-1 ))*TOL2 ) THEN
++ QEMAX = MAX( QQ( N ), QQ( N-1 ), EE( N-1 ) )
++ END IF
++ IF( N.EQ.0 ) THEN
++ IF( OFF.EQ.0 ) THEN
++ RETURN
++ ELSE
++ XINF =0.0D0
++ END IF
++ ELSE IF( N.EQ.2 ) THEN
++ END IF
++ CALL DLASQ3(ICONV)
++ END
++* lx{g010}:/tmp>exit
++*
++* Script done on Mon May 31 11:30:23 1999
++*
++* Best regards,
++*
++* Norbert.
++* --
++* Norbert Conrad phone: ++49 641 9913021
++* Hochschulrechenzentrum email: conrad@hrz.uni-giessen.de
++* Heinrich-Buff-Ring 44
++* 35392 Giessen
++* Germany
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990502-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990502-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/19990502-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/19990502-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++ SUBROUTINE G(IGAMS,IWRK,NADC,NCellsInY)
++ INTEGER*2 IGAMS(2,NADC)
++ in = 1
++ do while (in.le.nadc.and.IGAMS(2,in).le.in)
++ enddo
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/960317-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/960317-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/960317-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/960317-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,103 @@
++* Date: Sat, 16 Mar 1996 19:58:37 -0500 (EST)
++* From: Kate Hedstrom <kate@ahab.Rutgers.EDU>
++* To: burley@gnu.ai.mit.edu
++* Subject: g77 bug in assign
++*
++* I found some files in the NCAR graphics source code which used to
++* compile with g77 and now don't. All contain the following combination
++* of "save" and "assign". It fails on a Sun running SunOS 4.1.3 and a
++* Sun running SunOS 5.5 (slightly older g77), but compiles on an
++* IBM/RS6000:
++*
++C
++ SUBROUTINE QUICK
++ SAVE
++C
++ ASSIGN 101 TO JUMP
++ 101 Continue
++C
++ RETURN
++ END
++*
++* Everything else in the NCAR distribution compiled, including quite a
++* few C routines.
++*
++* Kate
++*
++*
++* nemo% g77 -v -c quick.f
++* gcc -v -c -xf77 quick.f
++* Reading specs from /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3/2.7.2/specs
++* gcc version 2.7.2
++* /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3/2.7.2/f771 quick.f -fset-g77-defaults -quiet -dumpbase quick.f -version -fversion -o /usr/tmp/cca24166.s
++* GNU F77 version 2.7.2 (sparc) compiled by GNU C version 2.7.1.
++* GNU Fortran Front End version 0.5.18-960314 compiled: Mar 16 1996 14:28:11
++* gcc: Internal compiler error: program f771 got fatal signal 11
++*
++*
++* nemo% gdb /usr/local/lib/gcc-lib/*/*/f771 core
++* GDB is free software and you are welcome to distribute copies of it
++* under certain conditions; type "show copying" to see the conditions.
++* There is absolutely no warranty for GDB; type "show warranty" for details.
++* GDB 4.14 (sparc-sun-sunos4.1.3),
++* Copyright 1995 Free Software Foundation, Inc...
++* Core was generated by `f771'.
++* Program terminated with signal 11, Segmentation fault.
++* Couldn't read input and local registers from core file
++* find_solib: Can't read pathname for load map: I/O error
++*
++* Couldn't read input and local registers from core file
++* #0 0x21aa4 in ffecom_sym_transform_assign_ (s=???) at f/com.c:7881
++* 7881 if ((ffesymbol_save (s) || ffe_is_saveall ())
++* (gdb) where
++* #0 0x21aa4 in ffecom_sym_transform_assign_ (s=???) at f/com.c:7881
++* Error accessing memory address 0xefffefcc: Invalid argument.
++* (gdb)
++*
++*
++* ahab% g77 -v -c quick.f
++* gcc -v -c -xf77 quick.f
++* Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/specs
++* gcc version 2.7.2
++* /usr/local/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/f771 quick.f -quiet -dumpbase quick.f -version -fversion -o /var/tmp/cca003D2.s
++* GNU F77 version 2.7.2 (sparc) compiled by GNU C version 2.7.2.
++* GNU Fortran Front End version 0.5.18-960304 compiled: Mar 5 1996 16:12:46
++* gcc: Internal compiler error: program f771 got fatal signal 11
++*
++*
++* ahab% !gdb
++* gdb /usr/local/lib/gcc-lib/*/*/f771 core
++* GDB is free software and you are welcome to distribute copies of it
++* under certain conditions; type "show copying" to see the conditions.
++* There is absolutely no warranty for GDB; type "show warranty" for details.
++* GDB 4.15.1 (sparc-sun-solaris2.4),
++* Copyright 1995 Free Software Foundation, Inc...
++* Core was generated by
++* `/usr/local/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/f771 quick.f -quiet -dumpbase'.
++* Program terminated with signal 11, Segmentation fault.
++* Reading symbols from /usr/lib/libc.so.1...done.
++* Reading symbols from /usr/lib/libdl.so.1...done.
++* #0 0x43e04 in ffecom_sym_transform_assign_ (s=0x3a22f8) at f/com.c:7963
++* Source file is more recent than executable.
++* 7963 assert (st != NULL);
++* (gdb) where
++* #0 0x43e04 in ffecom_sym_transform_assign_ (s=0x3a22f8) at f/com.c:7963
++* #1 0x38044 in ffecom_expr_ (expr=0x3a23c0, dest_tree=0x0, dest=0x0, dest_used=0x0, assignp=true) at f/com.c:2100
++* #2 0x489c8 in ffecom_expr_assign_w (expr=0x3a23c0) at f/com.c:10238
++* #3 0xe9228 in ffeste_R838 (label=0x3a1ba8, target=0x3a23c0) at f/ste.c:2769
++* #4 0xdae60 in ffestd_stmt_pass_ () at f/std.c:840
++* #5 0xdc090 in ffestd_exec_end () at f/std.c:1405
++* #6 0xcb534 in ffestc_shriek_subroutine_ (ok=true) at f/stc.c:4849
++* #7 0xd8f00 in ffestc_R1225 (name=0x0) at f/stc.c:12307
++* #8 0xcc808 in ffestc_end () at f/stc.c:5572
++* #9 0x9fa84 in ffestb_end3_ (t=0x3a19c8) at f/stb.c:3216
++* #10 0x9f30c in ffestb_end (t=0x3a19c8) at f/stb.c:2995
++* #11 0x98414 in ffesta_save_ (t=0x3a19c8) at f/sta.c:453
++* #12 0x997ec in ffesta_second_ (t=0x3a19c8) at f/sta.c:1178
++* #13 0x8ed84 in ffelex_send_token_ () at f/lex.c:1614
++* #14 0x8cab8 in ffelex_finish_statement_ () at f/lex.c:946
++* #15 0x91684 in ffelex_file_fixed (wf=0x397780, f=0x37a560) at f/lex.c:2946
++* #16 0x107a94 in ffe_file (wf=0x397780, f=0x37a560) at f/top.c:456
++* #17 0x96218 in yyparse () at f/parse.c:77
++* #18 0x10beac in compile_file (name=0xdffffaf7 "quick.f") at toplev.c:2239
++* #19 0x110dc0 in main (argc=9, argv=0xdffff994, envp=0xdffff9bc) at toplev.c:3927
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/970125-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/970125-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/970125-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/970125-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++C JCB comments:
++C g77 doesn't accept the added line "integer(kind=7) ..." --
++C it crashes!
++C
++C It's questionable that g77 DTRT with regarding to passing
++C %LOC() as an argument (thus by reference) and the new global
++C analysis. I need to look into that further; my feeling is that
++C passing %LOC() as an argument should be treated like passing an
++C INTEGER(KIND=7) by reference, and no more specially than that
++C (and that INTEGER(KIND=7) should be permitted as equivalent to
++C INTEGER(KIND=1), INTEGER(KIND=2), or whatever, depending on the
++C system's pointer size).
++C
++C The back end *still* has a bug here, which should be fixed,
++C because, currently, what g77 is passing to it is, IMO, correct.
++
++C No options:
++C ../../egcs/gcc/f/info.c:259: failed assertion `ffeinfo_types_[basictype][kindtype] != NULL'
++C -fno-globals -O:
++C ../../egcs/gcc/expr.c:7291: Internal compiler error in function expand_expr
++
++c Frontend bug fixed by JCB 1998-06-01 com.c &c changes.
++
++ integer*4 i4
++ integer*8 i8
++ integer*8 max4
++ data max4/2147483647/
++ i4 = %loc(i4)
++ i8 = %loc(i8)
++ print *, max4
++ print *, i4, %loc(i4)
++ print *, i8, %loc(i8)
++ call foo(i4, %loc(i4), i8, %loc(i8))
++ end
++ subroutine foo(i4, i4a, i8, i8a)
++ integer(kind=7) i4a, i8a
++ integer*8 i8
++ print *, i4, i4a
++ print *, i8, i8a
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/970915-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/970915-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/970915-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/970915-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++* fixed by patch to safe_from_p to avoid visiting any SAVE_EXPR
++* node twice in a given top-level call to it.
++* (JCB com.c patch of 1998-06-04.)
++
++ SUBROUTINE TSTSIG11
++ IMPLICIT COMPLEX (A-Z)
++ EXTERNAL gzi1,gzi2
++ branch3 = sw2 / cw
++ . * ( rdw * (epsh*gzi1(A,B)-gzi2(A,B))
++ . + rdw * (epsh*gzi1(A,B)-gzi2(A,B)) )
++ . + (-1./2. + 2.*sw2/3.) / (sw*cw)
++ . * rdw * (epsh*gzi1(A,B)-gzi2(A,B)
++ . + rdw * (epsh*gzi1(A,B)-gzi2(A,B))
++ . + rdw * (epsh*gzi1(A,B)-gzi2(A,B)) )
++ . * rup * (epsh*gzi1(A,B)-gzi2(A,B)
++ . + rup * (epsh*gzi1(A,B)-gzi2(A,B)) )
++ . * 4.*(3.-tw**2) * gzi2(A,B)
++ . + ((1.+2./tauw)*tw**2-(5.+2./tauw))* gzi1(A,B)
++ RETURN
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++C Causes internal compiler error on egcs 1.0.1 on i586-pc-sco3.2v5.0.4
++C To: egcs-bugs@cygnus.com
++C Subject: backend case range problem/fix
++C From: Dave Love <d.love@dl.ac.uk>
++C Date: 02 Dec 1997 18:11:35 +0000
++C Message-ID: <rzqpvnfboo8.fsf@djlvig.dl.ac.uk>
++C
++C The following Fortran test case aborts the compiler because
++C tree_int_cst_lt dereferences a null tree; this is a regression from
++C gcc 2.7.
++
++ INTEGER N
++ READ(*,*) N
++ SELECT CASE (N)
++ CASE (1:)
++ WRITE(*,*) 'case 1'
++ CASE (0)
++ WRITE(*,*) 'case 0'
++ END SELECT
++ END
++
++C The relevant change to cure this is:
++C
++C Thu Dec 4 06:34:40 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
++C
++C * stmt.c (pushcase_range): Clean up handling of "infinite" values.
++C
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-2.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-2.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-2.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-2.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++C unable to confirm this bug on egcs 1.0.1 for i586-pc-sco3.2v5.0.4 robertl
++C
++C Date: Sat, 23 Aug 1997 00:47:53 -0400 (EDT)
++C From: David Bristow <dbristow@lynx.dac.neu.edu>
++C To: egcs-bugs@cygnus.com
++C Subject: g77 crashes compiling Dungeon
++C Message-ID: <Pine.OSF.3.91.970823003521.11281A-100000@lynx.dac.neu.edu>
++C
++C The following small segment of Dungeon (the adventure that became the
++C commercial hit Zork) causes an internal error in f771. The platform is
++C i586-pc-linux-gnulibc1, the compiler is egcs-ss-970821 (g77-GNU Fortran
++C 0.5.21-19970811)
++C
++C --cut here--cut here--cut here--cut here--cut here--cut here--
++C g77 --verbose -fugly -fvxt -c subr_.f
++C g77 version 0.5.21-19970811
++C gcc --verbose -fugly -fvxt -xf77 subr_.f -xnone -lf2c -lm
++C Reading specs from /usr/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.01/specs
++C gcc version egcs-2.90.01 970821 (gcc2-970802 experimental)
++C /usr/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.01/f771 subr_.f -fset-g77-defaults -quiet -dumpbase subr_.f -version -fversion -fugly -fvxt -o /tmp/cca23974.s
++C f771: warning: -fugly is overloaded with meanings and likely to be removed;
++C f771: warning: use only the specific -fugly-* options you need
++C GNU F77 version egcs-2.90.01 970821 (gcc2-970802 experimental) (i586-pc-linux-gnulibc1) compiled by GNU C version egcs-2.90.01 970821 (gcc2-970802 experimental).
++C GNU Fortran Front End version 0.5.21-19970811
++C f/com.c:941: failed assertion `TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (e))'
++C gcc: Internal compiler error: program f771 got fatal signal 6
++C --cut here--cut here--cut here--cut here--cut here--cut here--
++C
++C Here's the FORTRAN code, it's basically a single subroutine from subr.f
++C in the Dungeon source, slightly altered (the original calls RAN(), which
++C doesn't exist in the g77 runtime)
++C
++C RND - Return a random integer mod n
++C
++ INTEGER FUNCTION RND (N)
++ IMPLICIT INTEGER (A-Z)
++ REAL RAND
++ COMMON /SEED/ RNSEED
++
++ RND = RAND(RNSEED)*FLOAT(N)
++ RETURN
++
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-3.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-3.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-3.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-3.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,259 @@
++c
++c This demonstrates a problem with g77 and pic on x86 where
++c egcs 1.0.1 and earlier will generate bogus assembler output.
++c unfortunately, gas accepts the bogus acssembler output and
++c generates code that almost works.
++c
++
++
++C Date: Wed, 17 Dec 1997 23:20:29 +0000
++C From: Joao Cardoso <jcardoso@inescn.pt>
++C To: egcs-bugs@cygnus.com
++C Subject: egcs-1.0 f77 bug on OSR5
++C When trying to compile the Fortran file that I enclose bellow,
++C I got an assembler error:
++C
++C ./g77 -B./ -fpic -O -c scaleg.f
++C /usr/tmp/cca002D8.s:123:syntax error at (
++C
++C ./g77 -B./ -fpic -O0 -c scaleg.f
++C /usr/tmp/cca002EW.s:246:invalid operand combination: leal
++C
++C Compiling without the -fpic flag runs OK.
++
++ subroutine scaleg (n,ma,a,mb,b,low,igh,cscale,cperm,wk)
++c
++c *****parameters:
++ integer igh,low,ma,mb,n
++ double precision a(ma,n),b(mb,n),cperm(n),cscale(n),wk(n,6)
++c
++c *****local variables:
++ integer i,ir,it,j,jc,kount,nr,nrp2
++ double precision alpha,basl,beta,cmax,coef,coef2,coef5,cor,
++ * ew,ewc,fi,fj,gamma,pgamma,sum,t,ta,tb,tc
++c
++c *****fortran functions:
++ double precision dabs, dlog10, dsign
++c float
++c
++c *****subroutines called:
++c none
++c
++c ---------------------------------------------------------------
++c
++c *****purpose:
++c scales the matrices a and b in the generalized eigenvalue
++c problem a*x = (lambda)*b*x such that the magnitudes of the
++c elements of the submatrices of a and b (as specified by low
++c and igh) are close to unity in the least squares sense.
++c ref.: ward, r. c., balancing the generalized eigenvalue
++c problem, siam j. sci. stat. comput., vol. 2, no. 2, june 1981,
++c 141-152.
++c
++c *****parameter description:
++c
++c on input:
++c
++c ma,mb integer
++c row dimensions of the arrays containing matrices
++c a and b respectively, as declared in the main calling
++c program dimension statement;
++c
++c n integer
++c order of the matrices a and b;
++c
++c a real(ma,n)
++c contains the a matrix of the generalized eigenproblem
++c defined above;
++c
++c b real(mb,n)
++c contains the b matrix of the generalized eigenproblem
++c defined above;
++c
++c low integer
++c specifies the beginning -1 for the rows and
++c columns of a and b to be scaled;
++c
++c igh integer
++c specifies the ending -1 for the rows and columns
++c of a and b to be scaled;
++c
++c cperm real(n)
++c work array. only locations low through igh are
++c referenced and altered by this subroutine;
++c
++c wk real(n,6)
++c work array that must contain at least 6*n locations.
++c only locations low through igh, n+low through n+igh,
++c ..., 5*n+low through 5*n+igh are referenced and
++c altered by this subroutine.
++c
++c on output:
++c
++c a,b contain the scaled a and b matrices;
++c
++c cscale real(n)
++c contains in its low through igh locations the integer
++c exponents of 2 used for the column scaling factors.
++c the other locations are not referenced;
++c
++c wk contains in its low through igh locations the integer
++c exponents of 2 used for the row scaling factors.
++c
++c *****algorithm notes:
++c none.
++c
++c *****history:
++c written by r. c. ward.......
++c modified 8/86 by bobby bodenheimer so that if
++c sum = 0 (corresponding to the case where the matrix
++c doesn't need to be scaled) the routine returns.
++c
++c ---------------------------------------------------------------
++c
++ if (low .eq. igh) go to 410
++ do 210 i = low,igh
++ wk(i,1) = 0.0d0
++ wk(i,2) = 0.0d0
++ wk(i,3) = 0.0d0
++ wk(i,4) = 0.0d0
++ wk(i,5) = 0.0d0
++ wk(i,6) = 0.0d0
++ cscale(i) = 0.0d0
++ cperm(i) = 0.0d0
++ 210 continue
++c
++c compute right side vector in resulting linear equations
++c
++ basl = dlog10(2.0d0)
++ do 240 i = low,igh
++ do 240 j = low,igh
++ tb = b(i,j)
++ ta = a(i,j)
++ if (ta .eq. 0.0d0) go to 220
++ ta = dlog10(dabs(ta)) / basl
++ 220 continue
++ if (tb .eq. 0.0d0) go to 230
++ tb = dlog10(dabs(tb)) / basl
++ 230 continue
++ wk(i,5) = wk(i,5) - ta - tb
++ wk(j,6) = wk(j,6) - ta - tb
++ 240 continue
++ nr = igh-low+1
++ coef = 1.0d0/float(2*nr)
++ coef2 = coef*coef
++ coef5 = 0.5d0*coef2
++ nrp2 = nr+2
++ beta = 0.0d0
++ it = 1
++c
++c start generalized conjugate gradient iteration
++c
++ 250 continue
++ ew = 0.0d0
++ ewc = 0.0d0
++ gamma = 0.0d0
++ do 260 i = low,igh
++ gamma = gamma + wk(i,5)*wk(i,5) + wk(i,6)*wk(i,6)
++ ew = ew + wk(i,5)
++ ewc = ewc + wk(i,6)
++ 260 continue
++ gamma = coef*gamma - coef2*(ew**2 + ewc**2)
++ + - coef5*(ew - ewc)**2
++ if (it .ne. 1) beta = gamma / pgamma
++ t = coef5*(ewc - 3.0d0*ew)
++ tc = coef5*(ew - 3.0d0*ewc)
++ do 270 i = low,igh
++ wk(i,2) = beta*wk(i,2) + coef*wk(i,5) + t
++ cperm(i) = beta*cperm(i) + coef*wk(i,6) + tc
++ 270 continue
++c
++c apply matrix to vector
++c
++ do 300 i = low,igh
++ kount = 0
++ sum = 0.0d0
++ do 290 j = low,igh
++ if (a(i,j) .eq. 0.0d0) go to 280
++ kount = kount+1
++ sum = sum + cperm(j)
++ 280 continue
++ if (b(i,j) .eq. 0.0d0) go to 290
++ kount = kount+1
++ sum = sum + cperm(j)
++ 290 continue
++ wk(i,3) = float(kount)*wk(i,2) + sum
++ 300 continue
++ do 330 j = low,igh
++ kount = 0
++ sum = 0.0d0
++ do 320 i = low,igh
++ if (a(i,j) .eq. 0.0d0) go to 310
++ kount = kount+1
++ sum = sum + wk(i,2)
++ 310 continue
++ if (b(i,j) .eq. 0.0d0) go to 320
++ kount = kount+1
++ sum = sum + wk(i,2)
++ 320 continue
++ wk(j,4) = float(kount)*cperm(j) + sum
++ 330 continue
++ sum = 0.0d0
++ do 340 i = low,igh
++ sum = sum + wk(i,2)*wk(i,3) + cperm(i)*wk(i,4)
++ 340 continue
++ if(sum.eq.0.0d0) return
++ alpha = gamma / sum
++c
++c determine correction to current iterate
++c
++ cmax = 0.0d0
++ do 350 i = low,igh
++ cor = alpha * wk(i,2)
++ if (dabs(cor) .gt. cmax) cmax = dabs(cor)
++ wk(i,1) = wk(i,1) + cor
++ cor = alpha * cperm(i)
++ if (dabs(cor) .gt. cmax) cmax = dabs(cor)
++ cscale(i) = cscale(i) + cor
++ 350 continue
++ if (cmax .lt. 0.5d0) go to 370
++ do 360 i = low,igh
++ wk(i,5) = wk(i,5) - alpha*wk(i,3)
++ wk(i,6) = wk(i,6) - alpha*wk(i,4)
++ 360 continue
++ pgamma = gamma
++ it = it+1
++ if (it .le. nrp2) go to 250
++c
++c end generalized conjugate gradient iteration
++c
++ 370 continue
++ do 380 i = low,igh
++ ir = wk(i,1) + dsign(0.5d0,wk(i,1))
++ wk(i,1) = ir
++ jc = cscale(i) + dsign(0.5d0,cscale(i))
++ cscale(i) = jc
++ 380 continue
++c
++c scale a and b
++c
++ do 400 i = 1,igh
++ ir = wk(i,1)
++ fi = 2.0d0**ir
++ if (i .lt. low) fi = 1.0d0
++ do 400 j =low,n
++ jc = cscale(j)
++ fj = 2.0d0**jc
++ if (j .le. igh) go to 390
++ if (i .lt. low) go to 400
++ fj = 1.0d0
++ 390 continue
++ a(i,j) = a(i,j)*fi*fj
++ b(i,j) = b(i,j)*fi*fj
++ 400 continue
++ 410 continue
++ return
++c
++c last line of scaleg
++c
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-4.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-4.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-4.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-4.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,348 @@
++
++C To: egcs-bugs@cygnus.com
++C Subject: -fPIC problem showing up with fortran on x86
++C From: Dave Love <d.love@dl.ac.uk>
++C Date: 19 Dec 1997 19:31:41 +0000
++C
++C
++C This illustrates a long-standing problem noted at the end of the g77
++C `Actual Bugs' info node and thought to be in the back end. Although
++C the report is against gcc 2.7 I can reproduce it (specifically on
++C redhat 4.2) with the 971216 egcs snapshot.
++C
++C g77 version 0.5.21
++C gcc -v -fnull-version -o /tmp/gfa00415 -xf77-cpp-input /tmp/gfa00415.f -xnone
++C -lf2c -lm
++C
++
++C ------------
++ subroutine dqage(f,a,b,epsabs,epsrel,limit,result,abserr,
++ * neval,ier,alist,blist,rlist,elist,iord,last)
++C --------------------------------------------------
++C
++C Modified Feb 1989 by Barry W. Brown to eliminate key
++C as argument (use key=1) and to eliminate all Fortran
++C output.
++C
++C Purpose: to make this routine usable from within S.
++C
++C --------------------------------------------------
++c***begin prologue dqage
++c***date written 800101 (yymmdd)
++c***revision date 830518 (yymmdd)
++c***category no. h2a1a1
++c***keywords automatic integrator, general-purpose,
++c integrand examinator, globally adaptive,
++c gauss-kronrod
++c***author piessens,robert,appl. math. & progr. div. - k.u.leuven
++c de doncker,elise,appl. math. & progr. div. - k.u.leuven
++c***purpose the routine calculates an approximation result to a given
++c definite integral i = integral of f over (a,b),
++c hopefully satisfying following claim for accuracy
++c abs(i-reslt).le.max(epsabs,epsrel*abs(i)).
++c***description
++c
++c computation of a definite integral
++c standard fortran subroutine
++c double precision version
++c
++c parameters
++c on entry
++c f - double precision
++c function subprogram defining the integrand
++c function f(x). the actual name for f needs to be
++c declared e x t e r n a l in the driver program.
++c
++c a - double precision
++c lower limit of integration
++c
++c b - double precision
++c upper limit of integration
++c
++c epsabs - double precision
++c absolute accuracy requested
++c epsrel - double precision
++c relative accuracy requested
++c if epsabs.le.0
++c and epsrel.lt.max(50*rel.mach.acc.,0.5d-28),
++c the routine will end with ier = 6.
++c
++c key - integer
++c key for choice of local integration rule
++c a gauss-kronrod pair is used with
++c 7 - 15 points if key.lt.2,
++c 10 - 21 points if key = 2,
++c 15 - 31 points if key = 3,
++c 20 - 41 points if key = 4,
++c 25 - 51 points if key = 5,
++c 30 - 61 points if key.gt.5.
++c
++c limit - integer
++c gives an upperbound on the number of subintervals
++c in the partition of (a,b), limit.ge.1.
++c
++c on return
++c result - double precision
++c approximation to the integral
++c
++c abserr - double precision
++c estimate of the modulus of the absolute error,
++c which should equal or exceed abs(i-result)
++c
++c neval - integer
++c number of integrand evaluations
++c
++c ier - integer
++c ier = 0 normal and reliable termination of the
++c routine. it is assumed that the requested
++c accuracy has been achieved.
++c ier.gt.0 abnormal termination of the routine
++c the estimates for result and error are
++c less reliable. it is assumed that the
++c requested accuracy has not been achieved.
++c error messages
++c ier = 1 maximum number of subdivisions allowed
++c has been achieved. one can allow more
++c subdivisions by increasing the value
++c of limit.
++c however, if this yields no improvement it
++c is rather advised to analyze the integrand
++c in order to determine the integration
++c difficulties. if the position of a local
++c difficulty can be determined(e.g.
++c singularity, discontinuity within the
++c interval) one will probably gain from
++c splitting up the interval at this point
++c and calling the integrator on the
++c subranges. if possible, an appropriate
++c special-purpose integrator should be used
++c which is designed for handling the type of
++c difficulty involved.
++c = 2 the occurrence of roundoff error is
++c detected, which prevents the requested
++c tolerance from being achieved.
++c = 3 extremely bad integrand behaviour occurs
++c at some points of the integration
++c interval.
++c = 6 the input is invalid, because
++c (epsabs.le.0 and
++c epsrel.lt.max(50*rel.mach.acc.,0.5d-28),
++c result, abserr, neval, last, rlist(1) ,
++c elist(1) and iord(1) are set to zero.
++c alist(1) and blist(1) are set to a and b
++c respectively.
++c
++c alist - double precision
++c vector of dimension at least limit, the first
++c last elements of which are the left
++c end points of the subintervals in the partition
++c of the given integration range (a,b)
++c
++c blist - double precision
++c vector of dimension at least limit, the first
++c last elements of which are the right
++c end points of the subintervals in the partition
++c of the given integration range (a,b)
++c
++c rlist - double precision
++c vector of dimension at least limit, the first
++c last elements of which are the
++c integral approximations on the subintervals
++c
++c elist - double precision
++c vector of dimension at least limit, the first
++c last elements of which are the moduli of the
++c absolute error estimates on the subintervals
++c
++c iord - integer
++c vector of dimension at least limit, the first k
++c elements of which are pointers to the
++c error estimates over the subintervals,
++c such that elist(iord(1)), ...,
++c elist(iord(k)) form a decreasing sequence,
++c with k = last if last.le.(limit/2+2), and
++c k = limit+1-last otherwise
++c
++c last - integer
++c number of subintervals actually produced in the
++c subdivision process
++c
++c***references (none)
++c***routines called d1mach,dqk15,dqk21,dqk31,
++c dqk41,dqk51,dqk61,dqpsrt
++c***end prologue dqage
++c
++ double precision a,abserr,alist,area,area1,area12,area2,a1,a2,b,
++ * blist,b1,b2,dabs,defabs,defab1,defab2,dmax1,d1mach,elist,epmach,
++ * epsabs,epsrel,errbnd,errmax,error1,error2,erro12,errsum,f,
++ * resabs,result,rlist,uflow
++ integer ier,iord,iroff1,iroff2,k,last,limit,maxerr,neval,
++ * nrmax
++c
++ dimension alist(limit),blist(limit),elist(limit),iord(limit),
++ * rlist(limit)
++c
++ external f
++c
++c list of major variables
++c -----------------------
++c
++c alist - list of left end points of all subintervals
++c considered up to now
++c blist - list of right end points of all subintervals
++c considered up to now
++c rlist(i) - approximation to the integral over
++c (alist(i),blist(i))
++c elist(i) - error estimate applying to rlist(i)
++c maxerr - pointer to the interval with largest
++c error estimate
++c errmax - elist(maxerr)
++c area - sum of the integrals over the subintervals
++c errsum - sum of the errors over the subintervals
++c errbnd - requested accuracy max(epsabs,epsrel*
++c abs(result))
++c *****1 - variable for the left subinterval
++c *****2 - variable for the right subinterval
++c last - index for subdivision
++c
++c
++c machine dependent constants
++c ---------------------------
++c
++c epmach is the largest relative spacing.
++c uflow is the smallest positive magnitude.
++c
++c***first executable statement dqage
++ epmach = d1mach(4)
++ uflow = d1mach(1)
++c
++c test on validity of parameters
++c ------------------------------
++c
++ ier = 0
++ neval = 0
++ last = 0
++ result = 0.0d+00
++ abserr = 0.0d+00
++ alist(1) = a
++ blist(1) = b
++ rlist(1) = 0.0d+00
++ elist(1) = 0.0d+00
++ iord(1) = 0
++ if(epsabs.le.0.0d+00.and.
++ * epsrel.lt.dmax1(0.5d+02*epmach,0.5d-28)) ier = 6
++ if(ier.eq.6) go to 999
++c
++c first approximation to the integral
++c -----------------------------------
++c
++ neval = 0
++ call dqk15(f,a,b,result,abserr,defabs,resabs)
++ last = 1
++ rlist(1) = result
++ elist(1) = abserr
++ iord(1) = 1
++c
++c test on accuracy.
++c
++ errbnd = dmax1(epsabs,epsrel*dabs(result))
++ if(abserr.le.0.5d+02*epmach*defabs.and.abserr.gt.errbnd) ier = 2
++ if(limit.eq.1) ier = 1
++ if(ier.ne.0.or.(abserr.le.errbnd.and.abserr.ne.resabs)
++ * .or.abserr.eq.0.0d+00) go to 60
++c
++c initialization
++c --------------
++c
++c
++ errmax = abserr
++ maxerr = 1
++ area = result
++ errsum = abserr
++ nrmax = 1
++ iroff1 = 0
++ iroff2 = 0
++c
++c main do-loop
++c ------------
++c
++ do 30 last = 2,limit
++c
++c bisect the subinterval with the largest error estimate.
++c
++ a1 = alist(maxerr)
++ b1 = 0.5d+00*(alist(maxerr)+blist(maxerr))
++ a2 = b1
++ b2 = blist(maxerr)
++ call dqk15(f,a1,b1,area1,error1,resabs,defab1)
++ call dqk15(f,a2,b2,area2,error2,resabs,defab2)
++c
++c improve previous approximations to integral
++c and error and test for accuracy.
++c
++ neval = neval+1
++ area12 = area1+area2
++ erro12 = error1+error2
++ errsum = errsum+erro12-errmax
++ area = area+area12-rlist(maxerr)
++ if(defab1.eq.error1.or.defab2.eq.error2) go to 5
++ if(dabs(rlist(maxerr)-area12).le.0.1d-04*dabs(area12)
++ * .and.erro12.ge.0.99d+00*errmax) iroff1 = iroff1+1
++ if(last.gt.10.and.erro12.gt.errmax) iroff2 = iroff2+1
++ 5 rlist(maxerr) = area1
++ rlist(last) = area2
++ errbnd = dmax1(epsabs,epsrel*dabs(area))
++ if(errsum.le.errbnd) go to 8
++c
++c test for roundoff error and eventually set error flag.
++c
++ if(iroff1.ge.6.or.iroff2.ge.20) ier = 2
++c
++c set error flag in the case that the number of subintervals
++c equals limit.
++c
++ if(last.eq.limit) ier = 1
++c
++c set error flag in the case of bad integrand behaviour
++c at a point of the integration range.
++c
++ if(dmax1(dabs(a1),dabs(b2)).le.(0.1d+01+0.1d+03*
++ * epmach)*(dabs(a2)+0.1d+04*uflow)) ier = 3
++c
++c append the newly-created intervals to the list.
++c
++ 8 if(error2.gt.error1) go to 10
++ alist(last) = a2
++ blist(maxerr) = b1
++ blist(last) = b2
++ elist(maxerr) = error1
++ elist(last) = error2
++ go to 20
++ 10 alist(maxerr) = a2
++ alist(last) = a1
++ blist(last) = b1
++ rlist(maxerr) = area2
++ rlist(last) = area1
++ elist(maxerr) = error2
++ elist(last) = error1
++c
++c call subroutine dqpsrt to maintain the descending ordering
++c in the list of error estimates and select the subinterval
++c with the largest error estimate (to be bisected next).
++c
++ 20 call dqpsrt(limit,last,maxerr,errmax,elist,iord,nrmax)
++c ***jump out of do-loop
++ if(ier.ne.0.or.errsum.le.errbnd) go to 40
++ 30 continue
++c
++c compute final result.
++c ---------------------
++c
++ 40 result = 0.0d+00
++ do 50 k=1,last
++ result = result+rlist(k)
++ 50 continue
++ abserr = errsum
++ 60 neval = 30*neval+15
++ 999 return
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-6.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-6.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-6.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-6.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++C From: Norbert Conrad <Norbert.Conrad@hrz.uni-giessen.de>
++C Message-Id: <199711131008.LAA12272@marvin.hrz.uni-giessen.de>
++C Subject: 971105 g77 bug
++C To: egcs-bugs@cygnus.com
++C Date: Thu, 13 Nov 1997 11:08:19 +0100 (CET)
++
++C I found a bug in g77 in snapshot 971105
++
++ subroutine ai (a)
++ dimension a(-1:*)
++ return
++ end
++C ai.f: In subroutine `ai':
++C ai.f:1:
++C subroutine ai (a)
++C ^
++C Array `a' at (^) is too large to handle
++C
++C This happens whenever the lower index boundary is negative and the upper index
++C boundary is '*'.
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-7.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-7.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-7.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-7.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++C From: "David C. Doherty" <doherty@networkcs.com>
++C Message-Id: <199711171846.MAA27947@uh.msc.edu>
++C Subject: g77: auto arrays + goto = no go
++C To: egcs-bugs@cygnus.com
++C Date: Mon, 17 Nov 1997 12:46:27 -0600 (CST)
++
++C I sent the following to fortran@gnu.ai.mit.edu, and Dave Love
++C replied that he was able to reproduce it on rs6000-aix; not on
++C others. He suggested that I send it to egcs-bugs.
++
++C Hi - I've observed the following behavior regarding
++C automatic arrays and gotos. Seems similar to what I found
++C in the docs about computed gotos (but not exactly the same).
++C
++C I suspect from the nature of the error msg that it's in the GBE.
++C
++C I'm using egcs-971105, under linux-ppc.
++C
++C I also observed the same in g77-0.5.19 (and gcc 2.7.2?).
++C
++C I'd appreciate any advice on this. thanks for the great work.
++C --
++C >cat testg77.f
++ subroutine testg77(n, a)
++c
++ implicit none
++c
++ integer n
++ real a(n)
++ real b(n)
++ integer i
++c
++ do i = 1, 10
++ if (i .gt. 4) goto 100
++ write(0, '(i2)')i
++ enddo
++c
++ goto 200
++100 continue
++200 continue
++c
++ return
++ end
++C >g77 -c testg77.f
++C testg77.f: In subroutine `testg77':
++C testg77.f:19: label `200' used before containing binding contour
++C testg77.f:18: label `100' used before containing binding contour
++C --
++C If I comment out the b(n) line or replace it with, e.g., b(10),
++C it compiles fine.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-8.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-8.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980310-8.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980310-8.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++C To: egcs-bugs@cygnus.com
++C Subject: egcs-g77 and array indexing
++C Reply-To: etseidl@jutland.ca.sandia.gov
++C Date: Wed, 26 Nov 1997 10:38:27 -0800
++C From: Edward Seidl <etseidl@jutland.ca.sandia.gov>
++C
++C I have some horrible spaghetti code I'm trying compile with egcs-g77,
++C but it's puking on code like the example below. I have no idea if it's
++C legal fortran or not, and I'm in no position to change it. All I do know
++C is it compiles with a number of other compilers, including f2c and
++C g77-0.5.19.1/gcc-2.7.2.1. When I try to compile with egcs-2.90.18 971122
++C I get the following (on both i686-pc-linux-gnu and alphaev56-unknown-linux-gnu):
++C
++C foo.f: In subroutine `foobar':
++C foo.f:11:
++C subroutine foobar(norb,nnorb)
++C ^
++C Array `norb' at (^) is too large to handle
++
++ program foo
++ implicit integer(A-Z)
++ dimension norb(6)
++ nnorb=6
++
++ call foobar(norb,nnorb)
++
++ stop
++ end
++
++ subroutine foobar(norb,nnorb)
++ implicit integer(A-Z)
++ dimension norb(-1:*)
++
++ do 10 i=-1,nnorb-2
++ norb(i) = i+999
++ 10 continue
++
++ return
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980419-2.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980419-2.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980419-2.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980419-2.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++c SEGVs in loop.c with -O2.
++
++ character*80 function nxtlin(lun,ierr,itok)
++ character onechr*1,twochr*2,thrchr*3
++ itok=0
++ do while (.true.)
++ read (lun,'(a)',iostat=ierr) nxtlin
++ if (nxtlin(1:1).ne.'#') then
++ ito=0
++ do 10 it=1,79
++ if (nxtlin(it:it).ne.' ' .and. nxtlin(it+1:it+1).eq.' ')
++ $ then
++ itast=0
++ itstrt=0
++ do itt=ito+1,it
++ if (nxtlin(itt:itt).eq.'*') itast=itt
++ enddo
++ itstrt=ito+1
++ do while (nxtlin(itstrt:itstrt).eq.' ')
++ itstrt=itstrt+1
++ enddo
++ if (itast.gt.0) then
++ nchrs=itast-itstrt
++ if (nchrs.eq.1) then
++ onechr=nxtlin(itstrt:itstrt)
++ read (onechr,*) itokn
++ elseif (nchrs.eq.2) then
++ twochr=nxtlin(itstrt:itstrt+1)
++ read (twochr,*) itokn
++ elseif (nchrs.eq.3) then
++ thrchr=nxtlin(itstrt:itstrt+2)
++ read (thrchr,*) itokn
++ elseif (nchrs.eq.4) then
++ thrchr=nxtlin(itstrt:itstrt+3)
++ read (thrchr,*) itokn
++ endif
++ itok=itok+itokn
++ else
++ itok=itok+1
++ endif
++ ito=it+1
++ endif
++ 10 continue
++ return
++ endif
++ enddo
++ return
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980424-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980424-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980424-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980424-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++C crashes in subst_stack_regs_pat on x86-linux, in the "abort();"
++C within the switch statement.
++ SUBROUTINE C(A)
++ COMPLEX A
++ WRITE(*,*) A.NE.CMPLX(0.0D0)
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980427-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980427-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980427-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980427-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++c ../../egcs/gcc/f/com.c:938: failed assertion `TREE_CODE (TREE_TYPE (e)) == REAL_TYPE'
++c Fixed by 28-04-1998 global.c (ffeglobal_ref_progunit_) change.
++ external b
++ call y(b)
++ end
++ subroutine x
++ a = b()
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980729-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980729-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/980729-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/980729-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++c Got ICE on Alpha only with -mieee (currently not tested).
++c Fixed by rth 1998-07-30 alpha.md change.
++ subroutine a(b,c)
++ b = max(b,c)
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/981117-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/981117-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/981117-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/981117-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++* egcs-bugs:
++* From: Martin Kahlert <martin.kahlert@mchp.siemens.de>
++* Subject: ICE in g77 from egcs-19981109
++* Message-Id: <199811101134.MAA29838@keksy.mchp.siemens.de>
++
++* As of 1998-11-17, fails -O2 -fomit-frame-pointer with
++* egcs/gcc/testsuite/g77.f-torture/compile/981117-1.f:8: internal error--insn does not satisfy its constraints:
++* (insn 31 83 32 (set (reg:SF 8 %st(0))
++* (mult:SF (reg:SF 8 %st(0))
++* (const_double:SF (mem/u:SF (symbol_ref/u:SI ("*.LC1")) 0) 0 0 1073643520))) 350 {strlensi-3} (nil)
++* (nil))
++* ../../egcs/gcc/toplev.c:1390: Internal compiler error in function fatal_insn
++
++* Fixed sometime before 1998-11-21 -- don't know by which change.
++
++ SUBROUTINE SSPTRD
++ PARAMETER (HALF = 0.5 )
++ DO I = 1, N
++ CALL SSPMV(TAUI)
++ ALPHA = -HALF*TAUI
++ CALL SAXPY(ALPHA)
++ ENDDO
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/990115-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/990115-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/990115-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/990115-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++C Derived from lapack
++ SUBROUTINE ZGELSX( M, N, NRHS, A, LDA, B, LDB, JPVT, RCOND, RANK,
++ $ WORK, RWORK, INFO )
++ COMPLEX*16 WORK( * )
++ DO 20 I = 1, RANK
++ WORK( ISMAX+I-1 ) = S2*WORK( ISMAX+I-1 )
++ 20 CONTINUE
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/alpha1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/alpha1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/alpha1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/alpha1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++ REAL*8 A,B,C
++ REAL*4 RARRAY(19)/19*(-1)/
++ INTEGER BOTTOM,RIGHT
++ INTEGER IARRAY(19)/0,0,0,0,0,0,0,0,0,0,0,0,13,14,0,0,0,0,0/
++ EQUIVALENCE (RARRAY(13),BOTTOM),(RARRAY(14),RIGHT)
++C
++ IF(I.NE.0) call exit(1)
++C gcc: Internal compiler error: program f771 got fatal signal 11
++C at this point!
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/compile.exp gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/compile.exp
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/compile.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/compile.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++# Expect driver script for GCC Regression Tests
++# Copyright (C) 1993, 1995, 1997 Free Software Foundation
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# These tests come from Torbjorn Granlund's (tege@cygnus.com)
++# F torture test suite, and other contributors.
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib f-torture.exp
++
++foreach testcase [glob -nocomplain $srcdir/$subdir/*.f] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $testcase] then {
++ continue
++ }
++
++ f-torture $testcase
++}
++
++foreach testcase [glob -nocomplain $srcdir/$subdir/*.F] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $testcase] then {
++ continue
++ }
++
++ f-torture $testcase
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/toon_1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/toon_1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/compile/toon_1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/compile/toon_1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++ SUBROUTINE AAP(NOOT)
++ DIMENSION NOOT(*)
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19981119-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19981119-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19981119-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19981119-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++* X-Delivered: at request of burley on mescaline.gnu.org
++* Date: Sat, 31 Oct 1998 18:26:29 +0200 (EET)
++* From: "B. Yanchitsky" <yan@im.imag.kiev.ua>
++* To: fortran@gnu.org
++* Subject: Bug report
++* MIME-Version: 1.0
++* Content-Type: TEXT/PLAIN; charset=US-ASCII
++*
++* There is a trouble with g77 on Alpha.
++* My configuration:
++* Digital Personal Workstation 433au,
++* Digital Unix 4.0D,
++* GNU Fortran 0.5.23 and GNU C 2.8.1.
++*
++* The following program treated successfully but crashed when running.
++*
++* C --- PROGRAM BEGIN -------
++*
++ subroutine sub(N,u)
++ integer N
++ double precision u(-N:N,-N:N)
++
++C vvvv CRASH HERE vvvvv
++ u(-N,N)=0d0
++ return
++ end
++
++
++ program bug
++ integer N
++ double precision a(-10:10,-10:10)
++ data a/441*1d0/
++ N=10
++ call sub(N,a)
++ if (a(-N,N) .ne. 0d0) call abort
++ end
++*
++* C --- PROGRAM END -------
++*
++* Good luck!
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++* To: craig@jcb-sc.com
++* Subject: Re: G77 and KIND=2
++* Content-Type: text/plain; charset=us-ascii
++* From: Dave Love <d.love@dl.ac.uk>
++* Date: 03 Mar 1999 18:20:11 +0000
++* In-Reply-To: craig@jcb-sc.com's message of "1 Mar 1999 21:04:38 -0000"
++* User-Agent: Gnus/5.07007 (Pterodactyl Gnus v0.70) Emacs/20.3
++* X-UIDL: d442bafe961c2a6ec6904f492e05d7b0
++*
++* ISTM that there is a real problem printing integer*8 (on x86):
++*
++* $ cat x.f
++*[modified for test suite]
++ integer *8 foo, bar
++ data r/4e10/
++ foo = 4e10
++ bar = r
++ if (foo .ne. bar) call abort
++ end
++* $ g77 x.f && ./a.out
++* 1345294336
++* 123
++* $ f2c x.f && g77 x.c && ./a.out
++* x.f:
++* MAIN:
++* 40000000000
++* 123
++* $
++*
++* Gdb shows the upper half of the buffer passed to do_lio is zeroed in
++* the g77 case.
++*
++* I've forgotten how the code generation happens.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++ integer *8 foo, bar
++ double precision r
++ data r/4d10/
++ foo = 4d10
++ bar = r
++ if (foo .ne. bar) call abort
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-2.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-2.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-2.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-2.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++ integer *8 foo, bar
++ complex c
++ data c/(4e10,0)/
++ foo = 4e10
++ bar = c
++ if (foo .ne. bar) call abort
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-3.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-3.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990313-3.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990313-3.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++ integer *8 foo, bar
++ double complex c
++ data c/(4d10,0)/
++ foo = 4d10
++ bar = c
++ if (foo .ne. bar) call abort
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990325-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990325-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990325-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990325-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,313 @@
++* test whether complex operators properly handle
++* full and partial aliasing.
++* (libf2c/libF77 routines used to assume no aliasing,
++* then were changed to accommodate full aliasing, while
++* the libg2c/libF77 versions were changed to accommodate
++* both full and partial aliasing.)
++*
++* NOTE: this (19990325-0.f) is the single-precision version.
++* See 19990325-1.f for the double-precision version.
++
++ program complexalias
++ implicit none
++
++* Make sure non-aliased cases work. (Catch roundoff/precision
++* problems, etc., here. Modify subroutine check if they occur.)
++
++ call tryfull (1, 3, 5)
++
++* Now check various combinations of aliasing.
++
++* Full aliasing.
++ call tryfull (1, 1, 5)
++
++* Partial aliasing.
++ call trypart (2, 3, 5)
++ call trypart (2, 1, 5)
++ call trypart (2, 5, 3)
++ call trypart (2, 5, 1)
++
++ end
++
++ subroutine tryfull (xout, xin1, xin2)
++ implicit none
++ integer xout, xin1, xin2
++
++* out, in1, and in2 are the desired indexes into the REAL array (array).
++
++ complex expect
++ integer pwr
++ integer out, in1, in2
++
++ real array(6)
++ complex carray(3)
++ equivalence (carray(1), array(1))
++
++* Make sure the indexes can be accommodated by the equivalences above.
++
++ if (mod (xout, 2) .ne. 1) call abort
++ if (mod (xin1, 2) .ne. 1) call abort
++ if (mod (xin2, 2) .ne. 1) call abort
++
++* Convert the indexes into ones suitable for the COMPLEX array (carray).
++
++ out = (xout + 1) / 2
++ in1 = (xin1 + 1) / 2
++ in2 = (xin2 + 1) / 2
++
++* Check some open-coded stuff, just in case.
++
++ call prepare1 (carray(in1))
++ expect = + carray(in1)
++ carray(out) = + carray(in1)
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = - carray(in1)
++ carray(out) = - carray(in1)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) + carray(in2)
++ carray(out) = carray(in1) + carray(in2)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) - carray(in2)
++ carray(out) = carray(in1) - carray(in2)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) * carray(in2)
++ carray(out) = carray(in1) * carray(in2)
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 2
++ carray(out) = carray(in1) ** 2
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 3
++ carray(out) = carray(in1) ** 3
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = abs (carray(in1))
++ array(out*2-1) = abs (carray(in1))
++ array(out*2) = 0
++ call check (expect, carray(out))
++
++* Now check the stuff implemented in libF77.
++
++ call prepare1 (carray(in1))
++ expect = cos (carray(in1))
++ carray(out) = cos (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = exp (carray(in1))
++ carray(out) = exp (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = log (carray(in1))
++ carray(out) = log (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = sin (carray(in1))
++ carray(out) = sin (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = sqrt (carray(in1))
++ carray(out) = sqrt (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = conjg (carray(in1))
++ carray(out) = conjg (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1i (carray(in1), pwr)
++ expect = carray(in1) ** pwr
++ carray(out) = carray(in1) ** pwr
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) / carray(in2)
++ carray(out) = carray(in1) / carray(in2)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) ** carray(in2)
++ carray(out) = carray(in1) ** carray(in2)
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** .2
++ carray(out) = carray(in1) ** .2
++ call check (expect, carray(out))
++
++ end
++
++ subroutine trypart (xout, xin1, xin2)
++ implicit none
++ integer xout, xin1, xin2
++
++* out, in1, and in2 are the desired indexes into the REAL array (array).
++
++ complex expect
++ integer pwr
++ integer out, in1, in2
++
++ real array(6)
++ complex carray(3), carrayp(2)
++ equivalence (carray(1), array(1))
++ equivalence (carrayp(1), array(2))
++
++* Make sure the indexes can be accommodated by the equivalences above.
++
++ if (mod (xout, 2) .ne. 0) call abort
++ if (mod (xin1, 2) .ne. 1) call abort
++ if (mod (xin2, 2) .ne. 1) call abort
++
++* Convert the indexes into ones suitable for the COMPLEX array (carray).
++
++ out = xout / 2
++ in1 = (xin1 + 1) / 2
++ in2 = (xin2 + 1) / 2
++
++* Check some open-coded stuff, just in case.
++
++ call prepare1 (carray(in1))
++ expect = + carray(in1)
++ carrayp(out) = + carray(in1)
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = - carray(in1)
++ carrayp(out) = - carray(in1)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) + carray(in2)
++ carrayp(out) = carray(in1) + carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) - carray(in2)
++ carrayp(out) = carray(in1) - carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) * carray(in2)
++ carrayp(out) = carray(in1) * carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 2
++ carrayp(out) = carray(in1) ** 2
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 3
++ carrayp(out) = carray(in1) ** 3
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = abs (carray(in1))
++ array(out*2) = abs (carray(in1))
++ array(out*2+1) = 0
++ call check (expect, carrayp(out))
++
++* Now check the stuff implemented in libF77.
++
++ call prepare1 (carray(in1))
++ expect = cos (carray(in1))
++ carrayp(out) = cos (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = exp (carray(in1))
++ carrayp(out) = exp (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = log (carray(in1))
++ carrayp(out) = log (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = sin (carray(in1))
++ carrayp(out) = sin (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = sqrt (carray(in1))
++ carrayp(out) = sqrt (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = conjg (carray(in1))
++ carrayp(out) = conjg (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1i (carray(in1), pwr)
++ expect = carray(in1) ** pwr
++ carrayp(out) = carray(in1) ** pwr
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) / carray(in2)
++ carrayp(out) = carray(in1) / carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) ** carray(in2)
++ carrayp(out) = carray(in1) ** carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** .2
++ carrayp(out) = carray(in1) ** .2
++ call check (expect, carrayp(out))
++
++ end
++
++ subroutine prepare1 (in)
++ implicit none
++ complex in
++
++ in = (3.2, 4.2)
++
++ end
++
++ subroutine prepare1i (in, i)
++ implicit none
++ complex in
++ integer i
++
++ in = (2.3, 2.5)
++ i = 4
++
++ end
++
++ subroutine prepare2 (in1, in2)
++ implicit none
++ complex in1, in2
++
++ in1 = (1.3, 2.4)
++ in2 = (3.5, 7.1)
++
++ end
++
++ subroutine check (expect, got)
++ implicit none
++ complex expect, got
++
++ if (aimag(expect) .ne. aimag(got)) call abort
++ if (real(expect) .ne. real(got)) call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990325-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990325-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990325-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990325-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,313 @@
++* test whether complex operators properly handle
++* full and partial aliasing.
++* (libf2c/libF77 routines used to assume no aliasing,
++* then were changed to accommodate full aliasing, while
++* the libg2c/libF77 versions were changed to accommodate
++* both full and partial aliasing.)
++*
++* NOTE: this (19990325-1.f) is the double-precision version.
++* See 19990325-0.f for the single-precision version.
++
++ program doublecomplexalias
++ implicit none
++
++* Make sure non-aliased cases work. (Catch roundoff/precision
++* problems, etc., here. Modify subroutine check if they occur.)
++
++ call tryfull (1, 3, 5)
++
++* Now check various combinations of aliasing.
++
++* Full aliasing.
++ call tryfull (1, 1, 5)
++
++* Partial aliasing.
++ call trypart (2, 3, 5)
++ call trypart (2, 1, 5)
++ call trypart (2, 5, 3)
++ call trypart (2, 5, 1)
++
++ end
++
++ subroutine tryfull (xout, xin1, xin2)
++ implicit none
++ integer xout, xin1, xin2
++
++* out, in1, and in2 are the desired indexes into the REAL array (array).
++
++ double complex expect
++ integer pwr
++ integer out, in1, in2
++
++ double precision array(6)
++ double complex carray(3)
++ equivalence (carray(1), array(1))
++
++* Make sure the indexes can be accommodated by the equivalences above.
++
++ if (mod (xout, 2) .ne. 1) call abort
++ if (mod (xin1, 2) .ne. 1) call abort
++ if (mod (xin2, 2) .ne. 1) call abort
++
++* Convert the indexes into ones suitable for the COMPLEX array (carray).
++
++ out = (xout + 1) / 2
++ in1 = (xin1 + 1) / 2
++ in2 = (xin2 + 1) / 2
++
++* Check some open-coded stuff, just in case.
++
++ call prepare1 (carray(in1))
++ expect = + carray(in1)
++ carray(out) = + carray(in1)
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = - carray(in1)
++ carray(out) = - carray(in1)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) + carray(in2)
++ carray(out) = carray(in1) + carray(in2)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) - carray(in2)
++ carray(out) = carray(in1) - carray(in2)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) * carray(in2)
++ carray(out) = carray(in1) * carray(in2)
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 2
++ carray(out) = carray(in1) ** 2
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 3
++ carray(out) = carray(in1) ** 3
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = abs (carray(in1))
++ array(out*2-1) = abs (carray(in1))
++ array(out*2) = 0
++ call check (expect, carray(out))
++
++* Now check the stuff implemented in libF77.
++
++ call prepare1 (carray(in1))
++ expect = cos (carray(in1))
++ carray(out) = cos (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = exp (carray(in1))
++ carray(out) = exp (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = log (carray(in1))
++ carray(out) = log (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = sin (carray(in1))
++ carray(out) = sin (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = sqrt (carray(in1))
++ carray(out) = sqrt (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = conjg (carray(in1))
++ carray(out) = conjg (carray(in1))
++ call check (expect, carray(out))
++
++ call prepare1i (carray(in1), pwr)
++ expect = carray(in1) ** pwr
++ carray(out) = carray(in1) ** pwr
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) / carray(in2)
++ carray(out) = carray(in1) / carray(in2)
++ call check (expect, carray(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) ** carray(in2)
++ carray(out) = carray(in1) ** carray(in2)
++ call check (expect, carray(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** .2
++ carray(out) = carray(in1) ** .2
++ call check (expect, carray(out))
++
++ end
++
++ subroutine trypart (xout, xin1, xin2)
++ implicit none
++ integer xout, xin1, xin2
++
++* out, in1, and in2 are the desired indexes into the REAL array (array).
++
++ double complex expect
++ integer pwr
++ integer out, in1, in2
++
++ double precision array(6)
++ double complex carray(3), carrayp(2)
++ equivalence (carray(1), array(1))
++ equivalence (carrayp(1), array(2))
++
++* Make sure the indexes can be accommodated by the equivalences above.
++
++ if (mod (xout, 2) .ne. 0) call abort
++ if (mod (xin1, 2) .ne. 1) call abort
++ if (mod (xin2, 2) .ne. 1) call abort
++
++* Convert the indexes into ones suitable for the COMPLEX array (carray).
++
++ out = xout / 2
++ in1 = (xin1 + 1) / 2
++ in2 = (xin2 + 1) / 2
++
++* Check some open-coded stuff, just in case.
++
++ call prepare1 (carray(in1))
++ expect = + carray(in1)
++ carrayp(out) = + carray(in1)
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = - carray(in1)
++ carrayp(out) = - carray(in1)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) + carray(in2)
++ carrayp(out) = carray(in1) + carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) - carray(in2)
++ carrayp(out) = carray(in1) - carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) * carray(in2)
++ carrayp(out) = carray(in1) * carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 2
++ carrayp(out) = carray(in1) ** 2
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** 3
++ carrayp(out) = carray(in1) ** 3
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = abs (carray(in1))
++ array(out*2) = abs (carray(in1))
++ array(out*2+1) = 0
++ call check (expect, carrayp(out))
++
++* Now check the stuff implemented in libF77.
++
++ call prepare1 (carray(in1))
++ expect = cos (carray(in1))
++ carrayp(out) = cos (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = exp (carray(in1))
++ carrayp(out) = exp (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = log (carray(in1))
++ carrayp(out) = log (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = sin (carray(in1))
++ carrayp(out) = sin (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = sqrt (carray(in1))
++ carrayp(out) = sqrt (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = conjg (carray(in1))
++ carrayp(out) = conjg (carray(in1))
++ call check (expect, carrayp(out))
++
++ call prepare1i (carray(in1), pwr)
++ expect = carray(in1) ** pwr
++ carrayp(out) = carray(in1) ** pwr
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) / carray(in2)
++ carrayp(out) = carray(in1) / carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare2 (carray(in1), carray(in2))
++ expect = carray(in1) ** carray(in2)
++ carrayp(out) = carray(in1) ** carray(in2)
++ call check (expect, carrayp(out))
++
++ call prepare1 (carray(in1))
++ expect = carray(in1) ** .2
++ carrayp(out) = carray(in1) ** .2
++ call check (expect, carrayp(out))
++
++ end
++
++ subroutine prepare1 (in)
++ implicit none
++ double complex in
++
++ in = (3.2d0, 4.2d0)
++
++ end
++
++ subroutine prepare1i (in, i)
++ implicit none
++ double complex in
++ integer i
++
++ in = (2.3d0, 2.5d0)
++ i = 4
++
++ end
++
++ subroutine prepare2 (in1, in2)
++ implicit none
++ double complex in1, in2
++
++ in1 = (1.3d0, 2.4d0)
++ in2 = (3.5d0, 7.1d0)
++
++ end
++
++ subroutine check (expect, got)
++ implicit none
++ double complex expect, got
++
++ if (dimag(expect) .ne. dimag(got)) call abort
++ if (dble(expect) .ne. dble(got)) call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990419-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990419-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/19990419-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/19990419-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++* Test DO WHILE, to make sure it fully reevaluates its expression.
++* Belongs in execute/.
++ common /x/ ival
++ j = 0
++ do while (i() .eq. 1)
++ j = j + 1
++ if (j .gt. 5) call abort
++ end do
++ if (j .ne. 4) call abort
++ if (ival .ne. 5) call abort
++ end
++ function i()
++ common /x/ ival
++ ival = ival + 1
++ i = 10
++ if (ival .lt. 5) i = 1
++ end
++ block data
++ common /x/ ival
++ data ival/0/
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/970625-2.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/970625-2.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/970625-2.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/970625-2.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,84 @@
++* Date: Wed, 25 Jun 1997 12:48:26 +0200 (MET DST)
++* MIME-Version: 1.0
++* From: R.Hooft@EuroMail.com (Rob Hooft)
++* To: g77-alpha@gnu.ai.mit.edu
++* Subject: Re: testing 970624.
++* In-Reply-To: <199706251027.GAA07892@churchy.gnu.ai.mit.edu>
++* References: <199706251018.MAA21538@nu>
++* <199706251027.GAA07892@churchy.gnu.ai.mit.edu>
++* X-Mailer: VM 6.30 under Emacs 19.34.1
++* Content-Type: text/plain; charset=US-ASCII
++*
++* >>>>> "CB" == Craig Burley <burley@gnu.ai.mit.edu> writes:
++*
++* CB> but OTOH I'd like to see more problems like this on other
++* CB> applications, and especially other systems
++*
++* How about this one: An application that prints "112." on all
++* compilers/platforms I have tested, except with the new g77 on ALPHA (I
++* don't have the new g77 on any other platform here to test)?
++*
++* Application Appended. Source code courtesy of my boss.....
++* Disclaimer: I do not know the right answer, or even whether there is a
++* single right answer.....
++*
++* Regards,
++* --
++* ===== R.Hooft@EuroMail.com http://www.Sander.EMBL-Heidelberg.DE/rob/ ==
++* ==== In need of protein modeling? http://www.Sander.EMBL-Heidelberg.DE/whatif/
++* Validation of protein structures? http://biotech.EMBL-Heidelberg.DE:8400/ ====
++* == PGPid 0xFA19277D == Use Linux! Free Software Rules The World! =============
++*
++* nu[152]for% cat humor.f
++ PROGRAM SUBROUTINE
++ LOGICAL ELSE IF
++ INTEGER REAL, GO TO PROGRAM, WHILE
++ REAL FORMAT(2)
++ DATA IF,REAL,END DO,WHILE,FORMAT(2),I2/2,6,7,1,112.,1/
++ DO THEN=1, END DO, WHILE
++ CALL = END DO - IF
++ PROGRAM = THEN - IF
++ ELSE IF = THEN .GT. IF
++ IF (THEN.GT.REAL) THEN
++ CALL FUNCTION PROGRAM (ELSE IF, GO TO PROGRAM, THEN)
++ ELSE IF (ELSE IF) THEN
++ REAL = THEN + END DO
++ END IF
++ END DO
++ 10 FORMAT(I2/I2) = WHILE*REAL*THEN
++ IF (FORMAT(I2) .NE. FORMAT(I2+I2)) CALL ABORT
++ END ! DO
++ SUBROUTINE FUNCTION PROGRAM (REAL,INTEGER, LOGICAL)
++ LOGICAL REAL
++ REAL LOGICAL
++ INTEGER INTEGER, STOP, RETURN, GO TO
++ ASSIGN 9 TO STOP
++ ASSIGN = 9 + LOGICAL
++ ASSIGN 7 TO RETURN
++ ASSIGN 9 TO GO TO
++ GO TO = 5
++ STOP = 8
++ IF (.NOT.REAL) GOTO STOP
++ IF (LOGICAL.GT.INTEGER) THEN
++ IF = LOGICAL +5
++ IF (LOGICAL.EQ.5) ASSIGN 5 TO IF
++ INTEGER=IF
++ ELSE
++ IF (ASSIGN.GT.STOP) ASSIGN 9 TO GOTO
++ ELSE = GO TO
++ END IF = ELSE + GO TO
++ IF (.NOT.REAL.AND.GOTO.GT.ELSE) GOTO RETURN
++ END IF
++ 5 CONTINUE
++ 7 LOGICAL=LOGICAL+STOP
++ 9 RETURN
++ END ! IF
++* nu[153]for% f77 humor.f
++* nu[154]for% ./a.out
++* 112.0000
++* nu[155]for% f90 humor.f
++* nu[156]for% ./a.out
++* 112.0000
++* nu[157]for% g77 humor.f
++* nu[158]for% ./a.out
++* 40.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/970816-3.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/970816-3.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/970816-3.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/970816-3.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++* Date: Wed, 13 Aug 1997 15:34:23 +0200 (METDST)
++* From: Claus Denk <denk@cica.es>
++* To: g77-alpha@gnu.ai.mit.edu
++* Subject: 970811 report - segfault bug on alpha still there
++*[...]
++* Now, the bug that I reported some weeks ago is still there, I'll post
++* the test program again:
++*
++ PROGRAM TEST
++C a bug in g77-0.5.21 - alpha. Works with NSTART=0 and segfaults with
++C NSTART=1 on the second write.
++ PARAMETER (NSTART=1,NADD=NSTART+1)
++ REAL AB(NSTART:NSTART)
++ AB(NSTART)=1.0
++ I=1
++ J=2
++ IND=I-J+NADD
++ write(*,*) AB(IND)
++ write(*,*) AB(I-J+NADD)
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/971102-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/971102-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/971102-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/971102-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++ i=3
++ j=0
++ do i=i,5
++ j = j+i
++ end do
++ do i=3,i
++ j = j+i
++ end do
++ if (i.ne.7) call abort()
++ print *, i,j
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980520-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980520-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980520-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980520-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++c Produced a link error through not eliminating the unused statement
++c function after 1998-05-15 change to gcc/toplev.c. It's in
++c `execute' since it needs to link.
++c Fixed by 1998-05-23 change to f/com.c.
++ values(i,j) = val((i-1)*n+j)
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,61 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++ equivalence (r1(2), d1)
++ equivalence (r2(2), d2)
++ equivalence (r3(2), d3)
++
++ r1(1) = 1.
++ d1 = 10.
++ r1(4) = 1.
++ r1(5) = 1.
++ i1 = 1
++ r2(1) = 2.
++ d2 = 20.
++ r2(4) = 2.
++ r2(5) = 2.
++ i2 = 2
++ r3(1) = 3.
++ d3 = 30.
++ r3(4) = 3.
++ r3(5) = 3.
++ i3 = 3
++
++ call x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++
++ end
++
++ subroutine x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++
++ if (r1(1) .ne. 1.) call abort
++ if (d1 .ne. 10.) call abort
++ if (r1(4) .ne. 1.) call abort
++ if (r1(5) .ne. 1.) call abort
++ if (i1 .ne. 1) call abort
++ if (r2(1) .ne. 2.) call abort
++ if (d2 .ne. 20.) call abort
++ if (r2(4) .ne. 2.) call abort
++ if (r2(5) .ne. 2.) call abort
++ if (i2 .ne. 2) call abort
++ if (r3(1) .ne. 3.) call abort
++ if (d3 .ne. 30.) call abort
++ if (r3(4) .ne. 3.) call abort
++ if (r3(5) .ne. 3.) call abort
++ if (i3 .ne. 3) call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-10.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-10.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-10.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-10.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++ save
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++ equivalence (r1, c1(2))
++ equivalence (r2, c2(2))
++ equivalence (r3, c3(2))
++
++ c1(1) = '1'
++ r1 = 1.
++ c1(11) = '1'
++ c4 = '4'
++ c2(1) = '2'
++ r2 = 2.
++ c2(11) = '2'
++ c5 = '5'
++ c3(1) = '3'
++ r3 = 3.
++ c3(11) = '3'
++ c6 = '6'
++
++ call x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++
++ end
++
++ subroutine x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++ implicit none
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++
++ if (c1(1) .ne. '1') call abort
++ if (r1 .ne. 1.) call abort
++ if (c1(11) .ne. '1') call abort
++ if (c4 .ne. '4') call abort
++ if (c2(1) .ne. '2') call abort
++ if (r2 .ne. 2.) call abort
++ if (c2(11) .ne. '2') call abort
++ if (c5 .ne. '5') call abort
++ if (c3(1) .ne. '3') call abort
++ if (r3 .ne. 3.) call abort
++ if (c3(11) .ne. '3') call abort
++ if (c6 .ne. '6') call abort
++
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,62 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++ save
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++ equivalence (r1(2), d1)
++ equivalence (r2(2), d2)
++ equivalence (r3(2), d3)
++
++ r1(1) = 1.
++ d1 = 10.
++ r1(4) = 1.
++ r1(5) = 1.
++ i1 = 1
++ r2(1) = 2.
++ d2 = 20.
++ r2(4) = 2.
++ r2(5) = 2.
++ i2 = 2
++ r3(1) = 3.
++ d3 = 30.
++ r3(4) = 3.
++ r3(5) = 3.
++ i3 = 3
++
++ call x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++
++ end
++
++ subroutine x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++
++ if (r1(1) .ne. 1.) call abort
++ if (d1 .ne. 10.) call abort
++ if (r1(4) .ne. 1.) call abort
++ if (r1(5) .ne. 1.) call abort
++ if (i1 .ne. 1) call abort
++ if (r2(1) .ne. 2.) call abort
++ if (d2 .ne. 20.) call abort
++ if (r2(4) .ne. 2.) call abort
++ if (r2(5) .ne. 2.) call abort
++ if (i2 .ne. 2) call abort
++ if (r3(1) .ne. 3.) call abort
++ if (d3 .ne. 30.) call abort
++ if (r3(4) .ne. 3.) call abort
++ if (r3(5) .ne. 3.) call abort
++ if (i3 .ne. 3) call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-2.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-2.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-2.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-2.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++ equivalence (c1(2), r1)
++ equivalence (c2(2), r2)
++ equivalence (c3(2), r3)
++
++ c1(1) = '1'
++ r1 = 1.
++ c1(11) = '1'
++ c4 = '4'
++ c2(1) = '2'
++ r2 = 2.
++ c2(11) = '2'
++ c5 = '5'
++ c3(1) = '3'
++ r3 = 3.
++ c3(11) = '3'
++ c6 = '6'
++
++ call x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++
++ end
++
++ subroutine x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++ implicit none
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++
++ if (c1(1) .ne. '1') call abort
++ if (r1 .ne. 1.) call abort
++ if (c1(11) .ne. '1') call abort
++ if (c4 .ne. '4') call abort
++ if (c2(1) .ne. '2') call abort
++ if (r2 .ne. 2.) call abort
++ if (c2(11) .ne. '2') call abort
++ if (c5 .ne. '5') call abort
++ if (c3(1) .ne. '3') call abort
++ if (r3 .ne. 3.) call abort
++ if (c3(11) .ne. '3') call abort
++ if (c6 .ne. '6') call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-3.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-3.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-3.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-3.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++ save
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++ equivalence (c1(2), r1)
++ equivalence (c2(2), r2)
++ equivalence (c3(2), r3)
++
++ c1(1) = '1'
++ r1 = 1.
++ c1(11) = '1'
++ c4 = '4'
++ c2(1) = '2'
++ r2 = 2.
++ c2(11) = '2'
++ c5 = '5'
++ c3(1) = '3'
++ r3 = 3.
++ c3(11) = '3'
++ c6 = '6'
++
++ call x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++
++ end
++
++ subroutine x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++ implicit none
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++
++ if (c1(1) .ne. '1') call abort
++ if (r1 .ne. 1.) call abort
++ if (c1(11) .ne. '1') call abort
++ if (c4 .ne. '4') call abort
++ if (c2(1) .ne. '2') call abort
++ if (r2 .ne. 2.) call abort
++ if (c2(11) .ne. '2') call abort
++ if (c5 .ne. '5') call abort
++ if (c3(1) .ne. '3') call abort
++ if (r3 .ne. 3.) call abort
++ if (c3(11) .ne. '3') call abort
++ if (c6 .ne. '6') call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-4.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-4.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-4.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-4.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system,
++* including when initial values are provided (e.g. DATA).
++
++ program test
++ implicit none
++
++ real r
++ double precision d
++ common /cmn/ r, d
++
++ if (r .ne. 1.) call abort
++ if (d .ne. 10.) call abort
++
++ end
++
++ block data init
++ implicit none
++
++ real r
++ double precision d
++ common /cmn/ r, d
++
++ data r/1./, d/10./
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-5.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-5.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-5.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-5.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system,
++* including when initial values are provided (e.g. DATA).
++
++ program test
++ implicit none
++
++ character c
++ double precision d
++ common /cmn/ c, d
++
++ if (c .ne. '1') call abort
++ if (d .ne. 10.) call abort
++
++ end
++
++ block data init
++ implicit none
++
++ character c
++ double precision d
++ common /cmn/ c, d
++
++ data c/'1'/, d/10./
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-6.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-6.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-6.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-6.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system,
++* including when initial values are provided (e.g. DATA).
++
++ program test
++ implicit none
++
++ character c
++ double precision d(100)
++ common /cmn/ c, d
++
++ if (d(80) .ne. 10.) call abort
++
++ end
++
++ block data init
++ implicit none
++
++ character c
++ double precision d(100)
++ common /cmn/ c, d
++
++ data d(80)/10./
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-7.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-7.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-7.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-7.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,62 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++ equivalence (d1, r1(2))
++ equivalence (d2, r2(2))
++ equivalence (d3, r3(2))
++
++ r1(1) = 1.
++ d1 = 10.
++ r1(4) = 1.
++ r1(5) = 1.
++ i1 = 1
++ r2(1) = 2.
++ d2 = 20.
++ r2(4) = 2.
++ r2(5) = 2.
++ i2 = 2
++ r3(1) = 3.
++ d3 = 30.
++ r3(4) = 3.
++ r3(5) = 3.
++ i3 = 3
++
++ call x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++
++ end
++
++ subroutine x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++
++ if (r1(1) .ne. 1.) call abort
++ if (d1 .ne. 10.) call abort
++ if (r1(4) .ne. 1.) call abort
++ if (r1(5) .ne. 1.) call abort
++ if (i1 .ne. 1) call abort
++ if (r2(1) .ne. 2.) call abort
++ if (d2 .ne. 20.) call abort
++ if (r2(4) .ne. 2.) call abort
++ if (r2(5) .ne. 2.) call abort
++ if (i2 .ne. 2) call abort
++ if (r3(1) .ne. 3.) call abort
++ if (d3 .ne. 30.) call abort
++ if (r3(4) .ne. 3.) call abort
++ if (r3(5) .ne. 3.) call abort
++ if (i3 .ne. 3) call abort
++
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-8.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-8.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-8.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-8.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++ save
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++ equivalence (d1, r1(2))
++ equivalence (d2, r2(2))
++ equivalence (d3, r3(2))
++
++ r1(1) = 1.
++ d1 = 10.
++ r1(4) = 1.
++ r1(5) = 1.
++ i1 = 1
++ r2(1) = 2.
++ d2 = 20.
++ r2(4) = 2.
++ r2(5) = 2.
++ i2 = 2
++ r3(1) = 3.
++ d3 = 30.
++ r3(4) = 3.
++ r3(5) = 3.
++ i3 = 3
++
++ call x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++
++ end
++
++ subroutine x (r1, d1, i1, r2, d2, i2, r3, d3, i3)
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++
++ if (r1(1) .ne. 1.) call abort
++ if (d1 .ne. 10.) call abort
++ if (r1(4) .ne. 1.) call abort
++ if (r1(5) .ne. 1.) call abort
++ if (i1 .ne. 1) call abort
++ if (r2(1) .ne. 2.) call abort
++ if (d2 .ne. 20.) call abort
++ if (r2(4) .ne. 2.) call abort
++ if (r2(5) .ne. 2.) call abort
++ if (i2 .ne. 2) call abort
++ if (r3(1) .ne. 3.) call abort
++ if (d3 .ne. 30.) call abort
++ if (r3(4) .ne. 3.) call abort
++ if (r3(5) .ne. 3.) call abort
++ if (i3 .ne. 3) call abort
++
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-9.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-9.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980628-9.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980628-9.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++ equivalence (r1, c1(2))
++ equivalence (r2, c2(2))
++ equivalence (r3, c3(2))
++
++ c1(1) = '1'
++ r1 = 1.
++ c1(11) = '1'
++ c4 = '4'
++ c2(1) = '2'
++ r2 = 2.
++ c2(11) = '2'
++ c5 = '5'
++ c3(1) = '3'
++ r3 = 3.
++ c3(11) = '3'
++ c6 = '6'
++
++ call x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++
++ end
++
++ subroutine x (c1, r1, c2, r2, c3, r3, c4, c5, c6)
++ implicit none
++
++ character c1(11), c2(11), c3(11)
++ real r1, r2, r3
++ character c4, c5, c6
++
++ if (c1(1) .ne. '1') call abort
++ if (r1 .ne. 1.) call abort
++ if (c1(11) .ne. '1') call abort
++ if (c4 .ne. '4') call abort
++ if (c2(1) .ne. '2') call abort
++ if (r2 .ne. 2.) call abort
++ if (c2(11) .ne. '2') call abort
++ if (c5 .ne. '5') call abort
++ if (c3(1) .ne. '3') call abort
++ if (r3 .ne. 3.) call abort
++ if (c3(11) .ne. '3') call abort
++ if (c6 .ne. '6') call abort
++
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980701-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980701-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980701-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980701-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,72 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ real s1(2), s2(2), s3(2)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++ equivalence (r1, s1(2))
++ equivalence (d1, r1(2))
++ equivalence (r2, s2(2))
++ equivalence (d2, r2(2))
++ equivalence (r3, s3(2))
++ equivalence (d3, r3(2))
++
++ s1(1) = 1.
++ r1(1) = 1.
++ d1 = 10.
++ r1(4) = 1.
++ r1(5) = 1.
++ i1 = 1
++ s2(1) = 2.
++ r2(1) = 2.
++ d2 = 20.
++ r2(4) = 2.
++ r2(5) = 2.
++ i2 = 2
++ s3(1) = 3.
++ r3(1) = 3.
++ d3 = 30.
++ r3(4) = 3.
++ r3(5) = 3.
++ i3 = 3
++
++ call x (s1, r1, d1, i1, s2, r2, d2, i2, s3, r3, d3, i3)
++
++ end
++
++ subroutine x (s1, r1, d1, i1, s2, r2, d2, i2, s3, r3, d3, i3)
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ real s1(2), s2(2), s3(2)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++
++ if (s1(1) .ne. 1.) call abort
++ if (r1(1) .ne. 1.) call abort
++ if (d1 .ne. 10.) call abort
++ if (r1(4) .ne. 1.) call abort
++ if (r1(5) .ne. 1.) call abort
++ if (i1 .ne. 1) call abort
++ if (s2(1) .ne. 2.) call abort
++ if (r2(1) .ne. 2.) call abort
++ if (d2 .ne. 20.) call abort
++ if (r2(4) .ne. 2.) call abort
++ if (r2(5) .ne. 2.) call abort
++ if (i2 .ne. 2) call abort
++ if (s3(1) .ne. 3.) call abort
++ if (r3(1) .ne. 3.) call abort
++ if (d3 .ne. 30.) call abort
++ if (r3(4) .ne. 3.) call abort
++ if (r3(5) .ne. 3.) call abort
++ if (i3 .ne. 3) call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980701-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980701-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/980701-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/980701-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,72 @@
++* g77 0.5.23 and previous had bugs involving too little space
++* allocated for EQUIVALENCE and COMMON areas needing initial
++* padding to meet alignment requirements of the system.
++
++ call subr
++ end
++
++ subroutine subr
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ real s1(2), s2(2), s3(2)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++ equivalence (d1, r1(2))
++ equivalence (r1, s1(2))
++ equivalence (d2, r2(2))
++ equivalence (r2, s2(2))
++ equivalence (d3, r3(2))
++ equivalence (r3, s3(2))
++
++ s1(1) = 1.
++ r1(1) = 1.
++ d1 = 10.
++ r1(4) = 1.
++ r1(5) = 1.
++ i1 = 1
++ s2(1) = 2.
++ r2(1) = 2.
++ d2 = 20.
++ r2(4) = 2.
++ r2(5) = 2.
++ i2 = 2
++ s3(1) = 3.
++ r3(1) = 3.
++ d3 = 30.
++ r3(4) = 3.
++ r3(5) = 3.
++ i3 = 3
++
++ call x (s1, r1, d1, i1, s2, r2, d2, i2, s3, r3, d3, i3)
++
++ end
++
++ subroutine x (s1, r1, d1, i1, s2, r2, d2, i2, s3, r3, d3, i3)
++ implicit none
++
++ real r1(5), r2(5), r3(5)
++ real s1(2), s2(2), s3(2)
++ double precision d1, d2, d3
++ integer i1, i2, i3
++
++ if (s1(1) .ne. 1.) call abort
++ if (r1(1) .ne. 1.) call abort
++ if (d1 .ne. 10.) call abort
++ if (r1(4) .ne. 1.) call abort
++ if (r1(5) .ne. 1.) call abort
++ if (i1 .ne. 1) call abort
++ if (s2(1) .ne. 2.) call abort
++ if (r2(1) .ne. 2.) call abort
++ if (d2 .ne. 20.) call abort
++ if (r2(4) .ne. 2.) call abort
++ if (r2(5) .ne. 2.) call abort
++ if (i2 .ne. 2) call abort
++ if (s3(1) .ne. 3.) call abort
++ if (r3(1) .ne. 3.) call abort
++ if (d3 .ne. 30.) call abort
++ if (r3(4) .ne. 3.) call abort
++ if (r3(5) .ne. 3.) call abort
++ if (i3 .ne. 3) call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/alpha2.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/alpha2.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/alpha2.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/alpha2.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++c This was originally a compile test.
++ IMPLICIT REAL*8 (A-H,O-Z)
++ COMMON /C/ A(9), INT
++ DATA A /
++ 1 0.49999973986348730D01, 0.40000399113084100D01,
++ 2 0.29996921166596490D01, 0.20016917082678680D01,
++ 3 0.99126390351864390D00, 0.97963256554443300D-01,
++ 4 -0.87360964813570100D-02, 0.16917082678692080D-02,
++ 5 7./
++C Data values were once mis-compiled on (OSF/1 ?) Alpha with -O2
++c such that, for instance, `7.' appeared as `4.' in the assembler
++c output.
++ call test(a(9), 7)
++ END
++ subroutine test(r, i)
++ double precision r
++ if (nint(r)/=i) call abort
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/auto0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/auto0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/auto0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/auto0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,80 @@
++* Test automatic arrays.
++ program auto0
++ implicit none
++ integer i
++ integer j0(40)
++ integer j1(40)
++ integer jc0(40)
++ integer jc1(40)
++ common /jc0/ jc0
++ common /jc1/ jc1
++
++ data j0/40*3/
++ data j1/40*4/
++
++ i = 40
++ call a1 (j0, j1, i)
++
++ do i = 1, 40
++ if (j0(i) .ne. 4) call abort
++ if (j1(i) .ne. 3) call abort
++ if (jc0(i) .ne. 6) call abort
++ if (jc1(i) .ne. 5) call abort
++ end do
++
++ end
++
++ block data jc
++ implicit none
++ integer jc0(40)
++ integer jc1(40)
++ common /jc0/ jc0
++ common /jc1/ jc1
++
++ data jc0/40*5/
++ data jc1/40*6/
++
++ end
++
++ subroutine a1 (j0, j1, n)
++ implicit none
++ integer j0(40), j1(40), n
++ integer k0(n), k1(n)
++ integer i
++ integer jc0(40)
++ integer jc1(40)
++ common /jc0/ jc0
++ common /jc1/ jc1
++
++ do i = 1, 40
++ j0(i) = j1(i) - j0(i)
++ jc0(i) = jc1(i) - jc0(i)
++ end do
++
++ n = -1
++
++ do i = 1, 40
++ k0(i) = n
++ k1(i) = n
++ end do
++
++ do i = 1, 40
++ j1(i) = j1(i) + k0(i) * j0(i)
++ jc1(i) = jc1(i) + k1(i) * jc0(i)
++ end do
++
++ n = 500
++
++ do i = 1, 40
++ if (k0(i) .ne. -1) call abort
++ k0(i) = n
++ if (k1(i) .ne. -1) call abort
++ k1(i) = n
++ end do
++
++ do i = 1, 40
++ j0(i) = j1(i) + j0(i)
++ jc0(i) = jc1(i) + jc0(i)
++ end do
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/auto1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/auto1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/auto1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/auto1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,88 @@
++* Test automatic arrays.
++ program auto1
++ implicit none
++ integer i
++ integer j0(40)
++ integer j1(40)
++ integer jc0(40)
++ integer jc1(40)
++ common /jc0/ jc0
++ common /jc1/ jc1
++
++ data j0/40*3/
++ data j1/40*4/
++
++ i = 40
++ call a1 (j0, j1, i)
++
++ do i = 1, 40
++ if (j0(i) .ne. 4) call abort
++ if (j1(i) .ne. 3) call abort
++ if (jc0(i) .ne. 6) call abort
++ if (jc1(i) .ne. 5) call abort
++ end do
++
++ end
++
++ block data jc
++ implicit none
++ integer jc0(40)
++ integer jc1(40)
++ common /jc0/ jc0
++ common /jc1/ jc1
++
++ data jc0/40*5/
++ data jc1/40*6/
++
++ end
++
++ subroutine a1 (j0, j1, n)
++ implicit none
++ integer j0(40), j1(40), n
++ integer k0(n,3,2), k1(n,3,2)
++ integer i,j,k
++ integer jc0(40)
++ integer jc1(40)
++ common /jc0/ jc0
++ common /jc1/ jc1
++
++ do i = 1, 40
++ j0(i) = j1(i) - j0(i)
++ jc0(i) = jc1(i) - jc0(i)
++ end do
++
++ n = -1
++
++ do k = 1, 2
++ do j = 1, 3
++ do i = 1, 40
++ k0(i, j, k) = n
++ k1(i, j, k) = n
++ end do
++ end do
++ end do
++
++ do i = 1, 40
++ j1(i) = j1(i) + k0(i, 3, 2) * j0(i)
++ jc1(i) = jc1(i) + k1(i, 1, 1) * jc0(i)
++ end do
++
++ n = 500
++
++ do k = 1, 2
++ do j = 1, 3
++ do i = 1, 40
++ if (k0(i, j, k) .ne. -1) call abort
++ k0(i, j, k) = n
++ if (k1(i, j, k) .ne. -1) call abort
++ k1(i, j, k) = n
++ end do
++ end do
++ end do
++
++ do i = 1, 40
++ j0(i) = j1(i) + j0(i)
++ jc0(i) = jc1(i) + jc0(i)
++ end do
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/cabs.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/cabs.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/cabs.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/cabs.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++ program cabs_1
++ complex z0
++ real r0
++ complex*16 z1
++ real*8 r1
++
++ z0 = cmplx(3.,4.)
++ r0 = cabs(z0)
++ if (r0 .ne. 5.) call abort
++
++ z1 = dcmplx(3.d0,4.d0)
++ r1 = zabs(z1)
++ if (r1 .ne. 5.d0) call abort
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/claus.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/claus.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/claus.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/claus.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++ PROGRAM TEST
++ REAL AB(3)
++ do i=1,3
++ AB(i)=i
++ enddo
++ k=1
++ n=2
++ ind=k-n+2
++ if (ind /= 1) call abort
++ if (ab(ind) /= 1) call abort
++ if (k-n+2 /= 1) call abort
++ if (ab(k-n+2) /= 1) call abort
++ END
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/complex_1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/complex_1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/complex_1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/complex_1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++ program complex_1
++ complex z0, z1, z2
++
++ z0 = cmplx(0.,.5)
++ z1 = 1./z0
++ if (z1 .ne. cmplx(0.,-2)) call abort
++
++ z0 = 10.*z0
++ if (z0 .ne. cmplx(0.,5.)) call abort
++
++ z2 = cmplx(1.,2.)
++ z1 = z0/z2
++ if (z1 .ne. cmplx(2.,1.)) call abort
++
++ z1 = z0*z2
++ if (z1 .ne. cmplx(-10.,5.)) call abort
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/cpp.F gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/cpp.F
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/cpp.F 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/cpp.F 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++! Some versions of cpp will delete "//'World' as a C++ comment.
++ character*40 title
++ title = 'Hello '//'World'
++ if (title .ne. 'Hello World') call abort
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/dcomplex.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/dcomplex.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/dcomplex.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/dcomplex.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++ program foo
++ complex*16 z0, z1, z2
++
++ z0 = dcmplx(0.,.5)
++ z1 = 1./z0
++ if (z1 .ne. dcmplx(0.,-2)) call abort
++
++ z0 = 10.*z0
++ if (z0 .ne. dcmplx(0.,5.)) call abort
++
++ z2 = cmplx(1.,2.)
++ z1 = z0/z2
++ if (z1 .ne. dcmplx(2.,1.)) call abort
++
++ z1 = z0*z2
++ if (z1 .ne. dcmplx(-10.,5.)) call abort
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/dnrm2.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/dnrm2.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/dnrm2.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/dnrm2.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,74 @@
++CCC g77 0.5.21 `Actual Bugs':
++CCC * A code-generation bug afflicts Intel x86 targets when `-O2' is
++CCC specified compiling, for example, an old version of the `DNRM2'
++CCC routine. The x87 coprocessor stack is being somewhat mismanaged
++CCC in cases where assigned `GOTO' and `ASSIGN' are involved.
++CCC
++CCC Version 0.5.21 of `g77' contains an initial effort to fix the
++CCC problem, but this effort is incomplete, and a more complete fix is
++CCC planned for the next release.
++
++C Currently this test fails with (at least) `-O2 -funroll-loops' on
++C i586-unknown-linux-gnulibc1.
++
++C (This is actually an obsolete version of dnrm2 -- consult the
++c current Netlib BLAS.)
++
++ integer i
++ double precision a(1:100), dnrm2
++ do i=1,100
++ a(i)=0.D0
++ enddo
++ if (dnrm2(100,a,1) .ne. 0.0) call abort
++ end
++
++ double precision function dnrm2 ( n, dx, incx)
++ integer i, incx, ix, j, n, next
++ double precision dx(1), cutlo, cuthi, hitest, sum, xmax,zero,one
++ data zero, one /0.0d0, 1.0d0/
++ data cutlo, cuthi / 8.232d-11, 1.304d19 /
++ j = 0
++ if(n .gt. 0 .and. incx.gt.0) go to 10
++ dnrm2 = zero
++ go to 300
++ 10 assign 30 to next
++ sum = zero
++ i = 1
++ ix = 1
++ 20 go to next,(30, 50, 70, 110)
++ 30 if( dabs(dx(i)) .gt. cutlo) go to 85
++ assign 50 to next
++ xmax = zero
++ 50 if( dx(i) .eq. zero) go to 200
++ if( dabs(dx(i)) .gt. cutlo) go to 85
++ assign 70 to next
++ go to 105
++ 100 continue
++ ix = j
++ assign 110 to next
++ sum = (sum / dx(i)) / dx(i)
++ 105 xmax = dabs(dx(i))
++ go to 115
++ 70 if( dabs(dx(i)) .gt. cutlo ) go to 75
++ 110 if( dabs(dx(i)) .le. xmax ) go to 115
++ sum = one + sum * (xmax / dx(i))**2
++ xmax = dabs(dx(i))
++ go to 200
++ 115 sum = sum + (dx(i)/xmax)**2
++ go to 200
++ 75 sum = (sum * xmax) * xmax
++ 85 hitest = cuthi/float( n )
++ do 95 j = ix,n
++ if(dabs(dx(i)) .ge. hitest) go to 100
++ sum = sum + dx(i)**2
++ i = i + incx
++ 95 continue
++ dnrm2 = dsqrt( sum )
++ go to 300
++ 200 continue
++ ix = ix + 1
++ i = i + incx
++ if( ix .le. n ) go to 20
++ dnrm2 = xmax * dsqrt(sum)
++ 300 continue
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/erfc.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/erfc.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/erfc.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/erfc.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++c============================================== test.f
++ real x, y
++ real*8 x1, y1
++ x=0.
++ y = erfc(x)
++ if (y .ne. 1.) call abort
++
++ x=1.1
++ y = erfc(x)
++ if (abs(y - .1197949) .ge. 1.e-6) call abort
++
++* modified from x=10, y .gt. 1.5e-44 to avoid lack of -mieee on Alphas.
++ x=8
++ y = erfc(x)
++ if (y .gt. 1.2e-28) call abort
++
++ x1=0.
++ y1 = erfc(x1)
++ if (y1 .ne. 1.) call abort
++
++ x1=1.1d0
++ y1 = erfc(x1)
++ if (abs(y1 - .1197949d0) .ge. 1.d-6) call abort
++
++ x1=10
++ y1 = erfc(x1)
++ if (y1 .gt. 1.5d-44) call abort
++ end
++c=================================================
++!output:
++! 0. 1.875
++! 1.10000002 1.48958981
++! 10. 5.00220949E-06
++!
++!The values should be:
++!erfc(0)=1
++!erfc(1.1)= 0.1197949
++!erfc(10)<1.543115467311259E-044
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/execute.exp gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/execute.exp
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/execute.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/execute.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++# Copyright (C) 1991, 1992, 1993, 1995, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-g77@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++# Modified and maintained by Jeffrey Wheat (cassidy@cygnus.com)
++
++#
++# These tests come from Torbjorn Granlund (tege@cygnus.com)
++# Fortran torture test suite.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib f-torture.exp
++
++#
++# main test loop
++#
++
++foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.f]] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $src] then {
++ continue
++ }
++
++ f-torture-execute $src
++}
++
++foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.F]] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $src] then {
++ continue
++ }
++
++ f-torture-execute $src
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/exp.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/exp.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/exp.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/exp.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++ a = 2**-2*1.
++ if (a .ne. .25) call abort
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/io0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/io0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/io0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/io0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++* Preliminary tests for a few things in the i/o library.
++* Thrown together by Dave Love not from specific bug reports --
++* other ideas welcome.
++
++ character *(*) fmt
++ parameter (fmt='(1x,i3,f5.1)')
++* Scratch file makes sure we can use one and avoids dealing with
++* explicit i/o in the testsuite.
++ open(90, status='scratch') ! try a biggish unit number
++ write(90, '()') ! extra record for interest
++* Formatted i/o can go wild (endless loop AFAIR) if we're wrongly
++* assuming an ANSI sprintf.
++ write(90, fmt) 123, 123.0
++ backspace 90 ! backspace problems reported on DOSish systems
++ read(90, fmt) i, r
++ endfile 90
++ if (i/=123 .or. nint(r)/=123) call abort
++ rewind 90 ! make sure we can rewind too
++ read(90, '()')
++ read(90, fmt) i, r
++ if (i/=123 .or. nint(r)/=123) call abort
++ close(90)
++* Make sure we can do unformatted i/o OK. This might be
++* problematic on DOS-like systems if we've done an fopen in text
++* mode, not binary.
++ open(90, status='scratch', access='direct', form='unformatted',
++ + recl=8)
++ write(90, rec=1) 123, 123.0
++ read(90, rec=1) i, r
++ if (i/=123 .or. nint(r)/=123) call abort
++ close(90)
++ open(90, status='scratch', form='unformatted')
++ write(90) 123, 123.0
++ backspace 90
++ read(90) i, r
++ if (i/=123 .or. nint(r)/=123) call abort
++ close(90)
++* Fails at 1998-09-01 on spurious recursive i/o check (fixed by
++* 1998-09-06 libI77 change):
++ open(90, status='scratch', form='formatted', recl=16,
++ + access='direct')
++ write(90, '(i8,f8.1)',rec=1) 123, 123.0
++ read(90, '(i8,f8.1)', rec=1) i, r
++ if (i/=123 .or. nint(r)/=123) call abort
++ close(90)
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/io1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/io1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/io1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/io1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++* Fixed by 1998-09-28 libI77/open.c change.
++ open(90,status='scratch')
++ write(90, '(1X, I1 / 1X, I1)') 1, 2
++ rewind 90
++ write(90, '(1X, I1)') 1
++ rewind 90 ! implicit ENDFILE expected
++ read(90, *) i
++ read(90, *, end=10) j
++ call abort()
++ 10 end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/labug1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/labug1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/labug1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/labug1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++ PROGRAM LABUG1
++
++* This program core dumps on mips-sgi-irix6.2 when compiled
++* with egcs-19981101, egcs-19981109 and egcs-19981122 snapshots
++* with -O2
++*
++* Originally derived from LAPACK test suite.
++* Almost any change allows it to run.
++*
++* David Billinghurst, (David.Billinghurst@riotinto.com.au)
++* 25 November 1998
++*
++* .. Parameters ..
++ INTEGER LDA, LDE
++ PARAMETER ( LDA = 2500, LDE = 50 )
++ COMPLEX CZERO
++ PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ) )
++
++ INTEGER I, J, M, N
++ REAL V
++ COMPLEX A(LDA),B(LDA),C(LDA),E(LDE,LDE),F(LDE,LDE)
++ COMPLEX Z
++
++ N=2
++ M=1
++*
++ do i = 1, m
++ do j = 1, n
++ e(i,j) = czero
++ f(i,j) = czero
++ end do
++ end do
++*
++ DO J = 1, N
++ DO I = 1, M
++ V = ABS( E(I,J) - F(I,J) )
++ END DO
++ END DO
++
++ CALL SUB2(M,Z)
++
++ END
++
++ subroutine SUB2(I,A)
++ integer i
++ complex a
++ end
++
++
++
++
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/large_vec.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/large_vec.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/large_vec.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/large_vec.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++ parameter (nmax=165000)
++ double precision x(nmax)
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/le.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/le.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/le.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/le.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++ program fool
++
++ real foo
++ integer n
++ logical t
++
++ foo = 2.5
++ n = 5
++
++ t = (n > foo)
++ if (t .neqv. .true.) call abort
++ t = (n >= foo)
++ if (t .neqv. .true.) call abort
++ t = (n < foo)
++ if (t .neqv. .false.) call abort
++ t = (n <= 5)
++ if (t .neqv. .true.) call abort
++ t = (n >= 5 )
++ if (t .neqv. .true.) call abort
++ t = (n == 5)
++ if (t .neqv. .true.) call abort
++ t = (n /= 5)
++ if (t .neqv. .false.) call abort
++ t = (n /= foo)
++ if (t .neqv. .true.) call abort
++ t = (n == foo)
++ if (t .neqv. .false.) call abort
++
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/short.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/short.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/short.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/short.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++ program short
++
++ parameter ( N=2 )
++ common /chb/ pi,sig(0:N)
++ common /parm/ h(2,2)
++
++c initialize some variables
++ h(2,2) = 1117
++ h(2,1) = 1178
++ h(1,2) = 1568
++ h(1,1) = 1621
++ sig(0) = -1.
++ sig(1) = 0.
++ sig(2) = 1.
++
++ call printout
++ stop
++ end
++
++c ******************************************************************
++
++ subroutine printout
++ parameter ( N=2 )
++ common /chb/ pi,sig(0:N)
++ common /parm/ h(2,2)
++ dimension yzin1(0:N), yzin2(0:N)
++
++c function subprograms
++ z(i,j,k) = 0.5*h(i,j)*(sig(k)-1.)
++
++c a four-way average of rhobar
++ do 260 k=0,N
++ yzin1(k) = 0.25 *
++ & ( z(2,2,k) + z(1,2,k) +
++ & z(2,1,k) + z(1,1,k) )
++ 260 continue
++
++c another four-way average of rhobar
++ do 270 k=0,N
++ rtmp1 = z(2,2,k)
++ rtmp2 = z(1,2,k)
++ rtmp3 = z(2,1,k)
++ rtmp4 = z(1,1,k)
++ yzin2(k) = 0.25 *
++ & ( rtmp1 + rtmp2 + rtmp3 + rtmp4 )
++ 270 continue
++
++ do k=0,N
++ if (yzin1(k) .ne. yzin2(k)) call abort
++ enddo
++ if (yzin1(0) .ne. -1371.) call abort
++ if (yzin1(1) .ne. -685.5) call abort
++ if (yzin1(2) .ne. 0.) call abort
++
++ return
++ end
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/u77-test.f gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/u77-test.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/execute/u77-test.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/execute/u77-test.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,421 @@
++*** Some random stuff for testing libU77. Should be done better. It's
++* hard to test things where you can't guarantee the result. Have a
++* good squint at what it prints, though detected errors will cause
++* starred messages.
++*
++* Currently not tested:
++* ALARM
++* CHDIR (func)
++* CHMOD (func)
++* FGET (func/subr)
++* FGETC (func)
++* FPUT (func/subr)
++* FPUTC (func)
++* FSTAT (subr)
++* GETCWD (subr)
++* HOSTNM (subr)
++* IRAND
++* KILL
++* LINK (func)
++* LSTAT (subr)
++* RENAME (func/subr)
++* SIGNAL (subr)
++* SRAND
++* STAT (subr)
++* SYMLNK (func/subr)
++* UMASK (func)
++* UNLINK (func)
++*
++* NOTE! This is the testsuite version, so it should compile and
++* execute on all targets, and either run to completion (with
++* success status) or fail (by calling abort). The *other* version,
++* which is a bit more interactive and tests a couple of things
++* this one cannot, should be generally the same, and is in
++* libf2c/libU77/u77-test.f. Please keep it up-to-date.
++
++ implicit none
++
++ external hostnm
++* intrinsic hostnm
++ integer hostnm
++
++ integer i, j, k, ltarray (9), idat (3), count, rate, count_max,
++ + pid, mask
++ real tarray1(2), tarray2(2), r1, r2
++ double precision d1
++ integer(kind=2) bigi
++ logical issum
++ intrinsic getpid, getuid, getgid, ierrno, gerror, time8,
++ + fnum, isatty, getarg, access, unlink, fstat, iargc,
++ + stat, lstat, getcwd, gmtime, etime, chmod, itime, date,
++ + chdir, fgetc, fputc, system_clock, second, idate, secnds,
++ + time, ctime, fdate, ttynam, date_and_time, mclock, mclock8,
++ + cpu_time, dtime, ftell, abort
++ external lenstr, ctrlc
++ integer lenstr
++ logical l
++ character gerr*80, c*1
++ character ctim*25, line*80, lognam*20, wd*100, line2*80, ddate*8,
++ + ttime*10, zone*5, ctim2*25
++ integer fstatb (13), statb (13)
++ integer *2 i2zero
++ integer values(8)
++ integer(kind=7) sigret
++
++ i = time ()
++ ctim = ctime (i)
++ WRITE (6,'(A/)') '1 GNU libU77 test at: ' // ctim(:lenstr (ctim))
++ write (6,'(A,I3,'', '',I3)')
++ + ' Logical units 5 and 6 correspond (FNUM) to'
++ + // ' Unix i/o units ', fnum(5), fnum(6)
++ if (lnblnk('foo ').ne.3 .or. len_trim('foo ').ne.3) then
++ print *, 'LNBLNK or LEN_TRIM failed'
++ call abort
++ end if
++
++ bigi = time8 ()
++
++ call ctime (i, ctim2)
++ if (ctim .ne. ctim2) then
++ write (6, *) '*** CALL CTIME disagrees with CTIME(): ',
++ + ctim2(:lenstr (ctim2)), ' vs. ', ctim(:lenstr (ctim))
++ call doabort
++ end if
++
++ j = time ()
++ if (i .gt. bigi .or. bigi .gt. j) then
++ write (6, *) '*** TIME/TIME8/TIME sequence failures: ',
++ + i, bigi, j
++ call doabort
++ end if
++
++ print *, 'Command-line arguments: ', iargc ()
++ do i = 0, iargc ()
++ call getarg (i, line)
++ print *, 'Arg ', i, ' is: ', line(:lenstr (line))
++ end do
++
++ l= isatty(6)
++ line2 = ttynam(6)
++ if (l) then
++ line = 'and 6 is a tty device (ISATTY) named '//line2
++ else
++ line = 'and 6 isn''t a tty device (ISATTY)'
++ end if
++ write (6,'(1X,A)') line(:lenstr(line))
++ call ttynam (6, line)
++ if (line .ne. line2) then
++ print *, '*** CALL TTYNAM disagrees with TTYNAM: ',
++ + line(:lenstr (line))
++ call doabort
++ end if
++
++* regression test for compiler crash fixed by JCB 1998-08-04 com.c
++ sigret = signal(2, ctrlc)
++
++ pid = getpid()
++ WRITE (6,'(A,I10)') ' Process id (GETPID): ', pid
++ WRITE (6,'(A,I10)') ' User id (GETUID): ', GETUID ()
++ WRITE (6,'(A,I10)') ' Group id (GETGID): ', GETGID ()
++ WRITE (6, *) 'If you have the `id'' program, the following call'
++ write (6, *) 'of SYSTEM should agree with the above:'
++ call flush(6)
++ CALL SYSTEM ('echo " " `id`')
++ call flush
++
++ lognam = 'blahblahblah'
++ call getlog (lognam)
++ write (6,*) 'Login name (GETLOG): ', lognam(:lenstr (lognam))
++
++ wd = 'blahblahblah'
++ call getenv ('LOGNAME', wd)
++ write (6,*) 'Login name (GETENV of LOGNAME): ', wd(:lenstr (wd))
++
++ call umask(0, mask)
++ write(6,*) 'UMASK returns', mask
++ call umask(mask)
++
++ ctim = fdate()
++ write (6,*) 'FDATE returns: ', ctim(:lenstr (ctim))
++ call fdate (ctim)
++ write (6,*) 'CALL FDATE returns: ', ctim(:lenstr (ctim))
++
++ j=time()
++ call ltime (j, ltarray)
++ write (6,'(1x,a,9i4)') 'LTIME returns:', ltarray
++ call gmtime (j, ltarray)
++ write (6,'(1x,a,9i4)') 'GMTIME returns:', ltarray
++
++ call system_clock(count) ! omitting optional args
++ call system_clock(count, rate, count_max)
++ write(6,*) 'SYSTEM_CLOCK returns: ', count, rate, count_max
++
++ call date_and_time(ddate) ! omitting optional args
++ call date_and_time(ddate, ttime, zone, values)
++ write(6, *) 'DATE_AND_TIME returns: ', ddate, ' ', ttime, ' ',
++ + zone, ' ', values
++
++ write (6,*) 'Sleeping for 1 second (SLEEP) ...'
++ call sleep (1)
++
++c consistency-check etime vs. dtime for first call
++ r1 = etime (tarray1)
++ r2 = dtime (tarray2)
++ if (abs (r1-r2).gt.1.0) then
++ write (6,*)
++ + 'Results of ETIME and DTIME differ by more than a second:',
++ + r1, r2
++ call doabort
++ end if
++ if (.not. issum (r1, tarray1(1), tarray1(2))) then
++ write (6,*) '*** ETIME didn''t return sum of the array: ',
++ + r1, ' /= ', tarray1(1), '+', tarray1(2)
++ call doabort
++ end if
++ if (.not. issum (r2, tarray2(1), tarray2(2))) then
++ write (6,*) '*** DTIME didn''t return sum of the array: ',
++ + r2, ' /= ', tarray2(1), '+', tarray2(2)
++ call doabort
++ end if
++ write (6, '(A,3F10.3)')
++ + ' Elapsed total, user, system time (ETIME): ',
++ + r1, tarray1
++
++c now try to get times to change enough to see in etime/dtime
++ write (6,*) 'Looping until clock ticks at least once...'
++ do i = 1,1000
++ do j = 1,1000
++ end do
++ call dtime (tarray2, r2)
++ if (tarray2(1) .ne. 0. .or. tarray2(2) .ne. 0.) exit
++ end do
++ call etime (tarray1, r1)
++ if (.not. issum (r1, tarray1(1), tarray1(2))) then
++ write (6,*) '*** ETIME didn''t return sum of the array: ',
++ + r1, ' /= ', tarray1(1), '+', tarray1(2)
++ call doabort
++ end if
++ if (.not. issum (r2, tarray2(1), tarray2(2))) then
++ write (6,*) '*** DTIME didn''t return sum of the array: ',
++ + r2, ' /= ', tarray2(1), '+', tarray2(2)
++ call doabort
++ end if
++ write (6, '(A,3F10.3)')
++ + ' Differences in total, user, system time (DTIME): ',
++ + r2, tarray2
++ write (6, '(A,3F10.3)')
++ + ' Elapsed total, user, system time (ETIME): ',
++ + r1, tarray1
++ write (6, *) '(Clock-tick detected after ', i, ' 1K loops.)'
++
++ call idate (i,j,k)
++ call idate (idat)
++ write (6,*) 'IDATE (date,month,year): ',idat
++ print *, '... and the VXT version (month,date,year): ', i,j,k
++ if (i/=idat(2) .or. j/=idat(1) .or. k/=mod(idat(3),100)) then
++ print *, '*** VXT and U77 versions don''t agree'
++ call doabort
++ end if
++
++ call date (ctim)
++ write (6,*) 'DATE (dd-mmm-yy): ', ctim(:lenstr (ctim))
++
++ call itime (idat)
++ write (6,*) 'ITIME (hour,minutes,seconds): ', idat
++
++ call time(line(:8))
++ print *, 'TIME: ', line(:8)
++
++ write (6,*) 'SECNDS(0.0) returns: ',secnds(0.0)
++
++ write (6,*) 'SECOND returns: ', second()
++ call dumdum(r1)
++ call second(r1)
++ write (6,*) 'CALL SECOND returns: ', r1
++
++* compiler crash fixed by 1998-10-01 com.c change
++ if (rand(0).lt.0.0 .or. rand(0).gt.1.0) then
++ write (6,*) '*** rand(0) error'
++ call doabort()
++ end if
++
++ i = getcwd(wd)
++ if (i.ne.0) then
++ call perror ('*** getcwd')
++ call doabort
++ else
++ write (6,*) 'Current directory is "'//wd(:lenstr(wd))//'"'
++ end if
++ call chdir ('.',i)
++ if (i.ne.0) then
++ write (6,*) '***CHDIR to ".": ', i
++ call doabort
++ end if
++
++ i=hostnm(wd)
++ if(i.ne.0) then
++ call perror ('*** hostnm')
++ call doabort
++ else
++ write (6,*) 'Host name is ', wd(:lenstr(wd))
++ end if
++
++ i = access('/dev/null ', 'rw')
++ if (i.ne.0) write (6,*) '***Read/write ACCESS to /dev/null: ', i
++ write (6,*) 'Creating file "foo" for testing...'
++ open (3,file='foo',status='UNKNOWN')
++ rewind 3
++ call fputc(3, 'c',i)
++ call fputc(3, 'd',j)
++ if (i+j.ne.0) write(6,*) '***FPUTC: ', i
++C why is it necessary to reopen? (who wrote this?)
++C the better to test with, my dear! (-- burley)
++ close(3)
++ open(3,file='foo',status='old')
++ call fseek(3,0,0,*10)
++ go to 20
++ 10 write(6,*) '***FSEEK failed'
++ call doabort
++ 20 call fgetc(3, c,i)
++ if (i.ne.0) then
++ write(6,*) '***FGETC: ', i
++ call doabort
++ end if
++ if (c.ne.'c') then
++ write(6,*) '***FGETC read the wrong thing: ', ichar(c)
++ call doabort
++ end if
++ i= ftell(3)
++ if (i.ne.1) then
++ write(6,*) '***FTELL offset: ', i
++ call doabort
++ end if
++ call ftell(3, i)
++ if (i.ne.1) then
++ write(6,*) '***CALL FTELL offset: ', i
++ call doabort
++ end if
++ call chmod ('foo', 'a+w',i)
++ if (i.ne.0) then
++ write (6,*) '***CHMOD of "foo": ', i
++ call doabort
++ end if
++ i = fstat (3, fstatb)
++ if (i.ne.0) then
++ write (6,*) '***FSTAT of "foo": ', i
++ call doabort
++ end if
++ i = stat ('foo', statb)
++ if (i.ne.0) then
++ write (6,*) '***STAT of "foo": ', i
++ call doabort
++ end if
++ write (6,*) ' with stat array ', statb
++ if (statb(6) .ne. getgid ()) then
++ write (6,*) 'Note: FSTAT gid wrong (happens on some systems).'
++ end if
++ if (statb(5) .ne. getuid () .or. statb(4) .ne. 1) then
++ write (6,*) '*** FSTAT uid or nlink is wrong'
++ call doabort
++ end if
++ do i=1,13
++ if (fstatb (i) .ne. statb (i)) then
++ write (6,*) '*** FSTAT and STAT don''t agree on '// '
++ + array element ', i, ' value ', fstatb (i), statb (i)
++ call abort
++ end if
++ end do
++ i = lstat ('foo', fstatb)
++ do i=1,13
++ if (fstatb (i) .ne. statb (i)) then
++ write (6,*) '*** LSTAT and STAT don''t agree on '//
++ + 'array element ', i, ' value ', fstatb (i), statb (i)
++ call abort
++ end if
++ end do
++
++C in case it exists already:
++ call unlink ('bar',i)
++ call link ('foo ', 'bar ',i)
++ if (i.ne.0) then
++ write (6,*) '***LINK "foo" to "bar" failed: ', i
++ call doabort
++ end if
++ call unlink ('foo',i)
++ if (i.ne.0) then
++ write (6,*) '***UNLINK "foo" failed: ', i
++ call doabort
++ end if
++ call unlink ('foo',i)
++ if (i.eq.0) then
++ write (6,*) '***UNLINK "foo" again: ', i
++ call doabort
++ end if
++
++ call gerror (gerr)
++ i = ierrno()
++ write (6,'(A,I3,A/1X,A)') ' The current error number is: ',
++ + i,
++ + ' and the corresponding message is:', gerr(:lenstr(gerr))
++ write (6,*) 'This is sent to stderr prefixed by the program name'
++ call getarg (0, line)
++ call perror (line (:lenstr (line)))
++ call unlink ('bar')
++
++ print *, 'MCLOCK returns ', mclock ()
++ print *, 'MCLOCK8 returns ', mclock8 ()
++
++ call cpu_time (d1)
++ print *, 'CPU_TIME returns ', d1
++
++C WRITE (6,*) 'You should see exit status 1'
++ CALL EXIT(0)
++ 99 END
++
++* Return length of STR not including trailing blanks, but always > 0.
++ integer function lenstr (str)
++ character*(*) str
++ if (str.eq.' ') then
++ lenstr=1
++ else
++ lenstr = lnblnk (str)
++ end if
++ end
++
++* Just make sure SECOND() doesn't "magically" work the second time.
++ subroutine dumdum(r)
++ r = 3.14159
++ end
++
++* Test whether sum is approximately left+right.
++ logical function issum (sum, left, right)
++ implicit none
++ real sum, left, right
++ real mysum, delta, width
++ mysum = left + right
++ delta = abs (mysum - sum)
++ width = abs (left) + abs (right)
++ issum = (delta .le. .0001 * width)
++ end
++
++* Signal handler
++ subroutine ctrlc
++ print *, 'Got ^C'
++ call doabort
++ end
++
++* A problem has been noticed, so maybe abort the test.
++ subroutine doabort
++* For this version, call the ABORT intrinsic.
++ intrinsic abort
++ call abort
++ end
++
++* Testsuite version only.
++* Don't actually reference the HOSTNM intrinsic, because some targets
++* need -lsocket, which we don't have a mechanism for supplying.
++ integer function hostnm(nm)
++ character*(*) nm
++ nm = 'not determined by this version of u77-test.f'
++ hostnm = 0
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/19981216-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/19981216-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/19981216-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/19981216-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,89 @@
++* Resent-From: Craig Burley <burley@gnu.org>
++* Resent-To: craig@jcb-sc.com
++* X-Delivered: at request of burley on mescaline.gnu.org
++* Date: Wed, 16 Dec 1998 18:31:24 +0100
++* From: Dieter Stueken <stueken@conterra.de>
++* Organization: con terra GmbH
++* To: fortran@gnu.org
++* Subject: possible bug
++* Content-Type: text/plain; charset=iso-8859-1
++* X-Mime-Autoconverted: from 8bit to quoted-printable by mescaline.gnu.org id KAA09085
++* X-UIDL: 72293bf7f9fac8378ec7feca2bccbce2
++*
++* Hi,
++*
++* I'm about to compile a very old, very ugly Fortran program.
++* For one part I got:
++*
++* f77: Internal compiler error: program f771 got fatal signal 6
++*
++* instead of any detailed error message. I was able to break down the
++* problem to the following source fragment:
++*
++* -------------------------------------------
++ PROGRAM WAP
++
++ integer*2 ios
++ character*80 name
++
++ name = 'blah'
++ open(unit=8,status='unknown',file=name,form='formatted',
++ F iostat=ios)
++
++ END
++* -------------------------------------------
++*
++* The problem seems to be caused by the "integer*2 ios" declaration.
++* So far I solved it by simply using a plain integer instead.
++*
++* I'm running gcc on a Linux system compiled/installed
++* with no special options:
++*
++* -> g77 -v
++* g77 version 0.5.23
++* Driving: g77 -v -c -xf77-version /dev/null -xnone
++* Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnulibc1/2.8.1/specs
++* gcc version 2.8.1
++* /usr/lib/gcc-lib/i686-pc-linux-gnulibc1/2.8.1/cpp -lang-c -v -undef
++* -D__GNUC__=2 -D__GNUC_MINOR__=8 -D__ELF__ -D__unix__ -D__linux__
++* -D__unix -D__linux -Asystem(posix) -D_LANGUAGE_FORTRAN -traditional
++* -Di386 -Di686 -Asystem(unix) -Acpu(i386) -Amachine(i386) -D__i386__
++* -D__i686__ -Asystem(unix) -Acpu(i386) -Amachine(i386) /dev/null
++* /dev/null
++* GNU CPP version 2.8.1 (i386 GNU/Linux with ELF)
++* #include "..." search starts here:
++* #include <...> search starts here:
++* /usr/local/include
++* /usr/i686-pc-linux-gnulibc1/include
++* /usr/lib/gcc-lib/i686-pc-linux-gnulibc1/2.8.1/include
++* /usr/include
++* End of search list.
++* /usr/lib/gcc-lib/i686-pc-linux-gnulibc1/2.8.1/f771 -fnull-version
++* -quiet -dumpbase g77-version.f -version -fversion -o /tmp/cca24911.s
++* /dev/null
++* GNU F77 version 2.8.1 (i686-pc-linux-gnulibc1) compiled by GNU C version
++* 2.8.1.
++* GNU Fortran Front End version 0.5.23
++* as -V -Qy -o /tmp/cca24911.o /tmp/cca24911.s
++* GNU assembler version 2.8.1 (i486-linux), using BFD version 2.8.1
++* ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.1 -o /tmp/cca24911
++* /tmp/cca24911.o /usr/lib/crt1.o /usr/lib/crti.o
++* /usr/lib/gcc-lib/i686-pc-linux-gnulibc1/2.8.1/crtbegin.o
++* -L/usr/lib/gcc-lib/i686-pc-linux-gnulibc1/2.8.1 -L/usr -lg2c -lm -lgcc
++* -lc -lgcc /usr/lib/gcc-lib/i686-pc-linux-gnulibc1/2.8.1/crtend.o
++* /usr/lib/crtn.o
++* /tmp/cca24911
++* __G77_LIBF77_VERSION__: 0.5.23
++* @(#)LIBF77 VERSION 19970919
++* __G77_LIBI77_VERSION__: 0.5.23
++* @(#) LIBI77 VERSION pjw,dmg-mods 19980405
++* __G77_LIBU77_VERSION__: 0.5.23
++* @(#) LIBU77 VERSION 19970919
++*
++*
++* Regards, Dieter.
++* --
++* Dieter Stüken, con terra GmbH, Münster
++* stueken@conterra.de stueken@qgp.uni-muenster.de
++* http://www.conterra.de/ http://qgp.uni-muenster.de/~stueken
++* (0)251-980-2027 (0)251-83-334974
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/19990218-1.f gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/19990218-1.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/19990218-1.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/19990218-1.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++ double precision function fun(a,b)
++ double precision a,b
++ print*,'in sub: a,b=',a,b
++ fun=a*b
++ print*,'in sub: fun=',fun
++ return
++ end
++ program test
++ double precision a,b,c
++ data a,b/1.0d-46,1.0d0/
++ c=fun(a,b)
++ print*,'in main: fun=',c
++ end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/980615-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/980615-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/980615-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/980615-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++* Fixed by JCB 1998-07-25 change to stc.c.
++
++* Date: Thu, 11 Jun 1998 22:35:20 -0500
++* From: Ian A Watson <WATSON_IAN_A@lilly.com>
++* Subject: crash
++*
++ CaLL foo(W)
++ END
++ SUBROUTINE foo(W)
++ yy(I)=A(I)Q(X)
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/980616-0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/980616-0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/980616-0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/980616-0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++* Fixed by 1998-07-11 equiv.c change.
++* ../../gcc/f/equiv.c:666: failed assertion `ffebld_op (subscript) == FFEBLD_opCONTER'
++
++* Date: Mon, 15 Jun 1998 21:54:32 -0500
++* From: Ian A Watson <WATSON_IAN_A@lilly.com>
++* Subject: Mangler Crash
++ EQUIVALENCE(I,glerf(P))
++ COMMON /foo/ glerf(3)
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/check0.f gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/check0.f
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/check0.f 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/check0.f 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++CCC Abort fixed by:
++CCC1998-04-21 Jim Wilson <wilson@cygnus.com>
++CCC
++CCC * stmt.c (check_seenlabel): When search for line number note for
++CCC warning, handle case where there is no such note.
++ logical l(10)
++ integer i(10)
++ goto (10,20),l
++ goto (10,20),i
++ 10 stop
++ 20 end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/noncompile.exp gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/noncompile.exp
+--- gcc-2.95.3/gcc/testsuite/g77.f-torture/noncompile/noncompile.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g77.f-torture/noncompile/noncompile.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++# Copyright (C) 1988, 90, 91, 92, 97, 1998 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# This file was written by Jeff Law. (law@cs.utah.edu)
++
++#
++# These tests come from Torbjorn Granlund (tege@cygnus.com)
++# C torture test suite.
++#
++
++load_lib mike-g77.exp
++
++# Test check0.f
++prebase
++
++set src_code check0.f
++# Not really sure what the error should be here...
++set compiler_output ".*:8.*:9"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/ChangeLog gcc-2.95.4/gcc/testsuite/gcc.c-torture/ChangeLog
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/ChangeLog 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/ChangeLog 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,837 @@
++Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95.2 Released.
++
++Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95.1 Released.
++
++Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95 Released.
++
++Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
++
++ * gcc-2.95 Released.
++
++Wed Apr 7 23:08:59 1999 Jim Wilson <wilson@cygnus.com>
++
++ * execute/920501-7.c (main): Delete __I960__ ifndef.
++
++Mon Mar 22 14:55:58 1999 Jim Wilson <wilson@cygnus.com>
++
++ * execute/bf-sign-2.c (main): Replace struct sizeof test with 4.
++
++Wed Mar 17 12:22:39 1999 Richard Henderson <rth@cygnus.com>
++
++ * gcc.c-torture/execute/ieee/980619-1.x: New. Expected fail on x86.
++
++Fri Mar 12 16:17:28 1999 Jim Wilson <wilson@cygnus.com>
++
++ * execute/970312-1.c, execute/980605-1.c (f): Change printf to sprintf.
++ * execute/bf-sign-2.c (struct X): Add u15 field.
++ (main): Add check for u15. Conditionalize u31 check depending on
++ whether ints are <32 bits or >=32 bits.
++
++1999-03-01 Zack Weinberg <zack@rabi.columbia.edu>
++
++ * noncompile/noncompile.exp (951025-1.c): Accept an error
++ message on line 1 or line 2; cccp and cpplib do this differently.
++
++1999-02-03 Nick Clifton <nickc@cygnus.com>
++
++ * execute/memcheck/blkarg.c (foo): Use 10 leading arguments in
++ order to force structure S onto the stack even on the alpha.
++ (test): Pass 10 leading arguments to function foo as well as the
++ structure S.
++
++ * execute/memcheck/blkarg.x: New file: Expected failure for all
++ targets.
++
++ * execute/memcheck/driver.c (main): Use exit or abort to terminate
++ program execution.
++
++1999-01-28 Michael Meissner <meissner@cygnus.com>
++
++ * execute/990128-1.c: New test.
++
++1999-01-27 Michael Meissner <meissner@cygnus.com>
++
++ * execute/990127-{1,2}.c: New tests.
++
++1998-12-14 Nick Clifton <nickc@cygnus.com>
++
++ * execute/920501-4.c (main): Fix typo: replace | with ||.
++
++1998-11-30 Nick Clifton <nickc@cygnus.com>
++
++ * execute/981130-1.c: New test.
++ * execute/981130-1.x: New test failure expectations.
++
++Sun Oct 11 05:04:28 1998 Ken Raeburn <raeburn@cygnus.com>
++
++ * execute/memcheck: New directory of tests for
++ -fcheck-memory-usage.
++
++1998-10-06 Ken Raeburn <raeburn@cygnus.com>
++
++ * special/981006-1.c: New test. Make sure gcc doesn't lose track
++ of the possible targets of tablejump insns.
++ * special/special.exp: Run it.
++
++Thu Oct 1 17:15:26 1998 Nick Clifton <nickc@cygnus.com>
++
++ * compile/981001-1.c: New test.
++ * execute/981001-1.c: New test.
++
++Mon Aug 31 12:00:00 1998 Catherine Moore <clm@cygnus.com>
++
++ * execute/941014-1.x: New file.
++
++Wed Aug 26 16:10:00 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
++
++ * execute/loop-4b.c: New test.
++
++Mon Aug 24 14:20:32 1998 Nick Clifton <nickc@cygnus.com>
++
++ * execute/bcp-1.c (main): Fix optimize test loop to count number
++ tests in opt_t0 not good_t0.
++
++Thu Aug 13 00:13:55 1998 Jeffrey A Law (law@cygnus.com)
++
++ * execute/ieee/ieee.exp: Pass -ffloat-store to compiler for
++ ieee tests.
++
++Mon Jul 27 11:05:07 1998 Nick Clifton <nickc@cygnus.com>
++
++ * execute/ieee/930529-1.c (main): Check to see if __thumb__ is
++ defined, and test for ARM style doubles if so.
++
++Fri Jul 24 11:02:43 1998 Nick Clifton <nickc@cygnus.com>
++
++ * execute/comp-goto-1.c (main): Make main() return an int.
++
++Thu Jun 18 15:12:30 1998 Michael Meissner <meissner@cygnus.com>
++
++ * execute/980618-{1,2}.c: New tests that showed up m32r bugs.
++
++Fri Jun 5 21:54:26 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
++
++ * execute/980605-1.c: New test.
++
++Sun May 31 23:23:29 1998 Michael Meissner <meissner@cygnus.com>
++
++ * execute/ieee/mzero2.c: New test to better test IEEE -0 support.
++
++Wed Apr 8 13:09:15 1998 Jim Wilson <wilson@cygnus.com>
++
++ * execute/980407-1.c: Delete test. Is duplicate of loop-4.c.
++
++Tue Apr 7 12:01:24 1998 Jim Wilson <wilson@cygnus.com>
++
++ * execute/980407-1.c: New test from Joern Rennecke.
++
++Fri Apr 3 12:27:49 1998 Jim Wilson <wilson@cygnus.com>
++
++ * compile/980329-1.c: New test.
++
++Mon Feb 23 15:16:53 1998 Robert Lipe <robertl@dgii.com>
++ From Bruno Haible <haible@ilog.fr>:
++ * execute/980223.c: New test.
++
++Fri Feb 6 14:30:48 1998 Jim Wilson <wilson@cygnus.com>
++
++ * execute/980205.c: New test.
++
++Mon Dec 8 23:55:26 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
++
++ * noncompile/noncompile.exp (921102-1.c): Fixed comment.
++ (940510-1.c): Removed duplicate.
++ (971104-1.c): New test.
++
++Wed Nov 19 14:27:04 1997 Michael Meissner <meissner@cygnus.com>
++
++ * execute/950221-1.c (filler): If STACK_SIZE is defined, use that
++ to size the filler array.
++
++Wed Sep 3 17:29:35 1997 Bob Manson <manson@charmed.cygnus.com>
++
++ * execute/ieee/ieee.exp: Check for ieee_multilib_flags target
++ feature; pass this to c-torture-execute as needed.
++
++Fri Aug 29 12:48:09 1997 Jeffrey A Law (law@cygnus.com)
++
++ * execute/921007-1.c: Make strcmp static.
++
++Tue Jul 29 00:40:38 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
++
++ * conversion.c (test_float_to_integer): Make double precision tests
++ dependent on sizeof (double).
++
++Tue Jun 17 22:11:16 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
++
++ * compile/961203-1.cexp: New script.
++
++Wed Jun 4 03:38:50 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
++
++ * execute/ieee/ieee.exp: Set -mieee for SH.
++
++Thu May 15 14:00:04 1997 Mike Meissner <meissner@cygnus.com>
++
++ * execute/va-arg-3.c: If NO_VARARGS is defined, nop test.
++
++ * execute/strct-varg-1.c: If NO_VARARGS is defined, use stdargs.h
++ interface.
++
++Fri Mar 21 16:34:52 1997 Michael Meissner <meissner@cygnus.com>
++
++ * execute/920501-7.c (main,x): If NO_LABELS_VALUES is defined,
++ don't do test.
++
++Wed Mar 19 13:06:26 1997 Michael Meissner <meissner@cygnus.com>
++
++ * execute/ieee/rbug.c (main): Don't do long long to double
++ conversion if double isn't at least 8 bytes.
++
++ * execute/cvt-1.c: Make all functions use long, not int to work
++ with targets where int is 16 bits.
++
++ * execute/920715-1.c (main): If double isn't at least 8 bytes,
++ just exit, since 4 byte doubles don't have enough bits of
++ precision for the test to complete.
++
++Fri Mar 14 17:51:02 1997 Michael Meissner <meissner@cygnus.com>
++
++ * execute/920715-1.cexp (d10v-*-*): Expect to fail if d10v is not
++ compiled with the -mdouble64 flag.
++ * execute/ieee/rbug.cexp (d10v-*-*): Ditto.
++
++ * execute/cvt-1.cexp (d10v-*-*): Expect to fail if d10v is not
++ compiled with the -mint32 flag.
++
++Wed Mar 12 01:23:08 1997 Torbjorn Granlund <tege@pdc.kth.se>
++
++ * execute/961213-1.c: New test (from hjl@lucon.org).
++
++ * execute/complex-5.c: New test (from moshier@world.std.com).
++
++ * execute/970217-1.c: New test (from eggert@twinsun.com).
++
++ * execute/970214-[12].c: New tests (from eggert@twinsun.com).
++
++ * compile/970214-1.c: New test (from wilson@cygnus.com).
++
++ * execute/ieee/930529-1.c: Also handle arm's unusual byte/word
++ ordering (from amylaar@cygnus.com).
++
++ * execute/index-1.c: Make large vars and values `long'
++ (from law@cygnus.com).
++
++ * execute/941014-2.c: Declare malloc.
++
++ * compile/970206-1.c: New test (from dje@cygnus.com).
++
++ * execute/960521-1.c: Rewrite to take STACK_SIZE into account
++ (from amylaar@cygnus.co.uk).
++
++ * execute/961223-1.c: New test (from wilson@cygnus.com).
++
++ * compile/961203-1.c: New test (from amylaar@cygnus.co.uk).
++
++ * compile/961126-1.c: New test (from wilson@cygnus.com).
++
++ * execute/961125-1.c: New test (from meyering@asic.sc.ti.com).
++
++ * execute/961122-2.c: New test (from
++ schwab@issan.informatik.uni-dortmund.de).
++
++ * execute/961122-1.c: New test (from Philippe De Muyter).
++
++ * execute/loop-2[ef].c: Default MAP_FIXED to 0 (from
++ amylaar@cygnus.co.uk).
++
++ Changes from meissner@cygnus.com:
++ * execute/920501-9.c (print_longlong): Print pieces as a long, not int.
++ * execute/950915-1.c: (a,b): Make types long to prevent implicit
++ overflow on 16-bit systems.
++ * execute/dbra-1.c: Pass long values to functions expecting
++ long values.
++ * execute/950607-2.c: (Point): Make field type long, since 23250 -
++ (-23250) is larger than 16 bits.
++ * execute/960416-1.c: Make st type unsigned long, not unsigned int.
++ * execute/bf-sign-2.c: Make bitfields whose size is > 16 bits
++ long, not int for 16-bit hosts.
++ * execute/961017-2.c: Make z unsigned long, not unsigned int.
++
++ * execute/cmpsi-1.c: Rewrite not to depend on type sizes.
++
++ * execute/960909-1.c (ffs): New function (from law@cygnus.com).
++
++ * execute/fp-cmp-1.c: Add test for SIGNAL_SUPPRESS around signal call.
++ Move to execute/ieee.
++
++ * execute/970312-1.c: New test.
++ * execute/cvt-1.c: New test.
++
++Thu Feb 13 13:52:23 1997 Michael Meissner <meissner@cygnus.com>
++
++ * compile/920301-1.c: If NO_LABEL_VALUES is defined, nop test
++ using labels as values extension.
++ * compile/920415-1.c: Ditto.
++ * compile/920428-3.c: Ditto.
++ * compile/920501-1.c: Ditto.
++ * compile/920501-7.c: Ditto.
++ * compile/941014-4.c: Ditto.
++ * compile/950613-1.c: Ditto.
++ * compile/labels-1.c: Ditto.
++ * execute/920302-1.c: Ditto.
++ * execute/920415-1.c: Ditto.
++ * execute/920428-2.c: Ditto.
++ * execute/920501-3.c: Ditto.
++ * execute/920501-4.c: Ditto.
++ * execute/920501-5.c: Ditto.
++ * execute/920721-4.c: Ditto.
++ * execute/comp-goto-1.c: Ditto.
++
++ * compile/930506-2.c: If NO_TRAMPOLINES is defined, nop the test.
++ * execute/921215-1.c: Ditto.
++ * execute/931002-1.c: Ditto.
++ * execute/nestfunc-1.c: Ditto.
++
++Wed Jan 22 00:04:53 1997 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/961017-1.c: Add missing exit (0).
++
++Fri Dec 6 19:38:57 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/961206-1.c: New test.
++
++Wed Nov 13 17:13:05 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/loop-2[ef].c: Misc portability changes
++ (from amylaar@cygnus.co.uk).
++
++Tue Nov 12 15:00:42 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/961112-1.c: New test (based on a test by wilson@cygnus.com).
++
++ * execute/ieee/DESC: New file.
++
++ * execute/{loop-2[bcdef].c,loop-3[bc].c}:
++ New tests (from amylaar@cygnus.co.uk).
++
++ * execute/ieee/nan.c: Delete test.
++
++ * execute/fp-cmp-1.c: Disable for Cray and VAX.
++
++ * execute/960416-1.c: Make it work for big-endian machines (from
++ amylaar@cygnus.co.uk).
++
++Mon Nov 11 18:00:35 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/960830-1.c: Make it work for non-x86 machines.
++
++ * execute/961017-2.c: Call exit(0).
++
++Fri Nov 8 19:19:17 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/960311-3.c: #include <stdio.h>.
++ * execute/920501-8.c: Likewise.
++ * execute/920501-9.c: Likewise.
++ * execute/941014-2.c: Likewise.
++ * execute/960311-1.c: Likewise.
++ * execute/960311-2.c: Likewise.
++
++ * execute/961017-[12].c: New test (from wilson@cygnus.com).
++ * compile/961031-1.c: New test (from wilson@cygnus.com).
++ * compile/961019-1.c: New test (from wilson@cygnus.com).
++ * utils/ctest.c: Print and pass (to run_a_test) all arguments.
++ * execute/{920711-1.c,920810-1.c,920922-1.c,930603-3.c,931018-1.c}
++ * execute/{941025-1.c,950221-1.c,950426-2.c,960209-1.c,960321-1.c}
++ * execute/{960327-1.c,arith-rand.c,bf-pack-1.c,cbrt.c,divconst-2.c}
++ * execute/memcpy-1.c: 16-bit changes (from law@cygnus.com).
++
++ * compile/960514-1.c: New test (from rwilhelm@physik.tu-muenchen.de).
++
++ * execute/960512-1.c: New test (from amylaar@meolyon.hanse.de).
++
++ * execute/960513-1.c: New test (from amylaar@meolyon.hanse.de).
++
++ * execute/960405-1.c: New test (from moshier@world.std.com).
++
++Fri Nov 1 13:06:28 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/dbra-1.c: New test.
++
++Mon Oct 28 02:31:10 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/961026-1.c: New test (from rankin@eql.caltech.edu).
++
++ * execute/enum-1.c: New test (from law@cygnus.com).
++
++Tue Oct 22 22:13:12 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/960801-1.c: Generalize.
++
++Fri Oct 18 04:14:01 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * utils/ctest.c (run_a_test): Don't call `fatal' when the compiler
++ returns non-zero, but there is no error message from the compiler.
++
++Wed Oct 16 01:39:57 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/arith-rand.c (main): Decrease the number of iteration to
++ 1000.
++
++Fri Oct 11 16:40:44 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * compile/961010-1.c: New test (from ian@cygnus.com).
++
++Fri Oct 4 18:29:00 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/961004-1.c: New test (from wilson@cygnus.com).
++
++ * compile/961004-1.c: New test (from amylaar@cygnus.co.uk).
++
++Thu Oct 3 02:51:24 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/fp-cmp-1.c: Move signal handler setup to after == and !=
++ compares.
++
++Wed Oct 2 04:53:54 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/fp-cmp-1.c: New test.
++
++Mon Sep 30 01:11:06 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * compile/960620-1.c: Delete test.
++
++Fri Sep 13 12:12:30 1996 Ian Lance Taylor <ian@cygnus.com>
++
++ * execute/ieee/920810-1.c: Include <stdio.h>.
++
++Mon Sep 9 18:56:33 1996 Torbjorn Granlund <tege@quiet.matematik.su.se>
++
++ * execute/960909-1.c: New test.
++
++Fri Aug 30 06:31:25 1996 Torbjorn Granlund <tege@quiet.tmg.se>
++
++ * execute/960830-1.c: New test.
++
++Thu Aug 29 22:06:49 1996 Torbjorn Granlund <tege@quiet.tmg.se>
++
++ * compile/960829-1.c: New test.
++
++Tue Aug 13 19:23:06 1996 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * utils/ctest.c (run_a_test): Call wait repeatedly until
++ we get back the right pid.
++
++Sat Aug 3 16:36:43 1996 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * execute/960416-1.c: New test (from amylaar@meolyon.hanse.de).
++
++ * execute/960419-[12].c: New tests (from jtc@cygnus.com).
++
++ * execute/960416-1.c: New test (from amylaar@meolyon.hanse.de).
++
++ * execute/920721-1.c: Make it work for 16-bit systems
++ (from law@cygnus.com).
++ * execute/920728-1.c: Likewise.
++
++ * compile/960201-1.c: New test (from eggert@twinsun.com).
++ * compile/960130-1.c: New test (from eggert@twinsun.com).
++
++Sat Aug 3 16:10:20 1996 Andrew Cagney <cagney@highland.com.au>
++
++ * utils/ctest.c (run_a_test): Flush output before first fork to
++ avoid later duplication.
++
++ * utils/ctest.c (run_a_test): If really verbose, and a run command
++ was specified (-run), print the command to be executed out.
++ * (run_a_test): For the -run option, accept an argument list.
++
++ * utils/ctest.c (main): Change verbose flag so it increments the
++ verbosity instead of just setting it. Backward compatible hack
++ that allows multiple levels of tracing. Perhaphs a separate flag
++ would be better.
++ (main): If really verbose, print the GCC command that is to be executed.
++ (run_a_test): If really verbose, print the output from compiler
++ and allow the output from the run to be displayed.
++
++ * utils/ctest.c (main): New option -postopts added. This allows
++ the user to specify arguments that should be appended to the GCC
++ command (in addition to the -options flag that specfies arguments
++ that are to be prepended).
++ (usage): Adjust.
++
++Sat Aug 3 16:10:20 1996 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ From Mike Meissner:
++ * utils/ctest.c: Sort test files by calling `ls -r'.
++ * utils/ctest.c: Flush stdout after each printf.
++ * utils/ctest.c: When `-run', up timeout to 1000. Allow
++ explicit setting of timeout through new -cc-timeout option.
++
++Fri Aug 2 19:53:27 1996 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * execute/960521-1.c: New test
++ (from eggert@twinsun.com and Andreas Schwab).
++
++ * compile/960620-1.c: New test (from rwilhelm@physik.tu-muenchen.de).
++
++ * compile/960704-1.c: New test (from wilson@cygnus.com).
++
++ * execute/bf-sign-2.c: New test (from gavin@nando.net).
++
++ * execute/960802-1.c: New test (from law@cygnus.com).
++
++ * execute/960801-1.c: New test (from dje@cygnus.com).
++
++Sun Jun 9 17:35:56 1996 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * execute/960608-1.c: New test (from law@cygnus.com).
++
++Tue Apr 2 23:18:51 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/900409-1.c: Change types from int to long
++ (from law@cygnus.com).
++
++ * execute/960402-1.c: New test.
++
++Fri Mar 29 23:40:01 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/960327-1.c: New test (from law@cygnus.com).
++
++Tue Mar 26 22:57:34 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/960326-1.c: New test (from wilson@cygnus.com).
++ * execute/960321-1.c: New test (from law@cygnus.com).
++ * compile/960319-1.c: New test (from amylaar@meolyon.hanse.de).
++ * execute/960317-1.c: New test (from amylaar@meolyon.hanse.de).
++ * execute/960312-1.c: New test (from amylaar@meolyon.hanse.de).
++ * execute/960311-[123].c: New tests (from dje@cygnus.com).
++ * execute/960302-1.c: New test (from law@cygnus.com).
++ * execute/960215-1.c: New test (from moshier@world.std.com).
++
++Fri Mar 1 06:01:58 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/regstack-1.c: New test (from moshier@world.std.com).
++ * execute/960301-1.c: New test (from rankin@eql.caltech.edu).
++ * execute/struct-ini-4.c: New test (from wilson@cygnus.com).
++
++Sun Feb 25 01:10:12 1996 Paul Eggert <eggert@twinsun.com>
++
++ * special/doit (960224-1, 960224-2): New tests.
++
++Wed Feb 21 07:18:19 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * compile/960221-1.c: New test (from law@cygnus.com).
++ * compile/960220-1.c: New test.
++
++Mon Feb 19 03:14:18 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/960219-1.c: New test.
++ * compile/960218-1.c: New test (from eggert@twinsun.com).
++
++Sun Feb 18 04:01:54 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/960218-1.c: New test.
++
++Sat Feb 10 03:07:04 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/960209-1.c: New test (from law@cygnus.com).
++
++Wed Jan 24 23:23:05 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/960117-1.c: New test (from dje@cygnus.com).
++ * execute/960116-1.c: New test (from Philippe De Muyter).
++
++Mon Jan 22 23:46:17 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * noncompile/930714-1.c: Moved from compile.
++
++Mon Jan 22 19:08:04 1996 Paul Eggert <eggert@twinsun.com>
++
++ * special/doit (920717-1): Make sure `not found' message is ignored
++ when invoking cc.
++
++Tue Jan 16 14:24:36 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * noncompile/951227-1.c: New test (from eggert).
++ * special/doit (951130-1): New test (from eggert).
++ * noncompile/951025-1.c: New test.
++
++Thu Jan 11 09:36:49 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * execute/widechar-1.c: New test (from eggert).
++
++Tue Jan 9 12:44:21 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * compile/960106-1.c: New test.
++
++Mon Dec 25 19:21:08 1995 Torbjorn Granlund <tege@noisy.matematik.su.se>
++
++ * compile/951222-1.c: New test (from kenner).
++
++Wed Dec 20 14:45:42 1995 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * compile/951220-1.c: New test.
++
++Wed Dec 6 13:46:17 1995 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ From Alan Modra:
++ * utils/ctest.c (main): mktemp needs 6 X's on some systems.
++
++Mon Dec 4 21:39:39 1995 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * compile/widechar-1.c: New test.
++
++ * unsorted/{bugx.c,bugy.c,inline.c}: Delete huge/duplicate tests.
++
++ * execute/951204-1.c: New test.
++ * compile/951128-1.c: New test.
++
++Mon Nov 27 00:16:37 1995 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * execute/bf-layout-1.c: New test.
++
++Wed Nov 22 21:38:25 1995 Torbjorn Granlund <tege@noisy.tmg.se>
++
++ * noncompile/951123-1.c: New test.
++
++Wed Nov 16 23:31:23 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compile/951116-1.c: New test.
++
++Wed Nov 15 20:34:03 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * utils/ctest.c: New name for runtests.c (not to confuse it with
++ DejaGNU runtest).
++
++ * utils/runtests.c (RLIMIT_CORE): Default to 4.
++
++ * execute/951115-1.c: New test (PA delay slot filling bug).
++
++Tue Nov 14 00:27:10 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * utils/runtests.c (run_a_test): Read from errmess pipe before
++ blocking on child process. Also, loop calling read(2) until pipe
++ is empty or 8000 chars are read.
++ (usage): New function.
++ (main): Call usage for -help.
++
++Sun Nov 7 17:15:12 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compile/951106-1.c: New test (MIPS3).
++
++Sun Nov 5 12:22:20 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * utils/runtests.c (run_a_test): Don't print exit status for failing
++ noncompile test.
++
++Thu Oct 26 00:45:43 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * utils/runtests.c (run_a_test): Save and restore filedesc for
++ stdout, so that failure in execve is reported properly.
++ From Arne Juul:
++ (run_a_test): To work around NetBSD bug, don't pass NULL as 2nd
++ execve argument.
++
++Wed Oct 25 16:13:46 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * utils/runtests.c (main): Fix typo testing `execute_these_files'.
++
++Tue Oct 10 17:41:47 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/950714-1.c (main): Call exit(0).
++
++ * compile/951004-1.c: New test.
++
++Tue Oct 3 22:59:13 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/950929-1.c: New test (from ian@cygnus.com).
++
++ * execute/951003-1.c: New test (from dje@cygnus.com).
++
++Tue Sep 26 15:31:49 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/950714-1.c: New test (from wilson@cygnus.com).
++
++ * execute/950706-1.c: New test (from rearnsha)
++
++ * execute/ieee/{minuszero.c,rbug.c,nan.c}: New tests (from moshier).
++
++ * execute/scope-2.c: New test (from rfg).
++
++ * execute/bf-sign-1.c: New test (from jtc@cygnus.com).
++
++ * noncompile/930927-1.c: Delete this duplicated test.
++
++ * unsorted/gdb.c: Delete this test.
++ * */*.c: Delete whitespace at the end of lines.
++
++ * execute/loop-3.c: New test (from amylaar@meolyon.hanse.de).
++
++Mon Sep 25 14:08:32 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * Make file permissions be regular.
++
++ * utils/runtests.c (main): Combine `flag_execute' and
++ `execute_these_files' into the latter.
++ (run_a_test): Test only `execute_these_files'.
++
++ * execute/920411-1.c: Generalize to work even for big-endian
++ 64-bit machines (from amylaar@meolyon.hanse.de).
++
++Sun Sep 24 16:26:03 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * utils/runtests.c (set_watchdog): Actually use `seconds' parameter.
++
++Sat Sep 23 00:08:33 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compile/950922-1.c: New test.
++
++Thu Sep 21 12:25:40 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * utils/runtests.c (environ): Declare.
++ (run_a_test): Pass environ to execve calls.
++ (main): Don't NULL-terminate `passes' array.
++ (main): Make ii loop's termination condition depend on n_passes.
++ (run_a_test): Check result from read; '\0'-terminate buf.
++ (main): Avoid d_namlen, use strlen of d_name instead (from meyering).
++
++ * compile/950919-1.c: New test.
++
++ * execute/conversion.c (test_longlong_integer_to_float): Modify
++ some tests conditionally for __HAVE_68881__.
++
++ * execute/950915-1.c: New test.
++
++ * utils/runtests.c: New file to run tests faster.
++ * {execute/compile/unsorted/noncompile}/DESC: New files.
++
++ * compile/950921-1.c: New test (from Ian Taylor).
++
++Wed Sep 20 14:53:33 1995 Doug Evans <dje@canuck.cygnus.com>
++
++ * execute/920501-7.c (STACK_SIZE): Check for and use to limit
++ depth of recursion.
++
++Mon Sep 18 23:43:28 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compile/gcc-failure/940409-1.c: Moved from compile.
++
++ * execute/920411-1.c: Moved from execute/gcc_failure.
++ * execute/gcc_failure/920627-2.c: Delete spurious test.
++
++ * utils/runtests.c: New program.
++
++Tue Sep 12 22:05:15 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/divconst-3.c: New test.
++
++Mon Sep 11 12:48:04 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compat/struct-ret-1.c: Add prototype for f.
++ * compat/strct-layout.c: Conditionalize main.
++
++Sun Sep 10 20:47:34 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/strct-pack-5.c: Delete, test is useless because of
++ lack of 68k structure packing.
++
++Thu Sep 7 13:07:40 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/{930628-1.c,941202-1.c,arith-1.c,gofast.c,struct-ret-1.c,
++ va-arg-4.c}: Call exit(0), don't do return 0.
++
++Tue Sep 5 15:23:14 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compat/strct-layout.c (main): Add missing call to exit.
++
++Tue Sep 5 15:23:14 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ 1.35 Released.
++
++ * noncompile/doit (case $arg): Fix typo.
++
++ * execute/compndlit-1.c: New test.
++ * execute/loop-2.c: New test.
++ * execute/950809-1.c: New test.
++ * execute/va-arg-5.c: New test.
++ * execute/va-arg-6.c: New test.
++ * execute/ptr-arith-1.c: New test.
++ * execute/cmpsi-1.c: New test.
++
++ * compile/cmpdi-1.c: New test.
++ * compile/950719-1.c: New test.
++ * compile/950729-1.c: New test.
++ * compile/950816-[123].c: New test.
++ * compile/: New test.
++ * compile/: New test.
++ * compile/: New test.
++ * compile/: New test.
++
++Fri Sep 5 09:30:32 1995 Michael Meissner <meissner@tiktok.cygnus.com>
++
++ * */doit: Add -run <cmd> option to allow the use of a simulator to
++ run commands in the execute subdirectory. Accept the switch in
++ the other doit commands.
++
++Tue Jul 11 01:02:21 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/950710-1.c: New test (from meyering).
++
++Wed Jul 5 16:03:45 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compile/950618-1.c: New test.
++ * execute/scope-1.c: New test.
++ * execute/950621-1.c: New test.
++ * execute/950704-1.c: New test.
++ * execute/950628-1.c: New test.
++
++Wed Jun 14 15:20:44 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/950612-1.c: New test.
++ * execute/cmpdi-1.c: New test.
++ * execute/tstdi-1.c: New test.
++ * compile/950613-1.c: New test.
++ * compile/950530-1.c: New test.
++ * compile/950610-1.c: New test.
++ * compile/950612-1.c: New test.
++
++ * execute/strct-pack-5.c: Clean up, use defined type s2_t.
++ * execute/strct-pack-4.c: Clean up.
++
++Sat Jun 10 12:37:22 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/cbrt.c: Disable for vax.
++
++Fri Jun 9 21:49:58 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/940115-1.c: Cast parameters to char *.
++
++Thu Jun 8 00:33:51 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * compile/950607-1.c: New test.
++ * execute/cbrt.c: New test.
++ * execute/950607-[12].c: New tests.
++ * execute/memcpy-1.c: Try more cases.
++ * execute/struct-ret-2.c: New test.
++ * execute/complex-4.c: New test.
++
++Wed Jun 7 12:40:05 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/950601.c: Delete this messy and redundant test.
++
++ * compile/funcptr-1.c: Clean up.
++
++ * execute/950512-1.c (main): Call f1 and f2 with 0 too.
++ (f2): Use type `long long', not `long'.
++
++ * execute/950605-1.c: New test.
++
++Wed Jun 1 01:57:45 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
++
++ * execute/divconst-[12].c: New tests.
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/920608-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/920608-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/920608-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/920608-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++foo (p)
++ int *p;
++{
++ int x;
++ int a;
++
++ a = p[0];
++ x = a + 5;
++ a = -1;
++ p[0] = x - 5;
++ return a;
++}
++
++bar (p)
++{
++ short x;
++ int a;
++
++ x = ((short *) p)[1];
++#if INHIBIT_COMBINE
++ ((short *) p)[0] = x;
++#endif
++
++ return (x < 45);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++#
++# Expect driver script for GCC Regression Tests
++# Copyright (C) 1993, 1997 Free Software Foundation
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++#
++# Written by Jeffrey Wheat (cassidy@cygnus.com)
++#
++
++#
++# These tests come from Torbjorn Granlund's (tege@cygnus.com)
++# C torture test suite, and other contributors.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib c-torture.exp
++
++#
++# This loop will run c-torture on any *.c file found in this directory.
++# If a *.c has a corresponding *.exp file, then the test is skipped as
++# as the *.exp will drive the test itself. I did things this way so that
++# generic tests did not need a seperate .exp for it. Only the tests that
++# required unique options would need it's own .exp file.
++#
++
++foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] {
++ if [file exists [file rootname $testcase].exp] then {
++ verbose "INFO:\"[file rootname $testcase].exp\" exists, skipping test" 3
++ continue
++ }
++
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $testcase] then {
++ continue
++ }
++
++ c-torture $testcase
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=code_quality.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/code_quality/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/code_quality/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=struct-big.c
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/strct-layout.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/strct-layout.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/strct-layout.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/strct-layout.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++typedef struct
++{
++ char a;
++ int b;
++ char c;
++ short d;
++ double e;
++ char f;
++} T;
++
++#if COMPILER != 1
++f (T *x)
++{
++ x[0].a = 'a';
++ x[0].b = 47114711;
++ x[0].c = 'c';
++ x[0].d = 1234;
++ x[0].e = 3.141592897932;
++ x[0].f = '*';
++
++ x[1].a = 'A';
++ x[1].b = 71417141;
++ x[1].c = 'C';
++ x[1].d = 4321;
++ x[1].e = 2.718281828459;
++ x[1].f = '?';
++}
++#endif
++
++#if COMPILER != 2
++g (T *x)
++{
++ if (x[0].a != 'a')
++ abort ();
++ if (x[0].b != 47114711)
++ abort ();
++ if (x[0].c != 'c')
++ abort ();
++ if (x[0].d != 1234)
++ abort ();
++ if (x[0].e != 3.141592897932)
++ abort ();
++ if (x[0].f != '*')
++ abort ();
++
++ if (x[1].a != 'A')
++ abort ();
++ if (x[1].b != 71417141)
++ abort ();
++ if (x[1].c != 'C')
++ abort ();
++ if (x[1].d != 4321)
++ abort ();
++ if (x[1].e != 2.718281828459)
++ abort ();
++ if (x[1].f != '?')
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++main ()
++{
++ T x[2];
++ f (x);
++ g (x);
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-align.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-align.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-align.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-align.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++typedef union
++{
++ struct {int a; int b;} s;
++ double d;
++} T;
++
++int h (T *);
++T g (T);
++
++#if COMPILER != 1
++h (T *x)
++{
++ if (x->s.a != 0 || x->s.b != 1)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++T
++g (T x)
++{
++ if (x.s.a != 13 || x.s.b != 47)
++ abort ();
++ x.s.a = 0;
++ x.s.b = 1;
++ h (&x);
++ return x;
++}
++#endif
++
++#if COMPILER != 1
++f ()
++{
++ T x;
++ x.s.a = 13;
++ x.s.b = 47;
++ g (x);
++ if (x.s.a != 13 || x.s.b != 47)
++ abort ();
++ x = g (x);
++ if (x.s.a != 0 || x.s.b != 1)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++main ()
++{
++ f ();
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-big.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-big.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-big.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-big.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++typedef struct {int a, b, c, d, e;} T;
++
++int h (T *);
++T g (T);
++
++#if COMPILER != 1
++h (T *x)
++{
++ if (x->a != 0 || x->b != 1 || x->c != 2 || x->d != 3 || x->e != 4)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++T
++g (T x)
++{
++ if (x.a != 13 || x.b != 47 || x.c != 123456 || x.d != -4711 || x.e != -2)
++ abort ();
++ x.a = 0;
++ x.b = 1;
++ x.c = 2;
++ x.d = 3;
++ x.e = 4;
++ h (&x);
++ return x;
++}
++#endif
++
++#if COMPILER != 1
++f ()
++{
++ T x;
++ x.a = 13;
++ x.b = 47;
++ x.c = 123456;
++ x.d = -4711;
++ x.e = -2;
++ g (x);
++ if (x.a != 13 || x.b != 47 || x.c != 123456 || x.d != -4711 || x.e != -2)
++ abort ();
++ x = g (x);
++ if (x.a != 0 || x.b != 1 || x.c != 2 || x.d != 3 || x.e != 4)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++main ()
++{
++ f ();
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-i.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-i.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-i.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-i.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++typedef struct {int a;} T;
++
++int h (T *);
++T g (T);
++
++#if COMPILER != 1
++h (T *x)
++{
++ if (x->a != 47114711)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++T
++g (T x)
++{
++ if (x.a != 13)
++ abort ();
++ x.a = 47114711;
++ h (&x);
++ return x;
++}
++#endif
++
++#if COMPILER != 1
++f ()
++{
++ T x;
++ x.a = 13;
++ g (x);
++ if (x.a != 13)
++ abort ();
++ x = g (x);
++ if (x.a != 47114711)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++main ()
++{
++ f ();
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-ic.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-ic.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-ic.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-ic.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++typedef struct {int a; char b;} T;
++
++int h (T *);
++T g (T);
++
++#if COMPILER != 1
++h (T *x)
++{
++ if (x->a != 0 || x->b != 1)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++T
++g (T x)
++{
++ if (x.a != 13 || x.b != 47)
++ abort ();
++ x.a = 0;
++ x.b = 1;
++ h (&x);
++ return x;
++}
++#endif
++
++#if COMPILER != 1
++f ()
++{
++ T x;
++ x.a = 13;
++ x.b = 47;
++ g (x);
++ if (x.a != 13 || x.b != 47)
++ abort ();
++ x = g (x);
++ if (x.a != 0 || x.b != 1)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++main ()
++{
++ f ();
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-ii.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-ii.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-ii.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-ii.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++typedef struct {int a, b;} T;
++
++int h (T *);
++T g (T);
++
++#if COMPILER != 1
++h (T *x)
++{
++ if (x->a != 0 || x->b != 1)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++T
++g (T x)
++{
++ if (x.a != 13 || x.b != 47)
++ abort ();
++ x.a = 0;
++ x.b = 1;
++ h (&x);
++ return x;
++}
++#endif
++
++#if COMPILER != 1
++f ()
++{
++ T x;
++ x.a = 13;
++ x.b = 47;
++ g (x);
++ if (x.a != 13 || x.b != 47)
++ abort ();
++ x = g (x);
++ if (x.a != 0 || x.b != 1)
++ abort ();
++}
++#endif
++
++#if COMPILER != 2
++main ()
++{
++ f ();
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++typedef struct { int re; int im; } T;
++
++T f (int, int);
++
++#if COMPILER != 1
++T
++f (int arg1, int arg2)
++{
++ T x;
++ x.re = arg1;
++ x.im = arg2;
++ return x;
++}
++#endif
++
++#if COMPILER != 2
++main ()
++{
++ T result;
++ result = f (3, 4);
++ if (result.re != 3 || result.im != 4)
++ abort ();
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900116-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900116-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900116-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900116-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++struct st {char a, b, c, d; }
++
++zloop (struct st *s, int *p, int *q)
++{
++ int i;
++ struct st ss;
++
++ for (i = 0; i < 100; i++)
++ {
++ ss = s[i];
++ p[i] = ss.c;
++ q[i] = ss.b;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900216-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900216-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900216-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900216-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (p, a, b)
++ unsigned short *p;
++{
++ unsigned int x;
++
++ x = p[0];
++
++ return (x == 134U);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900313-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900313-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900313-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900313-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,172 @@
++main ()
++{
++ char *a;
++ foo (alloca (10000));
++ foo (alloca (100000));
++ foo (alloca ((int) &main));
++}
++
++many_par (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
++{
++ char *x;
++ int aa, ba, ca, da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa;
++
++ aa = bar ();
++ ba = bar ();
++ ca = bar ();
++ da = bar ();
++ ea = bar ();
++ fa = bar ();
++ ga = bar ();
++ ha = bar ();
++ ia = bar ();
++ ja = bar ();
++ ka = bar ();
++ la = bar ();
++ ma = bar ();
++ na = bar ();
++ oa = bar ();
++ pa = bar ();
++ foobar (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, aa, ba, ca,
++ da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa);
++
++}
++
++foobar (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, aa, ba, ca,
++ da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa)
++{
++ int ab, bb, cb, db, eb, fb, gb, hb, ib, jb, kb, lb, mb, nb, ob, pb;
++ int qb, rb, sb, tb, ub, vb, xb, yb;
++
++ ab = bar ();
++ bb = bar ();
++ cb = bar ();
++ db = bar ();
++ eb = bar ();
++ fb = bar ();
++ gb = bar ();
++ hb = bar ();
++ ib = bar ();
++ jb = bar ();
++ kb = bar ();
++ lb = bar ();
++ mb = bar ();
++ nb = bar ();
++ ob = bar ();
++ pb = bar ();
++ qb = bar ();
++ rb = bar ();
++ sb = bar ();
++ tb = bar ();
++ ub = bar ();
++ vb = bar ();
++ xb = bar ();
++ yb = bar ();
++
++ boofar (a);
++ boofar (b);
++ boofar (c);
++ boofar (d);
++ boofar (e);
++ boofar (f);
++ boofar (g);
++ boofar (h);
++ boofar (i);
++ boofar (j);
++ boofar (k);
++ boofar (l);
++ boofar (m);
++ boofar (n);
++ boofar (o);
++ boofar (p);
++ boofar (aa);
++ boofar (ba);
++ boofar (ca);
++ boofar (da);
++ boofar (ea);
++ boofar (fa);
++ boofar (ga);
++ boofar (ha);
++ boofar (ia);
++ boofar (ja);
++ boofar (ka);
++ boofar (la);
++ boofar (ma);
++ boofar (na);
++ boofar (oa);
++ boofar (pa);
++
++ boofar (ab);
++ boofar (bb);
++ boofar (cb);
++ boofar (db);
++ boofar (eb);
++ boofar (fb);
++ boofar (gb);
++ boofar (hb);
++ boofar (ib);
++ boofar (jb);
++ boofar (kb);
++ boofar (lb);
++ boofar (mb);
++ boofar (nb);
++ boofar (ob);
++ boofar (pb);
++
++ boofar (a);
++ boofar (b);
++ boofar (c);
++ boofar (d);
++ boofar (e);
++ boofar (f);
++ boofar (g);
++ boofar (h);
++ boofar (i);
++ boofar (j);
++ boofar (k);
++ boofar (l);
++ boofar (m);
++ boofar (n);
++ boofar (o);
++ boofar (p);
++ boofar (aa);
++ boofar (ba);
++ boofar (ca);
++ boofar (da);
++ boofar (ea);
++ boofar (fa);
++ boofar (ga);
++ boofar (ha);
++ boofar (ia);
++ boofar (ja);
++ boofar (ka);
++ boofar (la);
++ boofar (ma);
++ boofar (na);
++ boofar (oa);
++ boofar (pa);
++
++ boofar (ab);
++ boofar (bb);
++ boofar (cb);
++ boofar (db);
++ boofar (eb);
++ boofar (fb);
++ boofar (gb);
++ boofar (hb);
++ boofar (ib);
++ boofar (jb);
++ boofar (kb);
++ boofar (lb);
++ boofar (mb);
++ boofar (nb);
++ boofar (ob);
++ boofar (pb);
++
++}
++
++test_exit_ignore_stack ()
++{
++ foobar (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900407-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900407-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900407-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900407-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++foo (a, b, p)
++ int *p;
++{
++ int c;
++ p[1] = a + 0x1000;
++ c = b + 0xffff0000;
++ if ((b + 0xffff0000) == 0)
++ c++;
++ p[2] = c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900516-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900516-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/900516-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/900516-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(c){return!(c?2.0:1.0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920301-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920301-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920301-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920301-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++#ifndef NO_LABEL_VALUES
++f(){static void*t[]={&&x};x:;}
++#endif
++g(){static unsigned p[5];}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920409-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920409-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920409-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920409-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(){int y;y>0.0?y:y-1;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920409-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920409-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920409-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920409-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++double x(){int x1,x2;double v;
++if(((long)(x1-x2))<1)return -1.0;v=t(v);v=y(1,v>0.0?(int)v:((int)v-1));}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920410-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920410-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920410-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920410-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++int alloc_float(f)
++ float f;
++{ union
++ {
++ float f;
++ int i;
++ }
++ u;
++ u.f=f;
++ return u.i&~1;
++}
++
++float c_float(int obj)
++{ union
++ {
++ float f;
++ int i;
++ } u;
++
++ u.i=obj;
++ return u.f;
++}
++
++main()
++{ int x=alloc_float(1.2);
++ int y=alloc_float(5.7);
++ int z=alloc_float(c_float(x)*c_float(y));
++
++ printf("%g\n",(double)c_float(z));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920410-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920410-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920410-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920410-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++joe()
++{
++ int j;
++
++ while( 1 )
++ {
++ for( j = 0; j < 4; j++ )
++ ;
++ for( j = 0; j < 4; j++ )
++ ;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920411-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920411-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920411-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920411-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(){int n;double x;n=x<1?n:n+1;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920413-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920413-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920413-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920413-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++union u {double d;long long ll;};
++f(double x, int n){union u v;v.d=x;if(n>=0){v.ll<<=63;}else{v.ll+=1<<-n;v.ll>>=-n;}return v.ll;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920415-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920415-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920415-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920415-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++#ifndef NO_LABEL_VALUES
++f ()
++{
++ __label__ l;
++ void *x()
++ {
++ return &&l;
++ }
++ goto *x ();
++ abort ();
++ return;
++ l:
++ exit (0);
++}
++#else
++int x;
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(){char*q;return(long)q>>8&0xff;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,531 @@
++double sin(double x);
++double cos(double x);
++double tan(double x);
++double asin(double x);
++double acos(double x);
++double atan(double x);
++double atan2(double y, double x);
++double sinh(double x);
++double cosh(double x);
++double tanh(double x);
++double exp(double x);
++double expm1(double x);
++double log(double x);
++double log10(double x);
++double log1p(double x);
++double pow(double x, double y);
++double sqrt(double x);
++double cbrt(double x);
++double ceil(double x);
++double floor(double x);
++double fabs(double x);
++double frexp(double value, int *eptr);
++double ldexp(double value, int exp);
++double modf(double value, double *iptr);
++double erf(double x);
++double erfc(double x);
++double atof(const char *nptr);
++double hypot(double x, double y);
++double lgamma(double x);
++double j0(double x);
++double j1(double x);
++double jn(int n, double x);
++double y0(double x);
++double y1(double x);
++double yn(int n, double x);
++extern struct _iobuf {
++ int _cnt;
++ char *_ptr;
++ char *_base;
++ int _bufsiz;
++ short _flag;
++ char _file;
++} _iob[];
++typedef unsigned long size_t;
++typedef char *va_list;
++struct _iobuf *fopen(const char *filename, const char *type);
++struct _iobuf *freopen(const char *filename, const char *type, struct _iobuf *stream);
++struct _iobuf *fdopen(int fildes, const char *type);
++struct _iobuf *popen(const char *command, const char *type);
++int pclose(struct _iobuf *stream);
++int fflush(struct _iobuf *stream);
++int fclose(struct _iobuf *stream);
++int remove(const char *path);
++int rename(const char *from, const char *to);
++struct _iobuf *tmpfile(void);
++char *tmpnam(char *s);
++int setvbuf(struct _iobuf *iop, char *buf, int type, size_t size);
++int setbuf(struct _iobuf *stream, char *buf);
++int setbuffer(struct _iobuf *stream, char *buf, size_t size);
++int setlinebuf(struct _iobuf *stream);
++int fprintf(struct _iobuf *stream, const char *format, ...);
++int printf(const char *format, ...);
++char *sprintf(char *s, const char *format, ...);
++int vfprintf(struct _iobuf *stream, const char *format, va_list arg);
++int vprintf(const char *format, va_list arg);
++int vsprintf(char *s, const char *format, va_list arg);
++int fscanf(struct _iobuf *stream, const char *format, ...);
++int scanf(const char *format, ...);
++int sscanf(char *s, const char *format, ...);
++int fgetc(struct _iobuf *stream);
++int getw(struct _iobuf *stream);
++char *fgets(char *s, int n, struct _iobuf *stream);
++char *gets(char *s);
++int fputc(int c, struct _iobuf *stream);
++int putw(int w, struct _iobuf *stream);
++int fputs(const char *s, struct _iobuf *stream);
++int puts(const char *s);
++int ungetc(int c, struct _iobuf *stream);
++int fread(void *ptr, size_t size, size_t count, struct _iobuf *iop);
++int fwrite(const void *ptr, size_t size, size_t count, struct _iobuf *iop);
++int fseek(struct _iobuf *stream, long offset, int ptrname);
++long ftell(struct _iobuf *stream);
++void rewind(struct _iobuf *stream);
++int fgetpos(struct _iobuf *stream, long *pos);
++int fsetpos(struct _iobuf *stream, const long *pos);
++void perror(const char *s);
++typedef unsigned char byte;
++typedef unsigned char uchar;
++typedef unsigned short ushort;
++typedef unsigned int uint;
++typedef unsigned long ulong;
++typedef unsigned char u_char;
++typedef unsigned short u_short;
++typedef unsigned int u_int;
++typedef unsigned long u_long;
++typedef unsigned short ushort_;
++typedef struct _physadr { int r[1]; } *physadr;
++typedef struct label_t {
++ int val[11];
++} label_t;
++typedef struct _quad { long val[2]; } quad;
++typedef long daddr_t;
++typedef char * caddr_t;
++typedef u_long ino_t;
++typedef long swblk_t;
++typedef long time_t;
++typedef short dev_t;
++typedef long off_t;
++typedef u_short uid_t;
++typedef u_short gid_t;
++typedef signed char prio_t;
++typedef long fd_mask;
++typedef struct fd_set {
++ fd_mask fds_bits[(((256 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ];
++} fd_set;
++typedef struct qhdr {
++ struct qhdr *link, *rlink;
++} *queue_t;
++typedef char *ptr_ord_t;
++typedef double floatp;
++typedef char *(*proc_alloc_t)(unsigned num_elements, unsigned element_size, const char *client_name );
++typedef void (*proc_free_t)(char *data, unsigned num_elements, unsigned element_size, const char *client_name );
++extern struct _iobuf *gs_out;
++typedef struct gs_point_s {
++ double x, y;
++} gs_point;
++typedef struct gs_int_point_s {
++ int x, y;
++} gs_int_point;
++typedef struct gs_rect_s {
++ gs_point p, q;
++} gs_rect;
++typedef struct gs_int_rect_s {
++ gs_int_point p, q;
++} gs_int_rect;
++typedef struct gs_state_s gs_state;
++typedef struct {
++ proc_alloc_t alloc;
++ proc_free_t free;
++} gs_memory_procs;
++char *gs_malloc(uint, uint, const char * );
++void gs_free(char *, uint, uint, const char * );
++extern char gs_debug[128];
++extern int gs_log_error(int, const char *, int );
++typedef long fixed;
++typedef struct gs_fixed_point_s {
++ fixed x, y;
++} gs_fixed_point;
++typedef struct gs_fixed_rect_s {
++ gs_fixed_point p, q;
++} gs_fixed_rect;
++typedef struct gs_matrix_s {
++ long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty;
++} gs_matrix;
++void gs_make_identity(gs_matrix * );
++int gs_make_translation(floatp, floatp, gs_matrix * ),
++ gs_make_scaling(floatp, floatp, gs_matrix * ),
++ gs_make_rotation(floatp, gs_matrix * );
++int gs_matrix_multiply(const gs_matrix *, const gs_matrix *, gs_matrix * ),
++ gs_matrix_invert(const gs_matrix *, gs_matrix * ),
++ gs_matrix_rotate(const gs_matrix *, floatp, gs_matrix * );
++int gs_point_transform(floatp, floatp, const gs_matrix *, gs_point * ),
++ gs_point_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
++ gs_distance_transform(floatp, floatp, const gs_matrix *, gs_point * ),
++ gs_distance_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
++ gs_bbox_transform_inverse(gs_rect *, gs_matrix *, gs_rect * );
++typedef struct gs_matrix_fixed_s {
++ long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty;
++ fixed tx_fixed, ty_fixed;
++} gs_matrix_fixed;
++extern void gs_update_matrix_fixed(gs_matrix_fixed * );
++int gs_point_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * ),
++ gs_distance_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * );
++typedef struct {
++ long xx, xy, yx, yy;
++ int skewed;
++ int shift;
++ int max_bits;
++ fixed round;
++} fixed_coeff;
++
++typedef enum {
++ gs_cap_butt = 0,
++ gs_cap_round = 1,
++ gs_cap_square = 2
++} gs_line_cap;
++typedef enum {
++ gs_join_miter = 0,
++ gs_join_round = 1,
++ gs_join_bevel = 2
++} gs_line_join;
++gs_state *gs_state_alloc(proc_alloc_t, proc_free_t );
++int gs_state_free(gs_state * );
++int gs_gsave(gs_state * ),
++ gs_grestore(gs_state * ),
++ gs_grestoreall(gs_state * );
++gs_state *gs_gstate(gs_state * );
++int gs_currentgstate(gs_state * , const gs_state * ),
++ gs_setgstate(gs_state * , const gs_state * );
++gs_state *gs_state_swap_saved(gs_state *, gs_state * );
++void gs_state_swap(gs_state *, gs_state * );
++int gs_initgraphics(gs_state * );
++typedef struct gx_device_s gx_device;
++int gs_flushpage(gs_state * );
++int gs_copypage(gs_state * );
++int gs_output_page(gs_state *, int, int );
++int gs_copyscanlines(gx_device *, int, byte *, uint, int *, uint * );
++gx_device * gs_getdevice(int );
++int gs_copydevice(gx_device **, gx_device *, proc_alloc_t );
++int gs_makeimagedevice(gx_device **, gs_matrix *, uint, uint, byte *, int, proc_alloc_t );
++void gs_nulldevice(gs_state * );
++int gs_setdevice(gs_state *, gx_device * );
++gx_device * gs_currentdevice(gs_state * );
++const char * gs_devicename(gx_device * );
++void gs_deviceinitialmatrix(gx_device *, gs_matrix * );
++int gs_closedevice(gx_device * );
++int gs_setlinewidth(gs_state *, floatp );
++float gs_currentlinewidth(const gs_state * );
++int gs_setlinecap(gs_state *, gs_line_cap );
++gs_line_cap gs_currentlinecap(const gs_state * );
++int gs_setlinejoin(gs_state *, gs_line_join );
++gs_line_join gs_currentlinejoin(const gs_state * );
++int gs_setmiterlimit(gs_state *, floatp );
++float gs_currentmiterlimit(const gs_state * );
++int gs_setdash(gs_state *, const float *, uint, floatp );
++uint gs_currentdash_length(const gs_state * );
++int gs_currentdash_pattern(const gs_state *, float * );
++float gs_currentdash_offset(const gs_state * );
++int gs_setflat(gs_state *, floatp );
++float gs_currentflat(const gs_state * );
++int gs_setstrokeadjust(gs_state *, int );
++int gs_currentstrokeadjust(const gs_state * );
++typedef enum {
++ gs_color_space_DeviceGray = 0,
++ gs_color_space_DeviceRGB,
++ gs_color_space_DeviceCMYK
++} gs_color_space;
++typedef struct gs_color_s gs_color;
++extern const uint gs_color_sizeof;
++int gs_setgray(gs_state *, floatp );
++float gs_currentgray(gs_state * );
++int gs_sethsbcolor(gs_state *, floatp, floatp, floatp ),
++ gs_currenthsbcolor(gs_state *, float [3] ),
++ gs_setrgbcolor(gs_state *, floatp, floatp, floatp ),
++ gs_currentrgbcolor(gs_state *, float [3] );
++int gs_currentcolorspace(gs_state *, gs_color_space * );
++typedef float (*gs_transfer_proc)(gs_state *, floatp );
++int gs_settransfer(gs_state *, gs_transfer_proc ),
++ gs_settransfer_remap(gs_state *, gs_transfer_proc, int );
++gs_transfer_proc gs_currenttransfer(gs_state * );
++int gs_setcolortransfer(gs_state *, gs_transfer_proc ,
++ gs_transfer_proc , gs_transfer_proc ,
++ gs_transfer_proc ),
++ gs_setcolortransfer_remap(gs_state *, gs_transfer_proc ,
++ gs_transfer_proc , gs_transfer_proc ,
++ gs_transfer_proc , int );
++void gs_currentcolortransfer(gs_state *, gs_transfer_proc [4] );
++int gs_setscreen(gs_state *, floatp, floatp, float (*)(floatp, floatp ) );
++int gs_currentscreen(gs_state *, float *, float *, float (**)(floatp, floatp ) );
++int gs_sethalftonephase(gs_state *, int, int );
++int gs_currenthalftonephase(gs_state *, gs_int_point * );
++typedef struct gs_screen_enum_s gs_screen_enum;
++extern const uint gs_screen_enum_sizeof;
++int gs_screen_init(gs_screen_enum *, gs_state *, floatp, floatp );
++int gs_screen_currentpoint(gs_screen_enum *, gs_point * );
++int gs_screen_next(gs_screen_enum *, floatp );
++struct gs_state_s {
++ gs_state *saved;
++ gs_memory_procs memory_procs;
++ gs_matrix_fixed ctm;
++ gs_matrix ctm_inverse;
++ int inverse_valid;
++ struct gx_path_s *path;
++ struct gx_clip_path_s *clip_path;
++ int clip_rule;
++ struct line_params_s *line_params;
++ struct halftone_params_s *halftone;
++ float (*ht_proc)(floatp, floatp );
++ gs_int_point ht_phase;
++ gs_int_point phase_mod;
++ struct gs_color_s *color;
++ struct gx_device_color_s *dev_color;
++ struct gx_transfer_s *transfer;
++ struct gs_font_s *font;
++ gs_matrix char_tm;
++ int char_tm_valid;
++ byte in_cachedevice;
++ byte in_charpath;
++
++
++
++
++ int level;
++ float flatness;
++ int stroke_adjust;
++ struct device_s *device;
++ int device_is_shared;
++
++};
++typedef unsigned long gx_bitmap_id;
++typedef struct gx_bitmap_s {
++ byte *data;
++ int raster;
++ gs_int_point size;
++ gx_bitmap_id id;
++ ushort rep_width, rep_height;
++} gx_bitmap;
++typedef unsigned long gx_color_index;
++typedef unsigned short gx_color_value;
++typedef struct gx_device_color_info_s {
++ int num_components;
++
++ int depth;
++ gx_color_value max_gray;
++ gx_color_value max_rgb;
++
++ gx_color_value dither_gray;
++ gx_color_value dither_rgb;
++
++} gx_device_color_info;
++typedef struct gx_device_procs_s gx_device_procs;
++struct gx_device_s {
++ int params_size; gx_device_procs *procs; const char *dname; int width; int height; float x_pixels_per_inch; float y_pixels_per_inch; float l_margin, b_margin, r_margin, t_margin; gx_device_color_info color_info; int is_open;
++};
++typedef struct gs_prop_item_s gs_prop_item;
++struct gx_device_procs_s {
++ int (*open_device)(gx_device *dev );
++ void (*get_initial_matrix)(gx_device *dev, gs_matrix *pmat );
++ int (*sync_output)(gx_device *dev );
++ int (*output_page)(gx_device *dev, int num_copies, int flush );
++ int (*close_device)(gx_device *dev );
++ gx_color_index (*map_rgb_color)(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue );
++ int (*map_color_rgb)(gx_device *dev, gx_color_index color, gx_color_value rgb[3] );
++ int (*fill_rectangle)(gx_device *dev, int x, int y, int width, int height, gx_color_index color );
++ int (*tile_rectangle)(gx_device *dev, gx_bitmap *tile, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1, int phase_x, int phase_y );
++ int (*copy_mono)(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1 );
++ int (*copy_color)(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height );
++ int (*draw_line)(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color );
++ int (*get_bits)(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word );
++ int (*get_props)(gx_device *dev, gs_prop_item *plist );
++
++ int (*put_props)(gx_device *dev, gs_prop_item *plist, int count );
++
++};
++extern unsigned int gx_device_bytes_per_scan_line(gx_device *dev, int pad_to_word );
++int gx_default_open_device(gx_device *dev );
++void gx_default_get_initial_matrix(gx_device *dev, gs_matrix *pmat );
++int gx_default_sync_output(gx_device *dev );
++int gx_default_output_page(gx_device *dev, int num_copies, int flush );
++int gx_default_close_device(gx_device *dev );
++gx_color_index gx_default_map_rgb_color(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue );
++int gx_default_map_color_rgb(gx_device *dev, gx_color_index color, gx_color_value rgb[3] );
++int gx_default_tile_rectangle(gx_device *dev, gx_bitmap *tile, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1, int phase_x, int phase_y );
++int gx_default_copy_color(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height );
++int gx_default_draw_line(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color );
++int gx_default_get_bits(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word );
++int gx_default_get_props(gx_device *dev, gs_prop_item *plist );
++int gx_default_put_props(gx_device *dev, gs_prop_item *plist, int count );
++typedef struct device_s {
++ gx_device *info;
++ int is_band_device;
++ gx_color_index white, black;
++} device;
++int gs_initmatrix(gs_state * ),
++ gs_defaultmatrix(const gs_state *, gs_matrix * ),
++ gs_currentmatrix(const gs_state *, gs_matrix * ),
++ gs_setmatrix(gs_state *, const gs_matrix * ),
++ gs_translate(gs_state *, floatp, floatp ),
++ gs_scale(gs_state *, floatp, floatp ),
++ gs_rotate(gs_state *, floatp ),
++ gs_concat(gs_state *, const gs_matrix * );
++int gs_transform(gs_state *, floatp, floatp, gs_point * ),
++ gs_dtransform(gs_state *, floatp, floatp, gs_point * ),
++ gs_itransform(gs_state *, floatp, floatp, gs_point * ),
++ gs_idtransform(gs_state *, floatp, floatp, gs_point * );
++static int
++ctm_set_inverse(gs_state *pgs)
++{ int code = gs_matrix_invert(&*(gs_matrix *)&(pgs)->ctm , &pgs->ctm_inverse);
++ 0;
++ if ( code < 0 ) return code;
++ pgs->inverse_valid = 1;
++ return 0;
++}
++void
++gs_update_matrix_fixed(gs_matrix_fixed *pmat)
++{ (*pmat). tx = ((float)(((*pmat). tx_fixed = ((fixed)(((*pmat). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (*pmat). ty = ((float)(((*pmat). ty_fixed = ((fixed)(((*pmat). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) )));
++}
++int
++gs_initmatrix(gs_state *pgs)
++{ gx_device *dev = pgs->device->info;
++ (*dev->procs->get_initial_matrix)(dev, &*(gs_matrix *)&(pgs)->ctm );
++ (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
++ return 0;
++}
++int
++gs_defaultmatrix(const gs_state *pgs, gs_matrix *pmat)
++{ gx_device *dev = pgs->device->info;
++ (*dev->procs->get_initial_matrix)(dev, pmat);
++ return 0;
++}
++int
++gs_currentmatrix(const gs_state *pgs, gs_matrix *pmat)
++{ *pmat = *(gs_matrix *)&(pgs)->ctm;
++ return 0;
++}
++int
++gs_setmatrix(gs_state *pgs, const gs_matrix *pmat)
++{ *(gs_matrix *)&(pgs)->ctm = *pmat;
++ (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
++ return 0;
++}
++int
++gs_translate(gs_state *pgs, floatp dx, floatp dy)
++{ gs_point pt;
++ int code;
++ if ( (code = gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , &pt)) < 0 )
++ return code;
++ pgs->ctm.tx += pt.x;
++ pgs->ctm.ty += pt.y;
++ (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
++ return 0;
++}
++int
++gs_scale(gs_state *pgs, floatp sx, floatp sy)
++{ pgs->ctm.xx *= sx;
++ pgs->ctm.xy *= sx;
++ pgs->ctm.yx *= sy;
++ pgs->ctm.yy *= sy;
++ pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
++ return 0;
++}
++int
++gs_rotate(gs_state *pgs, floatp ang)
++{ int code = gs_matrix_rotate(&*(gs_matrix *)&(pgs)->ctm , ang, &*(gs_matrix *)&(pgs)->ctm );
++ pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
++ return code;
++}
++int
++gs_concat(gs_state *pgs, const gs_matrix *pmat)
++{ int code = gs_matrix_multiply(pmat, &*(gs_matrix *)&(pgs)->ctm , &*(gs_matrix *)&(pgs)->ctm );
++ (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
++ return code;
++}
++int
++gs_transform(gs_state *pgs, floatp x, floatp y, gs_point *pt)
++{ return gs_point_transform(x, y, &*(gs_matrix *)&(pgs)->ctm , pt);
++}
++int
++gs_dtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt)
++{ return gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , pt);
++}
++int
++gs_itransform(gs_state *pgs, floatp x, floatp y, gs_point *pt)
++{
++
++ if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) )
++ { return gs_point_transform_inverse(x, y, &*(gs_matrix *)&(pgs)->ctm , pt);
++ }
++ else
++ { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; };
++ return gs_point_transform(x, y, &pgs->ctm_inverse, pt);
++ }
++}
++int
++gs_idtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt)
++{
++
++ if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) )
++ { return gs_distance_transform_inverse(dx, dy,
++ &*(gs_matrix *)&(pgs)->ctm , pt);
++ }
++ else
++ { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; };
++ return gs_distance_transform(dx, dy, &pgs->ctm_inverse, pt);
++ }
++}
++int
++gs_translate_to_fixed(register gs_state *pgs, fixed px, fixed py)
++{ pgs->ctm.tx = ((float)((pgs->ctm.tx_fixed = px)*(1.0/(1<<12 ) )));
++ pgs->ctm.ty = ((float)((pgs->ctm.ty_fixed = py)*(1.0/(1<<12 ) )));
++ pgs->inverse_valid = 0;
++ pgs->char_tm_valid = 1;
++ return 0;
++}
++int
++gx_matrix_to_fixed_coeff(const gs_matrix *pmat, register fixed_coeff *pfc,
++ int max_bits)
++{ gs_matrix ctm;
++ int scale = -10000;
++ int expt, shift;
++ ctm = *pmat;
++ pfc->skewed = 0;
++ if ( !((*(long *)(&(ctm.xx)) << 1) == 0) )
++ { (void)frexp(ctm.xx, &scale);
++ }
++ if ( !((*(long *)(&(ctm.xy)) << 1) == 0) )
++ { (void)frexp(ctm.xy, &expt);
++ if ( expt > scale ) scale = expt;
++ pfc->skewed = 1;
++ }
++ if ( !((*(long *)(&(ctm.yx)) << 1) == 0) )
++ { (void)frexp(ctm.yx, &expt);
++ if ( expt > scale ) scale = expt;
++ pfc->skewed = 1;
++ }
++ if ( !((*(long *)(&(ctm.yy)) << 1) == 0) )
++ { (void)frexp(ctm.yy, &expt);
++ if ( expt > scale ) scale = expt;
++ }
++ scale = sizeof(long) * 8 - 1 - max_bits - scale;
++ shift = scale - 12;
++ if ( shift > 0 )
++ { pfc->shift = shift;
++ pfc->round = (fixed)1 << (shift - 1);
++ }
++ else
++ { pfc->shift = 0;
++ pfc->round = 0;
++ scale -= shift;
++ }
++ pfc->xx = (((*(long *)(&(ctm.xx)) << 1) == 0) ? 0 : (long)ldexp(ctm.xx, scale));
++ pfc->yy = (((*(long *)(&(ctm.yy)) << 1) == 0) ? 0 : (long)ldexp(ctm.yy, scale));
++ if ( pfc->skewed )
++ { pfc->xy = (((*(long *)(&(ctm.xy)) << 1) == 0) ? 0 : (long)ldexp(ctm.xy, scale));
++ pfc->yx = (((*(long *)(&(ctm.yx)) << 1) == 0) ? 0 : (long)ldexp(ctm.yx, scale));
++ }
++ else
++ pfc->xy = pfc->yx = 0;
++ pfc->max_bits = max_bits;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++#ifndef NO_LABEL_VALUES
++x(a){static void*j[]={&&l1,&&l2};goto*j[a];l1:return 0;l2:return 1;}
++#else
++main(){ exit (0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(a){struct{int p[a],i;}l;l.i;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++typedef struct{unsigned b0:1;}*t;x(a,b)t a,b;{b->b0=a->b0;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++typedef struct x
++{
++ struct x *type;
++ struct x *chain;
++ struct x *value;
++} *tree;
++
++int
++func (new, old)
++ register tree new, old;
++{
++ if (old->type == 0 || new->type == 0)
++ {
++ register tree t = old->type;
++ if (t == 0)
++ t = new->type;
++ for (; t; t = t->chain )
++ if (t->value)
++ return 1;
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-7.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-7.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920428-7.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920428-7.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(float*x){int a[4],i=0,j;for(j=0;j<2;j++){f(a[i++]);f(a[i++]);}}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-10.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-10.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-10.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-10.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(y){return 8193*y;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-11.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-11.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-11.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-11.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++typedef struct{int s;}S;foo(){int i=(int)&(S){(void*)((int)&(S){1})};}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-12.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-12.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-12.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-12.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++x(x){ return 3 + x;}
++a(x){int y[994]; return 3 + x;}
++b(x){int y[999]; return 2*(x + 3);}
++A(x){int y[9999];return 2*(x + 3);}
++B(x){int y[9949];return 3 + x;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-13.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-13.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-13.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-13.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++typedef struct{int i;}t;inline y(t u){}x(){t u;y(u);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-15.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-15.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-15.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-15.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(a)double a;{int i;return i>a?i:i+1;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-16.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-16.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-16.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-16.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(n){struct z{int a,b[n],c[n];};}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-17.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-17.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-17.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-17.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(){static const char x[]="x";char y[2];y[0]=x[1];}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-18.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-18.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-18.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-18.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++union u{int i;float f;};
++x(p)int p;{union u x;for(x.i=0;x.i<p;x.i++)if(x.f>(float)3.0)break;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-19.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-19.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-19.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-19.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++long long x=0;y(){x=0;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++/* CYGNUS LOCAL -- meissner/no label values */
++#ifndef NO_LABEL_VALUES
++a(){int**b[]={&&c};c:;}
++#else
++int x;
++#endif
++/* END CYGNUS LOCAL -- meissner/no label values */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-20.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-20.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-20.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-20.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++int*f(x)int*x;{if(x[4]){int h[1];if(setjmp(h))return x;}}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-21.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-21.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-21.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-21.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++typedef unsigned short t;
++struct foo{t d;};
++int bar(d)t d;{struct foo u;u.d=d;return(int)(&u);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-22.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-22.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-22.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-22.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(){int y[]={};}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-23.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-23.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-23.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-23.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++typedef unsigned char qi;
++typedef unsigned short hi;
++typedef unsigned long si;
++typedef unsigned long long di;
++subi(a){return 100-a;}
++add(a,b){return a+b;}
++mul(a){return 85*a;}
++memshift(p)unsigned*p;{unsigned x;for(;;){x=*p++>>16;if(x)return x;}}
++ldw(xp)si*xp;{return xp[4];}
++ldws_m(xp)si*xp;{si x;do{x=xp[3];xp+=3;}while(x);}
++postinc_si(p)si*p;{si x;for(;;){x=*p++;if(x)return x;}}
++preinc_si(p)si*p;{si x;for(;;){x=*++p;if(x)return x;}}
++postinc_di(p)di*p;{di x;for(;;){x=*p++;if(x)return x;}}
++preinc_di(p)di*p;{di x;for(;;){x=*++p;if(x)return x;}}
++inc_overlap(p,a)di*p;{do{p=*(di**)p;p=(di*)((int)p+4);}while(*p);}
++di move_di(p,p2)di*p,*p2;{di x=p;p2=((di*)x)[1];return p2[1];}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++extern short distdata[64][64], taxidata[64][64];
++extern short PieceList[2][64];
++
++int
++ScoreKBNK (short int winner, short int king1, short int king2)
++{
++ register short s;
++
++ s = taxidata[king1][king2] + distdata[PieceList[winner][1]][king2];
++ return s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++struct{long long x:24,y:40;}v;
++x(){v.y=0;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++foo ()
++{
++ int r0[8186 ];
++ int r1[2 ];
++ int r2[2 ];
++ int bitm0[2 ];
++ int bitm1[2 ];
++ int bitm2[2 ];
++
++ int i,j,k,m,n,m_max;
++ int f;
++ double fm,ft;
++
++ while (1) {
++
++ if (m%4 == 2)
++ ++m;
++
++ if (m_max != 0 && m > m_max)
++ break;
++
++ fm=m;
++
++ r0[k=1]=0;
++ bitm0[0] = 0;
++
++ while ( n%f == 0 ) {
++ while ( (ft != 0) && (ft < fm )) {
++ bitm1[i] = 0;
++ r1[i]=0;
++ }
++
++ while ( r0[i] != 0 && r1[i] != 0 ) {
++ if ( r0[i] < r1[i] ) {
++ bitm2[k] = bitm0[i];
++ r2[k++]=0;
++ }
++ else if ( r0[i] > r1[j] ) {
++ bitm2[k] = bitm1[j];
++ r2[k++]=r1[j++];
++ }
++ else {
++ bitm1[k] = bitm0[i];
++ r2[k++]=r0[i++];
++ }
++ }
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(y,z)float*y;{*y=z;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-7.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-7.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-7.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-7.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++/* CYGNUS LOCAL -- meissner/no label values */
++#ifndef NO_LABEL_VALUES
++x(){if(&&e-&&b<0)x();b:goto*&&b;e:;}
++#else
++int x;
++#endif
++/* END CYGNUS LOCAL -- meissner/no label values */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-8.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-8.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-8.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-8.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(int*p){int x=p;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-9.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-9.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920501-9.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920501-9.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++short x(a)unsigned a;{a=32987799;return a;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920502-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920502-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920502-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920502-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++extern void*t[];x(i){goto*t[i];}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920502-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920502-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920502-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920502-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(c){1LL<<c;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920529-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920529-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920529-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920529-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++void
++f (a, b, m, n)
++ unsigned short *a, *b;
++ int m, n;
++{
++ unsigned long acc;
++ int qn;
++ int j;
++
++ abort ();
++
++ acc = a[m - 1];
++ a += 0;
++ for (j = qn - 1; j >= 0; j = j - 1)
++ {
++ acc = (acc << 16) | a[j];
++ acc = acc % *b;
++ }
++
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920611-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920611-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920611-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920611-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++typedef unsigned char uchar;
++typedef unsigned short ushort;
++typedef unsigned int uint;
++typedef unsigned long ulong;
++
++static unsigned long S[1][1]={0x00820200};
++
++static int body(out0,out1,ks,Eswap0,Eswap1)
++ulong *out0,*out1;
++int *ks;
++ulong Eswap0,Eswap1;
++{
++ register unsigned long l,r,t,u,v;
++ register unsigned long *s;
++ register int i,j;
++ register unsigned long E0,E1;
++
++ l=0;
++ r=0;
++
++ s=(ulong *)ks;
++ E0=Eswap0;
++ E1=Eswap1;
++
++ for (i=0; i<(16 *2); i+=4)
++ {
++ v=(r^(r>>16));
++ u=(v&E0);
++ v=(v&E1);
++ u=(u^(u<<16))^r^s[ i ];
++ t=(v^(v<<16))^r^s[ i+1];
++ t=(t>>4)|(t<<28);
++ l^=S[1][(t)&0x3f]| S[3][(t>> 8)&0x3f]| S[5][(t>>16)&0x3f]| S[7][(t>>24)&0x3f]| S[0][(u)&0x3f]| S[2][(u>> 8)&0x3f]| S[4][(u>>16)&0x3f]| S[6][(u>>24)&0x3f];
++ v=(l^(l>>16));
++ u=(v&E0);
++ v=(v&E1);
++ u=(u^(u<<16))^l^s[ i+2 ];
++ t=(v^(v<<16))^l^s[ i+2+1];
++ t=(t>>4)|(t<<28);
++ r^= S[1][(t )&0x3f];
++ }
++ t=l;
++ l=r;
++ r=t;
++
++ t=r;
++ r=(l>>1)|(l<<31);
++ l=(t>>1)|(t<<31);
++
++ *out0=l;
++ *out1=r;
++ return(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920615-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920615-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920615-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920615-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f()
++{
++ int x[20] = {[0] = 5, [10] = 12};
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920617-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920617-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920617-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920617-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(){double*xp,y;*xp++=sqrt(y);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920617-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920617-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920617-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920617-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(a,b,c,d)float a[],d;int b[],c;{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920623-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920623-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920623-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920623-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++int f(int c){return f(c--);}
++g(){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920624-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920624-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920624-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920624-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++int B[],Q[];
++f(){int s;for(s=0;s<=1;s++)switch(s){case 2:case 3:++B[s];case 4:case 5:++Q[s];}}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920625-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920625-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920625-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920625-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,279 @@
++typedef unsigned long int unsigned_word;
++typedef signed long int signed_word;
++typedef unsigned_word word;
++
++typedef enum { ADD, ADD_CI, ADD_CO, ADD_CIO, SUB, SUB_CI, SUB_CO,
++SUB_CIO, ADC_CI, ADC_CO, ADC_CIO, AND, IOR, XOR, ANDC, IORC, EQV,
++NAND, NOR, AND_RC, IOR_RC, XOR_RC, ANDC_RC, IORC_RC, EQV_RC, NAND_RC,
++NOR_RC, AND_CC, IOR_CC, XOR_CC, ANDC_CC, IORC_CC, EQV_CC, NAND_CC,
++NOR_CC, LSHIFTR, ASHIFTR, SHIFTL, LSHIFTR_CO, ASHIFTR_CO, SHIFTL_CO,
++ROTATEL, ROTATEL_CO, ROTATEXL_CIO, ASHIFTR_CON, EXTS1, EXTS2, EXTU1,
++EXTU2, CLZ, CTZ, FF1, FF0, ABSVAL, NABSVAL, CMP, CPEQ, CPGE, CPGEU,
++CPGT, CPGTU, CPLE, CPLEU, CPLT, CPLTU, CPNEQ, CMPPAR, DOZ, COPY,
++EXCHANGE, COMCY, } opcode_t;
++
++typedef struct
++{
++ opcode_t opcode:8;
++ unsigned int s1:8;
++ unsigned int s2:8;
++ unsigned int d:8;
++} insn_t;
++
++enum prune_flags
++{
++ NO_PRUNE = 0,
++ CY_0 = 1,
++ CY_1 = 2,
++ CY_JUST_SET = 4,
++};
++
++int flag_use_carry = 1;
++
++inline
++recurse(opcode_t opcode,
++ int d,
++ int s1,
++ int s2,
++ word v,
++ int cost,
++ insn_t *sequence,
++ int n_insns,
++ word *values,
++ int n_values,
++ const word goal_value,
++ int allowed_cost,
++ int cy,
++ int prune_flags)
++{
++ insn_t insn;
++
++ allowed_cost -= cost;
++
++ if (allowed_cost > 0)
++ {
++ word old_d;
++
++ old_d = values[d];
++ values[d] = v;
++
++ insn.opcode = opcode;
++ insn.s1 = s1;
++ insn.s2 = s2;
++ insn.d = d;
++ sequence[n_insns] = insn;
++
++ synth(sequence, n_insns + 1, values, n_values,
++ goal_value, allowed_cost, cy, prune_flags);
++
++ values[d] = old_d;
++ }
++ else if (goal_value == v)
++ {
++ insn.opcode = opcode;
++ insn.s1 = s1;
++ insn.s2 = s2;
++ insn.d = d;
++ sequence[n_insns] = insn;
++ test_sequence(sequence, n_insns + 1);
++ }
++}
++
++synth(insn_t *sequence,
++ int n_insns,
++ word *values,
++ int n_values,
++ word goal_value,
++ int allowed_cost,
++ int ci,
++ int prune_hint)
++{
++ int s1, s2;
++ word v, r1, r2;
++ int co;
++ int last_dest;
++
++ if (n_insns > 0)
++ last_dest = sequence[n_insns - 1].d;
++ else
++ last_dest = -1;
++ if (ci >= 0 && flag_use_carry)
++ {
++ for (s1 = n_values - 1; s1 >= 0; s1--)
++ {
++ r1 = values[s1];
++ for (s2 = s1 - 1; s2 >= 0; s2--)
++ {
++ r2 = values[s2];
++
++ if (allowed_cost <= 1 && (prune_hint & CY_JUST_SET) == 0)
++ {
++ if (last_dest >= 0 && s1 != last_dest && s2 != last_dest)
++ continue;
++ }
++ do { word __d = ( r1) + ( r2) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CIO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ do { word __d = ( r1) + ( r2) + (( ci)); ( co) = ( ci); (v) = __d; } while (0);
++ recurse(ADD_CI, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ do { word __d = ( r1) - ( r2) - (( ci)); ( co) = ( ci) ? __d >= ( r1) : __d > ( r1); (v) = __d; } while (0);
++ recurse(SUB_CIO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ do { word __d = ( r2) - ( r1) - (( ci)); ( co) = ( ci) ? __d >= ( r2) : __d > ( r2); (v) = __d; } while (0);
++ recurse(SUB_CIO, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++
++ do { word __d = ( r1) - ( r2) - (( ci)); ( co) = ( ci); (v) = __d; } while (0);
++ recurse(SUB_CI, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ do { word __d = ( r2) - ( r1) - (( ci)); ( co) = ( ci); (v) = __d; } while (0);
++ recurse(SUB_CI, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ }
++ }
++ }
++ for (s1 = n_values - 1; s1 >= 0; s1--)
++ {
++ r1 = values[s1];
++ for (s2 = s1 - 1; s2 >= 0; s2--)
++ {
++ r2 = values[s2];
++
++ if (allowed_cost <= 1)
++ {
++ if (last_dest >= 0 && s1 != last_dest && s2 != last_dest)
++ continue;
++ }
++
++ do { word __d = ( r1) + ( r2); ( co) = __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++
++ ((v) = ( r1) + ( r2), ( co) = ( ci));
++ recurse(ADD, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ do { word __d = ( r1) - ( r2); ( co) = __d > ( r1); (v) = __d; } while (0);
++ recurse(SUB_CO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ do { word __d = ( r2) - ( r1); ( co) = __d > ( r2); (v) = __d; } while (0);
++ recurse(SUB_CO, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ ((v) = ( r1) - ( r2), ( co) = ( ci));
++ recurse(SUB, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ( r2) - ( r1), ( co) = ( ci));
++ recurse(SUB, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( r1) & ( r2), ( co) = ( ci));
++ recurse(AND, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( r1) | ( r2), ( co) = ( ci));
++ recurse(IOR, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( r1) ^ ( r2), ( co) = ( ci));
++ recurse(XOR, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( r1) & ~( r2), ( co) = ( ci));
++ recurse(ANDC, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ( r2) & ~( r1), ( co) = ( ci));
++ recurse(ANDC, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ( r1) | ~( r2), ( co) = ( ci));
++ recurse(IORC, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ( r2) | ~( r1), ( co) = ( ci));
++ recurse(IORC, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ( r1) ^ ~( r2), ( co) = ( ci));
++ recurse(EQV, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ }
++ }
++ if (ci >= 0 && flag_use_carry)
++ {
++ for (s1 = n_values - 1; s1 >= 0; s1--)
++ {
++ r1 = values[s1];
++
++ if (allowed_cost <= 1 && (prune_hint & CY_JUST_SET) == 0)
++ {
++
++ if (last_dest >= 0 && s1 != last_dest)
++ continue;
++ }
++
++ do { word __d = ( r1) + ( r1) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CIO, n_values, s1, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++
++ do { word __d = ( r1) + ( r1) + (( ci)); ( co) = ( ci); (v) = __d; } while (0);
++ recurse(ADD_CI, n_values, s1, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ do { word __d = ( r1) + ( -1 ) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CIO, n_values, s1, (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++
++ do { word __d = ( r1) + ( 0 ) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CIO, n_values, s1, (0x20 + 0) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ do { word __d = ( 0 ) - ( r1) - (( ci)); ( co) = ( ci) ? __d >= ( 0 ) : __d > ( 0 ); (v) = __d; } while (0);
++ recurse(SUB_CIO, n_values, (0x20 + 0) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++
++ }
++ }
++ for (s1 = n_values - 1; s1 >= 0; s1--)
++ {
++ r1 = values[s1];
++
++ if (allowed_cost <= 1)
++ {
++ if (last_dest >= 0 && s1 != last_dest)
++ continue;
++ }
++ do { word __d = ( r1) + ( r1); ( co) = __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CO, n_values, s1, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++
++ ((v) = ( r1) & ( 1 ), ( co) = ( ci));
++ recurse(AND, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( r1) ^ ( 1 ), ( co) = ( ci));
++ recurse(XOR, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( -1 ) - ( r1), ( co) = ( ci));
++ recurse(SUB, n_values, (0x20 + -1) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ do { word __d = ( r1) + ( 1 ); ( co) = __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CO, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ ((v) = ( r1) + ( 1 ), ( co) = ( ci));
++ recurse(ADD, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ do { word __d = ( r1) + ( -1 ); ( co) = __d < ( r1); (v) = __d; } while (0);
++ recurse(ADD_CO, n_values, s1, (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ do { word __d = ( r1) - ( 1 ); ( co) = __d > ( r1); (v) = __d; } while (0);
++ recurse(SUB_CO, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ do { word __d = ( 0 ) - ( r1); ( co) = __d > ( 0 ); (v) = __d; } while (0);
++ recurse(SUB_CO, n_values, (0x20 + 0) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET);
++ ((v) = ( 0 ) - ( r1), ( co) = ( ci));
++ recurse(SUB, n_values, (0x20 + 0) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ((unsigned_word) ( r1) >> (( 1 ) & (32 - 1)) ), ( co) = ( ci));
++ recurse(LSHIFTR, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ((signed_word) ( r1) >> (( 1 ) & (32 - 1)) ), ( co) = ( ci));
++ recurse(ASHIFTR, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ((signed_word) ( r1) << (( 1 ) & (32 - 1)) ), ( co) = ( ci));
++ recurse(SHIFTL, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ((unsigned_word) ( r1) >> (( 32 -1 ) & (32 - 1)) ), ( co) = ( ci));
++ recurse(LSHIFTR, n_values, s1, (0x20 + 32 -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ ((v) = ((signed_word) ( r1) >> (( 32 -1 ) & (32 - 1)) ), ( co) = ( ci));
++ recurse(ASHIFTR, n_values, s1, (0x20 + 32 -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ }
++ if (ci >= 0 && flag_use_carry
++ && (allowed_cost <= 1 ? ((prune_hint & CY_JUST_SET) != 0) : 1))
++ {
++ do { word __d = ( 0 ) + ( 0 ) + (( ci)); ( co) = ( ci) ? __d <= ( 0 ) : __d < ( 0 ); (v) = __d; } while (0);
++ recurse(ADD_CIO, n_values, (0x20 + 0) , (0x20 + 0) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET | CY_0);
++ do { word __d = ( 0 ) - ( 0 ) - (( ci)); ( co) = ( ci) ? __d >= ( 0 ) : __d > ( 0 ); (v) = __d; } while (0);
++ recurse(SUB_CIO, n_values, (0x20 + 0) , (0x20 + 0) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ do { word __d = ( 0 ) - ( -1 ) - (( ci)); ( co) = ( ci) ? __d >= ( 0 ) : __d > ( 0 ); (v) = __d; } while (0);
++ recurse(SUB_CIO, n_values, (0x20 + 0) , (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET | CY_1);
++ do { word __d = ( 0 ) + ( -1 ) + (( ci)); ( co) = ( ci) ? __d <= ( 0 ) : __d < ( 0 ); (v) = __d; } while (0);
++ recurse(ADD_CIO, n_values, (0x20 + 0) , (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ }
++
++ if (allowed_cost > 1)
++ {
++ ((v) = ( 0x80000000 ), ( co) = ( ci));
++ recurse(COPY, n_values, (0x20 - 2) , 0, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( -1 ), ( co) = ( ci));
++ recurse(COPY, n_values, (0x20 + -1) , 0, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++
++ ((v) = ( 1 ), ( co) = ( ci));
++ recurse(COPY, n_values, (0x20 + 1) , 0, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920625-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920625-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920625-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920625-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,103 @@
++typedef char * caddr_t;
++typedef unsigned Cursor;
++typedef char *String;
++typedef struct _WidgetRec *Widget;
++typedef char Boolean;
++typedef unsigned int Cardinal;
++typedef struct _XedwListReturnStruct {
++ String string;
++ int xedwList_index;
++ struct _XedwListReturnStruct *next;
++} XedwListReturnStruct;
++static XedwListReturnStruct *return_list;
++static String srcdir, dstdir;
++char *strcpy();
++ extern void setCursor(Cursor);
++ extern void query_dialog(String, Boolean);
++ extern Boolean directoryManagerNewDirectory(String);
++trashQueryResult(Widget w, Boolean delete, caddr_t call_data)
++{
++ int execute(String, String, String, Boolean);
++ extern void destroy_button_dialog(void);
++ extern void changestate(Boolean);
++
++ extern Cursor busy, left_ptr;
++ extern String cwd;
++ static void freeReturnStruct(void);
++ String rmstring;
++ int status;
++ XedwListReturnStruct *tmp;
++ setCursor(busy);
++ destroy_button_dialog();
++ if (delete == 1) {
++ rmstring = (("rm -fr") != ((void *)0) ? (strcpy((char*)XtMalloc((unsigned)strlen("rm -fr") + 1), "rm -fr")) : ((void *)0));
++ tmp = return_list;
++ while (tmp != ((void *)0)) {
++ rmstring = (String) XtRealloc (rmstring, sizeof(char) *
++ (strlen(rmstring) +
++ strlen(tmp->string) + 5));
++ sprintf(rmstring, "%s '%s'", rmstring, tmp->string);
++ tmp = tmp->next;
++ }
++ if ((status = execute(((void *)0), "rm", rmstring, 1)) != 0) {
++ XBell(XtDisplay(w), 100);
++ query_dialog("Can't remove file", 0);
++ }
++ XtFree(rmstring);
++
++ directoryManagerNewDirectory(cwd);
++ } else {
++ changestate(1);
++ }
++ setCursor(left_ptr);
++ freeReturnStruct();
++}
++
++copyQueryResult(Widget w, Boolean copy, caddr_t call_data)
++{
++ extern void destroy_button_dialog();
++ extern void changestate(Boolean);
++ extern Cursor busy, left_ptr;
++ static void freeReturnStruct(void);
++ int execute(String, String, String, Boolean);
++ extern String cwd;
++ String copystring;
++ int status;
++ Cardinal srclen, dstlen;
++ XedwListReturnStruct *tmp;
++ destroy_button_dialog();
++ setCursor(busy);
++ if (copy == 1) {
++ srclen = strlen(srcdir);
++ dstlen = strlen(dstdir);
++ copystring = (("cp -r") != ((void *)0) ? (strcpy((char*)XtMalloc((unsigned)strlen("cp -r") + 1), "cp -r")) : ((void *)0));
++ tmp = return_list;
++ while (tmp != ((void *)0)) {
++ copystring = (String) XtRealloc (copystring, sizeof(char) *
++ (strlen(copystring) +
++ strlen(tmp->string) +
++ srclen + 6));
++ sprintf(copystring, "%s '%s/%s'", copystring, srcdir, tmp->string);
++ tmp = tmp->next;
++ }
++ copystring = (String) XtRealloc (copystring, sizeof(char) *
++ (strlen(copystring) +
++ dstlen + 5));
++ sprintf(copystring, "%s '%s'", copystring, dstdir);
++ if ((status = execute(((void *)0), "cp", copystring, 1)) != 0) {
++ XBell(XtDisplay(w), 100);
++ query_dialog("Can't copy file!", 0);
++ }
++ XtFree(copystring);
++
++ directoryManagerNewDirectory(cwd);
++ } else {
++ changestate(1);
++ }
++ XtFree(srcdir);
++ XtFree(dstdir);
++ setCursor(left_ptr);
++ freeReturnStruct();
++}
++
++freeReturnStruct(){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920626-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920626-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920626-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920626-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(x)unsigned x;{return x>>-5;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920701-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920701-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920701-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920701-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(char*c){extern char a[],b[];return a+(b-c);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920702-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920702-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920702-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920702-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++int somevar;
++void
++yylex ()
++{
++ register int result = 0;
++ int num_bits = -1;
++
++ if (((result >> -1) & 1))
++ somevar = 99;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920706-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920706-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920706-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920706-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(){float i[2],o[1];g(o);return*o;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920710-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920710-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920710-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920710-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++union u
++{
++ struct {unsigned h, l;} i;
++ double d;
++};
++
++foo (union u x)
++{
++ while (x.i.h++)
++ {
++ while (x.i.l-- > 0)
++ ;
++ while (x.d++ > 0)
++ ;
++ }
++}
++
++union n
++{
++ long long unsigned i;
++ double d;
++};
++
++bar (union n x)
++{
++ int i;
++ for (i = 0; i < 100; i++)
++ {
++ while (--x.i > 0)
++ ;
++ while (++x.d > 0)
++ ;
++ }
++ return x.i;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920711-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920711-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920711-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920711-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(a){a=(1,1)/2;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920721-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920721-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920721-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920721-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++typedef struct{short ttype;float s;}T;
++short t[8][8];
++
++T f(T t2,T t1)
++{
++ T x;
++ if (t1.ttype == 1)
++ x.ttype = t[t2.ttype][t1.ttype],
++ x.s = 1;
++ return x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920723-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920723-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920723-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920723-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++typedef struct {
++ double x, y;
++} vector_t;
++double sqrt();
++f(int count,vector_t*pos,double r,double *rho)
++{
++ int i, j, miny, maxy, hy;
++ float help, d;
++ int gitt[150][150];
++ int *data = (int *)malloc(count*sizeof(int));
++ for (i = 0; i < count; i++)
++ rho[i] = 0;
++ for (i = 1; i < count; i++)
++ for (hy = miny; hy<= maxy; hy++)
++ while(j >=0) {
++ d = pos[i].y - pos[j].y;
++ if ( d <= r) {
++ d = sqrt(d);
++ rho[i] += help;
++ }
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920729-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920729-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920729-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920729-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++extern int i;extern volatile int i;
++f(){int j;for(;;)j = i;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920806-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920806-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920806-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920806-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(){short x=32000;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920808-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920808-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920808-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920808-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(i){for(i=1;i<=2;({;}),i++){({;}),g();}}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920809-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920809-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920809-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920809-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(x,y){memcpy (&x,&y,8192);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920817-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920817-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920817-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920817-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++int v;static inline f(){return 0;}g(){return f();}void h(){return v++;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920820-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920820-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920820-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920820-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++long long f(double y){return y;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920821-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920821-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920821-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920821-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++/* empty */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920821-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920821-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920821-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920821-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++typedef struct{int p[25];}t1;
++struct{t1 x,y;}y;
++t1 x[1];
++f(){y.x=*x;y.y=*x;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920825-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920825-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920825-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920825-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++#pragma pack(1)
++struct{unsigned short f1:5;unsigned short f2:6;}x;
++f(){x.f2=1;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920825-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920825-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920825-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920825-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++f(double*a,int m){int j;for(j=0;j<m;j++)a[j]=1;}
++g(double*a){int j;for(j=0;j<4;j++)a[j]=1;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920826-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920826-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920826-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920826-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(int*x){goto*(char)*x;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920828-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920828-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920828-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920828-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++char a[]={4,5};f(n){return a[n<2?n:0];}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920829-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920829-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920829-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920829-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(double x){double y;y=x/0.5;if(y<0.1)y=1.0;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920831-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920831-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920831-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920831-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(x){goto*(char)x;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920902-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920902-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920902-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920902-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++void f(int);
++void f(x)unsigned char x;{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920909-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920909-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920909-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920909-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++long long f(long long a,long long b){return a<<b;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920917-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920917-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920917-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920917-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++inline f(x){switch(x){case 6:case 4:case 3:case 1:;}return x;}
++g(){f(sizeof("xxxxxx"));}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++struct{int c;}v;
++static long i=((char*)&(v.c)-(char*)&v);
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++typedef struct{struct{char*d;int b;}*i;}*t;
++double f();
++g(p)t p;
++{
++ short x,y,delta,s,w,h,fx,fy,tx,ty;
++ int q1,q2,q3,q4;
++ h=f((ty-fy)/2.0+0.5);
++ s=(((int)((short)(tx-fx))<(int)((short)(ty-fy)))?((short)(tx-fx)):((short)(ty-fy)))%2;
++ delta=(((int)(w)<(int)(h))?(w):(h))-s;
++ for(x=0;x<=delta;x++)
++ for(y=1-s;y<=delta;y++){
++ q1=((int)((*(p->i->d+(fx+w+x)/8+(fy+h+y)*p->i->b)&(1<<((fx+w+x)%8)))?1:0));
++ q2=((int)((*(p->i->d+(fx+w+y)/8+(fy+h-s-x)*p->i->b)&(1<<((fx+w+y)%8)))?1:0));
++ q3=((int)((*(p->i->d+(fx+w-s-x)/8+(fy+h-s-y)*p->i->b)&(1<<((fx+w-s-x)%8)))?1:0));
++ q4=((int)((*(p->i->d+(fx+w-s-y)/8+(fy+h+x)*p->i->b)&(1<<((fx+w-s-y)%8)))?1:0));
++ if(q4!=q1)
++ ff(p,fx+w-s-y,fy+h+x);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++f (int phaseone)
++{
++ typedef struct
++ {
++ unsigned char *p;
++ }
++ FILE;
++ FILE b[2];
++ static unsigned char xchr[2];
++ int j;
++ int for_end;
++ if (phaseone)
++ {
++ if (j <= for_end)
++ do
++ *(b[1].p) = xchr[j];
++ while (j++ < 10);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,113 @@
++typedef unsigned char unsigned8;
++typedef unsigned short int unsigned16;
++typedef unsigned long int unsigned32;
++typedef char signed8;
++typedef short int signed16;
++typedef long int signed32;
++typedef unsigned32 boolean32;
++typedef unsigned long int error_status_t;
++typedef struct {
++ unsigned32 time_low;
++ unsigned16 time_mid;
++ unsigned16 time_hi_and_version;
++ unsigned8 clock_seq_hi_and_reserved;
++ unsigned8 clock_seq_low;
++ unsigned char node[6];
++} uuid_t;
++
++typedef unsigned32 bitset;
++typedef signed32 sec_timeval_sec_t;
++typedef struct {
++ signed32 sec;
++ signed32 usec;
++} sec_timeval_t;
++typedef signed32 sec_timeval_period_t;
++typedef signed32 sec_rgy_acct_key_t;
++
++typedef struct {
++ uuid_t source;
++ signed32 handle;
++ boolean32 valid;
++} sec_rgy_cursor_t;
++typedef unsigned char sec_rgy_pname_t[257];
++typedef unsigned char sec_rgy_name_t[1025];
++
++typedef signed32 sec_rgy_override_t;
++typedef signed32 sec_rgy_mode_resolve_t;
++typedef unsigned char sec_rgy_unix_gecos_t[292];
++typedef unsigned char sec_rgy_unix_login_name_t[1025];
++typedef unsigned char sec_rgy_member_t[1025];
++typedef unsigned char sec_rgy_unix_passwd_buf_t[16];
++typedef struct sec_rgy_sid_t {
++ uuid_t person;
++ uuid_t group;
++ uuid_t org;
++} sec_rgy_sid_t;
++typedef struct {
++ signed32 person;
++ signed32 group;
++ signed32 org;
++} sec_rgy_unix_sid_t;
++typedef struct {
++ sec_rgy_unix_login_name_t name;
++ sec_rgy_unix_passwd_buf_t passwd;
++ signed32 uid;
++ signed32 gid;
++ signed32 oid;
++ sec_rgy_unix_gecos_t gecos;
++ sec_rgy_pname_t homedir;
++ sec_rgy_pname_t shell;
++} sec_rgy_unix_passwd_t;
++typedef unsigned char sec_rgy_member_buf_t[10250];
++typedef struct {
++ sec_rgy_name_t name;
++ signed32 gid;
++ sec_rgy_member_buf_t members;
++} sec_rgy_unix_group_t;
++
++typedef struct {
++ uuid_t site_id;
++ sec_timeval_sec_t person_dtm;
++ sec_timeval_sec_t group_dtm;
++ sec_timeval_sec_t org_dtm;
++} rs_cache_data_t;
++
++typedef enum {
++ rs_unix_query_name,
++ rs_unix_query_unix_num,
++ rs_unix_query_none
++} rs_unix_query_t;
++
++typedef struct {
++ rs_unix_query_t query;
++ union {
++ struct {
++ long int name_len;
++ sec_rgy_name_t name;
++ } name;
++ long int unix_num;
++ } tagged_union;
++} rs_unix_query_key_t;
++
++static unsigned long int IDL_offset_vec[] =
++{
++ 0,
++ sizeof(sec_rgy_unix_group_t),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_unix_group_t *) 0)->name - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_unix_group_t *) 0)->gid - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_unix_group_t *) 0)->members - (unsigned char *) 0),
++ sizeof(rs_cache_data_t),
++ (unsigned long int) ((unsigned char *) &((rs_cache_data_t *) 0)->site_id.time_low - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((rs_cache_data_t *) 0)->site_id.time_mid - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((rs_cache_data_t *) 0)->site_id.time_hi_and_version - (unsigned char *) 0),
++ sizeof(sec_rgy_unix_passwd_t),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->source.clock_seq_hi_and_reserved - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->source.clock_seq_low - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->source.node - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->handle - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->valid - (unsigned char *) 0),
++ sizeof(struct {long int name_len; sec_rgy_name_t name;}),
++ (unsigned long int) ((unsigned char *) &((struct {long int name_len; sec_rgy_name_t name;} *)0)->name_len
++ - (unsigned char *) 0),
++ (unsigned long int) ((unsigned char *) &((struct {long int name_len; sec_rgy_name_t name;} *)0)->name - (unsigned char *) 0),
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++/* REPRODUCED:CC1:SIGNAL MACHINE:m68k OPTIONS:-fpcc-struct-return */
++struct b{};
++f(struct b(*f)())
++{
++struct b d=f();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/920928-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/920928-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++struct{int c;}v;
++static short i=((char*)&(v.c)-(char*)&v);
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921004-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921004-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921004-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921004-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++/* REPRODUCED:CC1:SIGNAL MACHINE:i386 OPTIONS: */
++long long f()
++{
++long long*g,*s;
++return*g+*s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921011-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921011-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921011-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921011-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++void
++fun (nb)
++ int nb;
++{
++ int th, h, em, nlwm, nlwS, nlw, sy;
++
++ while (nb--)
++ while (h--)
++ {
++ nlw = nlwm;
++ while (nlw)
++ {
++ if (nlwS == 1)
++ {
++ }
++ else
++ if (nlwS == 1)
++ {
++ }
++ nlwS--; nlw--;
++ }
++ if (em)
++ nlwS--;
++ if (++sy == th)
++ sy = 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921011-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921011-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921011-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921011-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,65 @@
++extern int foobar1 ();
++
++typedef struct
++ {
++ unsigned long colormap;
++ unsigned long red_max;
++ unsigned long red_mult;
++ unsigned long green_max;
++ unsigned long green_mult;
++ unsigned long blue_max;
++ unsigned long blue_mult;
++ unsigned long base_pixel;
++ unsigned long visualid;
++ unsigned long killid;
++ }
++frotz;
++
++int
++foobar (stdcmap, count)
++ frotz **stdcmap;
++ int *count;
++{
++ register int i;
++ frotz *data = ((void *) 0);
++
++ unsigned long nitems;
++ int ncmaps;
++ int old_style = 0;
++ unsigned long def_visual = 0L;
++ frotz *cmaps;
++
++
++ if ( foobar1 (&data) != 0)
++ return 0;
++ if (nitems < 10)
++ {
++ ncmaps = 1;
++ if (nitems < 9)
++ {
++ }
++ }
++ else
++ ncmaps = (nitems / 10);
++
++ {
++ register frotz *map;
++ register frotz *prop;
++
++ for (i = ncmaps, map = cmaps, prop = data; i > 0; i--, map++, prop++)
++ {
++ map->colormap = prop->colormap;
++ map->red_max = prop->red_max;
++ map->red_mult = prop->red_mult;
++ map->green_max = prop->green_max;
++ map->green_mult = prop->green_mult;
++ map->blue_max = prop->blue_max;
++ map->blue_mult = prop->blue_mult;
++ map->base_pixel = prop->base_pixel;
++ map->visualid = (def_visual ? def_visual : prop->visualid);
++ map->killid = (old_style ? 0L : prop->killid);
++ }
++ }
++ *stdcmap = cmaps;
++ *count = ncmaps;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921012-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921012-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921012-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921012-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f()
++{
++g(({int x;0;}));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921012-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921012-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921012-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921012-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++struct foo {
++int a,b,c;
++};
++f(struct foo*a,struct foo*b)
++{
++*a=*b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921013-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921013-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921013-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921013-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f(int x,short y)
++{
++long z=y<0?x>0?x:0:y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921019-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921019-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921019-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921019-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++struct
++{
++int n:1,c:1;
++}p;
++
++f()
++{
++p.c=p.n=0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921021-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921021-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921021-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921021-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++void g();
++
++f()
++{
++int x=1;
++while(x)
++{
++x=h();
++if(x)
++g();
++}
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921024-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921024-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921024-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921024-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++long long f(s,r)
++{
++ return *(long long*)(s+r);
++}
++
++g(s,r)
++{
++ *(long long*)(s+r)=0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921026-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921026-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921026-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921026-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f(unsigned short*a)
++{
++a[0]=65535;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921103-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921103-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921103-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921103-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++struct {
++ unsigned int f1, f2;
++} s;
++
++f()
++{
++ unsigned x, y;
++ x = y = 0;
++ while (y % 4)
++ y++;
++ g(&s.f2, s.f1 + x, 4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921109-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921109-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921109-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921109-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++typedef struct { double x, y; } p;
++typedef struct { int s; float r; } t;
++t *e, i;
++int i1;
++
++f(t *op)
++{
++int i2 = e->r;
++p pt;
++int c = g();
++t p;
++
++if (c)
++{
++i = *e;
++e -= 3;
++return 8;
++}
++if (op > e)
++return 1;
++op->r = pt.x;
++op->r = pt.y;
++p = *e;
++++e;
++e->r = i1, e->s = i1;
++*++e = p;
++return 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921111-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921111-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921111-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921111-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++int ps;
++struct vp {
++ int wa;
++};
++typedef struct vp *vpt;
++typedef struct vc {
++ int o;
++ vpt py[8];
++} *vct;
++struct n {
++ int a;
++};
++struct nh {
++ int x;
++};
++typedef struct np *npt;
++struct np {
++ vct d;
++ int di;
++};
++struct nh xhp;
++struct n np[3];
++
++f(dp)
++ npt dp;
++{
++ vpt *py;
++ int a, l, o = 0;
++ a = dp->d->o;
++ if (dp->di < 0)
++ l = ps;
++
++ if ((int)o & 3)
++ g();
++
++ xhp.x = a;
++ py = &dp->d->py[dp->di];
++ if (o + l > ps)
++ np[2].a = (int)(py[1])->wa;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921116-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921116-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921116-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921116-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++typedef struct {
++ long l[5];
++} t;
++
++f(size)
++{
++ t event;
++ g(&(event.l[2 + size]), (3 - size) * 4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921118-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921118-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921118-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921118-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++inline f(i)
++{
++ h((long long) i * 2);
++}
++g()
++{
++ f(9);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921126-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921126-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921126-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921126-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f()
++{
++ long long a0, a1, a0s, val;
++ int width;
++ float d;
++ if (d)
++ ;
++ if (a0s & (1LL << width))
++ ;
++ return a0 / a1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921202-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921202-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921202-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921202-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++f ()
++{
++ long dx[2055];
++ long dy[2055];
++ long s1[2055];
++ int x, y;
++ int i;
++ long s;
++
++ for (;;)
++ {
++ s = 2055;
++ g (s1, s);
++ for (i = 0; i < 1; i++);
++ dy[s] = 0x12345;
++ for (i = 0; i < 1; i++);
++ if (x != y || h (dx, dy, s) || dx[s] != 0x12345)
++ {
++ j (y);k (dy);
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921202-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921202-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921202-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921202-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++f(x, c)
++{
++ for (;;)
++ {
++ if (x << c) break;
++ x++;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921203-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921203-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921203-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921203-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++char dispstr[];
++f()
++{
++ strcpy(dispstr,"xxxxxxxxxxx");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921203-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921203-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921203-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921203-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++typedef struct
++{
++ char x;
++} s1;
++
++s1 f (int arg0,...)
++{
++ int args;
++ s1 back;
++ va_start (args, arg0);
++ va_end (args);
++ return back;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921206-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921206-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921206-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921206-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++double sqrt(double),fabs(double),sin(double);
++int sxs;
++int sys;
++f()
++{
++ int l;
++ int sm = -52, sx = 52;
++ char *smap;
++ for (l = 0; l < 9; l++)
++ {
++ double g;
++ int cx, cy, gx, gy, x, y;
++ gx = 2 > g / 3 ? 2 : g / 3;
++ gy = 2 > g / 3 ? 2 : g / 3;
++ for (y = 0 > cy - gy ? 0 : cy - gy; y <= (sys - 1 < cy + gy ? sys : cy + gy); y++)
++ {
++ int sx = 0 > cx - gx ? 0 : cx - gx;
++ short *ax = (short *) (y * sxs + sx);
++
++ for (x = sx; x <= (sxs - 1 < cx + gx ? sxs - 1 : cx + gx); x++)
++ {
++ double c=2.25, z=sqrt(fabs(1-c)), cz=(c>1?0.0:-10)>z?c>1?0:1:z;
++ }
++ }
++ }
++ for (l = sm; l <= sx; l++)
++ smap[l] = l > 0 ? 1 + pow(sin(.1 * l / sx)) : 1 - pow(sin(.1 * l / sm));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921227-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921227-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/921227-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/921227-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++#define k(a) #a
++char *s = k(k(1,2));
++char *t = k(#) k(#undef k) k(x);
++
++f(){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930109-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930109-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930109-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930109-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++f(x)
++ unsigned x;
++{
++ static short c;
++ return x>>c;
++}
++g(x)
++ unsigned x;
++{
++ static char c;
++ return x>>c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930109-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930109-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930109-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930109-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f(r)
++{
++ int i;
++ for (i = 0; i < 2; i++)
++ {
++ r+= (4 >> i*2);
++ r+= (2 >> i*2);
++ r+= (1 >> i*2);
++ }
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930111-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930111-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930111-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930111-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++/* 2.3.3 crashes on 386 with -traditional */
++f(a)
++ char *a;
++{
++ int d = strcmp(a,"-");
++
++ while (vfork() < 0)
++ ;
++ return d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930117-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930117-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930117-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930117-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f(x)
++{
++ (*(void (*)())&x)();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930118-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930118-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930118-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930118-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++f()
++{
++__label__ l;
++l:p();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930120-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930120-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930120-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930120-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,138 @@
++union {
++ short I[2];
++ long int L;
++ char C[4];
++} itolws;
++char *errflg;
++long int dot;
++short dotinc;
++long int expvf;
++
++char *
++f(fcount,ifp,itype,ptype)
++ short fcount;
++ char *ifp;
++{
++ unsigned w;
++ long int savdot, wx;
++ char *fp;
++ char c, modifier, longpr;
++ union {
++ double dval;
++ struct {
++ int i1;
++ int i2;
++ } ival;
++ } dw;
++ union {
++ float fval;
++ int ival;
++ } fw;
++ int gotdot = 0;
++ while (fcount > 0) {
++ fp = ifp;
++ c = *fp;
++ longpr = ((c >= 'A') & (c <= 'Z') | (c == 'f') | (c == '4') | (c == 'p') | (c == 'i'));
++ if ((itype == 0) || (*fp == 'a')) {
++ wx = dot;
++ w = dot;
++ } else {
++ gotdot = 1;
++ wx = get((int)dot, itype);
++ if (!longpr) {
++ w = (itolws.L=(wx), itolws.I[((dot)&3)>>1]);
++ }
++ }
++ if (c == 'F') {
++ dw.ival.i1 = wx;
++ if (itype == 0) {
++ dw.ival.i2 = expvf;
++ }
++ }
++
++ modifier = *fp++;
++ switch(modifier) {
++ case ' ' :
++ case '\t' :
++ break;
++ case 't':
++ case 'T':
++ printf("%T",fcount);
++ return(fp);
++ case 'r':
++ case 'R':
++ printf("%M",fcount);
++ return(fp);
++ case 'k':
++ printf("%k",w);
++ break;
++ case 'K':
++ printf("%K",wx);
++ break;
++ case 'a':
++ psymoff(dot,ptype,":%16t");
++ dotinc = 0;
++ break;
++ case 'p':
++ psymoff(0,ptype,"%16t");
++ break;
++ case 'u':
++ printf("%-8u",w);
++ break;
++ case 'U':
++ printf("%-16U",wx); break;
++ case 'c':
++ case 'C':
++ if (modifier == 'C') {
++ printesc((int)(itolws.L=(wx), itolws.C[(dot)&3]));
++ } else {
++ printc((char)(itolws.L=(wx), itolws.C[(dot)&3]));
++ }
++ dotinc = 1;
++ break;
++ case 'b':
++ printf("%-8x", (itolws.L=(wx), itolws.C[(dot)&3]));
++ dotinc = 1;
++ break;
++ case 'B':
++ printf("%-8o", (itolws.L=(wx), itolws.C[(dot)&3]));
++ dotinc = 1;
++ break;
++ case 's':
++ case 'S':
++ savdot = dot;
++ dotinc = 1;
++ while ((c = (itolws.L=(wx), itolws.C[(dot)&3])) && (errflg == 0)) {
++ dot = inkdot(1);
++ if (modifier == 'S') {
++ printesc(c);
++ } else {
++ printc(c);
++ }
++ endline();
++ if (!(dot & 3))
++ wx = get((int)dot, itype);
++ }
++ dotinc = dot - savdot + 1;
++ dot = savdot;
++ break;
++ case 'i':
++ if (gotdot) {
++ wx = get((int)(dot & ~3), itype);
++ }
++ iDasm((int)(wx), (unsigned int)0, (unsigned int)(dot&~3));
++ printc('\n');
++ break;
++ case 'f':
++ fw.ival = wx;
++ printf("%-16.9f", fw.fval);
++ dotinc = 4;
++ break;
++ case 'F':
++ printf("%-32.18F", dw.dval);
++ dotinc = 8;
++ break;
++ }
++ }
++ return(fp);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930126-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930126-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930126-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930126-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,74 @@
++typedef unsigned T;
++typedef char Tchar;
++T mt (long, char *);
++T ms (long, char *);
++T mv (long, T, char);
++T cons (T, T);
++T decl (T * (*) (T *), char *);
++
++T*L92(T*),*L15(T*),*L14(T*),*L13(T*),*L12(T*),*L11(T*),*L10(T*),*L9(T*),*L8(T*),*L7(T*),*L6(T*),*L5(T*),*L4(T*),*L3(T*),*L2(T*),*L1(T*);
++
++static T *
++Ldata (T * my_pc)
++{
++int cc = (((* ((T *) (my_pc))) >> 16) & 0xFF);
++T B92, B91, B90, B15, B14, B13, B12, B11, B10, B9, B8, B7, B6, B5, B4, B3, B2, B1, tO7, tO6, tO5, tO4, tO3, tO2, tO1, tO0;
++T object = mv (168, 0, ((Tchar) 1));
++T * cb = (T *) (((T) (object & 0x3FF)) | 0x400);
++tO0 = mv (92, 0, ((Tchar) 1));
++B92 = decl (L92, "");
++B15 = decl (L15, "");
++B14 = decl (L14, "");
++B13 = decl (L13, "");
++B12 = decl (L12, "");
++B11 = decl (L11, "");
++B10 = decl (L10, "");
++B9 = decl (L9, "");
++B8 = decl (L8, "");
++B7 = decl (L7, "");
++B6 = decl (L6, "");
++B5 = decl (L5, "");
++B4 = decl (L4, "");
++B3 = decl (L3, "");
++B2 = decl (L2, "");
++B1 = decl (L1, "");
++cb[19] = ((((cc) & 0xFF) << 16) | (9 & 0xFF));
++cb[21] = ((((cc) & 0xFF) << 16) | ((10) & 0xFF));
++cb[23] = ((((cc) & 0xFF) << 16) | (11 & 0xFF));
++cb[25] = ((((cc) & 0xFF) << 16) | (12 & 0xFF));
++cb[27] = ((((cc) & 0xFF) << 16) | (13 & 0xFF));
++cb[29] = ((((cc) & 0xFF) << 16) | (14 & 0xFF));
++cb[31] = ((((cc) & 0xFF) << 16) | (15 & 0xFF));
++cb[35] = ((((cc) & 0xFF) << 16) | (17 & 0xFF));
++cb[36] = ((0x1A) << 26) | (((0x39) << 26) | 1) & 0x3FF;
++cb[39] = ms (24, ((char *) ""));
++cb[41] = ((0x1A) << 26) | (((0x39) << 26) | 1) & 0x3FF;
++cb[44] = 3;
++cb[46] = 2;
++cb[48] = 3;
++cb[50] = 6;
++cb[52] = 4;
++cb[146] = tO0;
++((T *) (((tO0 & 0x3FF)) | 0x400))[92] = B1;
++((T *) (((tO0 & 0x3FF)) | 0x400))[91] = B2;
++((T *) (((tO0 & 0x3FF)) | 0x400))[2] = B90;
++((T *) (((tO0 & 0x3FF)) | 0x400))[2] = B91;
++((T *) (((tO0 & 0x3FF)) | 0x400))[1] = B92;
++cb[58] = 0x2800 | (T) ((T *) ((B6 & 0x3FF) | 0x400) + 3);
++cb[57] = 0x2800 | (T) ((T *) ((B7 & 0x3FF) | 0x400) + 3) & ~0xC00;
++cb[56] = 0x2800 | (T) ((T *) ((B8 & 0x3FF) | 0x400) + 3) & ~0xC00;
++cb[55] = 0x2800 | (T) ((T *) ((B9 & 0x3FF) | 0x400) + 3) & ~0xC00;
++tO7 = mv (8, 0, ((Tchar) 1));
++tO4 = ms (9, ((char *) ""));
++tO3 = mv (58, 0, ((Tchar) 1));
++tO6 = ms (4, ((char *) ""));
++tO2 = mv (4, 0, ((Tchar) 1));
++tO5 = ms (4, ((char *) ""));
++tO1 = mv (28, 0, ((Tchar) 1));
++cb[165] = tO1;
++cb[163] = cons (((ms (10, ((char *) "")))), (cons (tO5, 0)));
++cb[162] = cons (1, (cons (2, 0)));
++cb[150] = cons (1, (cons (2, (cons (3, (cons (4, (cons (5, (cons (6, 0)))))))))));
++cb[148] = tO7;
++return cb;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930210-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930210-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930210-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930210-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f()
++{
++ char c1, c2;
++ char *p1, *p2;
++
++ do {
++ c1 = c2 = *p1++;
++ while (c1--)
++ *p2++ = *p1++;
++ } while (c2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930217-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930217-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930217-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930217-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++double g ();
++typedef union {
++ struct {
++ unsigned s:1, e:8, f:23;
++ } u;
++ float f;
++} s;
++
++f(x, n)
++ float x;
++{
++ ((s *)&x)->u.e -= n;
++ x = g((double)x, -n);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930222-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930222-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930222-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930222-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++typedef struct
++ {
++ long i;
++ double f;
++ } T;
++
++f (T *n1, T *n2)
++{
++ if (g (n2))
++ return n1->i - n2->i;
++ else
++ {
++ double f = n1->f - n2->i;
++ return f == 0.0 ? 0 : (f > 0.0 ? 1 : -1);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930325-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930325-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930325-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930325-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++typedef unsigned uint;
++
++inline
++g (uint *s, uint *d, uint c)
++{
++ while (c != 0)
++ {
++ *--d = *--s;
++ c--;
++ }
++}
++
++f (uint *p1, uint c, uint *p2)
++{
++ while (c > 0 && *p1 == 0)
++ {
++ p1++;
++ c--;
++ }
++ if (c == 0)
++ return 1;
++ g (p2, p1, c);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930326-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930326-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930326-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930326-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++struct
++{
++ char a, b, f[3];
++} s;
++
++long i = s.f-&s.b;
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930326-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930326-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930326-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930326-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++# This doesn't work on mn10200
++
++if { [istarget "mn10200*-*-*"] } {
++ set torture_compile_xfail "mn10200*-*-*"
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930411-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930411-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930411-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930411-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++int heap;
++
++g(){}
++
++f(int i1, int i2)
++{
++ i1 = *(int*)(i1 + 4);
++ if (i1 == 0)
++ goto L4;
++ else
++ goto L9;
++ L3:
++ i2 = heap - 8;
++ *(int*)i2 = 3;
++ *(int*)(i2 + 4) = i1;
++ heap -= 8;
++ return i2;
++ L4:
++ i1 = g(i2);
++ goto L5;
++ L5:
++ i1 = *(int*)(i1 + 4);
++ if (i1 == 0)
++ goto L7;
++ else
++ goto L8;
++ L7:
++ i1 = 0;
++ goto L3;
++ L8:
++ i1 = 1;
++ goto L3;
++ L9:
++ i1 = 1;
++ goto L3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930421-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930421-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930421-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930421-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++double q(double);
++
++f (int **x, int *r, int *s, int a, int b, int c, int d)
++{
++ int i, j, k, m, e, f, g, z[1024], y[2];
++
++ e = g = 0;
++ for (i = 0; i < a; i++)
++ for (j = 0; j < b; j++)
++ if (x[i][j])
++ for (k = 0; k < c; k++)
++ {
++ f = q(1.5) + q(2.5);
++ if (g < y[f])
++ g = e;
++ }
++ for (m = 0; m < 1; m++)
++ z[0] = m*2*d/3.0 - d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930427-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930427-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930427-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930427-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++struct s {
++ int f;
++};
++
++f (w, v0, v1, v2, v3)
++ struct s *w;
++{
++ g (v0 ? 1 : w->f, v1 ? v3 : v2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930503-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930503-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930503-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930503-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++f (const char *s, char *d, unsigned l)
++{
++ if (0)
++ while (1);
++ else
++ while (--l >= 0)
++ *d++ = *s++;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930503-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930503-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930503-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930503-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++f()
++{
++ struct { char x; } r;
++ g(r);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930506-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930506-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930506-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930506-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++long long
++f (a)
++ double a;
++{
++ double b;
++ unsigned long long v;
++
++ b = a / 2.0;
++ v = (unsigned) b;
++ a -= (double) v;
++ return v;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930506-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930506-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930506-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930506-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++#ifndef NO_TRAMPOLINES
++int f1()
++{
++ { int ___() { foo(1); } bar(___); }
++ return( { int ___() { foo(2); } bar(___);} );
++}
++
++int f2(int j)
++{
++ { int ___() { foo(j); } bar(___); }
++ return( { int ___() { foo(j); } bar(___);} );
++}
++#else
++int x;
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930510-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930510-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930510-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930510-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++typedef long time_t;
++static __const int mon_lengths[2][12] = {
++ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
++ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
++};
++static time_t
++f (janfirst, year, rulep, offset)
++ __const time_t janfirst;
++ __const int year;
++ register __const struct rule * __const rulep;
++ __const long offset;
++{
++ register int leapyear;
++ register time_t value;
++ register int i;
++
++ value += mon_lengths[leapyear][i] * ((long) (60 * 60) * 24);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930513-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930513-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930513-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930513-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++struct s {
++ int f1 : 26;
++ int f2 : 8;
++};
++
++f (struct s *x)
++{
++ return x->f2++ == 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930513-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930513-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930513-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930513-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++double g ();
++
++f (x)
++ double x;
++{
++ x = .85;
++ while (g () < x)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930513-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930513-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930513-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930513-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++test ()
++{
++ short *p, q[3];
++ int x;
++
++ p = q;
++ for (x = 0; x < 3; x++)
++ *p++ = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930523-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930523-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930523-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930523-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++int v;
++
++f ()
++{
++ unsigned long *a1, *a2;
++ int vertex2;
++ int c, x1, x2, dx1, dx2, dy1, dy2, e1, e2, s2;
++ unsigned long m, b;
++ int n;
++ unsigned long r;
++ int aba;
++
++ do
++ {
++ if (dx2 >= dy2)
++ dx2 = dx2 % dy2;
++
++ if (dx2 >= dy2)
++ {
++ s2 = - (dx2 / dy2);
++ dx2 = dx2 % dy2;
++ }
++ }
++ while (vertex2 / 65536);
++
++ for (;;)
++ {
++ c = x2;
++ a2 = a1;
++ if (v)
++ a2 = 0;
++
++ if (c + n)
++ {
++ m = b << (c * 8);
++ *a2 = (*a2 & ~m) | (r & m);
++ n += c;
++
++ while (--n)
++ {
++ {
++ }
++ }
++ }
++
++ a1 = 0;
++ x1 += 0;
++ if (e1 += dx1)
++ e1 -= dy1;
++ x2 += s2;
++ if (e2 += dx2)
++ e2 -= dy2;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930525-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930525-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930525-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930525-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++typedef struct foo foo_t;
++foo_t x;
++struct foo {
++ int i;
++};
++
++foo_t x = { 10 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930527-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930527-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930527-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930527-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++enum {e0, e1};
++
++int x[] =
++{
++ [e0] = 0
++};
++
++f ()
++{
++ switch (1)
++ {
++ case e0:
++ case e1:
++ break;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930529-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930529-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930529-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930529-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,83 @@
++struct r
++{
++ int d1, d2;
++};
++
++struct km
++{
++ int d;
++};
++
++struct f1
++{
++ char *fn;
++ char *fd;
++ char *fs;
++ char *ic;
++ void (*ff) ();
++};
++
++int g ();
++
++int y;
++struct r *bs;
++int bv;
++
++void b ();
++char *w ();
++
++struct km **q;
++char **mns;
++int nm;
++struct f1 **z;
++
++f (char *km, char *h)
++{
++ struct f1 *t;
++ int map = midn(km, strlen(km));
++ int V;
++ int c;
++ struct r r;
++ struct f1 *cm;
++
++ if (!g(&V, &cm, h, strlen(h)))
++ {
++ c = (cm - z[V]);
++ goto L;
++ }
++
++ for (c = 0; c < nm; c++)
++ if (!strcmp (h, mns[c]))
++ {
++ V = -1;
++ goto L;
++ }
++
++ for (c = 0; c < y; c++)
++ {
++ if (!memcmp (&bs[c], &r, 8))
++ goto L;
++ }
++
++ h = w (&r);
++ if (!bv)
++ {
++ bs = g (8);
++ t = (struct f1 *)g (20);
++ }
++ else
++ {
++ bs = g (bs, y * 8);
++ z[bv] = cr (z[bv], (1 + y) * 20);
++ t = &z[bv][y - 1];
++ }
++ bs[y - 1] = r;
++ t->fs[0] = sp (y - 1);
++ t->fs[1] = 0;
++ t->ic = 0;
++ t->fd = 0;
++ t->fn = cs (h);
++ t->ff = b;
++ L:
++ g (q[map], V, c);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930530-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930530-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930530-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930530-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++f ()
++{
++ struct { char a, b; } x;
++ g (x, x, x, x);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930602-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930602-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930602-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930602-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++typedef struct {
++ int f[8];
++} T;
++
++f (w, l, r)
++ T *w;
++ unsigned short l, r;
++{
++ int i;
++
++ for (i = l; i < r; i++)
++ g (w->f[i]);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930603-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930603-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930603-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930603-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++union u { union u *a; double d; };
++union u *s, g();
++
++f()
++{
++ union u x = g();
++
++ s[0] = *x.a;
++ s[1] = g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930607-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930607-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930607-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930607-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++typedef void f ();
++typedef f *pf;
++long long i;
++
++g ()
++{
++ long long p = i;
++ ((pf) (long) p) ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930611-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930611-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930611-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930611-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++float
++f (float a1)
++{
++ union { float f; int l; } fl1;
++ fl1.f = a1;
++ return fl1.l ? 1.0 : a1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930618-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930618-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930618-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930618-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++f (s)
++{
++ int r;
++
++ r = (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s));
++
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930621-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930621-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930621-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930621-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++int bytestart[5000 + 1];
++unsigned char modtext[400 + 1];
++unsigned char bytemem[2][45000L + 1];
++
++long
++modlookup (int l)
++{
++ signed char c;
++ long j;
++ long k;
++ signed char w;
++ long p;
++ while (p != 0)
++ {
++ while ((k < bytestart[p + 2]) && (j <= l) && (modtext[j] == bytemem[w][k]))
++ {
++ k = k + 1;
++ j = j + 1;
++ }
++ if (k == bytestart[p + 2])
++ if (j > l)
++ c = 1;
++ else c = 4;
++ else if (j > l)
++ c = 3;
++ else if (modtext[j] < bytemem[w][k])
++ c = 0;
++ else c = 2;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930623-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930623-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930623-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930623-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++g (a, b) {}
++
++f (xx)
++ void* xx;
++{
++ __builtin_apply ((void*)g, xx, 200);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930702-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930702-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930702-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930702-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++f ()
++{
++ {({});}
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930926-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930926-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930926-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930926-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++int f () { return 0; }
++
++void
++test ()
++{
++ int j = { f() };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930927-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930927-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/930927-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/930927-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++#include <stddef.h>
++
++wchar_t s[5] = L"abcd";
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931003-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931003-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931003-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931003-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f (n, a)
++ int n;
++ double a[];
++{
++ double b[51];
++ int i, j;
++
++ i = 0;
++
++ for (j = n - 1; j > 0; j--)
++ b[i++] = 0;
++
++ if (b[0] > b[i - 1])
++ a[i] = b[i - 1];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931004-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931004-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931004-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931004-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++#define A "This is a long test that tests the structure initialization"
++#define B A,A
++#define C B,B,B,B
++#define D C,C,C,C
++int main()
++{
++ char *subs[]={ D, D, D, D, D, D, D, D, D, D, D, D, D, D, D};
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931013-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931013-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931013-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931013-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++g ();
++
++f ()
++{
++ long ldata[2];
++ int seed;
++
++ seed = (ldata[0]) + (ldata[1] << 16);
++ g (seed);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931013-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931013-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931013-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931013-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++f (unsigned short Z[48])
++{
++ int j;
++ unsigned short t1, t2, t3, T[48];
++ unsigned short *p = T + 48;
++
++ for (j = 1; j < 8; j++)
++ {
++ t1 = *Z++;
++ *--p = *Z++;
++ *--p = t1;
++ t1 = inv(*Z++);
++ t2 = -*Z++;
++ t3 = -*Z++;
++ *--p = inv(*Z++);
++ *--p = t2;
++ *--p = t3;
++ *--p = t1;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931013-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931013-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931013-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931013-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++struct s
++{
++ int f;
++};
++
++struct s
++f ()
++{
++ int addr;
++ return *(struct s *) &addr;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931018-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931018-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931018-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931018-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++typedef struct
++{
++ int a, b;
++} T;
++
++f (T *bs)
++{
++ long long x;
++ x = ({
++ union { T s; long long l; } u;
++ u.s = *bs;
++ u.l;
++ });
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931031-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931031-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931031-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931031-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++struct s
++{
++ int pad:1, no:1;
++};
++
++f (struct s *b, int c)
++{
++ char d = b->no && c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931102-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931102-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931102-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931102-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,111 @@
++char *e ();
++
++#define SET \
++ if (d > *b++) d |= a; \
++ if (b) b = e(b);
++
++xxx()
++{
++ int a, d;
++ char *b, *c;
++
++ while (1) {
++ while (1) {
++ while (1) {
++ if (a) {
++ switch (a) {
++ case 1:
++ while (1) {
++ SET
++ do {
++ SET
++ } while (1);
++ }
++ case 2:
++ while (1) {
++ if (d) {
++ do {
++ SET
++ } while (1);
++ }
++ else {
++ do {
++ SET
++ } while (1);
++ }
++ }
++ case 3:
++ while (1) {
++ if (d) {
++ do {
++ SET
++ } while (1);
++ }
++ else {
++ do {
++ SET
++ } while (1);
++ }
++ }
++ case 4:
++ while (1) {
++ if (d) {
++ do {
++ SET
++ } while (1);
++ }
++ else {
++ do {
++ SET
++ } while (1);
++ }
++ }
++ }
++ }
++ else {
++ switch (a) {
++ case 2:
++ while (1) {
++ if (d) {
++ do {
++ SET
++ } while (1);
++ }
++ else {
++ do {
++ SET
++ } while (1);
++ }
++ }
++ case 3:
++ while (1) {
++ if (d) {
++ do {
++ SET
++ } while (1);
++ }
++ else {
++ do {
++ SET
++ } while (1);
++ }
++ }
++ case 4:
++ while (1) {
++ if (d) {
++ do {
++ SET
++ } while (1);
++ }
++ else {
++ do {
++ SET
++ } while (1);
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931102-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931102-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931102-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931102-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++typedef struct {
++ int a;
++} VCR;
++
++typedef struct {
++ VCR vcr[8];
++} VCRC;
++
++typedef struct {
++ char vcr;
++} OWN;
++
++OWN Own[16];
++
++f (x, own)
++ VCRC *x;
++ OWN *own;
++{
++ x[own->vcr / 8].vcr[own->vcr % 8].a--;
++ x[own->vcr / 8].vcr[own->vcr % 8].a = x[own->vcr / 8].vcr[own->vcr % 8].a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931203-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931203-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/931203-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/931203-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++v (a, i)
++ unsigned *a, i;
++{
++ a++[i] = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/940611-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/940611-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/940611-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/940611-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++f ()
++{
++ do
++L:;
++ while (0);
++ do
++ ;
++ while (0);
++ goto L;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/940712-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/940712-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/940712-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/940712-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f ()
++{
++ return (*(volatile unsigned int *)8000) / 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/940718-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/940718-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/940718-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/940718-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++extern double log (double) __attribute__ ((const));
++
++f (double x)
++{
++ for (;;)
++ exp(log(x));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f (to)
++ char *to;
++{
++ unsigned int wch;
++ register length;
++ unsigned char tmp;
++ unsigned int mult = 10;
++
++ tmp = (wch>>(unsigned int)(length * mult));
++ *to++ = (unsigned char)tmp;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++void
++f (n, ppt, xrot)
++{
++ int tileWidth;
++ int nlwSrc;
++ int srcx;
++ int v3, v4;
++ register unsigned long ca1, cx1, ca2, cx2;
++ unsigned long *pSrcLine;
++ register unsigned long *pDst;
++ register unsigned long *pSrc;
++ register unsigned long b, tmp;
++ unsigned long tileEndMask;
++ int v1, v2;
++ int tileEndPart;
++ int needFirst;
++ tileEndPart = 0;
++ v1 = tileEndPart << 5;
++ v2 = 32 - v1;
++ while (n--)
++ {
++ if ((srcx = (ppt - xrot) % tileWidth) < 0)
++ if (needFirst)
++ if (nlwSrc == 1)
++ {
++ tmp = b;
++ if (tileEndPart)
++ b = (*pSrc & tileEndMask) | (*pSrcLine >> v1);
++ }
++ if (tileEndPart)
++ b = (tmp << v1) | (b >> v2);
++ if (v4 != 32)
++ *pDst = (*pDst & ((tmp << v3) | (b >> v4) & ca1 ^ cx1)
++ ^ (((tmp << v3) | (b >> v4)) & ca2 ^ cx2));
++ *pDst = *pDst & tmp;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,72 @@
++typedef unsigned char byte;
++typedef unsigned int uint;
++typedef unsigned long ulong;
++typedef ulong gs_char;
++typedef struct gs_show_enum_s gs_show_enum;
++typedef struct gs_font_s gs_font;
++typedef struct gx_font_stack_item_s {
++ gs_font *font;
++} gx_font_stack_item;
++typedef struct gx_font_stack_s {
++ gx_font_stack_item items[1 + 5 ];
++} gx_font_stack;
++struct gs_show_enum_s {
++ gx_font_stack fstack;
++};
++typedef enum {
++ ft_composite = 0,
++} font_type;
++struct gs_font_s {
++ font_type FontType;
++};
++typedef enum {
++ fmap_escape = 3,
++ fmap_shift = 8
++ } fmap_type;
++typedef struct gs_type0_data_s {
++ fmap_type FMapType;
++} gs_type0_data;
++gs_type0_next_char(register gs_show_enum *penum)
++{
++ const byte *p;
++ int fdepth;
++ gs_font *pfont;
++ gs_type0_data *pdata;
++ uint fidx;
++ gs_char chr;
++ for (; pfont->FontType == ft_composite; )
++ {
++ fmap_type fmt;
++ switch ( fmt )
++ {
++ do {} while (0);
++ rdown:
++ continue;
++ case fmap_shift:
++ p++;
++ do {} while (0);
++ goto rdown;
++ }
++ break;
++ }
++ up:
++ while ( fdepth > 0 )
++ {
++ switch ( pdata->FMapType )
++ {
++ default:
++ continue;
++ case fmap_escape:
++ fidx = *++p;
++ do {} while (0);
++ if ( fidx == chr && fdepth > 1 )
++ goto up;
++ down:
++ fdepth--;
++ do {} while (0);
++ }
++ break;
++ }
++ while ( (pfont = penum->fstack.items[fdepth].font)->FontType == ft_composite )
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941014-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941014-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++#ifndef NO_LABEL_VALUES
++f (int *re)
++{
++ int *loops = 0, *loope = 0;
++ unsigned dat0 = 0;
++ static void *debug = &&firstdebug;
++
++ firstdebug:
++ g (loops, loope);
++
++ if (dat0 & 1)
++ re[(dat0 >> 2) & 3] = 0;
++}
++#else
++int x;
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941019-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941019-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941019-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941019-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++__complex__ long double sub (__complex__ long double cld) { return cld; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941111-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941111-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941111-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941111-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++main ()
++{
++ struct S { int i; char c; } obj1, obj2;
++
++ foo ();
++ if (obj1.c != obj2.c)
++ bar ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941113-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941113-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/941113-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/941113-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++typedef void foo (void);
++
++f (x)
++{
++ if (x)
++ {
++ const foo* v;
++ (*v)();
++ }
++ else
++ g (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950122-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950122-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950122-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950122-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int
++foo (int i, unsigned short j)
++{
++ return j *= i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950124-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950124-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950124-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950124-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f ()
++{
++ if (g ())
++ h ();
++ else
++ {
++ do
++ {
++ return 0;
++ break;
++ }
++ while (1);
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950221-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950221-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950221-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950221-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++short v = -1;
++
++typedef struct
++{
++ short network;
++} atype;
++
++void f ()
++{
++ static atype config;
++ atype *cp;
++ short net;
++ cp = &config;
++ cp->network = (v == -1) ? 100 : v;
++ net = cp->network;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950329-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950329-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950329-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950329-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++f ()
++{
++ int i;
++ for (i = 1;; i = 0)
++ {
++ if (h ())
++ {
++ if (i)
++ g ();
++ g (h ());
++ g (h ());
++ }
++ else
++ {
++ g ();
++ break;
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950512-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950512-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950512-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950512-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++typedef unsigned short uint16;
++f (unsigned char *w)
++{
++ w[2] = (uint16) ((((g (0) % 10000 + 42) & 0xFF) << 8) | (((g (0) % 10000 + 42) >> 8) & 0xFF)) & 0xFF,
++ w[3] = (uint16) ((((g (0) % 10000 + 42) & 0xFF) << 8) | (((g (0) % 10000 + 42) >> 8) & 0xFF)) >> 8;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950530-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950530-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950530-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950530-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f (int *s, int *t)
++{
++ return (t - s) / 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950607-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950607-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950607-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950607-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++typedef struct {
++ int component_id;
++ int component_index;
++ int h_samp_factor;
++ int v_samp_factor;
++} jpeg_component_info;
++struct jpeg_common_struct {
++ struct jpeg_error_mgr * err;
++};
++typedef struct jpeg_common_struct * j_common_ptr;
++typedef struct jpeg_compress_struct * j_compress_ptr;
++struct jpeg_compress_struct {
++ struct jpeg_error_mgr * err;
++ int num_components;
++ jpeg_component_info * comp_info;
++ int max_h_samp_factor;
++ int max_v_samp_factor;
++};
++struct jpeg_error_mgr {
++ int msg_code;
++};
++
++void
++jinit_downsampler (j_compress_ptr cinfo)
++{
++ int ci;
++ jpeg_component_info * compptr;
++
++ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
++ ci++, compptr++) {
++ if (compptr->h_samp_factor == cinfo->max_h_samp_factor &&
++ compptr->v_samp_factor == cinfo->max_v_samp_factor) {
++ } else if ((cinfo->max_h_samp_factor % compptr->h_samp_factor) == 0 &&
++ (cinfo->max_v_samp_factor % compptr->v_samp_factor) == 0) {
++ } else
++ cinfo->err->msg_code = 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950610-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950610-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950610-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950610-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f (int n, int a[2][n]) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950612-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950612-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950612-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950612-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,134 @@
++typedef enum
++{
++ LODI,
++ STO,
++ ADDI,
++ ADD,
++ SUBI,
++ SUB,
++ MULI,
++ MUL,
++ DIVI,
++ DIV,
++ INC,
++ DEC
++} INSN;
++
++f (pc)
++ short *pc;
++{
++ long long stack[16], *sp = &stack[16], acc = 0;
++
++ for (;;)
++ {
++ switch ((INSN)*pc++)
++ {
++ case LODI:
++ *--sp = acc;
++ acc = ((long long)*pc++) << 32;
++ break;
++ case STO:
++ return (acc >> 32) + (((((unsigned long long) acc) & 0xffffffff) & (1 << 31)) != 0);
++ break;
++ case ADDI:
++ acc += ((long long)*pc++) << 32;
++ break;
++ case ADD:
++ acc = *sp++ + acc;
++ break;
++ case SUBI:
++ acc -= ((long long)*pc++) << 32;
++ break;
++ case SUB:
++ acc = *sp++ - acc;
++ break;
++ case MULI:
++ acc *= *pc++;
++ break;
++ case MUL:
++ {
++ long long aux;
++ unsigned char minus;
++
++ minus = 0;
++ aux = *sp++;
++ if (aux < 0)
++ {
++ minus = ~minus;
++ aux = -aux;
++ }
++ if (acc < 0)
++ {
++ minus = ~minus;
++ acc = -acc;
++ }
++ acc = ((((((unsigned long long) acc) & 0xffffffff) * (((unsigned long long) aux) & 0xffffffff)) >> 32)
++ + ((((unsigned long long) acc) >> 32) * (((unsigned long long) aux) & 0xffffffff) + (((unsigned long long) acc) & 0xffffffff) + (((unsigned long long) aux) >> 32))
++ + (((((unsigned long long) acc) >> 32) * (((unsigned long long) aux) >> 32)) << 32));
++ if (minus)
++ acc = -acc;
++ }
++ break;
++ case DIVI:
++ {
++ short aux;
++
++ aux = *pc++;
++ acc = (acc + aux / 2) / aux;
++ }
++ break;
++ case DIV:
++ {
++ long long aux;
++ unsigned char minus;
++
++ minus = 0;
++ aux = *sp++;
++ if (aux < 0)
++ {
++ minus = ~minus;
++ aux = -aux;
++ }
++ if (acc < 0)
++ {
++ minus = ~minus;
++ acc = -acc;
++ }
++
++ if (((unsigned long long)acc) == 0)
++ acc = (unsigned long long)-1 / 2;
++ else if ((((unsigned long long) ((unsigned long long)acc)) & 0xffffffff) == 0)
++ acc = ((unsigned long long)aux) / (((unsigned long long) ((unsigned long long)acc)) >> 32);
++ else if ((((unsigned long long) ((unsigned long long)acc)) >> 32) == 0)
++ acc = ((((unsigned long long)aux) / ((unsigned long long)acc)) << 32)
++ + ((((unsigned long long)aux) % ((unsigned long long)acc)) << 32) / ((unsigned long long)acc);
++ else
++ {
++ unsigned char shift;
++ unsigned long hi;
++
++ shift = 32;
++ hi = (((unsigned long long) ((unsigned long long)acc)) >> 32);
++ do {
++ if (hi & ((unsigned long)1 << (shift - 1)))
++ break;
++ } while (--shift != 0);
++ printf("shift = %d\n", shift);
++ acc = ((((unsigned long long)aux) / ((unsigned long long)acc)) << 32)
++ + (((((unsigned long long)aux) % ((unsigned long long)acc)) << (32 - shift)) + ((((unsigned long long)acc) >> shift) / 2)) / (((unsigned long long)acc) >> shift);
++ }
++
++ if (minus)
++ acc = -acc;
++ }
++ break;
++ case INC:
++ acc += 1;
++ break;
++ case DEC:
++ acc -= 1;
++ break;
++ }
++ printf("%08lx.%08lx\n", (long)(((unsigned long long) acc) >> 32) , (long)(((unsigned long long) acc) & 0xffffffff));
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950613-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950613-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950613-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950613-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++#ifndef NO_LABEL_VALUES
++f ()
++{
++ long *sp;
++ long *pc;
++
++ static void *dummy[] =
++ {
++ &&L1,
++ &&L2,
++ };
++
++ L1:
++ {
++ float val;
++ val = *(float *) sp;
++ val = -val;
++ *(float *) sp = val;
++ goto *pc++;
++ }
++
++ L2:
++ {
++ float from;
++ *(long long *) sp = from;
++ goto *pc++;
++ }
++}
++#else
++int x;
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950618-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950618-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950618-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950618-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++static __inline__ int f () { return g (); }
++int g () { return f (); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950719-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950719-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950719-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950719-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++typedef struct
++{
++ int Header;
++ char data[4092];
++} t_node;
++
++f (unsigned short rid, unsigned short record_length)
++{
++ t_node tnode;
++ g (rid, tnode.data + rid * record_length);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950729-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950729-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950729-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950729-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++static const char * const lcset = "0123456789abcdef";
++static const char * const ucset = "0123456789ABCDEF";
++
++char *
++f (char *buffer, long long value, char type)
++{
++ int base, i;
++
++ i = 128 - 1;
++ buffer[i--] = '\0';
++
++ switch (type)
++ {
++ case 'u':
++ case 'o':
++ case 'x':
++ case 'X':
++ if (type == 'u')
++ base = 10;
++ else if (type == 'o')
++ base = 8;
++ else
++ base = 16;
++
++ while (i >= 0)
++ {
++ if (type == 'X')
++ buffer[i--] = ucset[((unsigned long long) value) % base];
++ else
++ buffer[i--] = lcset[((unsigned long long) value) % base];
++
++ if ((value = ((unsigned long long) value) / base) == 0)
++ break;
++ }
++ break;
++ }
++
++ return &buffer[++i];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950816-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950816-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950816-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950816-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++f ()
++{
++ unsigned char b[2];
++ float f;
++ b[0] = (unsigned char) f / 256;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950816-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950816-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950816-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950816-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++f ()
++{
++ int i;
++ float a,b,c;
++ unsigned char val[2];
++ i = func (&c);
++ val[0] = c < a ? a : c >= 1.0 ? b : c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950816-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950816-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950816-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950816-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++f ()
++{
++ int i;
++ short x, z;
++ for (i = 0; i <= 1; i++)
++ x = i;
++ return x + z;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950910-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950910-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950910-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950910-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++f (char *p)
++{
++ char c;
++
++ c = *++p;
++ if (c != ' ')
++ return 0;
++ for (;;)
++ {
++ c = *p;
++ if (g (c))
++ p++;
++ else
++ {
++ if (c == ' ')
++ break;
++ else
++ return 0;
++ }
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950919-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950919-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950919-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950919-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++#define empty
++#if empty#cpu(m68k)
++#endif
++
++f (){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950921-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950921-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950921-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950921-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++f ()
++{
++ union
++ {
++ signed char c;
++ double d;
++ } u;
++
++ u.c = 1;
++ u.c = 1;
++ return u.c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950922-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950922-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/950922-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/950922-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,68 @@
++struct sw {
++ const void *x;
++ int r;
++};
++struct sq {
++ struct sw *q_w;
++ int t;
++ int z;
++};
++
++int
++f (int ch, char *fp, char *ap)
++{
++ register int n;
++ register char *cp;
++ register struct sw *p;
++ register int f;
++ int prec;
++ double _double;
++ int expt;
++ int ndig;
++ char expstr[7];
++ unsigned long long _uquad;
++ struct sq q;
++ struct sw w[8];
++ static char zeroes[16];
++
++ for (;;) {
++ switch (ch) {
++ case 'd':
++ _double = (double) (ap += 8, *((double *) (ap - 8)));
++ break;
++ case 'o':
++ goto nosign;
++ case 'u':
++ _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4))));
++ goto nosign;
++ case 'x':
++ _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(unsigned short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4))));
++ nosign:
++ if (_uquad != 0 || prec != 0);
++ break;
++ default:
++ }
++ if ((f & 0x100) == 0) {
++ } else {
++ if (ch >= 'f') {
++ if (_double == 0) {
++ if (expt < ndig || (f & 0x001) != 0) {
++ { if ((n = (ndig - 1)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}}}
++ }
++ } else if (expt <= 0) {
++ { p->x = ("0"); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}
++ { p->x = 0; p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}
++ { if ((n = (-expt)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} }}
++ { p->x = cp; p->r = ndig; q.z += ndig; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}
++ } else {
++ { p->x = cp; p->r = expt; q.z += expt; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}
++ cp += expt;
++ { p->x = ("."); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}
++ { p->x = cp; p->r = (ndig-expt); q.z += (ndig-expt); p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}
++ }
++ }
++ }
++ }
++
++ error:
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951004-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951004-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951004-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951004-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++typedef struct
++{
++ short v, h;
++} S;
++
++S a;
++
++f (S pnt)
++{
++ S mpnt, mtp;
++
++ (&pnt)->v -= 1;
++ mpnt = pnt;
++ mtp = a;
++ if (mtp.v != mpnt.v)
++ {
++ S tpnt;
++
++ tpnt = mtp;
++ mtp = mpnt;
++ mpnt = tpnt;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951106-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951106-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951106-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951106-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f (double a, double b)
++{
++ g (a, 0, b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951116-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951116-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951116-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951116-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++f ()
++{
++ long long i;
++ int j;
++ long long k = i = j;
++
++ int inner () {return j + i;}
++ return k;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951128-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951128-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951128-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951128-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++char a[];
++f (const int i)
++{
++ a[i] = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951220-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951220-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951220-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951220-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f (char *x)
++{
++ return (*x & 2) || (*x & 3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951222-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951222-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/951222-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/951222-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++extern long long foo ();
++
++long long
++sub1 ()
++{
++ char junk[10000];
++ register long long a, b, c;
++
++ b = foo ();
++
++ setjmp ();
++ a = foo ();
++ c = a - b;
++ return c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960106-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960106-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960106-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960106-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f (a)
++{
++ return (a & 1) && !(a & 2 & 4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960130-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960130-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960130-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960130-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++int a[1];
++
++int
++main()
++{
++ extern int a[];
++ return *a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960201-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960201-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960201-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960201-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++union foo
++{
++ char a;
++ int x[2];
++} __attribute__ ((transparent_union));
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960218-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960218-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960218-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960218-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++#define X(x) x
++int main() { return X(0/* *//* */); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960220-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960220-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960220-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960220-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++f ()
++{
++ unsigned long long int a = 0, b;
++ while (b > a)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960221-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960221-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960221-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960221-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++struct s1 { int f1; };
++
++struct s2 {
++ struct s1 a;
++ int f2;
++};
++
++foo (struct s2 *ptr)
++{
++ *ptr = (struct s2) {{}, 0};
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960319-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960319-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960319-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960319-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++static void
++f()
++{
++ long long a[2];
++ int i;
++ if (g())
++ if (h())
++ ;
++ *a |= (long long)i << 65 ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960514-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960514-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960514-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960514-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++struct s {
++ unsigned long long t[5];
++};
++
++void
++f (struct s *d, unsigned long long *l)
++{
++ int i;
++
++ for (i = 0; i < 5; i++)
++ d->t[i] += l[i];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960704-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960704-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960704-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960704-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++struct A {
++ double d;
++};
++
++struct A f ();
++
++main ()
++{
++ struct A a = f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960829-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960829-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/960829-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/960829-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++f ()
++{
++ g (0, 0.0, 0.0, 0.0, 0.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961004-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961004-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961004-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961004-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++void
++f1 (o1, o2, o3, i, j, k)
++ long long *o1, *o2, *o3;
++ int i, j, k;
++{
++ while (--i)
++ o1[i] = o2[j >>= 1] + o3[k >>= 1];
++}
++
++void
++f2 (o1, o2, o3, i, j, k)
++ long long *o1, *o2, *o3;
++ int i, j, k;
++{
++ while (--i)
++ o1[i] = o2[j >>= 1] - o3[k >>= 1];
++}
++
++void
++f3 (o1, o2, o3, i, j, k)
++ long long *o1, *o3;
++ unsigned *o2;
++ int i, j, k;
++{
++ while (--i)
++ o1[i] = o2[j >>= 1] + o3[k >>= 1];
++}
++
++void
++f4 (o1, o2, o3, i, j, k)
++ long long *o1, *o2;
++ unsigned *o3;
++ int i, j, k;
++{
++ while (--i)
++ o1[i] = o2[j >>= 1] - o3[k >>= 1];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961010-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961010-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961010-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961010-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++double f (double x) { return x == 0 ? x : 0.0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961019-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961019-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961019-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961019-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++char _hex_value[256];
++
++void
++hex_init ()
++{
++ int i;
++ for (i = 0; i < 256; i++)
++ _hex_value[i] = 99;
++ for (i = 0; i < 10; i++)
++ _hex_value['0' + i] = i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961031-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961031-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961031-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961031-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++struct s {
++ double d;
++} sd;
++
++struct s g () __attribute__ ((const));
++
++struct s
++g ()
++{
++ return sd;
++}
++
++f ()
++{
++ g ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961126-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961126-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961126-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961126-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,107 @@
++int *p;
++
++main()
++{
++ int i = sub ();
++
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++ i = -i;
++ if (*p != i)
++ goto quit;
++
++ i = -i;
++quit:
++ sub2 (i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961203-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961203-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961203-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961203-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++struct s {
++ char a[0x32100000];
++ int x:30, y:30;
++};
++
++int
++main ()
++{
++ struct s* p;
++
++ p = (struct s*) 0;
++ if (p->x == p->y)
++ exit (1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961203-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961203-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/961203-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/961203-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++# This doesn't work on any host with 32 bit int or smaller.
++
++# Because this test tends to consume lots of system resources and doesn't
++# currently work, don't actually run it. Just report a failure.
++setup_xfail "*-*-*"
++fail "gcc.c-torture/compile/961203-1.c"
++return 1 ;# `1' says we handled the testcase ourselves
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/970206-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/970206-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/970206-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/970206-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++struct Rect
++{
++ int iA;
++ int iB;
++ int iC;
++ int iD;
++};
++
++void
++f (int * const this, struct Rect arect)
++{
++ g (*this, arect);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/970214-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/970214-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/970214-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/970214-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++#include <stddef.h>
++#define L 264
++wchar_t c = L'X';
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980329-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980329-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980329-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980329-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,72 @@
++typedef unsigned long int size_t;
++struct re_pattern_buffer
++ {
++ unsigned char *buffer;
++ unsigned long int used;
++ };
++struct re_registers
++ {
++ int *start;
++ };
++
++static const char **regstart, **regend;
++static const char **old_regend;
++
++static int
++re_match_2_internal (struct re_pattern_buffer *bufp,
++ struct re_registers *regs)
++{
++ unsigned char *p = bufp->buffer;
++ unsigned char *pend = p + bufp->used;
++
++ for (;;)
++ {
++ int highest_active_reg = 1;
++ if (bufp)
++ {
++ int i;
++ for (i = 1;; i++)
++ regs->start[i] = 0;
++ }
++
++ switch ((unsigned int) *p++)
++ {
++ case 1:
++ {
++ unsigned char r = *p;
++ if (r)
++ highest_active_reg = r;
++ }
++ if (p + 2 == pend)
++ {
++ char is_a_jump_n = 0;
++ int mcnt = 0;
++ unsigned char *p1;
++
++ p1 = p + 2;
++ switch (*p1++)
++ {
++ case 2:
++ is_a_jump_n = 1;
++ case 1:
++ do { do { mcnt = *p1; } while (0); p1 += 2; } while (0);
++ if (is_a_jump_n)
++ p1 = 0;
++ }
++
++ if (mcnt && *p1 == 0)
++ {
++ unsigned r;
++ for (r = 0; r < (unsigned) *p + (unsigned) *(p + 1); r++)
++ {
++ if (regend[0] >= regstart[r])
++ regend[r] = old_regend[r];
++ }
++ do { while (0 < highest_active_reg + 1) { } } while (0);
++ }
++ }
++ }
++ }
++
++ return -1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980408-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980408-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980408-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980408-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,129 @@
++typedef struct _RunlengthPacket
++{
++ unsigned short
++ red,
++ green,
++ blue,
++ length;
++ unsigned short
++ index;
++} RunlengthPacket;
++typedef struct _Image
++{
++ int
++ status,
++ temporary;
++ char
++ filename[1664 ];
++ long int
++ filesize;
++ int
++ pipe;
++ char
++ magick[1664 ],
++ *comments,
++ *label,
++ *text;
++ unsigned int
++ matte;
++ unsigned int
++ columns,
++ rows,
++ depth;
++ unsigned int
++ scene,
++ number_scenes;
++ char
++ *montage,
++ *directory;
++ unsigned int
++ colors;
++ double
++ gamma;
++ float
++ x_resolution,
++ y_resolution;
++ unsigned int
++ mean_error_per_pixel;
++ double
++ normalized_mean_error,
++ normalized_maximum_error;
++ unsigned long
++ total_colors;
++ char
++ *signature;
++ unsigned int
++ packets,
++ runlength,
++ packet_size;
++ unsigned char
++ *packed_pixels;
++ long int
++ magick_time;
++ char
++ magick_filename[1664 ];
++ unsigned int
++ magick_columns,
++ magick_rows;
++ char
++ *geometry,
++ *page;
++ unsigned int
++ dispose,
++ delay,
++ iterations;
++ unsigned int
++ orphan;
++ struct _Image
++ *previous,
++ *list,
++ *next;
++} Image;
++ Image *MinifyImage(Image *image)
++{
++ Image
++ *minified_image;
++ register RunlengthPacket
++ *q,
++ *s,
++ *s0,
++ *s1,
++ *s2,
++ *s3;
++ register unsigned int
++ x;
++ unsigned int
++ blue,
++ green,
++ red;
++ unsigned long
++ total_matte,
++ total_blue,
++ total_green,
++ total_red;
++ unsigned short
++ index;
++ for (x=0; x < (image->columns-1); x+=2)
++ {
++ total_red=0;
++ total_green=0;
++ total_blue=0;
++ total_matte=0;
++ s=s0;
++ total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ;
++ s=s1;
++ total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ;
++ s=s2;
++ total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ;
++ s=s3;
++ total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ;
++ red=(unsigned short) ((total_red+63) >> 7);
++ green=(unsigned short) ((total_green+63) >> 7);
++ blue=(unsigned short) ((total_blue+63) >> 7);
++ index=(unsigned short) ((total_matte+63) >> 7);
++ if ((red == q->red) && (green == q->green) && (blue == q->blue) &&
++ (index == q->index) && ((int) q->length < 65535L ))
++ q->length++;
++ }
++ return(minified_image);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980504-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980504-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980504-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980504-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++typedef struct _geom_elem {
++ double coeffs[6];
++} pGeomDefRec, *pGeomDefPtr;
++typedef struct _mpgeombanddef {
++ int yOut;
++ int in_width;
++} mpGeometryBandRec, *mpGeometryBandPtr;
++typedef void *pointer;
++typedef unsigned char CARD8;
++typedef CARD8 BytePixel;
++void BiGL_B (OUTP,srcimg,width,sline,pedpvt,pvtband) pointer OUTP;
++pointer *srcimg;
++register int width;
++int sline;
++pGeomDefPtr pedpvt; mpGeometryBandPtr pvtband;
++{
++ register float s, t, st;
++ register int isrcline,isrcpix;
++ register int srcwidth = pvtband->in_width - 1;
++ register BytePixel val;
++ register BytePixel *ptrIn, *ptrJn;
++ register double a = pedpvt->coeffs[0];
++ register double c = pedpvt->coeffs[2];
++ register double srcpix = a * ((double)(0.0000)) + pedpvt->coeffs[1] * (pvtband->yOut + ((double)(0.0000)) ) + pedpvt->coeffs[4];
++ register double srcline = c * ((double)(0.0000)) + pedpvt->coeffs[3] * (pvtband->yOut + ((double)(0.0000)) ) + pedpvt->coeffs[5];
++ if ( (isrcpix >= 0) && (isrcpix < srcwidth) )
++ val = ptrIn[isrcpix] * ((float)1. - s - t + st) + ptrIn[isrcpix+1] * (s - st) + ptrJn[isrcpix] * (t - st) + ptrJn[isrcpix+1] * (st) + (float)0.5 ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980506-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980506-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980506-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980506-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++unsigned char TIFFFax2DMode[20][256];
++unsigned char TIFFFax2DNextState[20][256];
++unsigned char TIFFFaxUncompAction[20][256];
++unsigned char TIFFFaxUncompNextState[20][256];
++unsigned char TIFFFax1DAction[230][256];
++unsigned char TIFFFax1DNextState[230][256];
++
++typedef struct tableentry {
++ unsigned short length;
++ unsigned short code;
++ short runlen;
++} tableentry;
++
++extern tableentry TIFFFaxWhiteCodes[];
++extern tableentry TIFFFaxBlackCodes[];
++
++static short sp_data, sp_bit;
++
++static unsigned char
++fetchByte (inbuf)
++
++unsigned char **inbuf;
++
++{
++ unsigned char byte = **inbuf;
++ (*inbuf)++;
++ return (byte);
++}
++
++static int
++decode_white_run (inbuf)
++
++unsigned char **inbuf;
++
++{
++ short state = sp_bit;
++ short action;
++ int runlen = 0;
++
++ for (;;)
++ {
++ if (sp_bit == 0)
++ {
++ nextbyte:
++ sp_data = fetchByte (inbuf);
++ }
++
++ action = TIFFFax1DAction[state][sp_data];
++ state = TIFFFax1DNextState[state][sp_data];
++ if (action == 0 )
++ goto nextbyte;
++ if (action == 1 )
++ return (-1 );
++ if (action == 210 )
++ return (-3 );
++ sp_bit = state;
++ action = (TIFFFaxWhiteCodes[ action - 2 ].runlen) ;
++ runlen += action;
++ if (action < 64)
++ return (runlen);
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980506-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980506-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980506-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980506-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,89 @@
++/*
++ * inspired by glibc-2.0.6/sysdeps/libm-ieee754/s_nextafterf.c
++ *
++ * gcc -O2 -S -DOP=+ gives faddp %st(1),%st
++ * gcc -O2 -S -DOP=* gives fmulp %st(1),%st
++ * gcc -O2 -S -DOP=- gives fsubrp %st(1),%st
++ * gcc -O2 -S -DOP=/ gives fdivrp %st(1),%st
++ */
++
++#ifndef OP
++#define OP *
++#endif
++
++typedef int int32_t __attribute__ ((__mode__ ( __SI__ ))) ;
++typedef unsigned int u_int32_t __attribute__ ((__mode__ ( __SI__ ))) ;
++
++typedef union
++{
++ float value;
++ u_int32_t word;
++} ieee_float_shape_type;
++
++float __nextafterf(float x, float y)
++{
++ int32_t hx,hy,ix,iy;
++
++ {
++ ieee_float_shape_type gf_u;
++ gf_u.value = x;
++ hx = gf_u.word;
++ }
++ {
++ ieee_float_shape_type gf_u;
++ gf_u.value = y;
++ hy = gf_u.word;
++ }
++ ix = hx&0x7fffffff;
++ iy = hy&0x7fffffff;
++
++ if ( ix > 0x7f800000 || iy > 0x7f800000 )
++ return x+y;
++ if (x == y) return x;
++ if (ix == 0)
++ {
++ {
++ ieee_float_shape_type sf_u;
++ sf_u.word = (hy&0x80000000) | 1;
++ x = sf_u.value;
++ }
++ y = x*x;
++ if (y == x) return y; else return x;
++ }
++ if (hx >= 0)
++ {
++ if (hx > hy)
++ hx -= 1;
++ else
++ hx += 1;
++ }
++ else
++ {
++ if (hy >= 0 || hx > hy)
++ hx -= 1;
++ else
++ hx += 1;
++ }
++ hy = hx & 0x7f800000;
++ if (hy >= 0x7f800000)
++ return x+x;
++ if (hy < 0x00800000)
++ {
++ y = x OP x;
++ if (y != x)
++ {
++ ieee_float_shape_type sf_u;
++ sf_u.word = hx;
++ y = sf_u.value;
++ return y;
++ }
++ }
++ {
++ ieee_float_shape_type sf_u;
++ sf_u.word = hx;
++ x = sf_u.value;
++ }
++ return x;
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980511-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980511-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980511-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980511-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++typedef unsigned int __kernel_dev_t;
++typedef __kernel_dev_t dev_t;
++struct ustat {
++};
++typedef unsigned int kdev_t;
++static inline kdev_t to_kdev_t(int dev)
++{
++ int major, minor;
++ major = (dev >> 8);
++ minor = (dev & 0xff);
++ return ((( major ) << 22 ) | ( minor )) ;
++}
++struct super_block {
++};
++struct super_block * get_super (kdev_t dev);
++int sys_ustat(dev_t dev, struct ustat * ubuf)
++{
++ struct super_block *s;
++ s = get_super(to_kdev_t(dev));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980701-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980701-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980701-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980701-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++
++short
++func(void)
++{
++ unsigned char x, y;
++
++ return y | x << 8;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980706-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980706-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980706-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980706-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++void g(long long);
++
++long long f(long long v1, long long v2, long long v3, long long v4)
++{
++ g(v1);
++ g(v2);
++ g(v3);
++ g(v4);
++ return v1 && v2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980726-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980726-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980726-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980726-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++static __inline__ unsigned char BCD(unsigned char binval)
++{
++ if (binval > 99) return 0x99;
++ return (((binval/10) << 4) | (binval%10));
++}
++
++void int1a(unsigned char i)
++{
++ (*((unsigned char *)1)) = BCD(i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980729-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980729-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980729-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980729-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++static int
++regex_compile ()
++{
++ int c, c1;
++ char str[6 + 1];
++ c1 = 0;
++ for (;;)
++ {
++ do { } while (0) ;
++ if (c1 == 6 )
++ break;
++ str[c1++] = c;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980816-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980816-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980816-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980816-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++typedef unsigned int size_t;
++typedef void *XtPointer;
++
++typedef struct _WidgetRec *Widget;
++typedef struct _WidgetClassRec *WidgetClass;
++
++extern WidgetClass commandWidgetClass;
++
++typedef void (*XtCallbackProc)(
++ Widget ,
++ XtPointer ,
++ XtPointer
++);
++
++extern const char XtStrings[];
++
++
++typedef struct
++{
++ char *Name,
++ *Label;
++ XtCallbackProc Callback;
++ XtPointer ClientData;
++ Widget W;
++} DialogButtonType, *DialogButtonTypePtr;
++
++
++Widget AddButtons(Widget Parent, Widget Top,
++ DialogButtonTypePtr Buttons, size_t Count)
++{
++ int i;
++
++ for (i = 0; i < Count; i++)
++ {
++ if (!Buttons[i].Label)
++ continue;
++ Buttons[i].W = XtVaCreateManagedWidget(Buttons[i].Name,
++ commandWidgetClass,
++ Parent,
++ ((char*)&XtStrings[429]) , Buttons[i].Label,
++ "fromHoriz" , i ? Buttons[i-1].W : ((void *)0) ,
++ "fromVert" , Top,
++ "resizable" , 1 ,
++ ((void *)0) );
++
++ XtAddCallback(((char*)&XtStrings[136]),
++ Buttons[i].Callback, Buttons[i].ClientData);
++ }
++ return(Buttons[Count-1].W);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980821-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980821-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980821-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980821-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++typedef int __int32_t;
++int __kernel_rem_pio2(int prec)
++{
++ __int32_t i, jz;
++ double fw, fq[20];
++ switch(prec) {
++ case 2:
++ fw = 0.0;
++ case 3:
++ for (i=jz;i>0;i--) {
++ fw = fq[i-1] +fq[i];
++ fq[i-1] = fw;
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980825-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980825-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/980825-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/980825-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++typedef enum { FALSE, TRUE } boolean;
++enum _errorTypes { FATAL = 1, WARNING = 2, PERROR = 4 };
++typedef struct _optionValues {
++ struct _include {
++ boolean classNames;
++ boolean defines;
++ boolean enumerators;
++ } include;
++} optionValues;
++extern optionValues Option;
++static void applyTagInclusionList( list )
++ const char *const list;
++{
++ boolean mode = TRUE;
++ const char *p;
++ for (p = list ; *p != '\0' ; ++p)
++ switch (*p)
++ {
++ case '=':
++ clearTagList();
++ mode = TRUE;
++ break;
++ case '+': mode = TRUE; break;
++ case '-': mode = FALSE; break;
++ case 'c': Option.include.classNames = mode; break;
++ case 'd': Option.include.defines = mode; break;
++ case 'e': Option.include.enumerators = mode; break;
++ default: error(FATAL, "-i: Invalid tag option '%c'", *p); break;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++unsigned short code = 0x0000;
++unsigned short low = 0x4000;
++unsigned short high = 0xb000;
++
++int main (void)
++{
++ if (
++ (high & 0x8000) != (low & 0x8000)
++ && ( low & 0x4000) == 0x4000
++ && (high & 0x4000) == 0
++ )
++ {
++ code ^= 0x4000;
++ low |= 0x4000;
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#define weak_alias(func, aliasname) \
++ extern __typeof (func) aliasname __attribute__ ((weak, alias (#func)));
++
++#define add3(d, m, c) ((d) + (m) + (c))
++
++int
++__add3(int d, int m, int c)
++{
++ return d + m + c;
++}
++
++weak_alias (__add3, add3)
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++#define P(a, b) P1(a,b)
++#define P1(a,b) a##b
++
++#define FLT_MIN_EXP (-125)
++#define DBL_MIN_EXP (-1021)
++
++#define MIN_EXP P(FLT,_MIN_EXP)
++
++#define FLT FLT
++int f1 = MIN_EXP;
++
++#undef FLT
++#define FLT DBL
++int f2 = MIN_EXP;
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981001-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981001-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++#define P(a,b) P1(a,b)
++#define P1(a,b) a##b
++
++#define ONCE(x, y) (x ?: (x = y()))
++#define PREFIX
++
++extern int P(PREFIX, init) (void);
++
++int
++fun(void)
++{
++ static int memo;
++ return ONCE(memo, P(PREFIX, init));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981007-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981007-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981007-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981007-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++extern double fabs (double);
++extern double sqrt (double);
++
++typedef struct complexm {
++ double re,im;
++} complex;
++
++static complex
++setCom (double r, double i)
++{
++ complex ct;
++ ct.re=fabs(r)<1E-300?0.0:r;
++ ct.im=fabs(i)<1E-300?0.0:i;
++ return ct;
++}
++
++static complex
++csqrt_crash (double x)
++{
++ return (x>=0) ? setCom(sqrt(x),0) : setCom(0,sqrt(-x));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981022-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981022-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981022-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981022-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* This tests a combination of two gcc extensions. Omitting the middle
++ operand of ?: and using ?: as an lvalue. */
++int x, y;
++
++int main ()
++{
++ (x ?: y) = 0;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981022-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981022-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981022-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981022-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++set torture_compile_xfail "*-*-*"
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981107-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981107-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981107-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981107-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++unsigned long seed(void)
++{
++ unsigned long u;
++
++ call();
++
++ u = 26107 * (unsigned long)&u;
++ return u;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981211-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981211-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981211-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981211-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++/* Basic tests of the #assert preprocessor extension. */
++
++#define fail int fail
++
++#assert abc (def)
++#assert abc (ghi)
++#assert abc (jkl)
++#assert space ( s p a c e )
++
++/* Basic: */
++#if !#abc (def) || !#abc (ghi) || !#abc (jkl)
++fail
++#endif
++
++/* any answer for #abc */
++#if !#abc
++fail
++#endif
++
++/* internal whitespace is collapsed,
++ external whitespace is deleted */
++#if !#space (s p a c e) || !#space ( s p a c e ) || #space (space)
++fail
++#endif
++
++/* removing assertions */
++#unassert abc (jkl)
++#if !#abc || !#abc (def) || !#abc (ghi) || #abc (jkl)
++fail
++#endif
++
++#unassert abc
++#if #abc || #abc (def) || #abc (ghi) || #abc (jkl)
++fail
++#endif
++
++int gobble
++
++/* make sure it can succeed too.
++ also check space before open paren isn't significant */
++#if #space(s p a c e)
++;
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981223-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981223-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/981223-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/981223-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++__complex__ float
++func (__complex__ float x)
++{
++ if (__real__ x == 0.0)
++ return 1.0;
++ else
++ return 0.0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990107-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990107-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990107-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990107-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++static int
++java_double_finite (d)
++ double d;
++{
++ long long *ip = (long long *) &d;
++ return (*ip & 0x7ff0000000000000LL ) != 0x7ff0000000000000LL ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990117-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990117-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990117-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990117-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++static void
++__bb_init_prg ()
++{
++ const char *p;
++
++ {
++ unsigned long l;
++
++ (__extension__ (__builtin_constant_p (p) && __builtin_constant_p (l)
++ ? 5 : 2));
++ }
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990203-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990203-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990203-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990203-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++int
++f (f)
++ float f;
++{
++ long long *ip = (long long *) &f;
++ return (*ip & 0x7ff0000000000000LL ) != 0x7ff0000000000000LL ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990517-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990517-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990517-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990517-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++/* Extracted from the sdm module in perl. */
++typedef struct {
++ char *dptr;
++ int dsize;
++} datum;
++extern long sdbm_hash (char *, int) ;
++extern void sdbm__putpair (char *, datum, datum) ;
++void
++sdbm__splpage (char *pag, char *New, long int sbit)
++{
++ datum key;
++ datum val;
++ register int n;
++ register int off = 1024 ;
++ char cur[1024 ];
++ register short *ino = (short *) cur;
++ (void) memcpy(cur, pag, 1024 );
++ (void) ({ void *__s = ( pag ); __builtin_memset ( __s , '\0', 1024 ) ; __s; });
++ (void) ({ void *__s = ( New ); __builtin_memset ( __s , '\0', 1024 ) ; __s; });
++ n = ino[0];
++ for (ino++; n > 0; ino += 2) {
++ key.dptr = cur + ino[0];
++ key.dsize = off - ino[0];
++ val.dptr = cur + ino[1];
++ val.dsize = ino[0] - ino[1];
++ (void) sdbm__putpair ((sdbm_hash(( key ).dptr, ( key ).dsize) & sbit) ? New : pag, key, val);
++ off = ino[1];
++ n -= 2;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990519-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990519-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/990519-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/990519-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++ typedef int gboolean;
++
++ typedef struct{
++ gboolean names : 1;
++ gboolean types : 1;
++ } ParamOptions;
++
++ int p_param(ParamOptions* o){
++ return o->types && o->names;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/calls.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/calls.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/calls.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/calls.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++typedef void *(*T)(void);
++f1 ()
++{
++ ((T) 0)();
++}
++f2 ()
++{
++ ((T) 1000)();
++}
++f3 ()
++{
++ ((T) 10000000)();
++}
++f4 (r)
++{
++ ((T) r)();
++}
++f5 ()
++{
++ int (*r)() = f3;
++ ((T) r)();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f (long long d)
++{
++ int i = 0;
++ if (d == 1)
++ i = 1;
++ return i;
++}
++
++g (long long d)
++{
++ int i = 0;
++ if (d <= 0)
++ i = 1;
++ return i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/combine-hang.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/combine-hang.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/combine-hang.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/combine-hang.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++typedef union
++{
++ double value;
++ struct
++ {
++ unsigned long msw;
++ unsigned long lsw;
++ } parts;
++} ieee_double_shape_type;
++
++double f (int iy)
++{
++ double z, t;
++ ieee_double_shape_type u, v;
++
++ if (iy == 1)
++ return 0;
++
++ u.parts.msw = iy;
++ u.parts.lsw = 0;
++ z = u.value;
++ v.parts.msw = iy;
++ v.parts.lsw = 0;
++ t = v.value;
++ return 1.0+z+t+t;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/compile.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/compile.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/compile.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/compile.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++# Expect driver script for GCC Regression Tests
++# Copyright (C) 1993, 1995, 1997 Free Software Foundation
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# These tests come from Torbjorn Granlund's (tege@cygnus.com)
++# C torture test suite, and other contributors.
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib c-torture.exp
++
++foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $testcase] then {
++ continue
++ }
++
++ c-torture $testcase
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=compile.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/funcptr-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/funcptr-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/funcptr-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/funcptr-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++extern int (*gp)(const char*);
++
++int
++g (const char* d)
++{
++ printf ("g");
++ return 0;
++}
++
++f ()
++{
++ int errcnt=0;
++
++ if (gp != g)
++ {
++ printf ("f");
++ errcnt++;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/goto-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/goto-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/goto-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/goto-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++f ()
++{
++ do
++ {
++ if (0)
++ {
++ L1:;
++ }
++ else
++ goto L2;
++ L2:;
++ }
++ while (0);
++
++ goto L1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/init-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/init-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/init-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/init-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++typedef struct
++{
++ char *key;
++ char *value;
++} T1;
++
++typedef struct
++{
++ long type;
++ char *value;
++} T3;
++
++T1 a[] =
++{
++ {
++ "",
++ ((char *)&((T3) {1, (char *) 1}))
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/init-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/init-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/init-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/init-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++struct
++{
++ int e1, e2;
++} v = { e2: 0 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/labels-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/labels-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/labels-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/labels-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++#ifndef NO_LABEL_VALUES
++f ()
++{
++ void *x = &&L2;
++ if (&&L3 - &&L1 > 1)
++ abort();
++ L1: return 1;
++ L2: abort ();
++ L3:;
++}
++#else
++int x;
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/packed-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/packed-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/packed-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/packed-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++struct s
++{
++ int e;
++} x;
++
++struct rbuf
++{
++ struct s *p __attribute__ ((packed));
++} *b;
++
++f ()
++{
++ b->p = &x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/widechar-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/widechar-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/widechar-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/widechar-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++char *s = L"a" "b";
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++typedef struct { } empty_t;
++
++f ()
++{
++ empty_t i;
++ bar (i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/900409-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/900409-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/900409-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/900409-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++long f1(long a){return a&0xff000000L;}
++long f2 (long a){return a&~0xff000000L;}
++long f3(long a){return a&0x000000ffL;}
++long f4(long a){return a&~0x000000ffL;}
++long f5(long a){return a&0x0000ffffL;}
++long f6(long a){return a&~0x0000ffffL;}
++
++main ()
++{
++ long a = 0x89ABCDEF;
++
++ if (f1(a)!=0x89000000L||
++ f2(a)!=0x00ABCDEFL||
++ f3(a)!=0x000000EFL||
++ f4(a)!=0x89ABCD00L||
++ f5(a)!=0x0000CDEFL||
++ f6(a)!=0x89AB0000L)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920202-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920202-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920202-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920202-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++static int rule_text_needs_stack_pop = 0;
++static int input_stack_pos = 1;
++
++f (void)
++{
++ rule_text_needs_stack_pop = 1;
++
++ if (input_stack_pos <= 0)
++ return 1;
++ else
++ return 0;
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920302-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920302-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920302-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920302-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++short optab[5];
++char buf[10];
++execute (ip)
++ register unsigned short *ip;
++{
++#ifndef NO_LABEL_VALUES
++ register void *base = &&x;
++ char *bp = buf;
++ static void *tab[] = {&&x, &&y, &&z};
++ if (ip == 0)
++ {
++ int i;
++ for (i = 0; i < 3; ++i)
++ optab[i] = (short)(tab[i] - base);
++ return;
++ }
++x: *bp++='x';
++ goto *(base + *ip++);
++y: *bp++='y';
++ goto *(base + *ip++);
++z: *bp++='z';
++ *bp=0;
++ return;
++#else
++ strcpy (buf, "xyxyz");
++#endif
++}
++
++short p[5];
++
++main ()
++{
++ execute (0);
++ p[0] = optab[1];
++ p[1] = optab[0];
++ p[2] = optab[1];
++ p[3] = optab[2];
++ execute (&p);
++ if (strcmp (buf, "xyxyz"))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920409-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920409-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920409-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920409-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(){signed char c=-1;return c<0;}main(){if(x()!=1)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920410-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920410-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920410-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920410-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#define STACK_REQUIREMENT (40000 * 4 + 256)
++#if defined (STACK_SIZE) && STACK_SIZE < STACK_REQUIREMENT
++main () { exit (0); }
++#else
++main(){int d[40000];d[0]=0;exit(0);}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920411-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920411-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920411-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920411-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++long f (w)
++ char *w;
++{
++ long k, i, c = 0, x;
++ char *p = (char*) &x;
++ for (i = 0; i < 1; i++)
++ {
++ for (k = 0; k < sizeof (long); k++)
++ p[k] = w[k];
++ c += x;
++ }
++ return c;
++}
++
++main ()
++{
++ int i;
++ char a[sizeof (long)];
++
++ for (i = sizeof (long); --i >= 0;) a[i] = ' ';
++ if (f (a) != ~0UL / (unsigned char) ~0 * ' ')
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920415-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920415-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920415-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920415-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++/* CYGNUS LOCAL -- meissner/no label values */
++#ifndef NO_LABEL_VALUES
++main(){__label__ l;void*x(){return&&l;}goto*x();abort();return;l:exit(0);}
++#else
++main(){ exit (0); }
++#endif
++/* END CYGNUS LOCAL -- meissner/no label values */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920428-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920428-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920428-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920428-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++x(const char*s){char a[1];const char*ss=s;a[*s++]|=1;return(int)ss+1==(int)s;}
++main(){if(x("")!=1)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920428-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920428-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920428-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920428-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++#ifndef NO_LABEL_VALUES
++s(i){if(i>0){__label__ l1;int f(int i){if(i==2)goto l1;return 0;}return f(i);l1:;}return 1;}
++x(){return s(0)==1&&s(1)==0&&s(2)==1;}
++main(){if(x()!=1)abort();exit(0);}
++#else
++main(){ exit (0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920428-2.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920428-2.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920428-2.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920428-2.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++# This doesn't work on sparc's with -mflat.
++
++if { [istarget "sparc-*-*"] && [string match "*mflat*" $CFLAGS] } {
++ set torture_execute_xfail "sparc-*-*"
++}
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920429-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920429-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920429-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920429-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++typedef unsigned char t;int i,j;
++t*f(t*p){t c;c=*p++;i=((c&2)?1:0);j=(c&7)+1;return p;}
++main(){t*p0="ab",*p1;p1=f(p0);if(p0+1!=p1)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++int s[2];
++x(){if(!s[0]){s[1+s[1]]=s[1];return 1;}}
++main(){s[0]=s[1]=0;if(x(0)!=1)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,114 @@
++unsigned long
++gcd_ll (unsigned long long x, unsigned long long y)
++{
++ for (;;)
++ {
++ if (y == 0)
++ return (unsigned long) x;
++ x = x % y;
++ if (x == 0)
++ return (unsigned long) y;
++ y = y % x;
++ }
++}
++
++unsigned long long
++powmod_ll (unsigned long long b, unsigned e, unsigned long long m)
++{
++ unsigned t;
++ unsigned long long pow;
++ int i;
++
++ if (e == 0)
++ return 1;
++
++ /* Find the most significant bit in E. */
++ t = e;
++ for (i = 0; t != 0; i++)
++ t >>= 1;
++
++ /* The most sign bit in E is handled outside of the loop, by beginning
++ with B in POW, and decrementing I. */
++ pow = b;
++ i -= 2;
++
++ for (; i >= 0; i--)
++ {
++ pow = pow * pow % m;
++ if ((1 << i) & e)
++ pow = pow * b % m;
++ }
++
++ return pow;
++}
++
++unsigned long factab[10];
++
++void
++facts (t, a_int, x0, p)
++ unsigned long long t;
++ int a_int;
++ int x0;
++ unsigned p;
++{
++ unsigned long *xp = factab;
++ unsigned long long x, y;
++ unsigned long q = 1;
++ unsigned long long a = a_int;
++ int i;
++ unsigned long d;
++ int j = 1;
++ unsigned long tmp;
++ int jj = 0;
++
++ x = x0;
++ y = x0;
++
++ for (i = 1; i < 10000; i++)
++ {
++ x = powmod_ll (x, p, t) + a;
++ y = powmod_ll (y, p, t) + a;
++ y = powmod_ll (y, p, t) + a;
++
++ if (x > y)
++ tmp = x - y;
++ else
++ tmp = y - x;
++ q = (unsigned long long) q * tmp % t;
++
++ if (i == j)
++ {
++ jj += 1;
++ j += jj;
++ d = gcd_ll (q, t);
++ if (d != 1)
++ {
++ *xp++ = d;
++ t /= d;
++ if (t == 1)
++ {
++ return;
++ *xp = 0;
++ }
++ }
++ }
++ }
++}
++
++main ()
++{
++ unsigned long long t;
++ unsigned x0, a;
++ unsigned p;
++
++ p = 27;
++ t = (1ULL << p) - 1;
++
++ a = -1;
++ x0 = 3;
++
++ facts (t, a, x0, p);
++ if (factab[0] != 7 || factab[1] != 73 || factab[2] != 262657)
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++int tab[9];
++execute(oip, ip)
++ unsigned short *oip, *ip;
++{
++#ifndef NO_LABEL_VALUES
++ int x = 0;
++ int *xp = tab;
++base:
++ x++;
++ if (x == 4)
++ {
++ *xp = 0;
++ return;
++ }
++ *xp++ = ip - oip;
++ goto *(&&base + *ip++);
++#else
++ tab[0] = 0;
++ tab[1] = 1;
++ tab[2] = 2;
++ tab[3] = 0;
++#endif
++}
++
++main()
++{
++ unsigned short ip[10];
++ int i;
++ for (i = 0; i < 10; i++)
++ ip[i] = 0;
++ execute(ip, ip);
++ if (tab[0] != 0 || tab[1] != 1 || tab[2] != 2 || tab[3] != 0)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++#ifndef NO_LABEL_VALUES
++int
++x (int i)
++{
++ static const void *j[] = {&& x, && y, && z};
++
++ goto *j[i];
++
++ x: return 2;
++ y: return 3;
++ z: return 5;
++}
++
++int
++main (void)
++{
++ if ( x (0) != 2
++ || x (1) != 3
++ || x (2) != 5)
++ abort ();
++
++ exit (0);
++}
++#else
++int
++main (void) { exit (0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++#ifndef NO_LABEL_VALUES
++x (int i)
++{
++ void *j[] = {&&x, &&y, &&z};
++ goto *j[i];
++ x:return 2;
++ y:return 3;
++ z:return 5;
++
++}
++main ()
++{
++ if (x (0) != 2 || x (1) != 3 | x (2) != 5)
++ abort();
++ exit(0);
++}
++#else
++main(){ exit (0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,91 @@
++#include <stdio.h>
++
++/* Convert a decimal string to a long long unsigned. No error check is
++ performed. */
++
++long long unsigned
++str2llu (str)
++ char *str;
++{
++ long long unsigned acc;
++ int d;
++ acc = *str++ - '0';
++ for (;;)
++ {
++ d = *str++;
++ if (d == '\0')
++ break;
++ d -= '0';
++ acc = acc * 10 + d;
++ }
++
++ return acc;
++}
++
++/* isqrt(t) - computes the square root of t. (tege 86-10-27) */
++
++long unsigned
++sqrtllu (long long unsigned t)
++{
++ long long unsigned s;
++ long long unsigned b;
++
++ for (b = 0, s = t; b++, (s >>= 1) != 0; )
++ ;
++
++ s = 1LL << (b >> 1);
++
++ if (b & 1)
++ s += s >> 1;
++
++ do
++ {
++ b = t / s;
++ s = (s + b) >> 1;
++ }
++ while (b < s);
++
++ return s;
++}
++
++
++int plist (p0, p1, tab)
++ long long unsigned p0, p1;
++ long long unsigned *tab;
++{
++ long long unsigned p;
++ long unsigned d;
++ long unsigned s;
++ long long unsigned *xp = tab;
++
++ for (p = p0; p <= p1; p += 2)
++ {
++ s = sqrtllu (p);
++
++ for (d = 3; d <= s; d += 2)
++ {
++ long long unsigned q = p % d;
++ if (q == 0)
++ goto not_prime;
++ }
++
++ *xp++ = p;
++ not_prime:;
++ }
++ *xp = 0;
++ return xp - tab;
++}
++
++main (argc, argv)
++ int argc;
++ char *argv[];
++{
++ long long tab[10];
++ int nprimes;
++ nprimes = plist (str2llu ("1234111111"), str2llu ("1234111127"), tab);
++
++ if(tab[0]!=1234111117LL||tab[1]!=1234111121LL||tab[2]!=1234111127LL||tab[3]!=0)
++ abort();
++
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-7.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-7.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-7.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-7.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++/* CYGNUS LOCAL -- meissner/no label values */
++#ifdef STACK_SIZE
++#define DEPTH ((STACK_SIZE) / 512 + 1)
++#else
++#define DEPTH 1000
++#endif
++
++#ifndef NO_LABEL_VALUES
++x(a)
++{
++ __label__ xlab;
++ void y(a)
++ {
++ if (a==0)
++ goto xlab;
++ y (a-1);
++ }
++ y (a);
++ xlab:;
++ return a;
++}
++#endif
++
++main ()
++{
++#ifndef NO_LABEL_VALUES
++ if (x (DEPTH) != DEPTH)
++ abort ();
++#endif
++ exit (0);
++}
++/* END CYGNUS LOCAL -- meissner/no label values */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-7.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-7.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-7.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-7.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++# This doesn't work on sparc's with -mflat.
++
++if { [istarget "sparc-*-*"] && [string match "*mflat*" $CFLAGS] } {
++ set torture_execute_xfail "sparc-*-*"
++}
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-8.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-8.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-8.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-8.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#include <stdio.h>
++#include <stdarg.h>
++
++char buf[50];
++int
++va (int a, double b, int c, ...)
++{
++ va_list ap;
++ int d, e, f, g, h, i, j, k, l, m, n, o, p;
++ va_start (ap, c);
++
++ d = va_arg (ap, int);
++ e = va_arg (ap, int);
++ f = va_arg (ap, int);
++ g = va_arg (ap, int);
++ h = va_arg (ap, int);
++ i = va_arg (ap, int);
++ j = va_arg (ap, int);
++ k = va_arg (ap, int);
++ l = va_arg (ap, int);
++ m = va_arg (ap, int);
++ n = va_arg (ap, int);
++ o = va_arg (ap, int);
++ p = va_arg (ap, int);
++
++ sprintf (buf,
++ "%d,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
++ a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
++ va_end (ap);
++}
++
++main()
++{
++ va (1, 1.0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ if (strcmp ("1,1.000000,2,3,4,5,6,7,8,9,10,11,12,13,14,15", buf))
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-9.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-9.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920501-9.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920501-9.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++#include <stdio.h>
++
++long long proc1(){return 1LL;}
++long long proc2(){return 0x12345678LL;}
++long long proc3(){return 0xaabbccdd12345678LL;}
++long long proc4(){return -1LL;}
++long long proc5(){return 0xaabbccddLL;}
++
++print_longlong(x,buf)
++ long long x;
++ char *buf;
++{
++ unsigned long l;
++ l= (x >> 32) & 0xffffffff;
++ if (l != 0)
++ sprintf(buf,"%lx%08.lx",l,((unsigned long)x & 0xffffffff));
++ else
++ sprintf(buf,"%lx",((unsigned long)x & 0xffffffff));
++}
++
++main(){char buf[100];
++print_longlong(proc1(),buf);if(strcmp("1",buf))abort();
++print_longlong(proc2(),buf);if(strcmp("12345678",buf))abort();
++print_longlong(proc3(),buf);if(strcmp("aabbccdd12345678",buf))abort();
++print_longlong(proc4(),buf);if(strcmp("ffffffffffffffff",buf))abort();
++print_longlong(proc5(),buf);if(strcmp("aabbccdd",buf))abort();
++exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920506-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920506-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920506-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920506-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++int l[]={0,1};
++main(){int*p=l;switch(*p++){case 0:exit(0);case 1:break;case 2:break;case 3:case 4:break;}abort();}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920520-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920520-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920520-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920520-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++foo(int *bar)
++{
++ *bar = 8;
++}
++
++bugger()
++{
++ int oldDepth, newDepth;
++
++ foo(&oldDepth);
++
++ switch (oldDepth)
++ {
++ case 8:
++ case 500:
++ newDepth = 8;
++ break;
++
++ case 5000:
++ newDepth = 500;
++ break;
++
++ default:
++ newDepth = 17;
++ break;
++ }
++
++ return newDepth - oldDepth;
++}
++
++main()
++{
++ if (bugger() != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920603-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920603-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920603-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920603-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++f(got){if(got!=0xffff)abort();}
++main(){signed char c=-1;unsigned u=(unsigned short)c;f(u);exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920604-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920604-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920604-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920604-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++long long
++mod (a, b)
++ long long a, b;
++{
++ return a % b;
++}
++
++int
++main ()
++{
++ mod (1LL, 2LL);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920612-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920612-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920612-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920612-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++f(j)int j;{return++j>0;}
++main(){if(f((~0U)>>1))abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920612-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920612-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920612-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920612-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++main ()
++{
++ int i = 0;
++ int a (int x)
++ {
++ while (x)
++ i++, x--;
++ return x;
++ }
++ a (2);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920618-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920618-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920618-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920618-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++main(){if(1.17549435e-38F<=1.1)exit(0);abort();}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920625-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920625-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920625-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920625-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#include <stdarg.h>
++
++typedef struct{double x,y;}point;
++point pts[]={{1.0,2.0},{3.0,4.0},{5.0,6.0},{7.0,8.0}};
++static int va1(int nargs,...)
++{
++ va_list args;
++ int i;
++ point pi;
++ va_start(args,nargs);
++ for(i=0;i<nargs;i++){
++ pi=va_arg(args,point);
++ if(pts[i].x!=pi.x||pts[i].y!=pi.y)abort();
++ }
++ va_end(args);
++}
++
++typedef struct{int x,y;}ipoint;
++ipoint ipts[]={{1,2},{3,4},{5,6},{7,8}};
++static int va2(int nargs,...)
++{
++ va_list args;
++ int i;
++ ipoint pi;
++ va_start(args,nargs);
++ for(i=0;i<nargs;i++){
++ pi=va_arg(args,ipoint);
++ if(ipts[i].x!=pi.x||ipts[i].y!=pi.y)abort();
++ }
++ va_end(args);
++}
++
++main()
++{
++va1(4,pts[0],pts[1],pts[2],pts[3]);
++va2(4,ipts[0],ipts[1],ipts[2],ipts[3]);
++exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920710-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920710-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920710-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920710-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++main()
++{
++ if ((double) 18446744073709551615ULL < 1.84467440737095e+19 ||
++ (double) 18446744073709551615ULL > 1.84467440737096e+19)
++ abort();
++
++ if (16777217L != (float)16777217e0)
++ abort();
++
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920711-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920711-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920711-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920711-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++f(long a){return (--a > 0);}
++main(){if(f(0x80000000L)==0)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++long f(short a,short b){return (long)a/b;}
++main(){if(f(-32768,-1)!=32768L)abort();else exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++f(){}
++main(){int n=2;double x[n];f();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++static inline fu (unsigned short data)
++{
++ return data;
++}
++ru(i)
++{
++ if(fu(i++)!=5)abort();
++ if(fu(++i)!=7)abort();
++}
++static inline fs (signed short data)
++{
++ return data;
++}
++rs(i)
++{
++ if(fs(i++)!=5)abort();
++ if(fs(++i)!=7)abort();
++}
++
++
++main()
++{
++ ru(5);
++ rs(5);
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920721-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920721-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,60 @@
++#ifndef NO_LABEL_VALUES
++int try (int num) {
++ __label__ lab1, lab2, lab3, lab4, lab5, lab6, default_lab;
++
++ void *do_switch (int num) {
++ switch(num) {
++ case 1:
++ return &&lab1;
++ case 2:
++ return &&lab2;
++ case 3:
++ return &&lab3;
++ case 4:
++ return &&lab4;
++ case 5:
++ return &&lab5;
++ case 6:
++ return &&lab6;
++ default:
++ return &&default_lab;
++ }
++ }
++
++ goto *do_switch (num);
++
++ lab1:
++ return 1;
++
++ lab2:
++ return 2;
++
++ lab3:
++ return 3;
++
++ lab4:
++ return 4;
++
++ lab5:
++ return 5;
++
++ lab6:
++ return 6;
++
++ default_lab:
++ return -1;
++}
++
++main()
++{
++ int i;
++ for (i = 1; i <= 6; i++)
++ {
++ if (try (i) != i)
++ abort();
++ }
++ exit(0);
++}
++#else
++main(){ exit (0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920726-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920726-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920726-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920726-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++#include <stdio.h>
++#include <stdarg.h>
++
++struct spurious
++{
++ int anumber;
++};
++
++int first(char *buf, char *fmt, ...)
++{
++ int pos, number;
++ va_list args;
++ int dummy;
++ char *bp = buf;
++
++ va_start(args, fmt);
++ for (pos = 0; fmt[pos]; pos++)
++ if (fmt[pos] == 'i')
++ {
++ number = va_arg(args, int);
++ sprintf(bp, "%d", number);
++ bp += strlen(bp);
++ }
++ else
++ *bp++ = fmt[pos];
++
++ va_end(args);
++ *bp = 0;
++ return dummy;
++}
++
++struct spurious second(char *buf,char *fmt, ...)
++{
++ int pos, number;
++ va_list args;
++ struct spurious dummy;
++ char *bp = buf;
++
++ va_start(args, fmt);
++ for (pos = 0; fmt[pos]; pos++)
++ if (fmt[pos] == 'i')
++ {
++ number = va_arg(args, int);
++ sprintf(bp, "%d", number);
++ bp += strlen(bp);
++ }
++ else
++ *bp++ = fmt[pos];
++
++ va_end(args);
++ *bp = 0;
++ return dummy;
++}
++
++main()
++{
++ char buf1[100], buf2[100];
++ first(buf1, "i i ", 5, 20);
++ second(buf2, "i i ", 5, 20);
++ if (strcmp ("5 20 ", buf1) || strcmp ("5 20 ", buf2))
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920728-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920728-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920728-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920728-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++typedef struct {int dims[0]; } *A;
++
++f(unsigned long obj)
++{
++ unsigned char y = obj >> 24;
++ y &= ~4;
++
++ if ((y==0)||(y!=251 ))
++ abort();
++
++ if(((int)obj&7)!=7)return;
++
++ REST_OF_CODE_JUST_HERE_TO_TRIGGER_THE_BUG:
++
++ {
++ unsigned char t = obj >> 24;
++ if (!(t==0)&&(t<=0x03))
++ return 0;
++ return ((A)(obj&0x00FFFFFFL))->dims[1];
++ }
++}
++
++long g(){return 0xff000000L;}
++main (){int x;f(g());exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920731-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920731-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920731-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920731-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++f(x){int i;for(i=0;i<8&&(x&1)==0;x>>=1,i++);return i;}
++main(){if(f(4)!=2)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920810-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920810-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920810-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920810-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++
++typedef struct{void*super;int name;int size;}t;
++t*f(t*clas,int size)
++{
++ t*child=(t*)malloc(size);
++ memcpy(child,clas,clas->size);
++ child->super=clas;
++ child->name=0;
++ child->size=size;
++ return child;
++}
++main()
++{
++ t foo,*bar;
++ memset(&foo,37,sizeof(t));
++ foo.size=sizeof(t);
++ bar=f(&foo,sizeof(t));
++ if(bar->super!=&foo||bar->name!=0||bar->size!=sizeof(t))abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920812-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920812-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920812-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920812-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++typedef int t;
++f(t y){switch(y){case 1:return 1;}return 0;}
++main(){if(f((t)1)!=1)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920829-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920829-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920829-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920829-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++long long c=2863311530LL,c3=2863311530LL*3;
++main(){if(c*3!=c3)abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920908-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920908-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920908-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920908-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++/* REPRODUCED:RUN:SIGNAL MACHINE:mips OPTIONS: */
++
++#include <stdarg.h>
++
++typedef struct{int A;}T;
++
++T f(int x,...)
++{
++va_list ap;
++T X;
++va_start(ap,x);
++X=va_arg(ap,T);
++if(X.A!=10)abort();
++X=va_arg(ap,T);
++if(X.A!=20)abort();
++va_end(ap);
++return X;
++}
++
++main()
++{
++T X,Y;
++int i;
++X.A=10;
++Y.A=20;
++f(2,X,Y);
++exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920908-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920908-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920908-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920908-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++CONF:m68k-sun-sunos4.1.1
++OPTIONS:-O
++*/
++struct T
++{
++unsigned i:8;
++unsigned c:24;
++};
++f(struct T t)
++{
++struct T s[1];
++s[0]=t;
++return(char)s->c;
++}
++main()
++{
++struct T t;
++t.i=0xff;
++t.c=0xffff11;
++if(f(t)!=0x11)abort();
++exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920909-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920909-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920909-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920909-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++f(a){switch(a){case 0x402:return a+1;case 0x403:return a+2;case 0x404:return a+3;case 0x405:return a+4;case 0x406:return 1;case 0x407:return 4;}return 0;}
++main(){if(f(1))abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920922-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920922-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920922-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920922-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++unsigned long*
++f(p)unsigned long*p;
++{
++ unsigned long a = (*p++) >> 24;
++ return p + a;
++}
++
++main ()
++{
++ unsigned long x = 0x80000000UL;
++ if (f(&x) != &x + 0x81)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920929-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920929-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/920929-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/920929-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++/* REPRODUCED:RUN:SIGNAL MACHINE:sparc OPTIONS: */
++f(int n)
++{
++int i;
++double v[n];
++for(i=0;i<n;i++)
++v[i]=0;
++}
++main()
++{
++f(100);
++exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921006-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921006-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921006-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921006-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++/* REPRODUCED:RUN:SIGNAL MACHINE:i386 OPTIONS:-O */
++main()
++{
++if(strcmp("X","")<0)abort();
++exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921007-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921007-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921007-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921007-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++static int strcmp(){return-1;}
++#define strcmp __builtin_strcmp
++main()
++{
++if(strcmp("X","X\376")>=0)abort();
++exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921013-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921013-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921013-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921013-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++f(d,x,y,n)
++int*d;
++float*x,*y;
++int n;
++{
++ while(n--){*d++=*x++==*y++;}
++}
++
++main()
++{
++ int r[4];
++ float a[]={5,1,3,5};
++ float b[]={2,4,3,0};
++ int i;
++ f(r,a,b,4);
++ for(i=0;i<4;i++)
++ if((a[i]==b[i])!=r[i])
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921016-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921016-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921016-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921016-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++main()
++{
++int j=1081;
++struct
++{
++signed int m:11;
++}l;
++if((l.m=j)==j)abort();
++exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921017-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921017-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921017-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921017-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f(n)
++{
++ int a[n];
++ int g(i)
++ {
++ return a[i];
++ }
++ a[1]=4711;
++ return g(1);
++}
++main()
++{
++ if(f(2)!=4711)abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921019-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921019-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921019-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921019-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++void *foo[]={(void *)&("X"[0])};
++
++main ()
++{
++ if (((char*)foo[0])[0] != 'X')
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921019-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921019-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921019-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921019-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++main()
++{
++ double x,y=0.5;
++ x=y/0.2;
++ if(x!=x)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921029-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921029-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921029-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921029-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++typedef unsigned long long ULL;
++ULL back;
++ULL hpart, lpart;
++ULL
++build(long h, long l)
++{
++ hpart = h;
++ hpart <<= 32;
++ lpart = l;
++ lpart &= 0xFFFFFFFFLL;
++ back = hpart | lpart;
++ return back;
++}
++
++main()
++{
++ if (build(0, 1) != 0x0000000000000001LL)
++ abort();
++ if (build(0, 0) != 0x0000000000000000LL)
++ abort();
++ if (build(0, 0xFFFFFFFF) != 0x00000000FFFFFFFFLL)
++ abort();
++ if (build(0, 0xFFFFFFFE) != 0x00000000FFFFFFFELL)
++ abort();
++ if (build(1, 1) != 0x0000000100000001LL)
++ abort();
++ if (build(1, 0) != 0x0000000100000000LL)
++ abort();
++ if (build(1, 0xFFFFFFFF) != 0x00000001FFFFFFFFLL)
++ abort();
++ if (build(1, 0xFFFFFFFE) != 0x00000001FFFFFFFELL)
++ abort();
++ if (build(0xFFFFFFFF, 1) != 0xFFFFFFFF00000001LL)
++ abort();
++ if (build(0xFFFFFFFF, 0) != 0xFFFFFFFF00000000LL)
++ abort();
++ if (build(0xFFFFFFFF, 0xFFFFFFFF) != 0xFFFFFFFFFFFFFFFFLL)
++ abort();
++ if (build(0xFFFFFFFF, 0xFFFFFFFE) != 0xFFFFFFFFFFFFFFFELL)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921104-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921104-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921104-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921104-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++main ()
++{
++ unsigned long val = 1;
++
++ if (val > (unsigned long) ~0)
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921110-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921110-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921110-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921110-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++extern int abort();
++typedef int (*frob)();
++frob f[] = {abort};
++main()
++{
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921112-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921112-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921112-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921112-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++union u {
++ struct { int i1, i2; } t;
++ double d;
++} x[2], v;
++
++f (x, v)
++ union u *x, v;
++{
++ *++x = v;
++}
++
++main()
++{
++ x[1].t.i1 = x[1].t.i2 = 0;
++ v.t.i1 = 1;
++ v.t.i2 = 2;
++ f (x, v);
++ if (x[1].t.i1 != 1 || x[1].t.i2 != 2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921113-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921113-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921113-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921113-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++#define STACK_REQUIREMENT (128 * 128 * 4 + 1024)
++#if defined (STACK_SIZE) && STACK_SIZE < STACK_REQUIREMENT
++main () { exit (0); }
++#else
++
++typedef struct {
++ float wsx;
++} struct_list;
++
++typedef struct_list *list_t;
++
++typedef struct {
++ float x, y;
++} vector_t;
++
++w(float x, float y) {}
++
++f1(float x, float y)
++{
++ if (x != 0 || y != 0)
++ abort();
++}
++f2(float x, float y)
++{
++ if (x != 1 || y != 1)
++ abort();
++}
++
++gitter(int count, vector_t pos[], list_t list, int *nww, vector_t limit[2], float r)
++{
++ float d;
++ int gitt[128][128];
++
++ f1(limit[0].x, limit[0].y);
++ f2(limit[1].x, limit[1].y);
++
++ *nww = 0;
++
++ d = pos[0].x;
++ if (d <= 0.)
++ {
++ w(d, r);
++ if (d <= r * 0.5)
++ {
++ w(d, r);
++ list[0].wsx = 1;
++ }
++ }
++}
++
++vector_t pos[1] = {{0., 0.}};
++vector_t limit[2] = {{0.,0.},{1.,1.}};
++
++main()
++{
++ int nww;
++ struct_list list;
++
++ gitter(1, pos, &list, &nww, limit, 1.);
++ exit(0);
++}
++
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921117-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921117-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921117-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921117-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++struct s {
++ char text[11];
++ int flag;
++} cell;
++
++int
++check (struct s p)
++{
++ if (p.flag != 99)
++ return 1;
++ return strcmp (p.text, "0123456789");
++}
++
++main ()
++{
++ cell.flag = 99;
++ strcpy (cell.text, "0123456789");
++
++ if (check (cell))
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921123-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921123-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921123-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921123-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++f(short *p)
++{
++ short x = *p;
++ return (--x < 0);
++}
++
++main()
++{
++ short x = -10;
++ if (!f(&x))
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921123-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921123-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921123-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921123-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++typedef struct
++{
++ unsigned short b0, b1, b2, b3;
++} four_quarters;
++
++four_quarters x;
++int a, b;
++
++void f (four_quarters j)
++{
++ b = j.b2;
++ a = j.b3;
++}
++
++main ()
++{
++ four_quarters x;
++ x.b0 = x.b1 = x.b2 = 0;
++ x.b3 = 38;
++ f(x);
++ if (a != 38)
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921124-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921124-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921124-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921124-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++f(x, d1, d2, d3)
++ double d1, d2, d3;
++{
++ return x;
++}
++
++g(b,s,x,y,i,j)
++ char *b,*s;
++ double x,y;
++{
++ if (x != 1.0 || y != 2.0 || i != 3 || j != 4)
++ abort();
++}
++
++main()
++{
++ g("","", 1.0, 2.0, f(3, 0.0, 0.0, 0.0), f(4, 0.0, 0.0, 0.0));
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921202-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921202-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921202-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921202-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++main ()
++{
++ long dx[2055];
++ long dy[2055];
++ long s1[2055];
++ int cyx, cyy;
++ int i;
++ long size;
++
++ for (;;)
++ {
++ size = 2055;
++ mpn_random2 (s1, size);
++
++ for (i = 0; i < 1; i++)
++ ;
++
++ dy[size] = 0x12345678;
++
++ for (i = 0; i < 1; i++)
++ cyy = mpn_mul_1 (dy, s1, size);
++
++ if (cyx != cyy || mpn_cmp (dx, dy, size + 1) != 0 || dx[size] != 0x12345678)
++ {
++ foo ("", 8, cyy); mpn_print (dy, size);
++ }
++ exxit();
++ }
++}
++
++foo (){}
++mpn_mul_1(){}
++mpn_print (){}
++mpn_random2(){}
++mpn_cmp(){}
++exxit(){exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921202-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921202-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921202-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921202-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++int
++f(long long x)
++{
++ x >>= 8;
++ return x & 0xff;
++}
++
++main()
++{
++ if (f(0x0123456789ABCDEFLL) != 0xCD)
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921204-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921204-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921204-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921204-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++typedef struct {
++ unsigned b0:1, f1:17, b18:1, b19:1, b20:1, f2:11;
++} bf;
++
++typedef union {
++ bf b;
++ unsigned w;
++} bu;
++
++bu
++f(bu i)
++{
++ bu o = i;
++
++ if (o.b.b0)
++ o.b.b18 = 1,
++ o.b.b20 = 1;
++ else
++ o.b.b18 = 0,
++ o.b.b20 = 0;
++
++ return o;
++}
++
++main()
++{
++ bu a;
++ bu r;
++
++ a.w = 0x4000000;
++ a.b.b0 = 0;
++ r = f(a);
++ if (a.w != r.w)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921207-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921207-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921207-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921207-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f()
++{
++ unsigned b = 0;
++
++ if (b > ~0U)
++ b = ~0U;
++
++ return b;
++}
++main()
++{
++ if (f()!=0)
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921208-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921208-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921208-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921208-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++double
++f(double x)
++{
++ return x*x;
++}
++
++double
++Int(double (*f)(double), double a)
++{
++ return (*f)(a);
++}
++
++main()
++{
++ if (Int(&f,2.0) != 4.0)
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921208-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921208-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921208-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921208-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++#define STACK_REQUIREMENT (100000 * 4 + 1024)
++#if defined (STACK_SIZE) && STACK_SIZE < STACK_REQUIREMENT
++main () { exit (0); }
++#else
++
++g(){}
++
++f()
++{
++ int i;
++ float a[100000];
++
++ for (i = 0; i < 1; i++)
++ {
++ g(1.0, 1.0 + i / 2.0 * 3.0);
++ g(2.0, 1.0 + i / 2.0 * 3.0);
++ }
++}
++
++main ()
++{
++ f();
++ exit(0);
++}
++
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921215-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921215-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921215-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921215-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++main()
++{
++#ifndef NO_TRAMPOLINES
++ void p(void ((*f) (void ())))
++ {
++ void r()
++ {
++ foo ();
++ }
++
++ f(r);
++ }
++
++ void q(void ((*f)()))
++ {
++ f();
++ }
++
++ p(q);
++#endif
++ exit(0);
++}
++
++foo(){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921218-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921218-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921218-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921218-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f()
++{
++ return (unsigned char)("\377"[0]);
++}
++
++main()
++{
++ if (f() != (unsigned char)(0377))
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921218-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921218-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/921218-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/921218-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++f()
++{
++ long l2;
++ unsigned short us;
++ unsigned long ul;
++ short s2;
++
++ ul = us = l2 = s2 = -1;
++ return ul;
++}
++
++main()
++{
++ if (f()!=(unsigned short)-1)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930106-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930106-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930106-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930106-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++#if defined (STACK_SIZE)
++#define DUMMY_SIZE 9
++#else
++#define DUMMY_SIZE 399999
++#endif
++
++double g()
++{
++ return 1.0;
++}
++
++f()
++{
++ char dummy[DUMMY_SIZE];
++ double f1, f2, f3;
++ f1 = g();
++ f2 = g();
++ f3 = g();
++ return f1 + f2 + f3;
++}
++
++main()
++{
++ if (f() != 3.0)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930111-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930111-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930111-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930111-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++main()
++{
++ if (wwrite((long long) 0) != 123)
++ abort();
++ exit(0);
++}
++
++int
++wwrite(long long i)
++{
++ switch(i)
++ {
++ case 3:
++ case 10:
++ case 23:
++ case 28:
++ case 47:
++ return 0;
++ default:
++ return 123;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930123-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930123-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930123-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930123-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++f(int *x)
++{
++ *x = 0;
++}
++
++main()
++{
++ int s, c, x;
++ char a[] = "c";
++
++ f(&s);
++ a[c = 0] = s == 0 ? (x=1, 'a') : (x=2, 'b');
++ if (a[c] != 'a')
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930126-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930126-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930126-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930126-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++struct s {
++ unsigned long long a:8, b:32;
++};
++
++struct s
++f(struct s x)
++{
++ x.b = 0xcdef1234;
++ return x;
++}
++
++main()
++{
++ static struct s i;
++ i.a = 12;
++ i = f(i);
++ if (i.a != 12 || i.b != 0xcdef1234)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930208-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930208-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930208-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930208-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++typedef union {
++ long l;
++ struct { char b3, b2, b1, b0; } c;
++} T;
++
++f (T u)
++{
++ ++u.c.b0;
++ ++u.c.b3;
++ return (u.c.b1 != 2 || u.c.b2 != 2);
++}
++
++main ()
++{
++ T u;
++ u.c.b1 = 2;
++ u.c.b2 = 2;
++ u.c.b0 = ~0;
++ u.c.b3 = ~0;
++ if (f (u))
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930406-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930406-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930406-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930406-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++f()
++{
++ int x = 1;
++ char big[0x1000];
++
++ ({
++ __label__ mylabel;
++ mylabel:
++ x++;
++ if (x != 3)
++ goto mylabel;
++ });
++ exit(0);
++}
++
++main()
++{
++ f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930408-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930408-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930408-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930408-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++typedef enum foo E;
++enum foo { e0, e1 };
++
++struct {
++ E eval;
++} s;
++
++p()
++{
++ abort();
++}
++
++f()
++{
++ switch (s.eval)
++ {
++ case e0:
++ p();
++ }
++}
++
++main()
++{
++ s.eval = e1;
++ f();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930429-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930429-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930429-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930429-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++char *
++f (char *p)
++{
++ short x = *p++ << 16;
++ return p;
++}
++
++main ()
++{
++ char *p = "";
++ if (f (p) != p + 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930429-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930429-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930429-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930429-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++int
++f (b)
++{
++ return (b >> 1) > 0;
++}
++
++main ()
++{
++ if (!f (9))
++ abort ();
++ if (f (-9))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930513-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930513-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930513-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930513-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++#include <stdio.h>
++char buf[2];
++
++f (fp)
++ int (*fp)(char *, const char *, ...);
++{
++ (*fp)(buf, "%.0f", 5.0);
++}
++
++main ()
++{
++ f (&sprintf);
++ if (buf[0] != '5' || buf[1] != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930513-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930513-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930513-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930513-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++sub3 (i)
++ const int *i;
++{
++}
++
++eq (a, b)
++{
++ static int i = 0;
++ if (a != i)
++ abort ();
++ i++;
++}
++
++main ()
++{
++ int i;
++
++ for (i = 0; i < 4; i++)
++ {
++ const int j = i;
++ int k;
++ sub3 (&j);
++ k = j;
++ eq (k, k);
++ }
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930518-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930518-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930518-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930518-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++int bar = 0;
++
++f (p)
++ int *p;
++{
++ int foo = 2;
++
++ while (foo > bar)
++ {
++ foo -= bar;
++ *p++ = foo;
++ bar = 1;
++ }
++}
++
++main ()
++{
++ int tab[2];
++ tab[0] = tab[1] = 0;
++ f (tab);
++ if (tab[0] != 2 || tab[1] != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930526-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930526-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930526-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930526-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++inline
++f (x)
++{
++ int *(p[25]);
++ int m[25*7];
++ int i;
++
++ for (i = 0; i < 25; i++)
++ p[i] = m + x*i;
++
++ p[1][0] = 0;
++}
++
++main ()
++{
++ f (7);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930527-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930527-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930527-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930527-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f (unsigned char x)
++{
++ return (0x50 | (x >> 4)) ^ 0xff;
++}
++
++main ()
++{
++ if (f (0) != 0xaf)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930529-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930529-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930529-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930529-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++dd (x,d) { return x / d; }
++
++main ()
++{
++ int i;
++ for (i = -3; i <= 3; i++)
++ {
++ if (dd (i, 1) != i / 1)
++ abort ();
++ if (dd (i, 2) != i / 2)
++ abort ();
++ if (dd (i, 3) != i / 3)
++ abort ();
++ if (dd (i, 4) != i / 4)
++ abort ();
++ if (dd (i, 5) != i / 5)
++ abort ();
++ if (dd (i, 6) != i / 6)
++ abort ();
++ if (dd (i, 7) != i / 7)
++ abort ();
++ if (dd (i, 8) != i / 8)
++ abort ();
++ }
++ for (i = ((unsigned) ~0 >> 1) - 3; i <= ((unsigned) ~0 >> 1) + 3; i++)
++ {
++ if (dd (i, 1) != i / 1)
++ abort ();
++ if (dd (i, 2) != i / 2)
++ abort ();
++ if (dd (i, 3) != i / 3)
++ abort ();
++ if (dd (i, 4) != i / 4)
++ abort ();
++ if (dd (i, 5) != i / 5)
++ abort ();
++ if (dd (i, 6) != i / 6)
++ abort ();
++ if (dd (i, 7) != i / 7)
++ abort ();
++ if (dd (i, 8) != i / 8)
++ abort ();
++ }
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930603-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930603-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930603-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930603-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++float fx (x)
++ float x;
++{
++ return 1.0 + 3.0 / (2.302585093 * x);
++}
++
++main ()
++{
++ float fx (), inita (), initc (), a, b, c;
++ a = inita ();
++ c = initc ();
++ f ();
++ b = fx (c) + a;
++ f ();
++ if (a != 3.0 || b < 4.3257 || b > 4.3258 || c != 4.0)
++ abort ();
++ exit (0);
++}
++
++float inita () { return 3.0; }
++float initc () { return 4.0; }
++f () {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930603-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930603-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930603-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930603-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++int w[2][2];
++
++f ()
++{
++ int i, j;
++
++ for (i = 0; i < 2; i++)
++ for (j = 0; j < 2; j++)
++ if (i == j)
++ w[i][j] = 1;
++}
++
++main ()
++{
++ f ();
++ if (w[0][0] != 1 || w[1][1] != 1 || w[1][0] != 0 || w[0][1] != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930603-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930603-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930603-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930603-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++f (b, c)
++ unsigned char *b;
++ int c;
++{
++ unsigned long v = 0;
++ switch (c)
++ {
++ case 'd':
++ v = ((unsigned long)b[0] << 8) + b[1];
++ v >>= 9;
++ break;
++
++ case 'k':
++ v = b[3] >> 4;
++ break;
++
++ default:
++ abort ();
++ }
++
++ return v;
++}
++main ()
++{
++ char buf[4];
++ buf[0] = 170; buf[1] = 5;
++ if (f (buf, 'd') != 85)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930608-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930608-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930608-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930608-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++double f (double a) {}
++double (* const a[]) (double) = {&f};
++
++main ()
++{
++ double (*p) ();
++ p = &f;
++ if (p != a[0])
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930614-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930614-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930614-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930614-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++f (double *ty)
++{
++ *ty = -1.0;
++}
++
++main ()
++{
++ double foo[6];
++ double tx = 0.0, ty, d;
++
++ f (&ty);
++
++ if (ty < 0)
++ ty = -ty;
++ d = (tx > ty) ? tx : ty;
++ if (ty != d)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930614-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930614-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930614-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930614-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++main ()
++{
++ int i, j, k, l;
++ float x[8][2][8][2];
++
++ for (i = 0; i < 8; i++)
++ for (j = i; j < 8; j++)
++ for (k = 0; k < 2; k++)
++ for (l = 0; l < 2; l++)
++ {
++ if ((i == j) && (k == l))
++ x[i][k][j][l] = 0.8;
++ else
++ x[i][k][j][l] = 0.8;
++ if (x[i][k][j][l] < 0.0)
++ abort ();
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930621-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930621-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930621-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930621-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++f ()
++{
++ struct {
++ int x : 18;
++ int y : 14;
++ } foo;
++
++ foo.x = 10;
++ foo.y = 20;
++
++ return foo.y;
++}
++
++main ()
++{
++ if (f () != 20)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930622-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930622-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930622-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930622-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++int a = 1, b;
++
++g () { return 0; }
++h (x) {}
++
++f ()
++{
++ if (g () == -1)
++ return 0;
++ a = g ();
++ if (b >= 1)
++ h (a);
++ return 0;
++}
++
++main ()
++{
++ f ();
++ if (a != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930622-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930622-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930622-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930622-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++long double
++ll_to_ld (long long n)
++{
++ return n;
++}
++
++long long
++ld_to_ll (long double n)
++{
++ return n;
++}
++
++main ()
++{
++ long long n;
++
++ if (ll_to_ld (10LL) != 10.0)
++ abort ();
++
++ if (ld_to_ll (10.0) != 10)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930628-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930628-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930628-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930628-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++f (double x[2], double y[2])
++{
++ if (x == y)
++ abort ();
++}
++
++main ()
++{
++ struct { int f[3]; double x[1][2]; } tp[4][2];
++ int i, j, ki, kj, mi, mj;
++ float bdm[4][2][4][2];
++
++ for (i = 0; i < 4; i++)
++ for (j = i; j < 4; j++)
++ for (ki = 0; ki < 2; ki++)
++ for (kj = 0; kj < 2; kj++)
++ if ((j == i) && (ki == kj))
++ bdm[i][ki][j][kj] = 1000.0;
++ else
++ {
++ for (mi = 0; mi < 1; mi++)
++ for (mj = 0; mj < 1; mj++)
++ f (tp[i][ki].x[mi], tp[j][kj].x[mj]);
++ bdm[i][ki][j][kj] = 1000.0;
++ }
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930630-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930630-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930630-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930630-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++main ()
++{
++ struct
++ {
++ signed int bf0:17;
++ signed int bf1:7;
++ } bf;
++
++ bf.bf1 = 7;
++ f (bf.bf1);
++ exit (0);
++}
++
++f (x)
++ int x;
++{
++ if (x != 7)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930702-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930702-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930702-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930702-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++fp (double a, int b)
++{
++ if (a != 33 || b != 11)
++ abort ();
++}
++
++main ()
++{
++ int (*f) (double, int) = fp;
++
++ fp (33, 11);
++ f (33, 11);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930713-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930713-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930713-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930713-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++typedef struct
++{
++ char x;
++} T;
++
++T
++f (s1)
++ T s1;
++{
++ T s1a;
++ s1a.x = 17;
++ return s1a;
++}
++
++main ()
++{
++ T s1a, s1b;
++ s1a.x = 13;
++ s1b = f (s1a);
++ if (s1a.x != 13 || s1b.x != 17)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930718-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930718-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930718-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930718-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++typedef struct rtx_def
++{
++ int f1 :1;
++ int f2 :1;
++} *rtx;
++
++static rtx
++f (orig)
++ register rtx orig;
++{
++ if (orig->f1 || orig->f2)
++ return orig;
++ orig->f2 = 1;
++ return orig;
++}
++
++void
++f2 ()
++{
++ abort ();
++}
++
++main ()
++{
++ struct rtx_def foo;
++ rtx bar;
++
++ foo.f1 = 1;
++ foo.f2 = 0;
++ bar = f (&foo);
++ if (bar != &foo || bar->f2 != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930719-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930719-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930719-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930719-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++int
++f (foo, bar, com)
++{
++ unsigned align;
++ if (foo)
++ return 0;
++ while (1)
++ {
++ switch (bar)
++ {
++ case 1:
++ if (com != 0)
++ return align;
++ *(char *) 0 = 0;
++ }
++ }
++}
++
++main ()
++{
++ f (0, 1, 1);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930725-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930725-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930725-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930725-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++int v;
++
++char *
++g ()
++{
++ return "";
++}
++
++char *
++f ()
++{
++ return (v == 0 ? g () : "abc");
++}
++
++main ()
++{
++ v = 1;
++ if (!strcmp (f (), "abc"))
++ exit (0);
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930818-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930818-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930818-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930818-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++static double one = 1.0;
++
++f()
++{
++ int colinear;
++ colinear = (one == 0.0);
++ if (colinear)
++ abort ();
++ return colinear;
++}
++main()
++{
++ if (f()) abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930916-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930916-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930916-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930916-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++f (n)
++ unsigned n;
++{
++ if ((int) n >= 0)
++ abort ();
++}
++
++main ()
++{
++ unsigned x = ~0;
++ f (x);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930921-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930921-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930921-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930921-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f (x)
++ unsigned x;
++{
++ return (unsigned) (((unsigned long long) x * 0xAAAAAAAB) >> 32) >> 1;
++}
++
++main ()
++{
++ unsigned i;
++
++ for (i = 0; i < 10000; i++)
++ if (f (i) != i / 3)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930929-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930929-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930929-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930929-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++sub1 (i)
++ int i;
++{
++ return i - (5 - i);
++}
++
++sub2 (i)
++ int i;
++{
++ return i + (5 + i);
++}
++
++sub3 (i)
++ int i;
++{
++ return i - (5 + i);
++}
++
++sub4 (i)
++ int i;
++{
++ return i + (5 - i);
++}
++
++main()
++{
++ if (sub1 (20) != 35)
++ abort ();
++ if (sub2 (20) != 45)
++ abort ();
++ if (sub3 (20) != -5)
++ abort ();
++ if (sub4 (20) != 5)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930930-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930930-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930930-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930930-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++long *wm_TR;
++long *wm_HB;
++long *wm_SPB;
++
++long mem[100];
++
++f (mr_TR, mr_SPB, mr_HB, reg1, reg2)
++ long *mr_TR;
++ long *mr_SPB;
++ long *mr_HB;
++ long *reg1;
++ long *reg2;
++{
++ long *x = mr_TR;
++
++ for (;;)
++ {
++ if (reg1 < reg2)
++ goto out;
++ if ((long *) *reg1 < mr_HB && (long *) *reg1 >= mr_SPB)
++ *--mr_TR = *reg1;
++ reg1--;
++ }
++ out:
++
++ if (x != mr_TR)
++ abort ();
++}
++
++main ()
++{
++ mem[99] = (long) mem;
++ f (mem + 100, mem + 6, mem + 8, mem + 99, mem + 99);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930930-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930930-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/930930-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/930930-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++int
++test_endianness()
++{
++ union doubleword
++ {
++ double d;
++ unsigned long u[2];
++ } dw;
++ dw.d = 10;
++ return dw.u[0] != 0 ? 1 : 0;
++}
++
++int
++test_endianness_vol()
++{
++ union doubleword
++ {
++ volatile double d;
++ volatile long u[2];
++ } dw;
++ dw.d = 10;
++ return dw.u[0] != 0 ? 1 : 0;
++}
++
++main ()
++{
++ if (test_endianness () != test_endianness_vol ())
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931002-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931002-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931002-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931002-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++f (void (*func) ())
++{
++ func ();
++}
++
++main ()
++{
++#ifndef NO_TRAMPOLINES
++ void t0 ()
++ {
++ }
++
++ void t1 ()
++ {
++ f (t0);
++ }
++
++ void t2 ()
++ {
++ t1 ();
++ }
++
++ t1 ();
++ t1 ();
++ t2 ();
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-10.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-10.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-10.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-10.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ char c;
++ char d;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ if (x.d != i + 20)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-11.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-11.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-11.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-11.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++struct tiny
++{
++ char c;
++ char d;
++ char e;
++};
++
++f (int n, struct tiny x, struct tiny y, struct tiny z, long l)
++{
++ if (x.c != 10)
++ abort();
++ if (x.d != 20)
++ abort();
++ if (x.e != 30)
++ abort();
++
++ if (y.c != 11)
++ abort();
++ if (y.d != 21)
++ abort();
++ if (y.e != 31)
++ abort();
++
++ if (z.c != 12)
++ abort();
++ if (z.d != 22)
++ abort();
++ if (z.e != 32)
++ abort();
++
++ if (l != 123)
++ abort ();
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ x[0].e = 30;
++ x[1].e = 31;
++ x[2].e = 32;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-12.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-12.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-12.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-12.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ char c;
++ char d;
++ char e;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ if (x.d != i + 20)
++ abort();
++ if (x.e != i + 30)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ x[0].e = 30;
++ x[1].e = 31;
++ x[2].e = 32;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-13.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-13.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-13.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-13.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,60 @@
++struct tiny
++{
++ char c;
++ char d;
++ char e;
++ char f;
++};
++
++f (int n, struct tiny x, struct tiny y, struct tiny z, long l)
++{
++ if (x.c != 10)
++ abort();
++ if (x.d != 20)
++ abort();
++ if (x.e != 30)
++ abort();
++ if (x.f != 40)
++ abort();
++
++ if (y.c != 11)
++ abort();
++ if (y.d != 21)
++ abort();
++ if (y.e != 31)
++ abort();
++ if (y.f != 41)
++ abort();
++
++ if (z.c != 12)
++ abort();
++ if (z.d != 22)
++ abort();
++ if (z.e != 32)
++ abort();
++ if (z.f != 42)
++ abort();
++
++ if (l != 123)
++ abort ();
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ x[0].e = 30;
++ x[1].e = 31;
++ x[2].e = 32;
++ x[0].f = 40;
++ x[1].f = 41;
++ x[2].f = 42;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-14.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-14.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-14.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-14.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ char c;
++ char d;
++ char e;
++ char f;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ if (x.d != i + 20)
++ abort();
++ if (x.e != i + 30)
++ abort();
++ if (x.f != i + 40)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ x[0].e = 30;
++ x[1].e = 31;
++ x[2].e = 32;
++ x[0].f = 40;
++ x[1].f = 41;
++ x[2].f = 42;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++struct tiny
++{
++ int c;
++};
++
++f (int n, struct tiny x, struct tiny y, struct tiny z, long l)
++{
++ if (x.c != 10)
++ abort();
++
++ if (y.c != 11)
++ abort();
++
++ if (z.c != 12)
++ abort();
++
++ if (l != 123)
++ abort ();
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ int c;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++struct tiny
++{
++ short c;
++};
++
++f (int n, struct tiny x, struct tiny y, struct tiny z, long l)
++{
++ if (x.c != 10)
++ abort();
++
++ if (y.c != 11)
++ abort();
++
++ if (z.c != 12)
++ abort();
++
++ if (l != 123)
++ abort ();
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ short c;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++struct tiny
++{
++ short c;
++ short d;
++};
++
++f (int n, struct tiny x, struct tiny y, struct tiny z, long l)
++{
++ if (x.c != 10)
++ abort();
++ if (x.d != 20)
++ abort();
++
++ if (y.c != 11)
++ abort();
++ if (y.d != 21)
++ abort();
++
++ if (z.c != 12)
++ abort();
++ if (z.d != 22)
++ abort();
++
++ if (l != 123)
++ abort ();
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ short c;
++ short d;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ if (x.d != i + 20)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-7.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-7.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-7.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-7.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++struct tiny
++{
++ char c;
++};
++
++f (int n, struct tiny x, struct tiny y, struct tiny z, long l)
++{
++ if (x.c != 10)
++ abort();
++
++ if (y.c != 11)
++ abort();
++
++ if (z.c != 12)
++ abort();
++
++ if (l != 123)
++ abort ();
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-8.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-8.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-8.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-8.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ char c;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-9.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-9.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931004-9.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931004-9.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++struct tiny
++{
++ char c;
++ char d;
++};
++
++f (int n, struct tiny x, struct tiny y, struct tiny z, long l)
++{
++ if (x.c != 10)
++ abort();
++ if (x.d != 20)
++ abort();
++
++ if (y.c != 11)
++ abort();
++ if (y.d != 21)
++ abort();
++
++ if (z.c != 12)
++ abort();
++ if (z.d != 22)
++ abort();
++
++ if (l != 123)
++ abort ();
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931005-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931005-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931005-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931005-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++typedef struct
++{
++ char x;
++} T;
++
++T
++f (s1)
++ T s1;
++{
++ T s1a;
++ s1a.x = s1.x;
++ return s1a;
++}
++
++main ()
++{
++ T s1a, s1b;
++ s1a.x = 100;
++ s1b = f (s1a);
++ if (s1b.x != 100)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931009-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931009-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931009-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931009-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++main ()
++{
++ f ();
++ exit (0);
++}
++
++static
++g (out, size, lo, hi)
++ int *out, size, lo, hi;
++{
++ int j;
++
++ for (j = 0; j < size; j++)
++ out[j] = j * (hi - lo);
++}
++
++
++f ()
++{
++ int a[2];
++
++ g (a, 2, 0, 1);
++
++ if (a[0] != 0 || a[1] != 1)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931012-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931012-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931012-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931012-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++f (int b, int c)
++{
++ if (b != 0 && b != 1 && c != 0)
++ b = 0;
++ return b;
++}
++
++main ()
++{
++ if (!f (1, 2))
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931017-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931017-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931017-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931017-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++int v;
++
++main ()
++{
++ f ();
++ exit (0);
++}
++
++h1 ()
++{
++ return 0;
++}
++
++h2 (e)
++ int *e;
++{
++ if (e != &v)
++ abort ();
++ return 0;
++}
++
++g (c)
++ char *c;
++{
++ int i;
++ int b;
++
++ do
++ {
++ i = h1 ();
++ if (i == -1)
++ return 0;
++ else if (i == 1)
++ h1 ();
++ }
++ while (i == 1);
++
++ do
++ b = h2 (&v);
++ while (i == 5);
++
++ if (i != 2)
++ return b;
++ *c = 'a';
++
++ return 0;
++}
++
++
++f ()
++{
++ char c;
++ g (&c);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931018-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931018-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931018-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931018-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++unsigned int a[0x1000];
++extern unsigned long v;
++
++main ()
++{
++ f (v);
++ f (v);
++ exit (0);
++}
++
++f (a)
++ unsigned long a;
++{
++ if (a != 0xdeadbeefL)
++ abort();
++}
++
++const unsigned long v = 0xdeadbeefL;
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931031-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931031-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931031-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931031-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++struct foo
++{
++ unsigned y:1;
++ unsigned x:32;
++};
++
++int
++f (x)
++ struct foo x;
++{
++ int t = x.x;
++ if (t < 0)
++ return 1;
++ return t+1;
++}
++
++main ()
++{
++ struct foo x;
++ x.x = -1;
++ if (f (x) == 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931102-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931102-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931102-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931102-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++typedef union
++{
++ struct
++ {
++ char h, l;
++ } b;
++} T;
++
++f (x)
++ int x;
++{
++ int num = 0;
++ T reg;
++
++ reg.b.l = x;
++ while ((reg.b.l & 1) == 0)
++ {
++ num++;
++ reg.b.l >>= 1;
++ }
++ return num;
++}
++
++main ()
++{
++ if (f (2) != 1)
++ abort ();
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931102-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931102-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931102-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931102-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++typedef union
++{
++ long align;
++ struct
++ {
++ short h, l;
++ } b;
++} T;
++
++f (x)
++ int x;
++{
++ int num = 0;
++ T reg;
++
++ reg.b.l = x;
++ while ((reg.b.l & 1) == 0)
++ {
++ num++;
++ reg.b.l >>= 1;
++ }
++ return num;
++}
++
++main ()
++{
++ if (f (2) != 1)
++ abort ();
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931110-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931110-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931110-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931110-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++typedef struct
++{
++ short f:3, g:3, h:10;
++} small;
++
++struct
++{
++ int i;
++ small s[10];
++} x;
++
++main ()
++{
++ int i;
++ for (i = 0; i < 10; i++)
++ x.s[i].f = 0;
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931110-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931110-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931110-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931110-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++main ()
++{
++ static int a[] = {3, 4};
++ register int *b;
++ int c;
++
++ b = a;
++ c = *b++ % 8;
++ if (c != 3)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931208-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931208-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931208-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931208-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++f ()
++{
++ unsigned long x, y = 1;
++
++ x = ((y * 8192) - 216) / 16;
++ return x;
++}
++
++main ()
++{
++ if (f () != 498)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931228-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931228-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/931228-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/931228-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f (x)
++{
++ x &= 010000;
++ x &= 007777;
++ x ^= 017777;
++ x &= 017770;
++ return x;
++}
++
++main ()
++{
++ if (f (-1) != 017770)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/940115-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/940115-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/940115-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/940115-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++f (cp, end)
++ char *cp;
++ char *end;
++{
++ return (cp < end);
++}
++
++main ()
++{
++ if (! f ((char *) 0, (char *) 1))
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/940122-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/940122-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/940122-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/940122-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++char *a = 0;
++char *b = 0;
++
++g (x)
++ int x;
++{
++ if ((!!a) != (!!b))
++ abort ();
++}
++
++f (x)
++ int x;
++{
++ g (x * x);
++}
++
++main ()
++{
++ f (100);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941014-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941014-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941014-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941014-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++int f (int a, int b) { }
++
++main ()
++{
++ unsigned long addr1;
++ unsigned long addr2;
++
++ addr1 = (unsigned long) &f;
++ addr1 += 5;
++ addr2 = 5 + (unsigned long) &f;
++
++ if (addr1 != addr2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941014-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941014-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941014-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941014-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++# This doesn't work for thumb-elf
++
++if { [istarget "thumb-*-elf"] } {
++ set torture_execute_xfail "thumb-*-elf"
++}
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941014-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941014-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941014-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941014-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++#include <stdio.h>
++#include <stdlib.h>
++
++typedef struct {
++ unsigned short a;
++ unsigned short b;
++} foo_t;
++
++void a1 (unsigned long offset) {}
++
++volatile foo_t *
++f ()
++{
++ volatile foo_t *foo_p = (volatile foo_t *)malloc (sizeof (foo_t));
++
++ a1((unsigned long)foo_p-30);
++ if (foo_p->a & 0xf000)
++ printf("%d\n", foo_p->a);
++ foo_p->b = 0x0100;
++ a1 ((unsigned long)foo_p + 2);
++ a1 ((unsigned long)foo_p - 30);
++ return foo_p;
++}
++
++main ()
++{
++ volatile foo_t *foo_p;
++
++ foo_p = f ();
++ if (foo_p->b != 0x0100)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941015-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941015-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941015-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941015-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++int
++foo1 (value)
++ long long value;
++{
++ register const long long constant = 0xc000000080000000LL;
++
++ if (value < constant)
++ return 1;
++ else
++ return 2;
++}
++
++int
++foo2 (value)
++ unsigned long long value;
++{
++ register const unsigned long long constant = 0xc000000080000000LL;
++
++ if (value < constant)
++ return 1;
++ else
++ return 2;
++}
++
++main ()
++{
++ unsigned long long value = 0xc000000000000001LL;
++ int x, y;
++
++ x = foo1 (value);
++ y = foo2 (value);
++ if (x != y || x != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941021-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941021-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941021-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941021-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++double glob_dbl;
++
++f (pdbl, value)
++ double *pdbl;
++ double value;
++{
++ if (pdbl == 0)
++ pdbl = &glob_dbl;
++
++ *pdbl = value;
++}
++
++main ()
++{
++ f ((void *) 0, 55.1);
++
++ if (glob_dbl != 55.1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941025-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941025-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941025-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941025-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++long f (x, y)
++ long x,y;
++{
++ return (x > 1) ? y : (y & 1);
++}
++
++main ()
++{
++ if (f (2L, 0xdecadeL) != 0xdecadeL)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941031-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941031-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941031-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941031-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++typedef long mpt;
++
++int
++f (mpt us, mpt vs)
++{
++ long aus;
++ long avs;
++
++ aus = us >= 0 ? us : -us;
++ avs = vs >= 0 ? vs : -vs;
++
++ if (aus < avs)
++ {
++ long t = aus;
++ aus = avs;
++ avs = aus;
++ }
++
++ return avs;
++}
++
++main ()
++{
++ if (f ((mpt) 3, (mpt) 17) != 17)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941101-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941101-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941101-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941101-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++f ()
++{
++ int var = 7;
++
++ if ((var/7) == 1)
++ return var/7;
++ return 0;
++}
++
++main ()
++{
++ if (f () != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941110-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941110-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941110-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941110-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++f (const int x)
++{
++ int y = 0;
++ y = x ? y : -y;
++ {
++ const int *p = &x;
++ }
++ return y;
++}
++
++main ()
++{
++ if (f (0))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941202-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941202-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/941202-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/941202-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++g (x, y)
++{
++ if (x != 3)
++ abort ();
++}
++
++static inline
++f (int i)
++{
++ int *tmp;
++
++ tmp = (int *) alloca (sizeof (i));
++ *tmp = i;
++ g (*tmp, 0);
++}
++
++main ()
++{
++ f (3);
++ exit (0);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950221-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950221-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950221-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950221-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++struct parsefile
++{
++ long fd;
++ char *buf;
++};
++struct parsefile basepf;
++struct parsefile *parsefile = &basepf;
++#ifdef STACK_SIZE
++int filler[STACK_SIZE / (2*sizeof(int))];
++#else
++int filler[0x3000];
++#endif
++int el;
++
++char *
++g1 (a, b)
++ int a;
++ int *b;
++{
++}
++
++g2 (a)
++ long a;
++{
++ if (a != 0xdeadbeefL)
++ abort ();
++ exit (0);
++}
++
++f ()
++{
++ register char *p, *q;
++ register int i;
++ register int something;
++
++ if (parsefile->fd == 0L && el)
++ {
++ const char *rl_cp;
++ int len;
++ rl_cp = g1 (el, &len);
++ strcpy (p, rl_cp);
++ }
++ else
++ {
++ alabel:
++ i = g2 (parsefile->fd);
++ }
++}
++
++main ()
++{
++ el = 0;
++ parsefile->fd = 0xdeadbeefL;
++ f ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950322-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950322-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950322-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950322-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++f (unsigned char *a)
++{
++ int i, j;
++ int x, y;
++
++ j = a[1];
++ i = a[0] - j;
++ if (i < 0)
++ {
++ x = 1;
++ y = -i;
++ }
++ else
++ {
++ x = 0;
++ y = i;
++ }
++ return x + y;
++}
++
++
++main ()
++{
++ unsigned char a[2];
++ a[0] = 8;
++ a[1] = 9;
++ if (f (a) != 2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950426-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950426-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950426-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950426-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++
++struct tag {
++ int m1;
++ char *m2[5];
++} s1, *p1;
++
++int i;
++
++main()
++{
++ s1.m1 = -1;
++ p1 = &s1;
++
++ if ( func1( &p1->m1 ) == -1 )
++ foo ("ok");
++ else
++ abort ();
++
++ i = 3;
++ s1.m2[3]= "123";
++
++ if ( strlen( (p1->m2[i])++ ) == 3 )
++ foo ("ok");
++ else
++ abort ();
++
++ exit (0);
++}
++
++func1(int *p) { return(*p); }
++
++foo (char *s) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950426-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950426-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950426-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950426-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++main()
++{
++ long int i = -2147483647L - 1L; /* 0x80000000 */
++ char ca = 1;
++
++ if (i >> ca != -1073741824L)
++ abort ();
++
++ if (i >> i / -2000000000L != -1073741824L)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950503-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950503-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950503-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950503-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++main ()
++{
++ int tmp;
++ unsigned long long utmp1, utmp2;
++
++ tmp = 16;
++
++ utmp1 = (~((unsigned long long) 0)) >> tmp;
++ utmp2 = (~((unsigned long long) 0)) >> 16;
++
++ if (utmp1 != utmp2)
++ abort ();
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950511-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950511-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950511-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950511-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++main ()
++{
++ unsigned long long xx;
++ unsigned long long *x = (unsigned long long *) &xx;
++
++ *x = -3;
++ *x = *x * *x;
++ if (*x != 9)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950512-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950512-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950512-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950512-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++unsigned
++f1 (x)
++{
++ return ((unsigned) (x != 0) - 3) / 2;
++}
++
++unsigned long long
++f2 (x)
++{
++ return ((unsigned long long) (x != 0) - 3) / 2;
++}
++
++main ()
++{
++ if (f1 (1) != (~(unsigned) 0) >> 1)
++ abort ();
++ if (f1 (0) != ((~(unsigned) 0) >> 1) - 1)
++ abort ();
++ if (f2 (1) != (~(unsigned long long) 0) >> 1)
++ abort ();
++ if (f2 (0) != ((~(unsigned long long) 0) >> 1) - 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950605-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950605-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950605-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950605-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++f (c)
++ unsigned char c;
++{
++ if (c != 0xFF)
++ abort ();
++}
++
++main ()
++{
++ f (-1);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950607-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950607-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950607-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950607-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++main ()
++{
++ struct { long status; } h;
++
++ h.status = 0;
++ if (((h.status & 128) == 1) && ((h.status & 32) == 0))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950607-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950607-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950607-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950607-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++typedef struct {
++ long int p_x, p_y;
++} Point;
++
++int
++f (Point basePt, Point pt1, Point pt2)
++{
++ long long vector;
++
++ vector =
++ (long long) (pt1.p_x - basePt.p_x) * (long long) (pt2.p_y - basePt.p_y) -
++ (long long) (pt1.p_y - basePt.p_y) * (long long) (pt2.p_x - basePt.p_x);
++
++ if (vector > (long long) 0)
++ return 0;
++ else if (vector < (long long) 0)
++ return 1;
++ else
++ return 2;
++}
++
++main ()
++{
++ Point b, p1, p2;
++ int answer;
++
++ b.p_x = -23250;
++ b.p_y = 23250;
++
++ p1.p_x = 23250;
++ p1.p_y = -23250;
++
++ p2.p_x = -23250;
++ p2.p_y = -23250;
++
++ answer = f (b, p1, p2);
++
++ if (answer != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950612-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950612-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950612-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950612-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++unsigned int
++f1 (int diff)
++{
++ return ((unsigned int) (diff < 0 ? -diff : diff));
++}
++
++unsigned int
++f2 (unsigned int diff)
++{
++ return ((unsigned int) ((signed int) diff < 0 ? -diff : diff));
++}
++
++unsigned long long
++f3 (long long diff)
++{
++ return ((unsigned long long) (diff < 0 ? -diff : diff));
++}
++
++unsigned long long
++f4 (unsigned long long diff)
++{
++ return ((unsigned long long) ((signed long long) diff < 0 ? -diff : diff));
++}
++
++main ()
++{
++ int i;
++ for (i = 0; i <= 10; i++)
++ {
++ if (f1 (i) != i)
++ abort ();
++ if (f1 (-i) != i)
++ abort ();
++ if (f2 (i) != i)
++ abort ();
++ if (f2 (-i) != i)
++ abort ();
++ if (f3 ((long long) i) != i)
++ abort ();
++ if (f3 ((long long) -i) != i)
++ abort ();
++ if (f4 ((long long) i) != i)
++ abort ();
++ if (f4 ((long long) -i) != i)
++ abort ();
++ }
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950621-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950621-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950621-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950621-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++struct s
++{
++ int a;
++ int b;
++ struct s *dummy;
++};
++
++f (struct s *sp)
++{
++ return sp && sp->a == -1 && sp->b == -1;
++}
++
++main ()
++{
++ struct s x;
++ x.a = x.b = -1;
++ if (f (&x) == 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950628-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950628-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950628-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950628-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++typedef struct
++{
++ char hours, day, month;
++ short year;
++} T;
++
++T g (void)
++{
++ T now;
++
++ now.hours = 1;
++ now.day = 2;
++ now.month = 3;
++ now.year = 4;
++ return now;
++}
++
++T f (void)
++{
++ T virk;
++
++ virk = g ();
++ return virk;
++}
++
++main ()
++{
++ if (f ().hours != 1 || f ().day != 2 || f ().month != 3 || f ().year != 4)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950704-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950704-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950704-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950704-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,59 @@
++int errflag;
++
++long long
++f (long long x, long long y)
++{
++ long long r;
++
++ errflag = 0;
++ r = x + y;
++ if (x >= 0)
++ {
++ if ((y < 0) || (r >= 0))
++ return r;
++ }
++ else
++ {
++ if ((y > 0) || (r < 0))
++ return r;
++ }
++ errflag = 1;
++ return 0;
++}
++
++main ()
++{
++ f (0, 0);
++ if (errflag)
++ abort ();
++
++ f (1, -1);
++ if (errflag)
++ abort ();
++
++ f (-1, 1);
++ if (errflag)
++ abort ();
++
++ f (0x8000000000000000LL, 0x8000000000000000LL);
++ if (!errflag)
++ abort ();
++
++ f (0x8000000000000000LL, -1LL);
++ if (!errflag)
++ abort ();
++
++ f (0x7fffffffffffffffLL, 0x7fffffffffffffffLL);
++ if (!errflag)
++ abort ();
++
++ f (0x7fffffffffffffffLL, 1LL);
++ if (!errflag)
++ abort ();
++
++ f (0x7fffffffffffffffLL, 0x8000000000000000LL);
++ if (errflag)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950706-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950706-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950706-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950706-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++int
++f (int n)
++{
++ return (n > 0) - (n < 0);
++}
++
++main ()
++{
++ if (f (-1) != -1)
++ abort ();
++ if (f (1) != 1)
++ abort ();
++ if (f (0) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950710-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950710-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950710-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950710-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++struct twelve
++{
++ int a;
++ int b;
++ int c;
++};
++
++struct pair
++{
++ int first;
++ int second;
++};
++
++struct pair
++g ()
++{
++ struct pair p;
++ return p;
++}
++
++static void
++f ()
++{
++ int i;
++ for (i = 0; i < 1; i++)
++ {
++ int j;
++ for (j = 0; j < 1; j++)
++ {
++ if (0)
++ {
++ int k;
++ for (k = 0; k < 1; k++)
++ {
++ struct pair e = g ();
++ }
++ }
++ else
++ {
++ struct twelve a, b;
++ if ((((char *) &b - (char *) &a) < 0
++ ? (-((char *) &b - (char *) &a))
++ : ((char *) &b - (char *) &a)) < sizeof (a))
++ abort ();
++ }
++ }
++ }
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950714-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950714-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950714-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950714-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++int array[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
++
++main ()
++{
++ int i, j;
++ int *p;
++
++ for (i = 0; i < 10; i++)
++ for (p = &array[0]; p != &array[9]; p++)
++ if (*p == i)
++ goto label;
++
++ label:
++ if (i != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950809-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950809-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950809-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950809-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++struct S
++{
++ int *sp, fc, *sc, a[2];
++};
++
++f (struct S *x)
++{
++ int *t = x->sc;
++ int t1 = t[0];
++ int t2 = t[1];
++ int t3 = t[2];
++ int a0 = x->a[0];
++ int a1 = x->a[1];
++ t[2] = t1;
++ t[0] = a1;
++ x->a[1] = a0;
++ x->a[0] = t3;
++ x->fc = t2;
++ x->sp = t;
++}
++
++main ()
++{
++ struct S s;
++ static int sc[3] = {2, 3, 4};
++ s.sc = sc;
++ s.a[0] = 10;
++ s.a[1] = 11;
++ f (&s);
++ if (s.sp[2] != 2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950906-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950906-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950906-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950906-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++g (int i)
++{
++}
++
++f (int i)
++{
++ g (0);
++ while ( ({ i--; }) )
++ g (0);
++}
++
++main ()
++{
++ f (10);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950915-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950915-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950915-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950915-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++long int a = 100000;
++long int b = 21475;
++
++long
++f ()
++{
++ return ((long long) a * (long long) b) >> 16;
++}
++
++main ()
++{
++ if (f () < 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950929-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950929-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/950929-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/950929-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++int f (char *p) { }
++
++main ()
++{
++ char c;
++ char c2;
++ int i = 0;
++ char *pc = &c;
++ char *pc2 = &c2;
++ int *pi = &i;
++
++ *pc2 = 1;
++ *pi = 1;
++ *pc2 &= *pi;
++ f (pc2);
++ *pc2 = 1;
++ *pc2 &= *pi;
++ if (*pc2 != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/951003-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/951003-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/951003-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/951003-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++int f (i) { return 12; }
++int g () { return 0; }
++
++main ()
++{
++ int i, s;
++
++ for (i = 0; i < 32; i++)
++ {
++ s = f (i);
++
++ if (i == g ())
++ s = 42;
++ if (i == 0 || s == 12)
++ ;
++ else
++ abort ();
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/951115-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/951115-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/951115-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/951115-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++int var = 0;
++
++g ()
++{
++ var = 1;
++}
++
++f ()
++{
++ int f2 = 0;
++
++ if (f2 == 0)
++ ;
++
++ g ();
++}
++
++main ()
++{
++ f ();
++ if (var != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/951204-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/951204-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/951204-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/951204-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++f (char *x)
++{
++ *x = 'x';
++}
++
++main ()
++{
++ int i;
++ char x = '\0';
++
++ for (i = 0; i < 100; ++i)
++ {
++ f (&x);
++ if (*(const char *) &x != 'x')
++ abort ();
++ }
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960116-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960116-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960116-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960116-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++static inline
++p (int *p)
++{
++ return !((long) p & 1);
++}
++
++int
++f (int *q)
++{
++ if (p (q) && *q)
++ return 1;
++ return 0;
++}
++
++main ()
++{
++ if (f ((int*) 0xffffffff) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960117-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960117-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960117-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960117-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++static char id_space[2] [32 +1];
++typedef short COUNT;
++
++typedef char TEXT;
++
++union T_VALS
++{
++ TEXT *id __attribute__ ((aligned (2), packed)) ;
++};
++typedef union T_VALS VALS;
++
++struct T_VAL
++{
++ COUNT pos __attribute__ ((aligned (2), packed)) ;
++ VALS vals __attribute__ ((aligned (2), packed)) ;
++};
++typedef struct T_VAL VAL;
++
++VAL curval = {0};
++
++static short idc = 0;
++static int cur_line;
++static int char_pos;
++
++typedef unsigned short WORD;
++
++WORD
++get_id (char c)
++{
++ curval.vals.id[0] = c;
++}
++
++WORD
++get_tok ()
++{
++ char c = 'c';
++ curval.vals.id = id_space[idc];
++ curval.pos = (cur_line << 10) | char_pos;
++ return get_id (c);
++}
++
++main ()
++{
++ get_tok ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960209-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960209-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960209-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960209-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++struct a_struct
++{
++ unsigned char a_character;
++};
++
++struct a_struct an_array[5];
++struct a_struct *a_ptr;
++int yabba = 1;
++
++int
++f (a, b)
++ unsigned char a;
++ unsigned long b;
++{
++ long i, j, p, q, r, s;
++
++ if (b != (unsigned long) 0)
++ {
++ if (yabba)
++ return -1;
++ s = 4000000 / b;
++ for (i = 0; i < 11; i++)
++ {
++ for (j = 0; j < 256; j++)
++ {
++ if (((p - s < 0) ? -s : 0) < (( q - s < 0) ? -s : q))
++ r = i;
++ }
++ }
++ }
++
++ if (yabba)
++ return 0;
++ a_ptr = &an_array[a];
++ a_ptr->a_character = (unsigned char) r;
++}
++
++main ()
++{
++ if (f (1, 0UL) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960215-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960215-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960215-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960215-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++long double C = 2;
++long double U = 1;
++long double Y2 = 3;
++long double Y1 = 1;
++long double X, Y, Z, T, R, S;
++main ()
++{
++ X = (C + U) * Y2;
++ Y = C - U - U;
++ Z = C + U + U;
++ T = (C - U) * Y1;
++ X = X - (Z + U);
++ R = Y * Y1;
++ S = Z * Y2;
++ T = T - Y;
++ Y = (U - Y) + R;
++ Z = S - (Z + U + U);
++ R = (Y2 + U) * Y1;
++ Y1 = Y2 * Y1;
++ R = R - Y2;
++ Y1 = Y1 - 0.5L;
++ if (Z != 6)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960218-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960218-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960218-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960218-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++int glob;
++
++g (x)
++{
++ glob = x;
++ return 0;
++}
++
++f (x)
++{
++ int a = ~x;
++ while (a)
++ a = g (a);
++}
++
++main ()
++{
++ f (3);
++ if (glob != -4)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960219-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960219-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960219-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960219-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f (int i)
++{
++ if (((1 << i) & 1) == 0)
++ abort ();
++}
++
++main ()
++{
++ f (0);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960301-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960301-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960301-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960301-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++struct foo {
++ unsigned : 12;
++ unsigned field : 4;
++} foo;
++unsigned oldfoo;
++
++int
++bar (unsigned k)
++{
++ oldfoo = foo.field;
++ foo.field = k;
++ if (k)
++ return 1;
++ return 2;
++}
++
++main ()
++{
++ if (bar (1U) != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960302-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960302-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960302-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960302-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++long a = 1;
++
++foo ()
++{
++ switch (a % 2 % 2 % 2 % 2 % 2 % 2 % 2 % 2)
++ {
++ case 0:
++ return 0;
++ case 1:
++ return 1;
++ default:
++ return -1;
++ }
++}
++
++main ()
++{
++ if (foo () != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960311-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960311-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960311-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960311-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++#include <stdio.h>
++
++#ifdef DEBUG
++#define abort() printf ("error, line %d\n", __LINE__)
++#endif
++
++int count;
++
++void a1() { ++count; }
++
++void
++b (unsigned char data)
++{
++ if (data & 0x80) a1();
++ data <<= 1;
++
++ if (data & 0x80) a1();
++ data <<= 1;
++
++ if (data & 0x80) a1();
++}
++
++main ()
++{
++ count = 0;
++ b (0);
++ if (count != 0)
++ abort ();
++
++ count = 0;
++ b (0x80);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0x40);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0x20);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0xc0);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0xa0);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0x60);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0xe0);
++ if (count != 3)
++ abort ();
++
++#ifdef DEBUG
++ printf ("Done.\n");
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960311-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960311-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960311-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960311-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++#include <stdio.h>
++
++#ifdef DEBUG
++#define abort() printf ("error, line %d\n", __LINE__)
++#endif
++
++int count;
++
++void a1() { ++count; }
++
++void
++b (unsigned short data)
++{
++ if (data & 0x8000) a1();
++ data <<= 1;
++
++ if (data & 0x8000) a1();
++ data <<= 1;
++
++ if (data & 0x8000) a1();
++}
++
++main ()
++{
++ count = 0;
++ b (0);
++ if (count != 0)
++ abort ();
++
++ count = 0;
++ b (0x8000);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0x4000);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0x2000);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0xc000);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0xa000);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0x6000);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0xe000);
++ if (count != 3)
++ abort ();
++
++#ifdef DEBUG
++ printf ("Done.\n");
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960311-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960311-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960311-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960311-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++#include <stdio.h>
++
++#ifdef DEBUG
++#define abort() printf ("error, line %d\n", __LINE__)
++#endif
++
++int count;
++
++void a1() { ++count; }
++
++void
++b (unsigned long data)
++{
++ if (data & 0x80000000) a1();
++ data <<= 1;
++
++ if (data & 0x80000000) a1();
++ data <<= 1;
++
++ if (data & 0x80000000) a1();
++}
++
++main ()
++{
++ count = 0;
++ b (0);
++ if (count != 0)
++ abort ();
++
++ count = 0;
++ b (0x80000000);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0x40000000);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0x20000000);
++ if (count != 1)
++ abort ();
++
++ count = 0;
++ b (0xc0000000);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0xa0000000);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0x60000000);
++ if (count != 2)
++ abort ();
++
++ count = 0;
++ b (0xe0000000);
++ if (count != 3)
++ abort ();
++
++#ifdef DEBUG
++ printf ("Done.\n");
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960312-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960312-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960312-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960312-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++struct S
++{
++ int *sp, fc, *sc, a[2];
++};
++
++f (struct S *x)
++{
++ int *t = x->sc;
++ int t1 = t[0];
++ int t2 = t[1];
++ int t3 = t[2];
++ int a0 = x->a[0];
++ int a1 = x->a[1];
++ asm("": :"r" (t2), "r" (t3));
++ t[2] = t1;
++ t[0] = a1;
++ x->a[1] = a0;
++ x->a[0] = t3;
++ x->fc = t2;
++ x->sp = t;
++}
++
++main ()
++{
++ struct S s;
++ static int sc[3] = {2, 3, 4};
++ s.sc = sc;
++ s.a[0] = 10;
++ s.a[1] = 11;
++ f (&s);
++ if (s.sp[2] != 2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960317-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960317-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960317-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960317-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++int
++f (unsigned bitcount, int mant)
++{
++ int mask = -1 << bitcount;
++ {
++ if (! (mant & -mask))
++ goto ab;
++ if (mant & ~mask)
++ goto auf;
++ }
++ab:
++ return 0;
++auf:
++ return 1;
++}
++
++main ()
++{
++ if (f (0, -1))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960321-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960321-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960321-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960321-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++char a[10] = "deadbeef";
++
++char
++acc_a (long i)
++{
++ return a[i-2000000000L];
++}
++
++main ()
++{
++ if (acc_a (2000000000L) != 'd')
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960326-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960326-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960326-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960326-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++struct s
++{
++ int a;
++ int b;
++ short c;
++ int d[3];
++};
++
++struct s s = { .b = 3, .d = {2,0,0} };
++
++main ()
++{
++ if (s.b != 3)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960327-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960327-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960327-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960327-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++#include <stdio.h>
++g ()
++{
++ return '\n';
++}
++
++f ()
++{
++ char s[] = "abcedfg01234";
++ char *sp = s + 12;
++
++ switch (g ())
++ {
++ case '\n':
++ break;
++ }
++
++ while (*--sp == '0')
++ ;
++ sprintf (sp + 1, "X");
++
++ if (s[12] != 'X')
++ abort ();
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960402-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960402-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960402-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960402-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f (signed long long int x)
++{
++ return x > 0xFFFFFFFFLL || x < -0x80000000LL;
++}
++
++main ()
++{
++ if (f (0) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960405-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960405-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960405-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960405-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++#define X 5.9486574767861588254287966331400356538172e4931L
++
++long double x = X + X;
++long double y = 2.0L * X;
++
++main ()
++{
++#if ! defined (__vax__) && ! defined (_CRAY)
++ if (x != y)
++ abort ();
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960416-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960416-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960416-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960416-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++typedef unsigned long int st;
++typedef unsigned long long dt;
++typedef union
++{
++ dt d;
++ struct
++ {
++ st h, l;
++ }
++ s;
++} t_be;
++
++typedef union
++{
++ dt d;
++ struct
++ {
++ st l, h;
++ }
++ s;
++} t_le;
++
++#define df(f, t) \
++int \
++f (t afh, t bfh) \
++{ \
++ t hh; \
++ t hp, lp, dp, m; \
++ st ad, bd; \
++ int s; \
++ s = 0; \
++ ad = afh.s.h - afh.s.l; \
++ bd = bfh.s.l - bfh.s.h; \
++ if (bd > bfh.s.l) \
++ { \
++ bd = -bd; \
++ s = ~s; \
++ } \
++ lp.d = (dt) afh.s.l * bfh.s.l; \
++ hp.d = (dt) afh.s.h * bfh.s.h; \
++ dp.d = (dt) ad *bd; \
++ dp.d ^= s; \
++ hh.d = hp.d + hp.s.h + lp.s.h + dp.s.h; \
++ m.d = (dt) lp.s.h + hp.s.l + lp.s.l + dp.s.l; \
++ return hh.s.l + m.s.l; \
++}
++
++df(f_le, t_le)
++df(f_be, t_be)
++
++main ()
++{
++ t_be x;
++ x.s.h = 0x10000000U;
++ x.s.l = 0xe0000000U;
++ if (x.d == 0x10000000e0000000ULL
++ && f_be ((t_be) 0x100000000ULL, (t_be) 0x100000000ULL) != -1)
++ abort ();
++ if (x.d == 0xe000000010000000ULL
++ && f_le ((t_le) 0x100000000ULL, (t_le) 0x100000000ULL) != -1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960419-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960419-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960419-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960419-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++static int i;
++
++void
++check(x)
++ int x;
++{
++ if (!x)
++ abort();
++}
++
++main()
++{
++ int *p = &i;
++
++ check(p != (void *)0);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960419-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960419-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960419-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960419-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++#define SIZE 8
++
++main()
++{
++ int a[SIZE] = {1};
++ int i;
++
++ for (i = 1; i < SIZE; i++)
++ if (a[i] != 0)
++ abort();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960512-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960512-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960512-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960512-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++__complex__
++double f ()
++{
++ int a[40];
++ __complex__ double c;
++
++ a[9] = 0;
++ c = a[9];
++ return c;
++}
++
++main ()
++{
++ __complex__ double c;
++
++ if (c = f ())
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960513-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960513-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960513-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960513-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++long double
++f (d, i)
++ long double d;
++ int i;
++{
++ long double e;
++
++ d = -d;
++ e = d;
++ if (i == 1)
++ d *= 2;
++ d -= e * d;
++ d -= e * d;
++ d -= e * d;
++ d -= e * d;
++ d -= e * d;
++ return d;
++}
++
++main ()
++{
++ if (! (int) (f (2.0L, 1)))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960521-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960521-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960521-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960521-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++#include <stdlib.h>
++
++int *a, *b;
++int n;
++
++#ifdef STACK_SIZE
++#define BLOCK_SIZE (STACK_SIZE / (sizeof (*a) + sizeof (*b)))
++#else
++#define BLOCK_SIZE 32768
++#endif
++foo ()
++{
++ int i;
++ for (i = 0; i < n; i++)
++ a[i] = -1;
++ for (i = 0; i < BLOCK_SIZE - 1; i++)
++ b[i] = -1;
++}
++
++main ()
++{
++ n = BLOCK_SIZE;
++ a = malloc (n * sizeof(*a));
++ b = malloc (n * sizeof(*b));
++ *b++ = 0;
++ foo ();
++ if (b[-1])
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960608-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960608-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960608-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960608-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++typedef struct
++{
++ unsigned char a : 2;
++ unsigned char b : 3;
++ unsigned char c : 1;
++ unsigned char d : 1;
++ unsigned char e : 1;
++} a_struct;
++
++foo (flags)
++ a_struct *flags;
++{
++ return (flags->c != 0
++ || flags->d != 1
++ || flags->e != 1
++ || flags->a != 2
++ || flags->b != 3);
++}
++
++main ()
++{
++ a_struct flags;
++
++ flags.c = 0;
++ flags.d = 1;
++ flags.e = 1;
++ flags.a = 2;
++ flags.b = 3;
++
++ if (foo (&flags) != 0)
++ abort ();
++ else
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960801-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960801-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960801-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960801-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++unsigned
++f ()
++{
++ long long l2;
++ unsigned short us;
++ unsigned long long ul;
++ short s2;
++
++ ul = us = l2 = s2 = -1;
++ return ul;
++}
++
++unsigned long long
++g ()
++{
++ long long l2;
++ unsigned short us;
++ unsigned long long ul;
++ short s2;
++
++ ul = us = l2 = s2 = -1;
++ return ul;
++}
++
++main ()
++{
++ if (f () != (unsigned short) -1)
++ abort ();
++ if (g () != (unsigned short) -1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960802-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960802-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960802-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960802-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++long val = 0x5e000000;
++
++long
++f1 (void)
++{
++ return 0x132;
++}
++
++long
++f2 (void)
++{
++ return 0x5e000000;
++}
++
++void
++f3 (long b)
++{
++ val = b;
++}
++
++void
++f4 ()
++{
++ long v = f1 ();
++ long o = f2 ();
++ v = (v & 0x00ffffff) | (o & 0xff000000);
++ f3 (v);
++}
++
++main ()
++{
++ f4 ();
++ if (val != 0x5e000132)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960830-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960830-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960830-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960830-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#ifdef __i386__
++f (rp)
++ unsigned int *rp;
++{
++ __asm__ ("mull %3" : "=a" (rp[0]), "=d" (rp[1]) : "%0" (7), "rm" (7));
++}
++
++main ()
++{
++ unsigned int s[2];
++
++ f (s);
++ if (s[1] != 0 || s[0] != 49)
++ abort ();
++ exit (0);
++}
++#else
++main ()
++{
++ exit (0);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960909-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960909-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/960909-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/960909-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++int
++ffs (x)
++ int x;
++{
++ int bit, mask;
++
++ if (x == 0)
++ return 0;
++
++ for (bit = 1, mask = 1; !(x & mask); bit++, mask <<= 1)
++ ;
++
++ return bit;
++}
++
++f (x)
++ int x;
++{
++ int y;
++ y = ffs (x) - 1;
++ if (y < 0)
++ abort ();
++}
++
++main ()
++{
++ f (1);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961004-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961004-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961004-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961004-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++int k = 0;
++
++main()
++{
++ int i;
++ int j;
++
++ for (i = 0; i < 2; i++)
++ {
++ if (k)
++ {
++ if (j != 2)
++ abort ();
++ }
++ else
++ {
++ j = 2;
++ k++;
++ }
++ }
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961017-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961017-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961017-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961017-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++main ()
++{
++ unsigned char z = 0;
++
++ do ;
++ while (--z > 0);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961017-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961017-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961017-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961017-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++main ()
++{
++ int i = 0;
++
++
++ if (sizeof (unsigned long int) == 4)
++ {
++ unsigned long int z = 0;
++
++ do {
++ z -= 0x00004000;
++ i++;
++ if (i > 0x00040000)
++ abort ();
++ } while (z > 0);
++ exit (0);
++ }
++ else if (sizeof (unsigned int) == 4)
++ {
++ unsigned int z = 0;
++
++ do {
++ z -= 0x00004000;
++ i++;
++ if (i > 0x00040000)
++ abort ();
++ } while (z > 0);
++ exit (0);
++ }
++ else
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961026-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961026-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961026-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961026-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++int
++test (arg)
++ int arg;
++{
++ if (arg > 0 || arg == 0)
++ return 0;
++ return -1;
++}
++
++main ()
++{
++ if (test (0) != 0)
++ abort ();
++ if (test (-1) != -1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961112-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961112-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961112-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961112-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++f (x)
++{
++ if (x != 0 || x == 0)
++ return 0;
++ return 1;
++}
++
++main ()
++{
++ if (f (3))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961122-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961122-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961122-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961122-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++long long acc;
++
++addhi (short a)
++{
++ acc += (long long) a << 32;
++}
++
++subhi (short a)
++{
++ acc -= (long long) a << 32;
++}
++
++main ()
++{
++ acc = 0xffff00000000ll;
++ addhi (1);
++ if (acc != 0x1000000000000ll)
++ abort ();
++ subhi (1);
++ if (acc != 0xffff00000000ll)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961122-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961122-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961122-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961122-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++int
++f (int a)
++{
++ return ((a >= 0 && a <= 10) && ! (a >= 0));
++}
++
++main ()
++{
++ if (f (0))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961125-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961125-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961125-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961125-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++static char *
++begfield (int tab, char *ptr, char *lim, int sword, int schar)
++{
++ if (tab)
++ {
++ while (ptr < lim && sword--)
++ {
++ while (ptr < lim && *ptr != tab)
++ ++ptr;
++ if (ptr < lim)
++ ++ptr;
++ }
++ }
++ else
++ {
++ while (1)
++ ;
++ }
++
++ if (ptr + schar <= lim)
++ ptr += schar;
++
++ return ptr;
++}
++
++main ()
++{
++ char *s = ":ab";
++ char *lim = s + 3;
++ if (begfield (':', s, lim, 1, 1) != s + 2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961206-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961206-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961206-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961206-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++int
++sub1 (unsigned long long i)
++{
++ if (i < 0x80000000)
++ return 1;
++ else
++ return 0;
++}
++
++int
++sub2 (unsigned long long i)
++{
++ if (i <= 0x7FFFFFFF)
++ return 1;
++ else
++ return 0;
++}
++
++int
++sub3 (unsigned long long i)
++{
++ if (i >= 0x80000000)
++ return 0;
++ else
++ return 1;
++}
++
++int
++sub4 (unsigned long long i)
++{
++ if (i > 0x7FFFFFFF)
++ return 0;
++ else
++ return 1;
++}
++
++main()
++{
++ if (sub1 (0x80000000ULL))
++ abort ();
++
++ if (sub2 (0x80000000ULL))
++ abort ();
++
++ if (sub3 (0x80000000ULL))
++ abort ();
++
++ if (sub4 (0x80000000ULL))
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961213-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961213-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961213-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961213-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++int
++g (unsigned long long int *v, int n, unsigned int a[], int b)
++{
++ int cnt;
++ *v = 0;
++ for (cnt = 0; cnt < n; ++cnt)
++ *v = *v * b + a[cnt];
++ return n;
++}
++
++main ()
++{
++ int res;
++ unsigned int ar[] = { 10, 11, 12, 13, 14 };
++ unsigned long long int v;
++
++ res = g (&v, sizeof(ar)/sizeof(ar[0]), ar, 16);
++ if (v != 0xabcdeUL)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961223-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961223-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/961223-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/961223-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++struct s {
++ double d;
++};
++
++inline struct s
++sub (struct s s)
++{
++ s.d += 1.0;
++ return s;
++}
++
++main ()
++{
++ struct s t = { 2.0 };
++ t = sub (t);
++ if (t.d != 3.0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970214-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970214-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970214-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970214-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++#define L 1
++main ()
++{
++ exit (L'1' != L'1');
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970214-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970214-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970214-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970214-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++#define m(L) (L'1' + (L))
++main ()
++{
++ exit (m (0) != L'1');
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970217-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970217-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970217-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970217-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++sub (int i, int array[i++])
++{
++ return i;
++}
++
++main()
++{
++ int array[10];
++ exit (sub (10, array) != 11);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970312-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970312-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970312-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970312-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,73 @@
++#include <stdio.h>
++
++__inline__ static int
++dummy (x)
++{
++ int y;
++ y = (long) (x * 4711.3);
++ return y;
++}
++
++int getval (void);
++
++int
++f2 (double x)
++{
++ unsigned short s;
++ int a, b, c, d, e, f, g, h, i, j;
++
++ a = getval ();
++ b = getval ();
++ c = getval ();
++ d = getval ();
++ e = getval ();
++ f = getval ();
++ g = getval ();
++ h = getval ();
++ i = getval ();
++ j = getval ();
++
++
++ s = x;
++
++ return a + b + c + d + e + f + g + h + i + j + s;
++}
++
++int x = 1;
++
++int
++getval (void)
++{
++ return x++;
++}
++
++char buf[10];
++
++void
++f ()
++{
++ int a, b, c, d, e, f, g, h, i, j, k;
++
++ a = getval ();
++ b = getval ();
++ c = getval ();
++ d = getval ();
++ e = getval ();
++ f = getval ();
++ g = getval ();
++ h = getval ();
++ i = getval ();
++ j = getval ();
++
++ k = f2 (17.0);
++
++ sprintf (buf, "%d\n", a + b + c + d + e + f + g + h + i + j + k);
++ if (a + b + c + d + e + f + g + h + i + j + k != 227)
++ abort ();
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970923-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970923-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/970923-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/970923-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++int
++ts(a)
++ int a;
++{
++ if (a < 1000 && a > 2000)
++ return 1;
++ else
++ return 0;
++}
++
++int
++tu(a)
++ unsigned int a;
++{
++ if (a < 1000 && a > 2000)
++ return 1;
++ else
++ return 0;
++}
++
++
++main()
++{
++ if (ts (0) || tu (0))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980205.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980205.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980205.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980205.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++#include <stdarg.h>
++
++void fdouble (double one, ...)
++{
++ double value;
++ va_list ap;
++
++ va_start (ap, one);
++ value = va_arg (ap, double);
++ va_end (ap);
++
++ if (one != 1.0 || value != 2.0)
++ abort ();
++}
++
++int main ()
++{
++ fdouble (1.0, 2.0);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980223.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980223.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980223.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980223.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++typedef struct { long addr; long type; } object;
++
++object bar (object blah)
++{
++ abort();
++}
++
++object foo (object x, object y)
++{
++ object z = *(object*)(x.addr);
++ if (z.type & 64)
++ {
++ y = *(object*)(z.addr+sizeof(object));
++ z = *(object*)(z.addr);
++ if (z.type & 64)
++ y = bar(y);
++ }
++ return y;
++}
++
++int nil;
++object cons1[2] = { {(long) &nil, 0}, {(long) &nil, 0} };
++object cons2[2] = { {(long) &cons1, 64}, {(long) &nil, 0} };
++
++main()
++{
++ object x = {(long) &cons2, 64};
++ object y = {(long) &nil, 0};
++ object three = foo(x,y);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980424-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980424-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980424-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980424-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++int i, a[99];
++
++void f (int one)
++{
++ if (one != 1)
++ abort ();
++}
++
++void
++g ()
++{
++ f (a[i & 0x3f]);
++}
++
++int
++main ()
++{
++ a[0] = 1;
++ i = 0x40;
++ g ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980505-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980505-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980505-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980505-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++static int f(int) __attribute__((const));
++int main()
++{
++ int f1, f2, x;
++ x = 1; f1 = f(x);
++ x = 2; f2 = f(x);
++ if (f1 != 1 || f2 != 2)
++ abort ();
++ exit (0);
++}
++static int f(int x) { return x; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980505-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980505-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980505-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980505-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++typedef unsigned short Uint16;
++typedef unsigned int Uint;
++
++Uint f ()
++{
++ Uint16 token;
++ Uint count;
++ static Uint16 values[1] = {0x9300};
++
++ token = values[0];
++ count = token >> 8;
++
++ return count;
++}
++
++int
++main ()
++{
++ if (f () != 0x93)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980506-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980506-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980506-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980506-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++struct decision
++{
++ char enforce_mode;
++ struct decision *next;
++};
++
++
++static void
++clear_modes (p)
++ register struct decision *p;
++{
++ goto blah;
++
++foo:
++ p->enforce_mode = 0;
++blah:
++ if (p)
++ goto foo;
++}
++
++main()
++{
++ struct decision *p = 0;
++ clear_modes (p);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980506-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980506-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980506-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980506-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++static void *self(void *p){ return p; }
++
++int
++f()
++{
++ struct { int i; } s, *sp;
++ int *ip = &s.i;
++
++ s.i = 1;
++ sp = self(&s);
++
++ *ip = 0;
++ return sp->i+1;
++}
++
++main()
++{
++ if (f () != 1)
++ abort ();
++ else
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980506-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980506-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980506-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980506-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++unsigned char lookup_table [257];
++
++static int
++build_lookup (pattern)
++ unsigned char *pattern;
++{
++ int m;
++
++ m = strlen (pattern) - 1;
++
++ memset (lookup_table, ++m, 257);
++ return m;
++}
++
++int main(argc, argv)
++ int argc;
++ char **argv;
++{
++ if (build_lookup ("bind") != 4)
++ abort ();
++ else
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980526-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980526-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980526-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980526-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++int expect_do1 = 1, expect_do2 = 2;
++
++static int doit(int x){
++ __label__ lbl1;
++ __label__ lbl2;
++ static int jtab_init = 0;
++ static void *jtab[2];
++
++ if(!jtab_init) {
++ jtab[0] = &&lbl1;
++ jtab[1] = &&lbl2;
++ jtab_init = 1;
++ }
++ goto *jtab[x];
++lbl1:
++ return 1;
++lbl2:
++ return 2;
++}
++
++static void do1(void) {
++ if (doit(0) != expect_do1)
++ abort ();
++}
++
++static void do2(void){
++ if (doit(1) != expect_do2)
++ abort ();
++}
++
++int main(void){
++#ifndef NO_LABEL_VALUES
++ do1();
++ do2();
++#endif
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980526-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980526-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980526-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980526-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++typedef unsigned int dev_t;
++typedef unsigned int kdev_t;
++
++static inline kdev_t to_kdev_t(int dev)
++{
++ int major, minor;
++
++ if (sizeof(kdev_t) == 16)
++ return (kdev_t)dev;
++ major = (dev >> 8);
++ minor = (dev & 0xff);
++ return ((( major ) << 22 ) | ( minor )) ;
++
++}
++
++void do_mknod(const char * filename, int mode, kdev_t dev)
++{
++ if (dev==0x15800078)
++ exit(0);
++ else
++ abort();
++}
++
++
++char * getname(const char * filename)
++{
++ register unsigned int a1,a2,a3,a4,a5,a6,a7,a8,a9;
++ a1 = (unsigned int)(filename) *5 + 1;
++ a2 = (unsigned int)(filename) *6 + 2;
++ a3 = (unsigned int)(filename) *7 + 3;
++ a4 = (unsigned int)(filename) *8 + 4;
++ a5 = (unsigned int)(filename) *9 + 5;
++ a6 = (unsigned int)(filename) *10 + 5;
++ a7 = (unsigned int)(filename) *11 + 5;
++ a8 = (unsigned int)(filename) *12 + 5;
++ a9 = (unsigned int)(filename) *13 + 5;
++ return (char *)(a1*a2+a3*a4+a5*a6+a7*a8+a9);
++}
++
++int sys_mknod(const char * filename, int mode, dev_t dev)
++{
++ int error;
++ char * tmp;
++
++ tmp = getname(filename);
++ error = ((long)( tmp )) ;
++ do_mknod(tmp,mode,to_kdev_t(dev));
++ return error;
++}
++
++int main(void)
++{
++ if (sizeof (int) < 4)
++ exit (0);
++
++ return sys_mknod("test",1,0x12345678);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980526-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980526-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980526-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980526-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++int compare(x, y)
++unsigned int x;
++unsigned int y;
++{
++ if (x==y)
++ return 0;
++ else
++ return 1;
++}
++
++main()
++{
++ unsigned int i, j, k, l;
++ i = 5; j = 2; k=0; l=2;
++ if (compare(5%(~(unsigned) 2), i%~j)
++ || compare(0, k%~l))
++ abort();
++ else
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980602-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980602-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980602-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980602-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++main()
++{
++ int i;
++ for (i = 1; i < 100; i++)
++ ;
++ if (i == 100)
++ exit (0);
++ abort ();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980602-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980602-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980602-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980602-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++struct {
++ unsigned bit : 30;
++} t;
++
++int main()
++{
++ if (!(t.bit++))
++ exit (0);
++ else
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980604-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980604-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980604-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980604-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++int a = 1;
++int b = -1;
++
++int c = 1;
++int d = 0;
++
++main ()
++{
++ double e;
++ double f;
++ double g;
++
++ f = c;
++ g = d;
++ e = (a < b) ? f : g;
++ if (e)
++ abort ();
++ exit(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980605-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980605-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980605-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980605-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,78 @@
++#include <stdio.h>
++
++#ifndef STACK_SIZE
++#define STACK_SIZE 200000
++#endif
++
++__inline__ static int
++dummy (x)
++{
++ int y;
++ y = (long) (x * 4711.3);
++ return y;
++}
++
++int getval (void);
++
++int
++f2 (double x)
++{
++ unsigned short s;
++ int a, b, c, d, e, f, g, h, i, j;
++
++ a = getval ();
++ b = getval ();
++ c = getval ();
++ d = getval ();
++ e = getval ();
++ f = getval ();
++ g = getval ();
++ h = getval ();
++ i = getval ();
++ j = getval ();
++
++
++ s = x;
++
++ return a + b + c + d + e + f + g + h + i + j + s;
++}
++
++int x = 1;
++
++int
++getval (void)
++{
++ return x++;
++}
++
++char buf[10];
++
++void
++f ()
++{
++ char ar[STACK_SIZE/2];
++ int a, b, c, d, e, f, g, h, i, j, k;
++
++ a = getval ();
++ b = getval ();
++ c = getval ();
++ d = getval ();
++ e = getval ();
++ f = getval ();
++ g = getval ();
++ h = getval ();
++ i = getval ();
++ j = getval ();
++
++ k = f2 (17.0);
++
++ sprintf (buf, "%d\n", a + b + c + d + e + f + g + h + i + j + k);
++ if (a + b + c + d + e + f + g + h + i + j + k != 227)
++ abort ();
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980608-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980608-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980608-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980608-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++#include <stdarg.h>
++
++void f1(int a,int b,int c,int d,int e, int f,int g,int h,int i,int j, int k,int
++l,int m,int n,int o)
++{
++ return;
++}
++
++inline void debug(const char *msg,...)
++{
++ va_list ap;
++ va_start( ap, msg );
++
++ f1(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
++
++ if ( va_arg(ap,int) != 101)
++ abort();
++ if ( va_arg(ap,int) != 102)
++ abort();
++ if ( va_arg(ap,int) != 103)
++ abort();
++ if ( va_arg(ap,int) != 104)
++ abort();
++ if ( va_arg(ap,int) != 105)
++ abort();
++ if ( va_arg(ap,int) != 106)
++ abort();
++
++ va_end( ap );
++}
++
++int main(void)
++{
++ debug("%d %d %d %d %d %d\n", 101, 102, 103, 104, 105, 106);
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980612-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980612-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980612-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980612-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++struct fd
++{
++ unsigned char a;
++ unsigned char b;
++} f = { 5 };
++
++struct fd *g() { return &f; }
++int h() { return -1; }
++
++int main()
++{
++ struct fd *f = g();
++ f->b = h();
++ if (((f->a & 0x7f) & ~0x10) <= 2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980617-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980617-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980617-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980617-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++void foo (unsigned int * p)
++{
++ if ((signed char)(*p & 0xFF) == 17 || (signed char)(*p & 0xFF) == 18)
++ return;
++ else
++ abort ();
++}
++
++int main ()
++{
++ int i = 0x30011;
++ foo(&i);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980618-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980618-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980618-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980618-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++void func(int, int);
++
++int main()
++{
++ int x = 7;
++ func(!x, !7);
++ exit (0);
++}
++
++void func(int x, int y)
++{
++ if (x == y)
++ return;
++ else
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980701-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980701-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980701-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980701-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++ns_name_skip (unsigned char **x, unsigned char *y)
++{
++ *x = 0;
++ return 0;
++}
++
++unsigned char a[2];
++
++int dn_skipname(unsigned char *ptr, unsigned char *eom) {
++ unsigned char *saveptr = ptr;
++
++ if (ns_name_skip(&ptr, eom) == -1)
++ return (-1);
++ return (ptr - saveptr);
++}
++
++main()
++{
++ if (dn_skipname (&a[0], &a[1]) == 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980707-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980707-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980707-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980707-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++#include <stdio.h>
++#include <ctype.h>
++#include <string.h>
++
++char **
++buildargv (char *input)
++{
++ static char *arglist[256];
++ int numargs = 0;
++
++ while (1)
++ {
++ while (isspace ((unsigned char)*input) && *input != 0)
++ input++;
++ if (*input == 0)
++ break;
++ arglist [numargs++] = input;
++ while (!isspace ((unsigned char)*input) && *input != 0)
++ input++;
++ if (*input == 0)
++ break;
++ *(input++) = 0;
++ }
++ arglist [numargs] = NULL;
++ return arglist;
++}
++
++
++int main()
++{
++ char **args;
++ char input[256];
++ int i;
++
++ strcpy(input, " a b");
++ args = buildargv(input);
++
++ if (strcmp (args[0], "a"))
++ abort ();
++ if (strcmp (args[1], "b"))
++ abort ();
++ if (args[2] != NULL)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980709-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980709-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980709-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980709-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++#include <math.h>
++
++main()
++{
++ volatile double a;
++ double c;
++ a = 32.0;
++ c = pow(a, 1.0/3.0);
++ if (c + 0.1 > 3.174802
++ && c - 0.1 < 3.174802)
++ exit (0);
++ else
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980716-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980716-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980716-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980716-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++#include <stdarg.h>
++
++void
++stub(int num, ...)
++{
++ va_list ap;
++ char *end;
++ int i;
++
++ for (i = 0; i < 2; i++) {
++ va_start(ap, num);
++ while ( 1 ) {
++ end = va_arg(ap, char *);
++ if (!end) break;
++ }
++ va_end(ap);
++ }
++}
++
++int
++main()
++{
++ stub(1, "ab", "bc", "cx", 0);
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980929-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980929-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/980929-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/980929-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++void f(int i)
++{
++ if (i != 1000)
++ abort ();
++}
++
++
++int main()
++{
++ int n=1000;
++ int i;
++
++ f(n);
++ for(i=0; i<1; ++i) {
++ f(n);
++ n=666;
++ &n;
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981001-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981001-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981001-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981001-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#define NG 0x100L
++
++unsigned long flg = 0;
++
++long sub (int n)
++{
++ int a, b ;
++
++ if (n >= 2)
++ {
++ if (n % 2 == 0)
++ {
++ a = sub (n / 2);
++
++ return (a + 2 * sub (n / 2 - 1)) * a;
++ }
++ else
++ {
++ a = sub (n / 2 + 1);
++ b = sub (n / 2);
++
++ return a * a + b * b;
++ }
++ }
++ else
++ return (long) n;
++}
++
++int main (void)
++{
++ if (sub (30) != 832040L)
++ flg |= NG;
++
++ if (flg)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981019-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981019-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981019-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981019-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++extern int f2(void);
++extern int f3(void);
++extern void f1(void);
++
++void
++ff(int fname, int part, int nparts)
++{
++ if (fname) /* bb 0 */
++ {
++ if (nparts) /* bb 1 */
++ f1(); /* bb 2 */
++ }
++ else
++ fname = 2; /* bb 3 */
++
++ /* bb 4 is the branch to bb 10
++ (bb 10 is physically at the end of the loop) */
++ while (f3() /* bb 10 */)
++ {
++ if (nparts /* bb 5 */ && f2() /* bb 6 */)
++ {
++ f1(); /* bb 7 ... */
++ nparts = part;
++ if (f3()) /* ... bb 7 */
++ f1(); /* bb 8 */
++ f1(); /* bb 9 */
++ break;
++ }
++ }
++
++ if (nparts) /* bb 11 */
++ f1(); /* bb 12 */
++ return; /* bb 13 */
++}
++
++int main(void)
++{
++ ff(0, 1, 0);
++ return 0;
++}
++
++int f3(void) { static int x = 0; x = !x; return x; }
++void f1(void) { abort(); }
++int f2(void) { abort(); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981130-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981130-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981130-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981130-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++struct s { int a; int b;};
++struct s s1;
++struct s s2 = { 1, 2, };
++
++void
++check (a, b)
++ int a;
++ int b;
++{
++ if (a == b)
++ exit (0);
++ else
++ abort ();
++}
++
++int
++main ()
++{
++ int * p;
++ int x;
++
++ s1.a = 9;
++ p = & s1.a;
++ s1 = s2;
++ x = * p;
++
++ check (x, 1);
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981130-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981130-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981130-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981130-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++# This test is known to fail on targets that use the instruction scheduler
++# at optimisation levels of 2 or more because the alias analysis is confused
++# by the reassignment of a variable structure to a fixed structure. The
++# failure could be suppressed by preventing instruction scheduling:
++#
++# set additional_flags "-fno-schedule-insns2";
++#
++# but this would disguise the fact that there is a problem. Instead we use
++# we generate an xfail result and explain that it is alias analysis that
++# is at fault.
++
++set torture_eval_before_execute {
++
++ set compiler_conditional_xfail_data {
++ "alias analysis conflicts with instruction scheduling" \
++ "m32r-*-*" \
++ { "-O2" "-O1" "-O0" "-Os"} \
++ { "" }
++ }
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981206-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981206-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/981206-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/981206-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++/* Verify unaligned address aliasing on Alpha EV[45]. */
++
++static unsigned short x, y;
++
++void foo()
++{
++ x = 0x345;
++ y = 0x567;
++}
++
++int main()
++{
++ foo ();
++ if (x != 0x345 || y != 0x567)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990106-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990106-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990106-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990106-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++foo(bufp)
++char *bufp;
++{
++ int x = 80;
++ return (*bufp++ = x ? 'a' : 'b');
++}
++
++main()
++{
++ char x;
++
++ if (foo (&x) != 'a')
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990106-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990106-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990106-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990106-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++unsigned calc_mp(unsigned mod)
++{
++ unsigned a,b,c;
++ c=-1;
++ a=c/mod;
++ b=0-a*mod;
++ if (b > mod) { a += 1; b-=mod; }
++ return b;
++}
++
++int main(int argc, char *argv[])
++{
++ unsigned x = 1234;
++ unsigned y = calc_mp(x);
++
++ if ((sizeof (y) == 4 && y != 680)
++ || (sizeof (y) == 2 && y != 134))
++ abort ();
++ exit (0);
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990117-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990117-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990117-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990117-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++int
++foo (int x, int y, int i, int j)
++{
++ double tmp1 = ((double) x / y);
++ double tmp2 = ((double) i / j);
++
++ return tmp1 < tmp2;
++}
++
++main ()
++{
++ if (foo (2, 24, 3, 4) == 0)
++ abort ();
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990127-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990127-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990127-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990127-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++main()
++{
++ int a,b,c;
++ int *pa, *pb, *pc;
++ int **ppa, **ppb, **ppc;
++ int i,j,k,x,y,z;
++
++ a = 10;
++ b = 20;
++ c = 30;
++ pa = &a; pb = &b; pc = &c;
++ ppa = &pa; ppb = &pb; ppc = &pc;
++ x = 0; y = 0; z = 0;
++
++ for(i=0;i<10;i++){
++ if( pa == &a ) pa = &b;
++ else pa = &a;
++ while( (*pa)-- ){
++ x++;
++ if( (*pa) < 3 ) break;
++ else pa = &b;
++ }
++ x++;
++ pa = &b;
++ }
++
++ if ((*pa) != -5 || (*pb) != -5 || x != 43)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990127-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990127-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990127-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990127-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++void
++fpEq (double x, double y)
++{
++ if (x != y)
++ abort ();
++}
++
++void
++fpTest (double x, double y)
++{
++ double result1 = (35.7 * 100.0) / 45.0;
++ double result2 = (x * 100.0) / y;
++ fpEq (result1, result2);
++}
++
++main ()
++{
++ fpTest (35.7, 45.0);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990128-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990128-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990128-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990128-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++extern int printf (const char *,...);
++
++struct s { struct s *n; } *p;
++struct s ss;
++#define MAX 10
++struct s sss[MAX];
++int count = 0;
++
++void sub( struct s *p, struct s **pp );
++int look( struct s *p, struct s **pp );
++
++main()
++{
++ struct s *pp;
++ struct s *next;
++ int i;
++
++ p = &ss;
++ next = p;
++ for ( i = 0; i < MAX; i++ ) {
++ next->n = &sss[i];
++ next = next->n;
++ }
++ next->n = 0;
++
++ sub( p, &pp );
++ if (count != MAX+2)
++ abort ();
++
++ exit( 0 );
++}
++
++void sub( struct s *p, struct s **pp )
++{
++ for ( ; look( p, pp ); ) {
++ if ( p )
++ p = p->n;
++ else
++ break;
++ }
++}
++
++int look( struct s *p, struct s **pp )
++{
++ for ( ; p; p = p->n )
++ ;
++ *pp = p;
++ count++;
++ return( 1 );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990130-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990130-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990130-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990130-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++int count = 0;
++int dummy;
++
++static int *
++bar(void)
++{
++ ++count;
++ return &dummy;
++}
++
++static void
++foo(void)
++{
++ asm("" : "+r"(*bar()));
++}
++
++main()
++{
++ foo();
++ if (count != 1)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990208-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990208-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990208-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990208-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++/* As a quality of implementation issue, we should not prevent inlining
++ of function explicitly marked inline just because a label therein had
++ its address taken. */
++
++#ifndef NO_LABEL_VALUES
++static void *ptr1, *ptr2;
++
++static __inline__ void doit(void **pptr, int cond)
++{
++ if (cond) {
++ here:
++ *pptr = &&here;
++ }
++}
++
++static void f(int cond)
++{
++ doit (&ptr1, cond);
++}
++
++static void g(int cond)
++{
++ doit (&ptr2, cond);
++}
++
++static void bar(void);
++
++int main()
++{
++ f (1);
++ bar();
++ g (1);
++
++#ifdef __OPTIMIZE__
++ if (ptr1 == ptr2)
++ abort ();
++#endif
++
++ exit (0);
++}
++
++void bar(void) { }
++
++#else /* NO_LABEL_VALUES */
++int main() { exit(0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990211-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990211-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990211-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990211-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,61 @@
++/* Copyright (C) 1999 Free Software Foundation, Inc.
++ Contributed by Nathan Sidwell 20 Jan 1999 <nathan@acm.org> */
++
++/* check range combining boolean operations work */
++
++extern void abort();
++
++#define N 77
++
++void func(int i)
++{
++ /* fold-const does some clever things with range tests. Make sure
++ we get (some of) them right */
++
++ /* these must fail, regardless of the value of i */
++ if ((i < 0) && (i >= 0))
++ abort();
++ if ((i > 0) && (i <= 0))
++ abort();
++ if ((i >= 0) && (i < 0))
++ abort();
++ if ((i <= 0) && (i > 0))
++ abort();
++
++ if ((i < N) && (i >= N))
++ abort();
++ if ((i > N) && (i <= N))
++ abort();
++ if ((i >= N) && (i < N))
++ abort();
++ if ((i <= N) && (i > N))
++ abort();
++
++ /* these must pass, regardless of the value of i */
++ if (! ((i < 0) || (i >= 0)))
++ abort();
++ if (! ((i > 0) || (i <= 0)))
++ abort();
++ if (! ((i >= 0) || (i < 0)))
++ abort();
++ if (! ((i <= 0) || (i > 0)))
++ abort();
++
++ if (! ((i < N) || (i >= N)))
++ abort();
++ if (! ((i > N) || (i <= N)))
++ abort();
++ if (! ((i >= N) || (i < N)))
++ abort();
++ if (! ((i <= N) || (i > N)))
++ abort();
++
++ return;
++}
++
++int main()
++{
++ func(0);
++ func(1);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990222-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990222-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990222-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990222-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++char line[4] = { '1', '9', '9', '\0' };
++
++int main()
++{
++ char *ptr = line + 3;
++
++ while ((*--ptr += 1) > '9') *ptr = '0';
++ if (line[0] != '2' || line[1] != '0' || line[2] != '0')
++ abort();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990324-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990324-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990324-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990324-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++void f(long i)
++{
++ if ((signed char)i < 0 || (signed char)i == 0)
++ abort ();
++ else
++ exit (0);
++}
++
++main()
++{
++ f(0xffffff01);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990326-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990326-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990326-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990326-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,407 @@
++struct a {
++ char a, b;
++ short c;
++};
++
++int
++a1()
++{
++ static struct a x = { 1, 2, ~1 }, y = { 65, 2, ~2 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++a2()
++{
++ static struct a x = { 1, 66, ~1 }, y = { 1, 2, ~2 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++a3()
++{
++ static struct a x = { 9, 66, ~1 }, y = { 33, 18, ~2 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++struct b {
++ int c;
++ short b, a;
++};
++
++int
++b1()
++{
++ static struct b x = { ~1, 2, 1 }, y = { ~2, 2, 65 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++b2()
++{
++ static struct b x = { ~1, 66, 1 }, y = { ~2, 2, 1 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++b3()
++{
++ static struct b x = { ~1, 66, 9 }, y = { ~2, 18, 33 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++struct c {
++ unsigned int c:4, b:14, a:14;
++} __attribute__ ((aligned));
++
++int
++c1()
++{
++ static struct c x = { ~1, 2, 1 }, y = { ~2, 2, 65 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++c2()
++{
++ static struct c x = { ~1, 66, 1 }, y = { ~2, 2, 1 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++c3()
++{
++ static struct c x = { ~1, 66, 9 }, y = { ~2, 18, 33 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++struct d {
++ unsigned int a:14, b:14, c:4;
++} __attribute__ ((aligned));
++
++int
++d1()
++{
++ static struct d x = { 1, 2, ~1 }, y = { 65, 2, ~2 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++d2()
++{
++ static struct d x = { 1, 66, ~1 }, y = { 1, 2, ~2 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++d3()
++{
++ static struct d x = { 9, 66, ~1 }, y = { 33, 18, ~2 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++struct e {
++ int c:4, b:14, a:14;
++} __attribute__ ((aligned));
++
++int
++e1()
++{
++ static struct e x = { ~1, -2, -65 }, y = { ~2, -2, -1 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++e2()
++{
++ static struct e x = { ~1, -2, -1 }, y = { ~2, -66, -1 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++e3()
++{
++ static struct e x = { ~1, -18, -33 }, y = { ~2, -66, -9 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++int
++e4()
++{
++ static struct e x = { -1, -1, 0 };
++
++ return x.a == 0 && x.b & 0x2000;
++}
++
++struct f {
++ int a:14, b:14, c:4;
++} __attribute__ ((aligned));
++
++int
++f1()
++{
++ static struct f x = { -65, -2, ~1 }, y = { -1, -2, ~2 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++f2()
++{
++ static struct f x = { -1, -2, ~1 }, y = { -1, -66, ~2 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++f3()
++{
++ static struct f x = { -33, -18, ~1 }, y = { -9, -66, ~2 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++int
++f4()
++{
++ static struct f x = { 0, -1, -1 };
++
++ return x.a == 0 && x.b & 0x2000;
++}
++
++struct gx {
++ int c:4, b:14, a:14;
++} __attribute__ ((aligned));
++struct gy {
++ int b:14, a:14, c:4;
++} __attribute__ ((aligned));
++
++int
++g1()
++{
++ static struct gx x = { ~1, -2, -65 };
++ static struct gy y = { -2, -1, ~2 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++g2()
++{
++ static struct gx x = { ~1, -2, -1 };
++ static struct gy y = { -66, -1, ~2 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++g3()
++{
++ static struct gx x = { ~1, -18, -33 };
++ static struct gy y = { -66, -9, ~2 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++int
++g4()
++{
++ static struct gx x = { ~1, 0x0020, 0x0010 };
++ static struct gy y = { 0x0200, 0x0100, ~2 };
++
++ return ((x.a & 0x00f0) == (y.a & 0x0f00) &&
++ (x.b & 0x00f0) == (y.b & 0x0f00));
++}
++
++int
++g5()
++{
++ static struct gx x = { ~1, 0x0200, 0x0100 };
++ static struct gy y = { 0x0020, 0x0010, ~2 };
++
++ return ((x.a & 0x0f00) == (y.a & 0x00f0) &&
++ (x.b & 0x0f00) == (y.b & 0x00f0));
++}
++
++int
++g6()
++{
++ static struct gx x = { ~1, 0xfe20, 0xfd10 };
++ static struct gy y = { 0xc22f, 0xc11f, ~2 };
++
++ return ((x.a & 0x03ff) == (y.a & 0x3ff0) &&
++ (x.b & 0x03ff) == (y.b & 0x3ff0));
++}
++
++int
++g7()
++{
++ static struct gx x = { ~1, 0xc22f, 0xc11f };
++ static struct gy y = { 0xfe20, 0xfd10, ~2 };
++
++ return ((x.a & 0x3ff0) == (y.a & 0x03ff) &&
++ (x.b & 0x3ff0) == (y.b & 0x03ff));
++}
++
++struct hx {
++ int a:14, b:14, c:4;
++} __attribute__ ((aligned));
++struct hy {
++ int c:4, a:14, b:14;
++} __attribute__ ((aligned));
++
++int
++h1()
++{
++ static struct hx x = { -65, -2, ~1 };
++ static struct hy y = { ~2, -1, -2 };
++
++ return (x.a == (y.a & ~64) && x.b == y.b);
++}
++
++int
++h2()
++{
++ static struct hx x = { -1, -2, ~1 };
++ static struct hy y = { ~2, -1, -66 };
++
++ return (x.a == y.a && (x.b & ~64) == y.b);
++}
++
++int
++h3()
++{
++ static struct hx x = { -33, -18, ~1 };
++ static struct hy y = { ~2, -9, -66 };
++
++ return ((x.a & ~8) == (y.a & ~32) && (x.b & ~64) == (y.b & ~16));
++}
++
++int
++h4()
++{
++ static struct hx x = { 0x0010, 0x0020, ~1 };
++ static struct hy y = { ~2, 0x0100, 0x0200 };
++
++ return ((x.a & 0x00f0) == (y.a & 0x0f00) &&
++ (x.b & 0x00f0) == (y.b & 0x0f00));
++}
++
++int
++h5()
++{
++ static struct hx x = { 0x0100, 0x0200, ~1 };
++ static struct hy y = { ~2, 0x0010, 0x0020 };
++
++ return ((x.a & 0x0f00) == (y.a & 0x00f0) &&
++ (x.b & 0x0f00) == (y.b & 0x00f0));
++}
++
++int
++h6()
++{
++ static struct hx x = { 0xfd10, 0xfe20, ~1 };
++ static struct hy y = { ~2, 0xc11f, 0xc22f };
++
++ return ((x.a & 0x03ff) == (y.a & 0x3ff0) &&
++ (x.b & 0x03ff) == (y.b & 0x3ff0));
++}
++
++int
++h7()
++{
++ static struct hx x = { 0xc11f, 0xc22f, ~1 };
++ static struct hy y = { ~2, 0xfd10, 0xfe20 };
++
++ return ((x.a & 0x3ff0) == (y.a & 0x03ff) &&
++ (x.b & 0x3ff0) == (y.b & 0x03ff));
++}
++
++int
++main()
++{
++ if (!a1 ())
++ abort ();
++ if (!a2 ())
++ abort ();
++ if (!a3 ())
++ abort ();
++ if (!b1 ())
++ abort ();
++ if (!b2 ())
++ abort ();
++ if (!b3 ())
++ abort ();
++ if (!c1 ())
++ abort ();
++ if (!c2 ())
++ abort ();
++ if (!c3 ())
++ abort ();
++ if (!d1 ())
++ abort ();
++ if (!d2 ())
++ abort ();
++ if (!d3 ())
++ abort ();
++ if (!e1 ())
++ abort ();
++ if (!e2 ())
++ abort ();
++ if (!e3 ())
++ abort ();
++ if (!e4 ())
++ abort ();
++ if (!f1 ())
++ abort ();
++ if (!f2 ())
++ abort ();
++ if (!f3 ())
++ abort ();
++ if (!f4 ())
++ abort ();
++ if (!g1 ())
++ abort ();
++ if (!g2 ())
++ abort ();
++ if (!g3 ())
++ abort ();
++ if (g4 ())
++ abort ();
++ if (g5 ())
++ abort ();
++ if (!g6 ())
++ abort ();
++ if (!g7 ())
++ abort ();
++ if (!h1 ())
++ abort ();
++ if (!h2 ())
++ abort ();
++ if (!h3 ())
++ abort ();
++ if (h4 ())
++ abort ();
++ if (h5 ())
++ abort ();
++ if (!h6 ())
++ abort ();
++ if (!h7 ())
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990404-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990404-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990404-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990404-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++
++int x[10] = { 0,1,2,3,4,5,6,7,8,9};
++
++int
++main()
++{
++ int niterations = 0, i;
++
++ for (;;) {
++ int i, mi, max;
++ max = 0;
++ for (i = 0; i < 10 ; i++) {
++ if (x[i] > max) {
++ max = x[i];
++ mi = i;
++ }
++ }
++ if (max == 0)
++ break;
++ x[mi] = 0;
++ niterations++;
++ if (niterations > 10)
++ abort ();
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990413-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990413-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990413-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990413-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++/* This tests for a bug in regstack that was breaking glibc's math library. */
++
++extern void abort (void);
++
++static __inline double
++minus_zero (void)
++{
++ union { double __d; int __i[2]; } __x;
++ __x.__i[0] = 0x0;
++ __x.__i[1] = 0x80000000;
++ return __x.__d;
++}
++
++static __inline long double
++__atan2l (long double __y, long double __x)
++{
++ register long double __value;
++ __asm __volatile__ ("fpatan\n\t"
++ : "=t" (__value)
++ : "0" (__x), "u" (__y)
++ : "st(1)");
++ return __value;
++}
++
++static __inline long double
++__sqrtl (long double __x)
++{
++ register long double __result;
++ __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x));
++ return __result;
++}
++
++static __inline double
++asin (double __x)
++{
++ return __atan2l (__x, __sqrtl (1.0 - __x * __x));
++}
++
++int
++main (void)
++{
++ double x;
++
++ x = minus_zero();
++ x = asin (x);
++
++ if (x != 0.0) /* actually -0.0, but 0.0 == -0.0 */
++ abort ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990413-2.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990413-2.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990413-2.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990413-2.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++# This test is x86 specific.
++if { ! [istarget "i?86-*-*"] } { return 1 }
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990513-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990513-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/990513-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/990513-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++#include <string.h>
++
++void foo (int *BM_tab, int j)
++{
++ int *BM_tab_base;
++
++ BM_tab_base = BM_tab;
++ BM_tab += 0400;
++ while (BM_tab_base != BM_tab)
++ {
++ *--BM_tab = j;
++ *--BM_tab = j;
++ *--BM_tab = j;
++ *--BM_tab = j;
++ }
++}
++
++int main ()
++{
++ int BM_tab[0400];
++ memset (BM_tab, 0, sizeof (BM_tab));
++ foo (BM_tab, 6);
++ if (BM_tab[0] != 6)
++ abort ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/arith-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/arith-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/arith-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/arith-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++unsigned
++sat_add (unsigned i)
++{
++ unsigned ret = i + 1;
++ if (ret < i)
++ ret = i;
++ return ret;
++}
++
++main ()
++{
++ if (sat_add (~0U) != ~0U)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/arith-rand.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/arith-rand.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/arith-rand.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/arith-rand.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,114 @@
++long
++simple_rand ()
++{
++ static unsigned long seed = 47114711;
++ unsigned long this = seed * 1103515245 + 12345;
++ seed = this;
++ return this >> 8;
++}
++
++unsigned long int
++random_bitstring ()
++{
++ unsigned long int x;
++ int n_bits;
++ long ran;
++ int tot_bits = 0;
++
++ x = 0;
++ for (;;)
++ {
++ ran = simple_rand ();
++ n_bits = (ran >> 1) % 16;
++ tot_bits += n_bits;
++
++ if (n_bits == 0)
++ return x;
++ else
++ {
++ x <<= n_bits;
++ if (ran & 1)
++ x |= (1 << n_bits) - 1;
++
++ if (tot_bits > 8 * sizeof (long) + 6)
++ return x;
++ }
++ }
++}
++
++#define ABS(x) ((x) >= 0 ? (x) : -(x))
++
++main ()
++{
++ long int i;
++
++ for (i = 0; i < 1000; i++)
++ {
++ unsigned long x, y;
++ x = random_bitstring ();
++ y = random_bitstring ();
++
++ if (sizeof (int) == sizeof (long))
++ goto save_time;
++
++ { unsigned long xx = x, yy = y, r1, r2;
++ if (yy == 0) continue;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (r2 >= yy || r1 * yy + r2 != xx)
++ abort ();
++ }
++ { signed long xx = x, yy = y, r1, r2;
++ if ((unsigned long) xx << 1 == 0 && yy == -1)
++ continue;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (ABS (r2) >= (unsigned long) ABS (yy) || (signed long) (r1 * yy + r2) != xx)
++ abort ();
++ }
++ save_time:
++ { unsigned int xx = x, yy = y, r1, r2;
++ if (yy == 0) continue;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (r2 >= yy || r1 * yy + r2 != xx)
++ abort ();
++ }
++ { signed int xx = x, yy = y, r1, r2;
++ if ((unsigned int) xx << 1 == 0 && yy == -1)
++ continue;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (ABS (r2) >= (unsigned int) ABS (yy) || (signed int) (r1 * yy + r2) != xx)
++ abort ();
++ }
++ { unsigned short xx = x, yy = y, r1, r2;
++ if (yy == 0) continue;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (r2 >= yy || r1 * yy + r2 != xx)
++ abort ();
++ }
++ { signed short xx = x, yy = y, r1, r2;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (ABS (r2) >= (unsigned short) ABS (yy) || (signed short) (r1 * yy + r2) != xx)
++ abort ();
++ }
++ { unsigned char xx = x, yy = y, r1, r2;
++ if (yy == 0) continue;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (r2 >= yy || r1 * yy + r2 != xx)
++ abort ();
++ }
++ { signed char xx = x, yy = y, r1, r2;
++ r1 = xx / yy;
++ r2 = xx % yy;
++ if (ABS (r2) >= (unsigned char) ABS (yy) || (signed char) (r1 * yy + r2) != xx)
++ abort ();
++ }
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bcp-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bcp-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bcp-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bcp-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,90 @@
++int global;
++
++/* These must fail. */
++int bad0(void) { return __builtin_constant_p(global); }
++int bad1(void) { return __builtin_constant_p(global++); }
++inline int bad2(int x) { return __builtin_constant_p(x++); }
++inline int bad3(int x) { return __builtin_constant_p(x); }
++inline int bad4(const char *x) { return __builtin_constant_p(x); }
++int bad5(void) { return bad2(1); }
++inline int bad6(int x) { return __builtin_constant_p(x+1); }
++int bad7(void) { return __builtin_constant_p(abort()); }
++int bad8(void) { char buf[10]; return __builtin_constant_p(buf); }
++int bad9(const char *x) { return __builtin_constant_p(x[123456]); }
++int bad10(void) { return __builtin_constant_p(&global); }
++
++/* These must pass, or we've broken gcc2 functionality. */
++int good0(void) { return __builtin_constant_p(1); }
++int good1(void) { return __builtin_constant_p("hi"); }
++int good2(void) { return __builtin_constant_p((1234 + 45) & ~7); }
++
++/* These are extensions to gcc2. Failure indicates an optimization
++ regression. */
++int opt0(void) { return bad3(1); }
++int opt1(void) { return bad6(1); }
++int opt2(void) { return __builtin_constant_p("hi"[0]); }
++
++/*
++ * Opt3 is known to fail. It is one of the important cases that glibc
++ * was interested in though, so keep this around as a reminder.
++ *
++ * The solution is to add bits to recover bytes from constant pool
++ * elements given nothing but a constant pool label and an offset.
++ * When we can do that, and we can simplify strlen after the fact,
++ * then we can enable recognition of constant pool labels as constants.
++ */
++
++/* int opt3(void) { return bad4("hi"); } */
++
++
++/* Call through tables so -finline-functions can't screw with us. */
++int (*bad_t0[])(void) = {
++ bad0, bad1, bad5, bad7, bad8, bad10
++};
++
++int (*bad_t1[])(int x) = {
++ bad2, bad3, bad6
++};
++
++int (*bad_t2[])(const char *x) = {
++ bad4, bad9
++};
++
++int (*good_t0[])(void) = {
++ good0, good1, good2
++};
++
++int (*opt_t0[])(void) = {
++ opt0, opt1, opt2 /* , opt3 */
++};
++
++#define N(arr) (sizeof(arr)/sizeof(*arr))
++
++int main()
++{
++ int i;
++
++ for (i = 0; i < N(bad_t0); ++i)
++ if ((*bad_t0[i])())
++ abort();
++
++ for (i = 0; i < N(bad_t1); ++i)
++ if ((*bad_t1[i])(1))
++ abort();
++
++ for (i = 0; i < N(bad_t2); ++i)
++ if ((*bad_t2[i])("hi"))
++ abort();
++
++ for (i = 0; i < N(good_t0); ++i)
++ if (! (*good_t0[i])())
++ abort();
++
++#ifdef __OPTIMIZE__
++ for (i = 0; i < N(opt_t0); ++i)
++ if (! (*opt_t0[i])())
++ abort();
++#endif
++
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf64-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf64-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf64-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf64-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++struct tmp
++{
++ long long int pad : 12;
++ long long int field : 52;
++};
++
++struct tmp2
++{
++ long long int field : 52;
++ long long int pad : 12;
++};
++
++struct tmp
++sub (struct tmp tmp)
++{
++ tmp.field |= 0x0008765412345678LL;
++ return tmp;
++}
++
++struct tmp2
++sub2 (struct tmp2 tmp2)
++{
++ tmp2.field |= 0x0008765412345678LL;
++ return tmp2;
++}
++
++main()
++{
++ struct tmp tmp = {0x123, 0xFFF000FFF000FLL};
++ struct tmp2 tmp2 = {0xFFF000FFF000FLL, 0x123};
++
++ tmp = sub (tmp);
++ tmp2 = sub2 (tmp2);
++
++ if (tmp.pad != 0x123 || tmp.field != 0xFFFFFF541FFF567FLL)
++ abort ();
++ if (tmp2.pad != 0x123 || tmp2.field != 0xFFFFFF541FFF567FLL)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++struct { long f8:8; long f24:24; } a;
++struct { long f32:32; } b;
++
++main ()
++{
++ if (sizeof (a) != sizeof (b))
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++struct foo
++{
++ unsigned half:16;
++ unsigned long whole:32 __attribute__ ((packed));
++};
++
++f (struct foo *q)
++{
++ if (q->half != 0x1234)
++ abort ();
++ if (q->whole != 0x56789abcL)
++ abort ();
++}
++
++main ()
++{
++ struct foo bar;
++
++ bar.half = 0x1234;
++ bar.whole = 0x56789abcL;
++ f (&bar);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++main ()
++{
++ struct {
++ signed int s:3;
++ unsigned int u:3;
++ int i:3;
++ } x = {-1, -1, -1};
++
++ if (x.u != 7)
++ abort ();
++ if (x.s != - 1)
++ abort ();
++
++ if (x.i != -1 && x.i != 7)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,66 @@
++/*
++ This test checks promotion of bitfields. Bitfields should be promoted
++ very much like chars and shorts:
++
++ Bitfields (signed or unsigned) should be promoted to signed int if their
++ value will fit in a signed int, otherwise to an unsigned int if their
++ value will fit in an unsigned int, otherwise we don't promote them (ANSI/ISO
++ does not specify the behavior of bitfields larger than an unsigned int).
++
++ We test the behavior by subtracting two from the promoted value: this will
++ result in a negitive value for signed types, a positive value for unsigned
++ types. This test (of course) assumes that the compiler is correctly
++ implementing signed and unsigned arithmetic.
++ */
++
++struct X {
++ unsigned int u3:3;
++ long int s31:31;
++ long int s32:32;
++ unsigned long int u31:31;
++ unsigned long int u32:32;
++ unsigned long long ull3 :3;
++ unsigned long long ull35:35;
++ unsigned u15:15;
++};
++
++struct X x;
++
++main ()
++{
++ if ((x.u3 - 2) >= 0) /* promoted value should be signed */
++ abort ();
++
++ if ((x.s31 - 2) >= 0) /* promoted value should be signed */
++ abort ();
++
++ if ((x.s32 - 2) >= 0) /* promoted value should be signed */
++ abort ();
++
++ if ((x.u15 - 2) >= 0) /* promoted value should be signed */
++ abort ();
++
++ /* Conditionalize check on whether integers are 4 bytes or larger, i.e.
++ larger than a 31 bit bitfield. */
++ if (sizeof (int) >= 4)
++ {
++ if ((x.u31 - 2) >= 0) /* promoted value should be signed */
++ abort ();
++ }
++ else
++ {
++ if ((x.u31 - 2) < 0) /* promoted value should be UNsigned */
++ abort ();
++ }
++
++ if ((x.u32 - 2) < 0) /* promoted value should be UNsigned */
++ abort ();
++
++ if ((x.ull3 - 2) >= 0) /* promoted value should be signed */
++ abort ();
++
++ if ((x.ull35 - 2) < 0) /* promoted value should be UNsigned */
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cbrt.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cbrt.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cbrt.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cbrt.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,92 @@
++/*
++ * ====================================================
++ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
++ *
++ * Developed at SunPro, a Sun Microsystems, Inc. business.
++ * Permission to use, copy, modify, and distribute this
++ * software is freely granted, provided that this notice
++ * is preserved.
++ * ====================================================
++*/
++
++#ifndef __vax__
++static const unsigned long
++ B1 = 715094163, /* B1 = (682-0.03306235651)*2**20 */
++ B2 = 696219795; /* B2 = (664-0.03306235651)*2**20 */
++
++static const double
++ C = 5.42857142857142815906e-01, /* 19/35 = 0x3FE15F15, 0xF15F15F1 */
++ D = -7.05306122448979611050e-01, /* -864/1225 = 0xBFE691DE, 0x2532C834 */
++ E = 1.41428571428571436819e+00, /* 99/70 = 0x3FF6A0EA, 0x0EA0EA0F */
++ F = 1.60714285714285720630e+00, /* 45/28 = 0x3FF9B6DB, 0x6DB6DB6E */
++ G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */
++
++double
++cbrtl (double x)
++{
++ long hx;
++ double r,s,w;
++ double lt;
++ unsigned sign;
++ typedef unsigned unsigned32 __attribute__((mode(SI)));
++ union {
++ double t;
++ unsigned32 pt[2];
++ } ut, ux;
++ int n0;
++
++ ut.t = 1.0;
++ n0 = (ut.pt[0] == 0);
++
++ ut.t = 0.0;
++ ux.t = x;
++
++ hx = ux.pt[n0]; /* high word of x */
++ sign=hx&0x80000000; /* sign= sign(x) */
++ hx ^=sign;
++ if(hx>=0x7ff00000) return(x+x); /* cbrt(NaN,INF) is itself */
++ if((hx| ux.pt[1-n0])==0)
++ return(ux.t); /* cbrt(0) is itself */
++
++ ux.pt[n0] = hx;
++ /* rough cbrt to 5 bits */
++ if(hx<0x00100000) /* subnormal number */
++ {ut.pt[n0]=0x43500000; /* set t= 2**54 */
++ ut.t*=x; ut.pt[n0]=ut.pt[n0]/3+B2;
++ }
++ else
++ ut.pt[n0]=hx/3+B1;
++
++ /* new cbrt to 23 bits, may be implemented in single precision */
++ r=ut.t*ut.t/ux.t;
++ s=C+r*ut.t;
++ ut.t*=G+F/(s+E+D/s);
++
++ /* chopped to 20 bits and make it larger than cbrt(x) */
++ ut.pt[1-n0]=0; ut.pt[n0]+=0x00000001;
++
++ /* one step newton iteration to 53 bits with error less than 0.667 ulps */
++ s=ut.t*ut.t; /* t*t is exact */
++ r=ux.t/s;
++ w=ut.t+ut.t;
++ r=(r-ut.t)/(w+r); /* r-s is exact */
++ ut.t=ut.t+ut.t*r;
++
++ /* restore the sign bit */
++ ut.pt[n0] |= sign;
++
++ lt = ut.t;
++ lt -= (lt - (x/(lt*lt))) * 0.333333333333333333333;
++ return lt;
++}
++
++main ()
++{
++ if ((int) (cbrtl (27.0) + 0.5) != 3)
++ abort ();
++
++ exit (0);
++}
++#else
++main () { exit (0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,218 @@
++#define F 140
++#define T 13
++
++feq (x, y)
++ long long int x;
++ long long int y;
++{
++ if (x == y)
++ return T;
++ else
++ return F;
++}
++
++fne (x, y)
++ long long int x;
++ long long int y;
++{
++ if (x != y)
++ return T;
++ else
++ return F;
++}
++
++flt (x, y)
++ long long int x;
++ long long int y;
++{
++ if (x < y)
++ return T;
++ else
++ return F;
++}
++
++fge (x, y)
++ long long int x;
++ long long int y;
++{
++ if (x >= y)
++ return T;
++ else
++ return F;
++}
++
++fgt (x, y)
++ long long int x;
++ long long int y;
++{
++ if (x > y)
++ return T;
++ else
++ return F;
++}
++
++fle (x, y)
++ long long int x;
++ long long int y;
++{
++ if (x <= y)
++ return T;
++ else
++ return F;
++}
++
++fltu (x, y)
++ unsigned long long int x;
++ unsigned long long int y;
++{
++ if (x < y)
++ return T;
++ else
++ return F;
++}
++
++fgeu (x, y)
++ unsigned long long int x;
++ unsigned long long int y;
++{
++ if (x >= y)
++ return T;
++ else
++ return F;
++}
++
++fgtu (x, y)
++ unsigned long long int x;
++ unsigned long long int y;
++{
++ if (x > y)
++ return T;
++ else
++ return F;
++}
++
++fleu (x, y)
++ unsigned long long int x;
++ unsigned long long int y;
++{
++ if (x <= y)
++ return T;
++ else
++ return F;
++}
++
++long long args[] =
++{
++ 0LL,
++ 1LL,
++ -1LL,
++ 0x7fffffffffffffffLL,
++ 0x8000000000000000LL,
++ 0x8000000000000001LL,
++ 0x1A3F237394D36C58LL,
++ 0x93850E92CAAC1B04LL
++};
++
++int correct_results[] =
++{
++ T, F, F, T, F, T, F, T, F, T,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, F, T, T, F, F, T, T, F,
++ T, F, F, T, F, T, F, T, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, F, T, T, F,
++ T, F, F, T, F, T, F, T, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, T, F, F, T,
++ T, F, F, T, F, T, F, T, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ T, F, F, T, F, T, F, T, F, T,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ T, F, F, T, F, T, F, T, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ T, F, F, T, F, T, F, T, F, T,
++ F, T, F, T, T, F, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, T, F, F, T, T, F, F, T,
++ F, T, T, F, F, T, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, F, T, T, F, F, T, T, F,
++ F, T, T, F, F, T, F, T, T, F,
++ T, F, F, T, F, T, F, T, F, T
++};
++
++main ()
++{
++ int i, j, *res = correct_results;
++
++ for (i = 0; i < 8; i++)
++ {
++ long long arg0 = args[i];
++ for (j = 0; j < 8; j++)
++ {
++ long long arg1 = args[j];
++
++ if (feq (arg0, arg1) != *res++)
++ abort ();
++ if (fne (arg0, arg1) != *res++)
++ abort ();
++ if (flt (arg0, arg1) != *res++)
++ abort ();
++ if (fge (arg0, arg1) != *res++)
++ abort ();
++ if (fgt (arg0, arg1) != *res++)
++ abort ();
++ if (fle (arg0, arg1) != *res++)
++ abort ();
++ if (fltu (arg0, arg1) != *res++)
++ abort ();
++ if (fgeu (arg0, arg1) != *res++)
++ abort ();
++ if (fgtu (arg0, arg1) != *res++)
++ abort ();
++ if (fleu (arg0, arg1) != *res++)
++ abort ();
++ }
++ }
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++f1 (unsigned int x, unsigned int y)
++{
++ if (x == 0)
++ dummy ();
++ x -= y;
++ /* 0xfffffff2 < 0x80000000? */
++ if (x < ~(~(unsigned int) 0 >> 1))
++ abort ();
++ return x;
++}
++
++f2 (unsigned long int x, unsigned long int y)
++{
++ if (x == 0)
++ dummy ();
++ x -= y;
++ /* 0xfffffff2 < 0x80000000? */
++ if (x < ~(~(unsigned long int) 0 >> 1))
++ abort ();
++ return x;
++}
++
++
++dummy () {}
++
++main ()
++{
++ /* 0x7ffffff3 0x80000001 */
++ f1 ((~(unsigned int) 0 >> 1) - 12, ~(~(unsigned int) 0 >> 1) + 1);
++ f2 ((~(unsigned long int) 0 >> 1) - 12, ~(~(unsigned long int) 0 >> 1) + 1);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,164 @@
++#include <stdlib.h>
++
++#ifndef NO_LABEL_VALUES
++typedef unsigned int uint32;
++typedef signed int sint32;
++
++typedef uint32 reg_t;
++
++typedef unsigned long int host_addr_t;
++typedef uint32 target_addr_t;
++typedef sint32 target_saddr_t;
++
++typedef union
++{
++ struct
++ {
++ unsigned int offset:18;
++ unsigned int ignore:4;
++ unsigned int s1:8;
++ int :2;
++ signed int simm:14;
++ unsigned int s3:8;
++ unsigned int s2:8;
++ int pad2:2;
++ } f1;
++ long long ll;
++ double d;
++} insn_t;
++
++typedef struct
++{
++ target_addr_t vaddr_tag;
++ unsigned long int rigged_paddr;
++} tlb_entry_t;
++
++typedef struct
++{
++ insn_t *pc;
++ reg_t registers[256];
++ insn_t *program;
++ tlb_entry_t tlb_tab[0x100];
++} environment_t;
++
++enum operations
++{
++ LOAD32_RR,
++ METAOP_DONE
++};
++
++host_addr_t
++f ()
++{
++ abort ();
++}
++
++reg_t
++simulator_kernel (int what, environment_t *env)
++{
++ register insn_t *pc = env->pc;
++ register reg_t *regs = env->registers;
++ register insn_t insn;
++ register int s1;
++ register reg_t r2;
++ register void *base_addr = &&sim_base_addr;
++ register tlb_entry_t *tlb = env->tlb_tab;
++
++ if (what != 0)
++ {
++ int i;
++ static void *op_map[] =
++ {
++ &&L_LOAD32_RR,
++ &&L_METAOP_DONE,
++ };
++ insn_t *program = env->program;
++ for (i = 0; i < what; i++)
++ program[i].f1.offset = op_map[program[i].f1.offset] - base_addr;
++ }
++
++ sim_base_addr:;
++
++ insn = *pc++;
++ r2 = (*(reg_t *) (((char *) regs) + (insn.f1.s2 << 2)));
++ s1 = (insn.f1.s1 << 2);
++ goto *(base_addr + insn.f1.offset);
++
++ L_LOAD32_RR:
++ {
++ target_addr_t vaddr_page = r2 / 4096;
++ unsigned int x = vaddr_page % 0x100;
++ insn = *pc++;
++
++ for (;;)
++ {
++ target_addr_t tag = tlb[x].vaddr_tag;
++ host_addr_t rigged_paddr = tlb[x].rigged_paddr;
++
++ if (tag == vaddr_page)
++ {
++ *(reg_t *) (((char *) regs) + s1) = *(uint32 *) (rigged_paddr + r2);
++ r2 = *(reg_t *) (((char *) regs) + (insn.f1.s2 << 2));
++ s1 = insn.f1.s1 << 2;
++ goto *(base_addr + insn.f1.offset);
++ }
++
++ if (((target_saddr_t) tag < 0))
++ {
++ *(reg_t *) (((char *) regs) + s1) = *(uint32 *) f ();
++ r2 = *(reg_t *) (((char *) regs) + (insn.f1.s2 << 2));
++ s1 = insn.f1.s1 << 2;
++ goto *(base_addr + insn.f1.offset);
++ }
++
++ x = (x - 1) % 0x100;
++ }
++
++ L_METAOP_DONE:
++ return (*(reg_t *) (((char *) regs) + s1));
++ }
++}
++
++insn_t program[2 + 1];
++
++void *malloc ();
++
++int
++main ()
++{
++ environment_t env;
++ insn_t insn;
++ int i, res;
++ host_addr_t a_page = (host_addr_t) malloc (2 * 4096);
++ target_addr_t a_vaddr = 0x123450;
++ target_addr_t vaddr_page = a_vaddr / 4096;
++ a_page = (a_page + 4096 - 1) & -4096;
++
++ env.tlb_tab[((vaddr_page) % 0x100)].vaddr_tag = vaddr_page;
++ env.tlb_tab[((vaddr_page) % 0x100)].rigged_paddr = a_page - vaddr_page * 4096;
++ insn.f1.offset = LOAD32_RR;
++ env.registers[0] = 0;
++ env.registers[2] = a_vaddr;
++ *(int *) (a_page + a_vaddr % 4096) = 88;
++ insn.f1.s1 = 0;
++ insn.f1.s2 = 2;
++
++ for (i = 0; i < 2; i++)
++ program[i] = insn;
++
++ insn.f1.offset = METAOP_DONE;
++ insn.f1.s1 = 0;
++ program[2] = insn;
++
++ env.pc = program;
++ env.program = program;
++
++ res = simulator_kernel (2 + 1, &env);
++
++ if (res != 88)
++ abort ();
++ exit (0);
++}
++#else
++main(){ exit (0); }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++double
++g0 (double x)
++{
++ return 1.0;
++}
++
++double
++g1 (double x)
++{
++ return -1.0;
++}
++
++double
++g2 (double x)
++{
++ return 0.0;
++}
++
++__complex__ double
++cexp (__complex__ double x)
++{
++ double r;
++
++ r = g0 (__real__ x);
++ __real__ x = r * g1 (__imag__ x);
++ __imag__ x = r * g2 (__imag__ x);
++ return x;
++}
++
++main ()
++{
++ __complex__ double x;
++
++ x = cexp (1.0i);
++ if (__real__ x != -1.0)
++ abort ();
++ if (__imag__ x != 0.0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++__complex__ double
++f (__complex__ double x, __complex__ double y)
++{
++ x += y;
++ return x;
++}
++
++__complex__ double ag = 1.0 + 1.0i;
++__complex__ double bg = -2.0 + 2.0i;
++
++main ()
++{
++ __complex__ double a, b, c;
++
++ a = ag;
++ b = -2.0 + 2.0i;
++ c = f (a, b);
++
++ if (a != 1.0 + 1.0i)
++ abort ();
++ if (b != -2.0 + 2.0i)
++ abort ();
++ if (c != -1.0 + 3.0i)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++struct complex
++{
++ float r;
++ float i;
++};
++
++struct complex cmplx (float, float);
++
++struct complex
++f (float a, float b)
++{
++ struct complex c;
++ c.r = a;
++ c.i = b;
++ return c;
++}
++
++main ()
++{
++ struct complex z = f (1.0, 0.0);
++
++ if (z.r != 1.0 || z.i != 0.0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++main ()
++{
++ if ((__complex__ double) 0.0 != (__complex__ double) (-0.0))
++ abort ();
++
++ if (0.0 != -0.0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/complex-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/complex-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++float __complex__
++p (float __complex__ a, float __complex__ b)
++{
++ return a + b;
++}
++
++float __complex__ x = 1.0 + 14.0 * (1.0fi);
++float __complex__ y = 7.0 + 5.0 * (1.0fi);
++float __complex__ w = 8.0 + 19.0 * (1.0fi);
++float __complex__ z;
++
++main ()
++{
++
++ z = p (x,y);
++ y = p (x, 1.0f / z);
++ if (z != w)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/compndlit-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/compndlit-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/compndlit-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/compndlit-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct S
++{
++ int a:3;
++ unsigned b:1, c:28;
++};
++
++struct S x = {1, 1, 1};
++
++main ()
++{
++ x = (struct S) {b:0, a:0, c:({ struct S o = x; o.a == 1 ? 10 : 20;})};
++ if (x.c != 10)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=execute.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/conversion.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/conversion.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/conversion.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/conversion.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,380 @@
++/* Test front-end conversions, optimizer conversions, and run-time
++ conversions between different arithmetic types.
++
++ Constants are specified in a non-obvious way to make them work for
++ any word size. Their value on a 32-bit machine is indicated in the
++ comments.
++
++ Note that this code is NOT intended for testing of accuracy of fp
++ conversions. */
++
++float
++u2f(u)
++ unsigned int u;
++{
++ return u;
++}
++
++double
++u2d(u)
++ unsigned int u;
++{
++ return u;
++}
++
++float
++s2f(s)
++ int s;
++{
++ return s;
++}
++
++double
++s2d(s)
++ int s;
++{
++ return s;
++}
++
++int
++fnear (float x, float y)
++{
++ float t = x - y;
++ return t == 0 || x / t > 1000000.0;
++}
++
++int
++dnear (double x, double y)
++{
++ double t = x - y;
++ return t == 0 || x / t > 100000000000000.0;
++}
++
++test_integer_to_float()
++{
++ if (u2f(0U) != (float) 0U) /* 0 */
++ abort();
++ if (!fnear (u2f(~0U), (float) ~0U)) /* 0xffffffff */
++ abort();
++ if (!fnear (u2f((~0U) >> 1), (float) ((~0U) >> 1))) /* 0x7fffffff */
++ abort();
++ if (u2f(~((~0U) >> 1)) != (float) ~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (u2d(0U) != (double) 0U) /* 0 */
++ abort();
++ if (!dnear (u2d(~0U), (double) ~0U)) /* 0xffffffff */
++ abort();
++ if (!dnear (u2d((~0U) >> 1),(double) ((~0U) >> 1))) /* 0x7fffffff */
++ abort();
++ if (u2d(~((~0U) >> 1)) != (double) ~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (s2f(0) != (float) 0) /* 0 */
++ abort();
++ if (!fnear (s2f(~0), (float) ~0)) /* 0xffffffff */
++ abort();
++ if (!fnear (s2f((int)((~0U) >> 1)), (float)(int)((~0U) >> 1))) /* 0x7fffffff */
++ abort();
++ if (s2f((int)(~((~0U) >> 1))) != (float)(int)~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (s2d(0) != (double) 0) /* 0 */
++ abort();
++ if (!dnear (s2d(~0), (double) ~0)) /* 0xffffffff */
++ abort();
++ if (!dnear (s2d((int)((~0U) >> 1)), (double)(int)((~0U) >> 1))) /* 0x7fffffff */
++ abort();
++ if (s2d((int)~((~0U) >> 1)) != (double)(int)~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++}
++
++#if __GNUC__
++float
++ull2f(u)
++ unsigned long long int u;
++{
++ return u;
++}
++
++double
++ull2d(u)
++ unsigned long long int u;
++{
++ return u;
++}
++
++float
++sll2f(s)
++ long long int s;
++{
++ return s;
++}
++
++double
++sll2d(s)
++ long long int s;
++{
++ return s;
++}
++
++test_longlong_integer_to_float()
++{
++ if (ull2f(0ULL) != (float) 0ULL) /* 0 */
++ abort();
++ if (ull2f(~0ULL) != (float) ~0ULL) /* 0xffffffff */
++ abort();
++ if (ull2f((~0ULL) >> 1) != (float) ((~0ULL) >> 1)) /* 0x7fffffff */
++ abort();
++ if (ull2f(~((~0ULL) >> 1)) != (float) ~((~0ULL) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (ull2d(0ULL) != (double) 0ULL) /* 0 */
++ abort();
++#if __HAVE_68881__
++ /* Some 68881 targets return values in fp0, with excess precision.
++ But the compile-time conversion to double works correctly. */
++ if (! dnear (ull2d(~0ULL), (double) ~0ULL)) /* 0xffffffff */
++ abort();
++ if (! dnear (ull2d((~0ULL) >> 1), (double) ((~0ULL) >> 1))) /* 0x7fffffff */
++ abort();
++#else
++ if (ull2d(~0ULL) != (double) ~0ULL) /* 0xffffffff */
++ abort();
++ if (ull2d((~0ULL) >> 1) != (double) ((~0ULL) >> 1)) /* 0x7fffffff */
++ abort();
++#endif
++ if (ull2d(~((~0ULL) >> 1)) != (double) ~((~0ULL) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (sll2f(0LL) != (float) 0LL) /* 0 */
++ abort();
++ if (sll2f(~0LL) != (float) ~0LL) /* 0xffffffff */
++ abort();
++ if (! fnear (sll2f((long long int)((~0ULL) >> 1)), (float)(long long int)((~0ULL) >> 1))) /* 0x7fffffff */
++ abort();
++ if (sll2f((long long int)(~((~0ULL) >> 1))) != (float)(long long int)~((~0ULL) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (sll2d(0LL) != (double) 0LL) /* 0 */
++ abort();
++ if (sll2d(~0LL) != (double) ~0LL) /* 0xffffffff */
++ abort();
++ if (!dnear (sll2d((long long int)((~0ULL) >> 1)), (double)(long long int)((~0ULL) >> 1))) /* 0x7fffffff */
++ abort();
++ if (! dnear (sll2d((long long int)~((~0ULL) >> 1)), (double)(long long int)~((~0ULL) >> 1))) /* 0x80000000 */
++ abort();
++}
++#endif
++
++unsigned int
++f2u(float f)
++{
++ return (unsigned) f;
++}
++
++unsigned int
++d2u(double d)
++{
++ return (unsigned) d;
++}
++
++int
++f2s(float f)
++{
++ return (int) f;
++}
++
++int
++d2s(double d)
++{
++ return (int) d;
++}
++
++test_float_to_integer()
++{
++ if (f2u(0.0) != 0)
++ abort();
++ if (f2u(0.999) != 0)
++ abort();
++ if (f2u(1.0) != 1)
++ abort();
++ if (f2u(1.99) != 1)
++ abort();
++ if (f2u((float) ((~0U) >> 1)) != (~0U) >> 1 && /* 0x7fffffff */
++ f2u((float) ((~0U) >> 1)) != ((~0U) >> 1) + 1)
++ abort();
++ if (f2u((float) ~((~0U) >> 1)) != ~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++
++ /* CYGNUS LOCAL -- amylaar/32bit doubles */
++ /* These tests require double precision, so for hosts that don't offer
++ that much precision, just ignore these test. */
++ if (sizeof (double) >= 8) {
++ /* END CYGNUS LOCAL -- amylaar/32bit doubles */
++ if (d2u(0.0) != 0)
++ abort();
++ if (d2u(0.999) != 0)
++ abort();
++ if (d2u(1.0) != 1)
++ abort();
++ if (d2u(1.99) != 1)
++ abort();
++ if (d2u((double) (~0U)) != ~0U) /* 0xffffffff */
++ abort();
++ if (d2u((double) ((~0U) >> 1)) != (~0U) >> 1) /* 0x7fffffff */
++ abort();
++ if (d2u((double) ~((~0U) >> 1)) != ~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++ /* CYGNUS LOCAL -- amylaar/32bit doubles */
++ }
++ /* END CYGNUS LOCAL -- amylaar/32bit doubles */
++
++
++ if (f2s(0.0) != 0)
++ abort();
++ if (f2s(0.999) != 0)
++ abort();
++ if (f2s(1.0) != 1)
++ abort();
++ if (f2s(1.99) != 1)
++ abort();
++ if (f2s(-0.999) != 0)
++ abort();
++ if (f2s(-1.0) != -1)
++ abort();
++ if (f2s(-1.99) != -1)
++ abort();
++ if (f2s((float)(int)~((~0U) >> 1)) != (int)~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++
++ /* CYGNUS LOCAL -- amylaar/32bit doubles */
++ /* These tests require double precision, so for hosts that don't offer
++ that much precision, just ignore these test. */
++ if (sizeof (double) >= 8) {
++ /* END CYGNUS LOCAL -- amylaar/32bit doubles */
++ if (d2s(0.0) != 0)
++ abort();
++ if (d2s(0.999) != 0)
++ abort();
++ if (d2s(1.0) != 1)
++ abort();
++ if (d2s(1.99) != 1)
++ abort();
++ if (d2s(-0.999) != 0)
++ abort();
++ if (d2s(-1.0) != -1)
++ abort();
++ if (d2s(-1.99) != -1)
++ abort();
++ if (d2s((double) ((~0U) >> 1)) != (~0U) >> 1) /* 0x7fffffff */
++ abort();
++ if (d2s((double)(int)~((~0U) >> 1)) != (int)~((~0U) >> 1)) /* 0x80000000 */
++ abort();
++ /* CYGNUS LOCAL -- amylaar/32bit doubles */
++ }
++ /* END CYGNUS LOCAL -- amylaar/32bit doubles */
++}
++
++#if __GNUC__
++unsigned long long int
++f2ull(float f)
++{
++ return (unsigned long long int) f;
++}
++
++unsigned long long int
++d2ull(double d)
++{
++ return (unsigned long long int) d;
++}
++
++long long int
++f2sll(float f)
++{
++ return (long long int) f;
++}
++
++long long int
++d2sll(double d)
++{
++ return (long long int) d;
++}
++
++test_float_to_longlong_integer()
++{
++ if (f2ull(0.0) != 0LL)
++ abort();
++ if (f2ull(0.999) != 0LL)
++ abort();
++ if (f2ull(1.0) != 1LL)
++ abort();
++ if (f2ull(1.99) != 1LL)
++ abort();
++ if (f2ull((float) ((~0ULL) >> 1)) != (~0ULL) >> 1 && /* 0x7fffffff */
++ f2ull((float) ((~0ULL) >> 1)) != ((~0ULL) >> 1) + 1)
++ abort();
++ if (f2ull((float) ~((~0ULL) >> 1)) != ~((~0ULL) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (d2ull(0.0) != 0LL)
++ abort();
++ if (d2ull(0.999) != 0LL)
++ abort();
++ if (d2ull(1.0) != 1LL)
++ abort();
++ if (d2ull(1.99) != 1LL)
++ abort();
++ if (d2ull((double) ((~0ULL) >> 1)) != (~0ULL) >> 1 && /* 0x7fffffff */
++ d2ull((double) ((~0ULL) >> 1)) != ((~0ULL) >> 1) + 1)
++ abort();
++ if (d2ull((double) ~((~0ULL) >> 1)) != ~((~0ULL) >> 1)) /* 0x80000000 */
++ abort();
++
++
++ if (f2sll(0.0) != 0LL)
++ abort();
++ if (f2sll(0.999) != 0LL)
++ abort();
++ if (f2sll(1.0) != 1LL)
++ abort();
++ if (f2sll(1.99) != 1LL)
++ abort();
++ if (f2sll(-0.999) != 0LL)
++ abort();
++ if (f2sll(-1.0) != -1LL)
++ abort();
++ if (f2sll(-1.99) != -1LL)
++ abort();
++ if (f2sll((float)(long long int)~((~0ULL) >> 1)) != (long long int)~((~0ULL) >> 1)) /* 0x80000000 */
++ abort();
++
++ if (d2sll(0.0) != 0LL)
++ abort();
++ if (d2sll(0.999) != 0LL)
++ abort();
++ if (d2sll(1.0) != 1LL)
++ abort();
++ if (d2sll(1.99) != 1LL)
++ abort();
++ if (d2sll(-0.999) != 0LL)
++ abort();
++ if (d2sll(-1.0) != -1LL)
++ abort();
++ if (d2sll(-1.99) != -1LL)
++ abort();
++ if (d2sll((double)(long long int)~((~0ULL) >> 1)) != (long long int)~((~0ULL) >> 1)) /* 0x80000000 */
++ abort();
++}
++#endif
++
++main()
++{
++ test_integer_to_float();
++ test_float_to_integer();
++#if __GNUC__
++ test_longlong_integer_to_float();
++ test_float_to_longlong_integer();
++#endif
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cvt-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cvt-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cvt-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cvt-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++/* CYGNUS LOCAL -- meissner/16 bit ints */
++static inline long
++g1 (double x)
++{
++ return (double) (long) x;
++}
++
++long
++g2 (double f)
++{
++ return f;
++}
++
++double
++f (long i)
++{
++ if (g1 (i) != g2 (i))
++ abort ();
++ return g2 (i);
++}
++
++main ()
++{
++ if (f (123456789L) != 123456789L)
++ abort ();
++ if (f (123456789L) != g2 (123456789L))
++ abort ();
++ exit (0);
++}
++/* END CYGNUS LOCAL -- meissner/16 bit ints */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cvt-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cvt-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/cvt-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/cvt-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++# This doesn't work on d10v if ints are not 32 bits
++
++if { [istarget "d10v-*-*"] && ! [string-match "*-mint32*" $CFLAGS] } {
++ set torture_execute_xfail "d10v-*-*"
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/dbra-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/dbra-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/dbra-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/dbra-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,95 @@
++f1 (a)
++ long a;
++{
++ int i;
++ for (i = 0; i < 10; i++)
++ {
++ if (--a == -1)
++ return i;
++ }
++ return -1;
++}
++
++f2 (a)
++ long a;
++{
++ int i;
++ for (i = 0; i < 10; i++)
++ {
++ if (--a != -1)
++ return i;
++ }
++ return -1;
++}
++
++f3 (a)
++ long a;
++{
++ int i;
++ for (i = 0; i < 10; i++)
++ {
++ if (--a == 0)
++ return i;
++ }
++ return -1;
++}
++
++f4 (a)
++ long a;
++{
++ int i;
++ for (i = 0; i < 10; i++)
++ {
++ if (--a != 0)
++ return i;
++ }
++ return -1;
++}
++
++f5 (a)
++ long a;
++{
++ int i;
++ for (i = 0; i < 10; i++)
++ {
++ if (++a == 0)
++ return i;
++ }
++ return -1;
++}
++
++f6 (a)
++ long a;
++{
++ int i;
++ for (i = 0; i < 10; i++)
++ {
++ if (++a != 0)
++ return i;
++ }
++ return -1;
++}
++
++
++main()
++{
++ if (f1 (5L) != 5)
++ abort ();
++ if (f2 (1L) != 0)
++ abort ();
++ if (f2 (0L) != 1)
++ abort ();
++ if (f3 (5L) != 4)
++ abort ();
++ if (f4 (1L) != 1)
++ abort ();
++ if (f4 (0L) != 0)
++ abort ();
++ if (f5 (-5L) != 4)
++ abort ();
++ if (f6 (-1L) != 1)
++ abort ();
++ if (f6 (0L) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divconst-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divconst-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divconst-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divconst-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++typedef struct
++{
++ unsigned a, b, c, d;
++} t1;
++
++f (t1 *ps)
++{
++ ps->a = 10000;
++ ps->b = ps->a / 3;
++ ps->c = 10000;
++ ps->d = ps->c / 3;
++}
++
++main ()
++{
++ t1 s;
++ f (&s);
++ if (s.a != 10000 || s.b != 3333 || s.c != 10000 || s.d != 3333)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divconst-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divconst-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divconst-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divconst-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++long
++f (long x)
++{
++ return x / (-0x7fffffffL - 1L);
++}
++
++main ()
++{
++ if (f (-1L) != 0L || f (0x7fffffffL) != 0L || f (-0x7fffffffL - 1L) != 1l)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divconst-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divconst-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divconst-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divconst-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++long long
++f (long long x)
++{
++ return x / 10000000000LL;
++}
++
++main ()
++{
++ if (f (10000000000LL) != 1 || f (100000000000LL) != 10)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divmod-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divmod-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/divmod-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/divmod-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,72 @@
++div1 (x)
++ signed char x;
++{
++ return x / -1;
++}
++
++div2 (x)
++ signed short x;
++{
++ return x / -1;
++}
++
++div3 (x, y)
++ signed char x;
++ signed char y;
++{
++ return x / y;
++}
++
++div4 (x, y)
++ signed short x;
++ signed short y;
++{
++ return x / y;
++}
++
++mod1 (x)
++ signed char x;
++{
++ return x % -1;
++}
++
++mod2 (x)
++ signed short x;
++{
++ return x % -1;
++}
++
++mod3 (x, y)
++ signed char x;
++ signed char y;
++{
++ return x % y;
++}
++
++mod4 (x, y)
++ signed short x;
++ signed short y;
++{
++ return x % y;
++}
++
++main ()
++{
++ if (div1 (-(1 << 7)) != 1 << 7)
++ abort ();
++ if (div2 (-(1 << 15)) != 1 << 15)
++ abort ();
++ if (div3 (-(1 << 7), -1) != 1 << 7)
++ abort ();
++ if (div4 (-(1 << 15), -1) != 1 << 15)
++ abort ();
++ if (mod1 (-(1 << 7)) != 0)
++ abort ();
++ if (mod2 (-(1 << 15)) != 0)
++ abort ();
++ if (mod3 (-(1 << 7), -1) != 0)
++ abort ();
++ if (mod4 (-(1 << 15), -1) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/enum-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/enum-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/enum-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/enum-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++typedef enum
++{
++ END = -1,
++ EMPTY = (1 << 8 ) ,
++ BACKREF,
++ BEGLINE,
++ ENDLINE,
++ BEGWORD,
++ ENDWORD,
++ LIMWORD,
++ NOTLIMWORD,
++ QMARK,
++ STAR,
++ PLUS,
++ REPMN,
++ CAT,
++ OR,
++ ORTOP,
++ LPAREN,
++ RPAREN,
++ CSET
++} token;
++
++static token tok;
++
++static int
++atom ()
++{
++ if ((tok >= 0 && tok < (1 << 8 ) ) || tok >= CSET || tok == BACKREF
++ || tok == BEGLINE || tok == ENDLINE || tok == BEGWORD
++ || tok == ENDWORD || tok == LIMWORD || tok == NOTLIMWORD)
++ return 1;
++ else
++ return 0;
++}
++
++main ()
++{
++ tok = 0;
++ if (atom () != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/execute.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/execute.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/execute.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/execute.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++# Copyright (C) 1991, 1992, 1993, 1995, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++# Modified and maintained by Jeffrey Wheat (cassidy@cygnus.com)
++
++#
++# These tests come from Torbjorn Granlund (tege@cygnus.com)
++# C torture test suite.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib c-torture.exp
++
++#
++# main test loop
++#
++
++foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $src] then {
++ continue
++ }
++
++ c-torture-execute $src
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++static double f (float a);
++static double (*fp) (float a);
++
++main ()
++{
++ fp = f;
++ if (fp ((float) 1) != 1.0)
++ abort ();
++ exit (0);
++}
++
++static double
++f (float a)
++{
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/gofast.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/gofast.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/gofast.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/gofast.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,99 @@
++/* Program to test gcc's usage of the gofast library. */
++
++/* The main guiding themes are to make it trivial to add test cases over time
++ and to make it easy for a program to parse the output to see if the right
++ libcalls are being made. */
++
++#include <stdio.h>
++
++float fp_add (float a, float b) { return a + b; }
++float fp_sub (float a, float b) { return a - b; }
++float fp_mul (float a, float b) { return a * b; }
++float fp_div (float a, float b) { return a / b; }
++float fp_neg (float a) { return -a; }
++
++double dp_add (double a, double b) { return a + b; }
++double dp_sub (double a, double b) { return a - b; }
++double dp_mul (double a, double b) { return a * b; }
++double dp_div (double a, double b) { return a / b; }
++double dp_neg (double a) { return -a; }
++
++double fp_to_dp (float f) { return f; }
++float dp_to_fp (double d) { return d; }
++
++int eqsf2 (float a, float b) { return a == b; }
++int nesf2 (float a, float b) { return a != b; }
++int gtsf2 (float a, float b) { return a > b; }
++int gesf2 (float a, float b) { return a >= b; }
++int ltsf2 (float a, float b) { return a < b; }
++int lesf2 (float a, float b) { return a <= b; }
++
++int eqdf2 (double a, double b) { return a == b; }
++int nedf2 (double a, double b) { return a != b; }
++int gtdf2 (double a, double b) { return a > b; }
++int gedf2 (double a, double b) { return a >= b; }
++int ltdf2 (double a, double b) { return a < b; }
++int ledf2 (double a, double b) { return a <= b; }
++
++float floatsisf (int i) { return i; }
++double floatsidf (int i) { return i; }
++int fixsfsi (float f) { return f; }
++int fixdfsi (double d) { return d; }
++unsigned int fixunssfsi (float f) { return f; }
++unsigned int fixunsdfsi (double d) { return d; }
++
++int fail_count = 0;
++
++int
++fail (char *msg)
++{
++ fail_count++;
++ fprintf (stderr, "Test failed: %s\n", msg);
++}
++
++int
++main()
++{
++ if (fp_add (1, 1) != 2) fail ("fp_add 1+1");
++ if (fp_sub (3, 2) != 1) fail ("fp_sub 3-2");
++ if (fp_mul (2, 3) != 6) fail ("fp_mul 2*3");
++ if (fp_div (3, 2) != 1.5) fail ("fp_div 3/2");
++ if (fp_neg (1) != -1) fail ("fp_neg 1");
++
++ if (dp_add (1, 1) != 2) fail ("dp_add 1+1");
++ if (dp_sub (3, 2) != 1) fail ("dp_sub 3-2");
++ if (dp_mul (2, 3) != 6) fail ("dp_mul 2*3");
++ if (dp_div (3, 2) != 1.5) fail ("dp_div 3/2");
++ if (dp_neg (1) != -1) fail ("dp_neg 1");
++
++ if (fp_to_dp (1.5) != 1.5) fail ("fp_to_dp 1.5");
++ if (dp_to_fp (1.5) != 1.5) fail ("dp_to_fp 1.5");
++
++ if (floatsisf (1) != 1) fail ("floatsisf 1");
++ if (floatsidf (1) != 1) fail ("floatsidf 1");
++ if (fixsfsi (1.42) != 1) fail ("fixsfsi 1.42");
++ if (fixunssfsi (1.42) != 1) fail ("fixunssfsi 1.42");
++ if (fixdfsi (1.42) != 1) fail ("fixdfsi 1.42");
++ if (fixunsdfsi (1.42) != 1) fail ("fixunsdfsi 1.42");
++
++ if (eqsf2 (1, 1) == 0) fail ("eqsf2 1==1");
++ if (eqsf2 (1, 2) != 0) fail ("eqsf2 1==2");
++ if (nesf2 (1, 2) == 0) fail ("nesf2 1!=1");
++ if (nesf2 (1, 1) != 0) fail ("nesf2 1!=1");
++ if (gtsf2 (2, 1) == 0) fail ("gtsf2 2>1");
++ if (gtsf2 (1, 1) != 0) fail ("gtsf2 1>1");
++ if (gtsf2 (0, 1) != 0) fail ("gtsf2 0>1");
++ if (gesf2 (2, 1) == 0) fail ("gesf2 2>=1");
++ if (gesf2 (1, 1) == 0) fail ("gesf2 1>=1");
++ if (gesf2 (0, 1) != 0) fail ("gesf2 0>=1");
++ if (ltsf2 (1, 2) == 0) fail ("ltsf2 1<2");
++ if (ltsf2 (1, 1) != 0) fail ("ltsf2 1<1");
++ if (ltsf2 (1, 0) != 0) fail ("ltsf2 1<0");
++ if (lesf2 (1, 2) == 0) fail ("lesf2 1<=2");
++ if (lesf2 (1, 1) == 0) fail ("lesf2 1<=1");
++ if (lesf2 (1, 0) != 0) fail ("lesf2 1<=0");
++
++ if (fail_count != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++unsigned u=2147483839;float f0=2147483648e0,f1=2147483904e0;
++main()
++{
++ float f=u;
++ if(f==f0)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++#include <stdio.h>
++double normalize(x)double x;{if(x==0)x=0;return x;}
++main(){char b[9];sprintf(b,"%g",normalize(-0.0));if(strcmp(b,"0"))abort();exit(0);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++main ()
++{
++ union {
++ double d;
++ unsigned char c[8];
++ } d;
++
++ d.d = 1.0/7.0;
++
++ if (sizeof (char) * 8 == sizeof (double))
++ {
++ if (d.c[0] == 0x92 && d.c[1] == 0x24 && d.c[2] == 0x49 && d.c[3] == 0x92
++ && d.c[4] == 0x24 && d.c[5] == 0x49 && d.c[6] == 0xc2 && d.c[7] == 0x3f)
++ exit (0);
++ if (d.c[7] == 0x92 && d.c[6] == 0x24 && d.c[5] == 0x49 && d.c[4] == 0x92
++ && d.c[3] == 0x24 && d.c[2] == 0x49 && d.c[1] == 0xc2 && d.c[0] == 0x3f)
++ exit (0);
++#if defined __arm__ || defined __thumb__
++ if (d.c[4] == 0x92 && d.c[5] == 0x24 && d.c[6] == 0x49 && d.c[7] == 0x92
++ && d.c[0] == 0x24 && d.c[1] == 0x49 && d.c[2] == 0xc2 && d.c[3] == 0x3f)
++ exit (0);
++#endif
++ abort ();
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++ int main(void)
++ {
++ float reale = 1.0f;
++ float oneplus;
++ int i;
++
++ if (sizeof (float) != 4)
++ exit (0);
++
++ for (i = 0; ; i++)
++ {
++ oneplus = 1.0f + reale;
++ if (oneplus == 1.0f)
++ break;
++ reale=reale/2.0f;
++ }
++ /* Assumes ieee754 accurate arithmetic above. */
++ if (i != 24)
++ abort ();
++ else
++ exit (0);
++ }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++set torture_eval_before_execute {
++
++ set compiler_conditional_xfail_data {
++ "ia32 fp rounding isn't pedantic" \
++ "i?86-*-*" \
++ { "-O3" "-O2" "-O1" "-Os"} \
++ { "" }
++ }
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=execute.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++#include <signal.h>
++
++double nan = 1.0/0.0 - 1.0/0.0;
++double x = 1.0;
++
++void leave ()
++{
++ exit (0);
++}
++
++main ()
++{
++#if ! defined (__vax__) && ! defined (_CRAY)
++ /* Move this line earlier, for architectures (like alpha) that issue
++ SIGFPE on the first comparisons. */
++#ifndef SIGNAL_SUPPRESS
++ /* Some machines catches a SIGFPE when a NaN is compared.
++ Let this test succeed o such machines. */
++ signal (SIGFPE, leave);
++#endif
++ /* NaN is an IEEE unordered operand. All these test should be false. */
++ if (nan == nan)
++ abort ();
++ if (nan != x)
++ x = 1.0;
++ else
++ abort ();
++
++ if (nan < x)
++ abort ();
++ if (nan > x)
++ abort ();
++ if (nan <= x)
++ abort ();
++ if (nan >= x)
++ abort ();
++ if (nan == x)
++ abort ();
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,61 @@
++#
++# Expect driver script for GCC Regression Tests
++# Copyright (C) 1993, 1996 Free Software Foundation
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++#
++# Written by Jeffrey Wheat (cassidy@cygnus.com)
++#
++
++#
++# These tests come from Torbjorn Granlund's (tege@cygnus.com)
++# C torture test suite, and other contributors.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++if [target_info exists ieee_multilib_flags] {
++ set additional_flags [target_info ieee_multilib_flags];
++} else {
++ set additional_flags "";
++}
++
++# We must use -ffloat-store to ensure that excess precision on some machines
++# does not cause problems
++lappend additional_flags "-ffloat-store"
++
++# load support procs
++load_lib c-torture.exp
++
++# initialize harness
++gcc_init
++
++#
++# main test loop
++#
++
++foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $src] then {
++ continue
++ }
++
++ c-torture-execute $src $additional_flags
++}
++
++# All done.
++gcc_finish
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++main ()
++{
++ union
++ {
++ double d;
++ unsigned short i[sizeof (double) / sizeof (short)];
++ } u;
++ int a = 0;
++ int b = -5;
++ int j;
++
++ u.d = (double) a / b;
++
++ /* Look for the right pattern, but be sloppy since
++ we don't know the byte order. */
++ for (j = 0; j < sizeof (double) / sizeof (short); j++)
++ {
++ if (u.i[j] == 0x8000)
++ exit (0);
++ }
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++/* Test IEEE +0/-0 rules */
++
++static double pzero = +0.0;
++static double nzero = -0.0;
++static double pinf = +1.0 / 0.0;
++static double ninf = -1.0 / 0.0;
++static double nan = 0.0 / 0.0;
++
++void
++expect (double value, double expected)
++{
++ if (expected != expected) /* expected value is Not a number */
++ {
++ if (value == value) /* actual value is a number */
++ abort ();
++ }
++
++ else if (value != value)
++ abort (); /* actual value is a NaN */
++
++ else if (memcmp ((void *)&value, (void *)&expected, sizeof (double)) != 0)
++ abort (); /* values don't match */
++}
++
++main ()
++{
++ expect (pzero + pzero, pzero);
++ expect (pzero + nzero, pzero);
++ expect (nzero + pzero, pzero);
++ expect (nzero + nzero, nzero);
++
++ expect (pzero - pzero, pzero);
++ expect (pzero - nzero, pzero);
++ expect (nzero - pzero, nzero);
++ expect (nzero - nzero, pzero);
++
++ expect (pzero * pzero, pzero);
++ expect (pzero * nzero, nzero);
++ expect (nzero * pzero, nzero);
++ expect (nzero * nzero, pzero);
++
++ expect (+1.00 * pzero, pzero);
++ expect (-1.00 * pzero, nzero);
++ expect (+1.00 * nzero, nzero);
++ expect (-1.00 * nzero, pzero);
++
++ expect (pzero / pzero, nan);
++ expect (pzero / nzero, nan);
++ expect (nzero / pzero, nan);
++ expect (nzero / nzero, nan);
++
++ expect (+1.00 / pzero, pinf);
++ expect (-1.00 / pzero, ninf);
++ expect (+1.00 / nzero, ninf);
++ expect (-1.00 / nzero, pinf);
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++double d (unsigned long long k)
++{
++ double x;
++
++ x = (double) k;
++ return x;
++}
++
++float s (unsigned long long k)
++{
++ float x;
++
++ x = (float) k;
++ return x;
++}
++
++main ()
++{
++ unsigned long long int k;
++ double x;
++
++ /* CYGNUS LOCAL -- meissner/32bit doubles */
++ if (sizeof (double) >= 8)
++ {
++ k = 0x8693ba6d7d220401ULL;
++ x = d (k);
++ k = (unsigned long long) x;
++ if (k != 0x8693ba6d7d220800ULL)
++ abort ();
++ }
++ /* END CYGNUS LOCAL -- meissner/32bit doubles */
++
++ k = 0x8234508000000001ULL;
++ x = s (k);
++ k = (unsigned long long) x;
++ if (k != 0x8234510000000000ULL)
++ abort ();
++
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++# This doesn't work on d10v if doubles are not 64 bits
++
++if { [istarget "d10v-*-*"] && ! [string-match "*-mdouble64*" $CFLAGS] } {
++ set torture_execute_xfail "d10v-*-*"
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/index-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/index-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/index-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/index-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++int a[] =
++{
++ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
++ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
++ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
++ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39
++};
++
++int
++f (long n)
++{
++ return a[n - 100000];
++}
++
++main ()
++{
++ if (f (100030L) != 30)
++ abort();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/inst-check.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/inst-check.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/inst-check.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/inst-check.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++#include <stdarg.h>
++
++f(m)
++{
++ int i,s=0;
++ for(i=0;i<m;i++)
++ s+=i;
++ return s;
++}
++
++main()
++{
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/int-compare.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/int-compare.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/int-compare.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/int-compare.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,108 @@
++#include <limits.h>
++
++gt (a, b)
++{
++ return a > b;
++}
++
++ge (a, b)
++{
++ return a >= b;
++}
++
++lt (a, b)
++{
++ return a < b;
++}
++
++le (a, b)
++{
++ return a <= b;
++}
++
++void
++true (c)
++{
++ if (!c)
++ abort();
++}
++
++void
++false (c)
++{
++ if (c)
++ abort();
++}
++
++f ()
++{
++ true (gt (2, 1));
++ false (gt (1, 2));
++
++ true (gt (INT_MAX, 0));
++ false (gt (0, INT_MAX));
++ true (gt (INT_MAX, 1));
++ false (gt (1, INT_MAX));
++
++ false (gt (INT_MIN, 0));
++ true (gt (0, INT_MIN));
++ false (gt (INT_MIN, 1));
++ true (gt (1, INT_MIN));
++
++ true (gt (INT_MAX, INT_MIN));
++ false (gt (INT_MIN, INT_MAX));
++
++ true (ge (2, 1));
++ false (ge (1, 2));
++
++ true (ge (INT_MAX, 0));
++ false (ge (0, INT_MAX));
++ true (ge (INT_MAX, 1));
++ false (ge (1, INT_MAX));
++
++ false (ge (INT_MIN, 0));
++ true (ge (0, INT_MIN));
++ false (ge (INT_MIN, 1));
++ true (ge (1, INT_MIN));
++
++ true (ge (INT_MAX, INT_MIN));
++ false (ge (INT_MIN, INT_MAX));
++
++ false (lt (2, 1));
++ true (lt (1, 2));
++
++ false (lt (INT_MAX, 0));
++ true (lt (0, INT_MAX));
++ false (lt (INT_MAX, 1));
++ true (lt (1, INT_MAX));
++
++ true (lt (INT_MIN, 0));
++ false (lt (0, INT_MIN));
++ true (lt (INT_MIN, 1));
++ false (lt (1, INT_MIN));
++
++ false (lt (INT_MAX, INT_MIN));
++ true (lt (INT_MIN, INT_MAX));
++
++ false (le (2, 1));
++ true (le (1, 2));
++
++ false (le (INT_MAX, 0));
++ true (le (0, INT_MAX));
++ false (le (INT_MAX, 1));
++ true (le (1, INT_MAX));
++
++ true (le (INT_MIN, 0));
++ false (le (0, INT_MIN));
++ true (le (INT_MIN, 1));
++ false (le (1, INT_MIN));
++
++ false (le (INT_MAX, INT_MIN));
++ true (le (INT_MIN, INT_MAX));
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++main ()
++{
++ int i, j, k[3];
++
++ j = 0;
++ for (i=0; i < 3; i++)
++ {
++ k[i] = j++;
++ }
++
++ for (i=2; i >= 0; i--)
++ {
++ if (k[i] != i)
++ abort ();
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2b.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2b.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2b.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2b.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <limits.h>
++
++int a[2];
++
++f (int i)
++{
++ for (; i < INT_MAX; i++)
++ {
++ a[i] = -2;
++ if (&a[i] == &a[1])
++ break;
++ }
++}
++
++main ()
++{
++ a[0] = a[1] = 0;
++ f (0);
++ if (a[0] != -2 || a[1] != -2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++int a[2];
++
++f (b)
++{
++ unsigned int i;
++ for (i = 0; i < b; i++)
++ a[i] = i - 2;
++}
++
++main ()
++{
++ a[0] = a[1] = 0;
++ f (2);
++ if (a[0] != -2 || a[1] != -1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2c.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2c.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2c.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2c.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++int a[2];
++
++__inline__ f (b, o)
++{
++ unsigned int i;
++ int *p;
++ for (p = &a[b], i = b; --i < ~0; )
++ *--p = i * 3 + o;
++}
++
++g(int b)
++{
++ f (b, (int)a);
++}
++
++main ()
++{
++ a[0] = a[1] = 0;
++ g (2);
++ if (a[0] != (int)a || a[1] != (int)a + 3)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2d.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2d.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2d.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2d.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++int a[2];
++
++f (b)
++{
++ unsigned int i;
++ int *p;
++ for (p = &a[b], i = b; --i < ~0; )
++ *--p = i * 3 + (int)a;
++}
++
++main ()
++{
++ a[0] = a[1] = 0;
++ f (2);
++ if (a[0] != (int)a || a[1] != (int)a + 3)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2e.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2e.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2e.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2e.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,60 @@
++#include <limits.h>
++
++#ifdef __unix__ /* ??? Is that good enough? */
++#include <sys/types.h>
++#include <sys/mman.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#ifndef MAP_ANON
++#ifdef MAP_ANONYMOUS
++#define MAP_ANON MAP_ANONYMOUS
++#else
++#define MAP_ANON MAP_FILE
++#endif
++#endif
++#ifndef MAP_FILE
++#define MAP_FILE 0
++#endif
++#ifndef MAP_FIXED
++#define MAP_FIXED 0
++#endif
++#endif
++
++#define MAP_START (void *)0x7fff8000
++#define MAP_LEN 0x10000
++
++#define OFFSET (MAP_LEN/2 - 2 * sizeof (int));
++
++f (int *p, int **q)
++{
++ int i;
++ for (i = 0; i < 40; i++)
++ {
++ *q++ = &p[i];
++ }
++}
++
++main ()
++{
++#ifdef MAP_ANON
++ void *p;
++ int *q[40];
++ int dev_zero;
++
++ dev_zero = open ("/dev/zero", O_RDONLY);
++ /* -1 is OK when we have MAP_ANON; else mmap will flag an error. */
++ if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int))
++ exit (0);
++ p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE,
++ MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0);
++ if (p != (void *)-1)
++ {
++ p = (char *)p + OFFSET;
++ q[39] = 0;
++ f (p, q);
++ if (q[39] != (int *)p + 39)
++ abort ();
++ }
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2e.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2e.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2e.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2e.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++# This doesn't work on m68k-motorola-sysv
++# It also doesn't work on m88k-motorola-sysv3
++
++global target_triplet
++if { [istarget "m68k-motorola-sysv"] || [istarget "m88k-motorola-sysv3"] } {
++ set torture_compile_xfail "$target_triplet"
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2f.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2f.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2f.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2f.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++#include <limits.h>
++
++#ifdef __unix__ /* ??? Is that good enough? */
++#include <sys/types.h>
++#include <sys/mman.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#ifndef MAP_ANON
++#ifdef MAP_ANONYMOUS
++#define MAP_ANON MAP_ANONYMOUS
++#else
++#define MAP_ANON MAP_FILE
++#endif
++#endif
++#ifndef MAP_FILE
++#define MAP_FILE 0
++#endif
++#ifndef MAP_FIXED
++#define MAP_FIXED 0
++#endif
++#endif
++
++#define MAP_START (void *)0x7fff8000
++#define MAP_LEN 0x10000
++
++#define OFFSET (MAP_LEN/2 - 2 * sizeof (char));
++
++f (int s, char *p)
++{
++ int i;
++ for (i = s; i >= 0 && &p[i] < &p[40]; i++)
++ {
++ p[i] = -2;
++ }
++}
++
++main ()
++{
++#ifdef MAP_ANON
++ char *p;
++ int dev_zero;
++
++ dev_zero = open ("/dev/zero", O_RDONLY);
++ /* -1 is OK when we have MAP_ANON; else mmap will flag an error. */
++ if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int))
++ exit (0);
++ p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE,
++ MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0);
++ if (p != (char *)-1)
++ {
++ p += OFFSET;
++ p[39] = 0;
++ f (0, p);
++ if (p[39] != (char)-2)
++ abort ();
++ p[39] = 0;
++ f (-1, p);
++ if (p[39] != 0)
++ abort ();
++ }
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2f.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2f.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2f.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2f.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++# This doesn't work on m68k-motorola-sysv
++# It also doesn't work on m88k-motorola-sysv3
++
++global target_triplet
++if { [istarget "m68k-motorola-sysv"] || [istarget "m88k-motorola-sysv3"] } {
++ set torture_compile_xfail "$target_triplet"
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2g.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2g.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2g.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2g.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++#include <limits.h>
++
++#ifdef __unix__ /* ??? Is that good enough? */
++#include <sys/types.h>
++#include <sys/mman.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#ifndef MAP_ANON
++#ifdef MAP_ANONYMOUS
++#define MAP_ANON MAP_ANONYMOUS
++#else
++#define MAP_ANON MAP_FILE
++#endif
++#endif
++#ifndef MAP_FILE
++#define MAP_FILE 0
++#endif
++#ifndef MAP_FIXED
++#define MAP_FIXED 0
++#endif
++#endif
++
++#define MAP_START (void *)0x7fff8000
++#define MAP_LEN 0x10000
++
++#define OFFSET (MAP_LEN/2 - 2 * sizeof (char));
++
++f (int s, char *p)
++{
++ int i;
++ for (i = s; &p[i] < &p[40] && i >= 0; i++)
++ {
++ p[i] = -2;
++ }
++}
++
++main ()
++{
++#ifdef MAP_ANON
++ char *p;
++ int dev_zero;
++
++ dev_zero = open ("/dev/zero", O_RDONLY);
++ /* -1 is OK when we have MAP_ANON; else mmap will flag an error. */
++ if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int))
++ exit (0);
++ p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE,
++ MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0);
++ if (p != (char *)-1)
++ {
++ p += OFFSET;
++ p[39] = 0;
++ f (0, p);
++ if (p[39] != (char)-2)
++ abort ();
++ p[39] = 0;
++ f (-1, p);
++ if (p[39] != 0)
++ abort ();
++ }
++#endif
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2g.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2g.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-2g.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-2g.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++# This doesn't work on m68k-motorola-sysv
++# It also doesn't work on m88k-motorola-sysv3
++
++global target_triplet
++if { [istarget "m68k-motorola-sysv"] || [istarget "m88k-motorola-sysv3"] } {
++ set torture_compile_xfail "$target_triplet"
++}
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-3b.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-3b.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-3b.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-3b.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++#include <limits.h>
++
++int n = 0;
++
++g (i)
++{
++ n++;
++}
++
++f (m)
++{
++ int i;
++ i = m;
++ do
++ {
++ g (i * 4);
++ i -= INT_MAX / 8;
++ }
++ while (i > 0);
++}
++
++main ()
++{
++ f (INT_MAX/8*4);
++ if (n != 4)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++#include <limits.h>
++
++int n = 0;
++
++g (i)
++{
++ n++;
++}
++
++f (m)
++{
++ int i;
++ i = m;
++ do
++ {
++ g (i * INT_MAX / 2);
++ }
++ while (--i > 0);
++}
++
++main ()
++{
++ f (4);
++ if (n != 4)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-3c.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-3c.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-3c.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-3c.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++#include <limits.h>
++
++void * a[255];
++
++f (m)
++{
++ int i;
++ int sh = 0x100;
++ i = m;
++ do
++ {
++ a[sh >>= 1] = ((unsigned)i << 3) + (char*)a;
++ i += 4;
++ }
++ while (i < INT_MAX/2 + 1 + 4 * 4);
++}
++
++main ()
++{
++ a[0x10] = 0;
++ a[0x08] = 0;
++ f (INT_MAX/2 + INT_MAX/4 + 2);
++ if (a[0x10] || a[0x08])
++ abort ();
++ a[0x10] = 0;
++ a[0x08] = 0;
++ f (INT_MAX/2 + 1);
++ if (! a[0x10] || a[0x08])
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-4b.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-4b.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-4b.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-4b.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++int
++f()
++{
++ int j = 1;
++ long i;
++ i = 0x60000000L;
++ do
++ {
++ j <<= 1;
++ i += 0x10000000L;
++ } while (i < -0x60000000L);
++ return j;
++}
++
++int
++main ()
++{
++ if (f () != 2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/loop-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/loop-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++int
++f()
++{
++ int j = 1;
++ long i;
++ for (i = -0x70000000L; i < 0x60000000L; i += 0x10000000L) j <<= 1;
++ return j;
++}
++
++int
++main ()
++{
++ if (f () != 8192)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,75 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++/* Test permissions of BLKmode arguments constructed purely on the
++ stack.
++
++ Maybe we can't guarantee that we'll always wind up with stack args,
++ but if we don't, they're in registers, and permissions should just
++ always yield success. So while this test may not be effective on
++ all platforms, failure probably does indicate a real bug.
++
++ Note that because of the implementation, we do want to test BLKmode
++ arguments that live purely on the stack and are constructed there.
++ We want to test other situations of function arguments, of course,
++ but don't assume this case would be covered by using one monster
++ argument that is read from memory (including using constructor
++ syntax but constant values), or may live partially in registers. */
++
++int expect_error = 0;
++
++/* Must be BLKmode. Using only two fields gets TImode on Alpha. */
++struct S
++{
++ unsigned long long ll;
++ long xx;
++ long yy;
++};
++
++unsigned long long x = 0x12345689ULL;
++#define I2 42
++
++static int first_time = 1;
++
++/* Leading ten arguments force struct S onto the stack on both Alpha and MIPS. */
++int
++foo (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10,
++ struct S s)
++{
++ if (a1 != 1 || a2 != 2 || a3 != 3 || a4 != 4 || a5 != 5 || a6 != 6 || a7 != 7
++ || a8 != 8 || a9 !=9 || a10 != 10)
++ abort ();
++
++ if (first_time)
++ {
++ if (s.ll != x || s.xx != I2 || s.yy != 0)
++ abort ();
++
++ first_time = 0;
++ }
++ else
++ {
++ if (s.ll != 0 || s.xx != 0 || s.yy != 0)
++ abort ();
++ }
++
++ return 0;
++}
++
++void
++test ()
++{
++ foo (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, (struct S) { x, I2 });
++ foo (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, (struct S) { 0 });
++}
++
++void
++setup () /* NOCHECK */
++{
++ mark_region (&x, sizeof (x), ACCESS_RO);
++ mark_region (&first_time, sizeof (first_time), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++# The memeory checking code does not mark the stack as readable or writable
++# so this test fails. Ideally the memory checking library ought to
++# cooperate with the host OS to mark the stack as it is used or individual
++# function prologues and epilogues ought to mark their pieces of stack as
++# writable and readable-after-written.
++
++set torture_execute_xfail "*-*-*"
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,272 @@
++/* GNU C dependencies:
++ Checker support hooks
++ ISO C 9x array element initialization
++ void-pointer arithmetic */
++
++#include "driver.h"
++
++int verbose = 0;
++int debug = 0;
++int bad_accesses = 0;
++
++const char *const memory_use_strings[] =
++{
++#define INIT(x) [x] = #x
++ INIT (MEMORY_USE_BAD),
++ INIT (MEMORY_USE_DONT),
++ INIT (MEMORY_USE_RO),
++ INIT (MEMORY_USE_RW),
++ INIT (MEMORY_USE_TW),
++ INIT (MEMORY_USE_WO),
++#undef INIT
++};
++
++/* This won't be used for any really huge test cases, so a simple
++ linked list is adequate. We won't even worry about overlapping
++ regions; the matching entry that comes up first wins. */
++const char *const access_mode_strings[] =
++{
++ "none", "ro", "wo", "rw",
++};
++struct access_node
++{
++ struct access_node *next;
++ const void *addr;
++ size_t sz;
++ enum access_mode mode;
++};
++
++static struct access_node *access_list;
++
++void
++mark_region (const void *addr, size_t sz, enum access_mode mode)
++{
++ struct access_node *a;
++ if (debug)
++ printf ("mark_region (%p, %ld, %s)\n", addr, (long) sz,
++ access_mode_strings[mode]);
++ a = malloc (sizeof (struct access_node));
++ a->next = access_list;
++ a->addr = addr;
++ a->sz = sz;
++ a->mode = mode;
++ access_list = a;
++}
++
++void report_bad_access (void *, size_t, enum memory_use_mode) NOCHECK;
++void
++report_bad_access (void *addr, size_t sz, enum memory_use_mode mode)
++{
++ if (++bad_accesses > 100)
++ bad_accesses = 100;
++ if (verbose)
++ {
++ static char x[100];
++ const char *mode_str;
++ if (mode >= 0
++ && mode < sizeof (memory_use_strings) / sizeof (*memory_use_strings)
++ && memory_use_strings[mode] != 0)
++ mode_str = memory_use_strings[mode];
++ else
++ {
++ sprintf (x, "<bad mode %d>", mode);
++ mode_str = x;
++ }
++ printf ("bad access (%p, %ld, %s)\n", addr, (long) sz, mode_str);
++ }
++}
++
++int verify1 (void *, size_t, enum access_mode, struct access_node *) NOCHECK;
++int
++verify1 (void *addr, size_t sz, enum access_mode mode,
++ struct access_node *a)
++{
++ while (a && (addr + sz <= a->addr || addr >= a->addr + a->sz))
++ a = a->next;
++ if (a == 0)
++ return 0;
++
++ if (debug)
++ printf ("verify1 (%p, %ld, %s)\n", addr, (long) sz,
++ access_mode_strings[mode]);
++
++ if (mode & ~a->mode)
++ return 0;
++
++ if (addr < a->addr)
++ if (verify1 (a, a->addr - addr, mode, a->next) == 0)
++ return 0;
++ if (addr + sz > a->addr + a->sz)
++ if (verify1 (a->addr + a->sz, (addr + sz) - (a->addr + a->sz), mode, a->next) == 0)
++ return 0;
++
++ /* All regions okay. */
++ return 1;
++}
++
++int verify_range_permission (void *, size_t, enum access_mode) NOCHECK;
++int
++verify_range_permission (void *addr, size_t sz, enum access_mode mode)
++{
++ if (debug)
++ printf ("verify_range_permission (%p, %ld, %s)\n", addr, (long) sz,
++ access_mode_strings[mode]);
++ return verify1 (addr, sz, mode, access_list);
++}
++
++void chkr_check_addr (void *, size_t, int) NOCHECK;
++void
++chkr_check_addr (void *addr, size_t sz, int mode)
++{
++ switch (mode)
++ {
++ case MEMORY_USE_BAD:
++ case MEMORY_USE_DONT:
++ default:
++ report_bad_access (addr, sz, mode);
++ return;
++ case MEMORY_USE_RO:
++ /* verify range readable */
++ if (!verify_range_permission (addr, sz, ACCESS_RO))
++ report_bad_access (addr, sz, mode);
++ return;
++ case MEMORY_USE_WO:
++ /* verify writeable, set writeable and readable */
++ if (!verify_range_permission (addr, sz, ACCESS_WO))
++ report_bad_access (addr, sz, mode);
++ mark_region (addr, sz, ACCESS_RW);
++ return;
++ case MEMORY_USE_RW:
++ /* verify readable and writeable, no change */
++ if (!verify_range_permission (addr, sz, ACCESS_RW))
++ report_bad_access (addr, sz, mode);
++ return;
++ case MEMORY_USE_TW:
++ /* verify writeable, no change */
++ if (!verify_range_permission (addr, sz, ACCESS_WO))
++ report_bad_access (addr, sz, mode);
++ return;
++ }
++ /* All branches should return. */
++ abort ();
++}
++
++void copy1 (void *, void *, size_t, struct access_node *) NOCHECK;
++void
++copy1 (void *dest, void *src, size_t sz, struct access_node *a)
++{
++ while (a && (src + sz <= a->addr || src >= a->addr + a->sz))
++ a = a->next;
++ if (a == 0)
++ {
++ report_bad_access (src, sz, MEMORY_USE_RO);
++ return;
++ }
++
++ if (debug)
++ printf ("copy1 (%p, %p, %ld)\n", dest, src, (long) sz);
++
++ {
++ void *start, *end;
++ start = src;
++ if (start < a->addr)
++ start = a->addr;
++ end = src + sz;
++ if (end > a->addr + a->sz)
++ end = a->addr + a->sz;
++ mark_region (dest + (start - src), end - start, a->mode);
++ }
++
++ if (src < a->addr)
++ copy1 (dest, src, a->addr - src, a->next);
++ if (src + sz > a->addr + a->sz)
++ copy1 (dest + (a->addr + a->sz - src), a->addr + a->sz,
++ (src + sz) - (a->addr + a->sz), a->next);
++}
++
++void chkr_copy_bitmap (void *, void *, size_t) NOCHECK;
++void
++chkr_copy_bitmap (void *dest, void *src, size_t sz)
++{
++ if (verify_range_permission (dest, sz, MEMORY_USE_WO) == 0)
++ report_bad_access (dest, sz, MEMORY_USE_WO);
++ copy1 (dest, src, sz, access_list);
++}
++
++void chkr_set_right (void *, size_t, enum access_mode) NOCHECK;
++void
++chkr_set_right (void *addr, size_t sz, enum access_mode mode)
++{
++ mark_region (addr, sz, mode);
++}
++
++int main () NOCHECK;
++int
++main ()
++{
++ setup ();
++ test ();
++ bad_accesses = !!bad_accesses; /* get 0 or 1 */
++
++ if (bad_accesses == expect_error)
++ exit (0);
++ else
++ abort ();
++
++ return 0;
++}
++
++struct malloc_node
++{
++ struct malloc_node *next;
++ void *addr;
++ size_t sz;
++ unsigned is_free : 1;
++};
++static struct malloc_node *malloc_list;
++
++void *
++c_malloc (size_t sz)
++{
++ void *p;
++ struct malloc_node *m;
++ if (sz == 0)
++ return 0;
++ p = malloc (sz);
++ if (p == 0)
++ {
++ if (verbose)
++ printf ("malloc(%ld) failed\n", (long) sz);
++ exit (1);
++ }
++ m = malloc (sizeof (struct malloc_node));
++ if (m == 0)
++ {
++ if (verbose)
++ printf ("malloc(%ld) failed\n", (long) sizeof (struct malloc_node));
++ exit (1);
++ }
++ mark_region (p, sz, ACCESS_WO);
++ m->addr = p;
++ m->sz = sz;
++ m->is_free = 0;
++ m->next = malloc_list;
++ malloc_list = m;
++ return p;
++}
++
++void
++c_free (void *p)
++{
++ struct malloc_node *m;
++ if (p == 0)
++ return;
++ for (m = malloc_list; m; m = m->next)
++ if (m->addr == p)
++ break;
++ if (m == 0 || m->is_free)
++ /* Test is broken. */
++ abort ();
++ m->is_free = 1;
++ free (p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.h gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.h
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/driver.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++/* GNU C dependencies:
++ Checker support hooks
++ ISO C 9x array element initialization
++ void-pointer arithmetic */
++
++typedef __SIZE_TYPE__ size_t;
++
++extern void *malloc (size_t);
++extern int printf (const char *, ...);
++
++/* This comes from gcc internals. Should be exported. */
++enum memory_use_mode {MEMORY_USE_BAD = 0, MEMORY_USE_RO = 1,
++ MEMORY_USE_WO = 2, MEMORY_USE_RW = 3,
++ MEMORY_USE_TW = 6, MEMORY_USE_DONT = 99};
++
++enum access_mode {
++ ACCESS_NONE = 0, ACCESS_RO = 1, ACCESS_WO = 2, ACCESS_RW = 3
++};
++
++#define NOCHECK __attribute__ ((no_check_memory_usage))
++
++void mark_region (const void *, size_t, enum access_mode) NOCHECK;
++void setup () NOCHECK;
++void test ();
++extern int expect_error;
++
++void *c_malloc (size_t) NOCHECK;
++void c_free (void *) NOCHECK;
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/memcheck.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/memcheck.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/memcheck.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/memcheck.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++# Copyright (C) 1991, 92-93, 95, 97, 1998 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++# Modified and maintained by Jeffrey Wheat (cassidy@cygnus.com)
++
++#
++# These tests come from Torbjorn Granlund (tege@cygnus.com)
++# C torture test suite.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib c-torture.exp
++
++#
++# main test loop
++#
++
++set tests [lsort [glob -nocomplain $srcdir/$subdir/*.c]]
++set idx [lsearch $tests */driver.c]
++if $idx>=0 {
++ set tests [lreplace $tests $idx $idx]
++} else {
++ error "list can't find driver.c in $srcdir/$subdir"
++}
++gcc_target_compile $srcdir/$subdir/driver.c driver.o object {additional_flags=-w additional_flags=-g}
++foreach src $tests {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $src] then {
++ continue
++ }
++
++ c-torture-execute $src "-fcheck-memory-usage driver.o"
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup (); -- NOCHECK */
++
++#include "driver.h"
++
++int expect_error = 0;
++
++int *ip;
++
++void test ()
++{
++ ip = c_malloc (sizeof (int));
++ *ip = 42;
++ t2 ();
++}
++
++int t2 ()
++{
++ return *ip;
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&ip, sizeof (ip), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 1;
++
++int *ip;
++
++void test ()
++{
++ ip = c_malloc (sizeof (int));
++ t2 ();
++}
++
++int t2 ()
++{
++ return *ip;
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&ip, sizeof (ip), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 0;
++
++int *ip;
++
++void test ()
++{
++ ip = c_malloc (sizeof (int));
++ t2 (ip);
++}
++
++int t2 (int *ip)
++{
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&ip, sizeof (ip), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 0;
++
++struct s {
++ char c;
++ int a, b;
++};
++
++struct s *sp2;
++
++void test ()
++{
++ sp2 = c_malloc (sizeof (struct s));
++ sp2->c = 0;
++ sp2->a = 12;
++ sp2->b = 47;
++ foo (sp2);
++}
++
++int foo (struct s *sp2)
++{
++ return sp2->c + sp2->a + sp2->b;
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&sp2, sizeof (sp2), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 1;
++
++struct s {
++ char c;
++ int a, b;
++};
++
++struct s *sp2;
++
++void test ()
++{
++ sp2 = c_malloc (sizeof (struct s));
++ sp2->c = 0;
++ sp2->b = 47;
++ foo (sp2);
++}
++
++int foo (struct s *sp2)
++{
++ return sp2->c + sp2->a + sp2->b;
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&sp2, sizeof (sp2), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 1;
++
++struct s {
++ char c;
++ int a, b;
++};
++
++struct s *sp2;
++
++void test ()
++{
++ sp2 = c_malloc (sizeof (struct s) * 2);
++ sp2->c = 0;
++ sp2->b = 47;
++ cp (sp2);
++ foo (sp2);
++}
++
++int foo (struct s *sp2)
++{
++ return sp2[1].c + sp2[1].a + sp2[1].b;
++}
++
++int cp (struct s *sp2)
++{
++ sp2[1] = sp2[0];
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&sp2, sizeof (sp2), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t7.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t7.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t7.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t7.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 0;
++
++struct s {
++ char c;
++ int a, b;
++};
++
++struct s *sp2;
++
++void test ()
++{
++ sp2 = c_malloc (sizeof (struct s) * 2);
++ sp2->c = 0;
++ sp2->a = 13;
++ sp2->b = 47;
++ cp (sp2);
++ foo (sp2);
++}
++
++int foo (struct s *sp2)
++{
++ return sp2[1].c + sp2[1].a + sp2[1].b;
++}
++
++int cp (struct s *sp2)
++{
++ sp2[1] = sp2[0];
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&sp2, sizeof (sp2), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t8.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t8.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t8.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t8.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 0;
++
++typedef struct {
++ short a;
++ char b;
++} S1;
++typedef struct {
++ struct { int x; S1 *s1p; } *p;
++} S2;
++
++S1 *s1;
++S2 *s2;
++
++void test ()
++{
++ s1 = c_malloc (sizeof (S1));
++ s2 = c_malloc (sizeof (S2));
++ s2->p = c_malloc (sizeof (*s2->p));
++ s2->p->s1p = s1;
++ s1->a = 47;
++ s1->b = 3;
++ foo ();
++}
++
++int foo ()
++{
++ return s2->p->s1p->b;
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&s1, sizeof (s1), ACCESS_RW);
++ mark_region (&s2, sizeof (s2), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = 1;
++
++typedef struct {
++ short a;
++ char b;
++} S1;
++typedef struct {
++ struct { int x; S1 *s1p; } *p;
++} S2;
++
++S1 *s1;
++S2 *s2;
++
++void test ()
++{
++ s1 = c_malloc (sizeof (S1));
++ s2 = c_malloc (sizeof (S2));
++ s2->p = c_malloc (sizeof (*s2->p));
++ s2->p->s1p = s1;
++ s1->a = 47;
++ foo ();
++}
++
++int foo ()
++{
++ return s2->p->s1p->b;
++}
++
++void setup () /* NOCHECK */
++{
++ mark_region (&s1, sizeof (s1), ACCESS_RW);
++ mark_region (&s2, sizeof (s2), ACCESS_RW);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/template gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/template
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcheck/template 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcheck/template 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++/* Must define:
++ int expect_error;
++ void test ();
++ void setup () NOCHECK; */
++
++#include "driver.h"
++
++int expect_error = ;
++
++void test ()
++{
++}
++
++void setup () /* NOCHECK */
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcpy-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcpy-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcpy-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcpy-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++#include <string.h>
++
++#if defined (STACK_SIZE)
++#define MEMCPY_SIZE (STACK_SIZE / 3)
++#else
++#define MEMCPY_SIZE (1 << 17)
++#endif
++
++
++void *copy (void *o, const void *i, unsigned l)
++{
++ return memcpy (o, i, l);
++}
++
++main ()
++{
++ unsigned i;
++ unsigned char src[MEMCPY_SIZE];
++ unsigned char dst[MEMCPY_SIZE];
++
++ for (i = 0; i < MEMCPY_SIZE; i++)
++ src[i] = (unsigned char) i, dst[i] = 0;
++
++ (void) memcpy (dst, src, MEMCPY_SIZE / 128);
++
++ for (i = 0; i < MEMCPY_SIZE / 128; i++)
++ if (dst[i] != (unsigned char) i)
++ abort ();
++
++ (void) memset (dst, 1, MEMCPY_SIZE / 128);
++
++ for (i = 0; i < MEMCPY_SIZE / 128; i++)
++ if (dst[i] != 1)
++ abort ();
++
++ (void) memcpy (dst, src, MEMCPY_SIZE);
++
++ for (i = 0; i < MEMCPY_SIZE; i++)
++ if (dst[i] != (unsigned char) i)
++ abort ();
++
++ (void) memset (dst, 0, MEMCPY_SIZE);
++
++ for (i = 0; i < MEMCPY_SIZE; i++)
++ if (dst[i] != 0)
++ abort ();
++
++ (void) copy (dst, src, MEMCPY_SIZE / 128);
++
++ for (i = 0; i < MEMCPY_SIZE / 128; i++)
++ if (dst[i] != (unsigned char) i)
++ abort ();
++
++ (void) memset (dst, 0, MEMCPY_SIZE);
++
++ (void) copy (dst, src, MEMCPY_SIZE);
++
++ for (i = 0; i < MEMCPY_SIZE; i++)
++ if (dst[i] != (unsigned char) i)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++/* Test builtin-memcpy (which may emit different code for different N). */
++
++#define TESTSIZE 80
++
++char src[TESTSIZE] __attribute__ ((aligned));
++char dst[TESTSIZE] __attribute__ ((aligned));
++
++void
++check (char *test, char *match, int n)
++{
++ if (memcmp (test, match, n))
++ abort ();
++}
++
++#define TN(n) \
++{ memset (dst, 0, n); memcpy (dst, src, n); check (dst, src, n); }
++#define T(n) \
++TN (n) \
++TN ((n) + 1) \
++TN ((n) + 2) \
++TN ((n) + 3)
++
++main ()
++{
++ int i,j;
++
++ for (i = 0; i < sizeof (src); ++i)
++ src[i] = 'a' + i % 26;
++
++ T (0);
++ T (4);
++ T (8);
++ T (12);
++ T (16);
++ T (20);
++ T (24);
++ T (28);
++ T (32);
++ T (36);
++ T (40);
++ T (44);
++ T (48);
++ T (52);
++ T (56);
++ T (60);
++ T (64);
++ T (68);
++ T (72);
++ T (76);
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/mod-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/mod-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/mod-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/mod-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++f (x, y)
++{
++ if (x % y != 0)
++ abort ();
++}
++
++main ()
++{
++ f (-5, 5);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++int
++g (int a, int b, int (*gi) (int, int))
++{
++ if ((*gi) (a, b))
++ return a;
++ else
++ return b;
++}
++
++f ()
++{
++#ifndef NO_TRAMPOLINES
++ int i, j;
++ int f2 (int a, int b)
++ {
++ return a > b;
++ }
++
++ if (g (1, 2, f2) != 2)
++ abort ();
++#endif
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++#include <stdarg.h>
++
++main ()
++{
++ static double f (int x, ...)
++ {
++ va_list args;
++ double a;
++
++ va_start (args, x);
++ a = va_arg (args, double);
++ va_end (args);
++ return a;
++ }
++
++ if (f (1, (double)1) != 1.0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/packed-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/packed-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/packed-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/packed-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++short x1 = 17;
++
++struct
++{
++ short i __attribute__ ((packed));
++} t;
++
++f ()
++{
++ t.i = x1;
++ if (t.i != 17)
++ abort ();
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/pending-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/pending-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/pending-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/pending-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++
++void dummy (x, y)
++ int *x;
++ int y;
++{}
++
++int
++main (argc, argv)
++ int argc;
++ char **argv;
++{
++ int number_columns=9;
++ int cnt0 = 0;
++ int cnt1 = 0;
++ int i,A1;
++
++ for (i = number_columns-1; i != 0; i--)
++ {
++ if (i == 1)
++ {
++ dummy(&A1, i);
++ cnt0++;
++ }
++ else
++ {
++ dummy(&A1, i-1);
++ cnt1++;
++ }
++ }
++ if (cnt0 != 1 || cnt1 != 7)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++char *
++f (char *s, unsigned int i)
++{
++ return &s[i + 3 - 1];
++}
++
++main ()
++{
++ char *str = "abcdefghijkl";
++ char *x2 = f (str, 12);
++ if (str + 14 != x2)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/regstack-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/regstack-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/regstack-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/regstack-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++long double C = 5;
++long double U = 1;
++long double Y2 = 11;
++long double Y1 = 17;
++long double X, Y, Z, T, R, S;
++main ()
++{
++ X = (C + U) * Y2;
++ Y = C - U - U;
++ Z = C + U + U;
++ T = (C - U) * Y1;
++ X = X - (Z + U);
++ R = Y * Y1;
++ S = Z * Y2;
++ T = T - Y;
++ Y = (U - Y) + R;
++ Z = S - (Z + U + U);
++ R = (Y2 + U) * Y1;
++ Y1 = Y2 * Y1;
++ R = R - Y2;
++ Y1 = Y1 - 0.5L;
++ if (Z != 68. || Y != 49. || X != 58. || Y1 != 186.5 || R != 193. || S != 77.
++ || T != 65. || Y2 != 11.)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/scope-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/scope-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/scope-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/scope-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++int v = 3;
++
++f ()
++{
++ int v = 4;
++ {
++ extern int v;
++ if (v != 3)
++ abort ();
++ }
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/scope-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/scope-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/scope-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/scope-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++static int v = 3;
++
++f ()
++{
++ int v = 4;
++ {
++ extern int v;
++ if (v != 3)
++ abort ();
++ }
++}
++
++main ()
++{
++ f ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++typedef struct
++{
++ short s __attribute__ ((aligned(2), packed));
++ double d __attribute__ ((aligned(2), packed));
++} TRIAL;
++
++int
++check (TRIAL *t)
++{
++ if (t->s != 1 || t->d != 16.0)
++ return 1;
++ return 0;
++}
++
++main ()
++{
++ TRIAL trial;
++
++ trial.s = 1;
++ trial.d = 16.0;
++
++ if (check (&trial) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++typedef struct
++{
++ short a __attribute__ ((aligned (2),packed));
++ short *ap[2] __attribute__ ((aligned (2),packed));
++} A;
++
++main ()
++{
++ short i, j = 1;
++ A a, *ap = &a;
++ ap->ap[j] = &i;
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++typedef struct
++{
++ short i __attribute__ ((aligned (2),packed));
++ int f[2] __attribute__ ((aligned (2),packed));
++} A;
++
++f (ap)
++ A *ap;
++{
++ short i, j = 1;
++
++ i = ap->f[1];
++ i += ap->f[j];
++ for (j = 0; j < 2; j++)
++ i += ap->f[j];
++
++ return i;
++}
++
++main ()
++{
++ A a;
++ a.f[0] = 100;
++ a.f[1] = 13;
++ if (f (&a) != 139)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++typedef struct
++{
++ unsigned char a __attribute__((packed));
++ unsigned short b __attribute__((packed));
++} three_char_t;
++
++unsigned char
++my_set_a (void)
++{
++ return 0xab;
++}
++
++unsigned short
++my_set_b (void)
++{
++ return 0x1234;
++}
++
++main ()
++{
++ three_char_t three_char;
++
++ three_char.a = my_set_a ();
++ three_char.b = my_set_b ();
++ if (three_char.a != 0xab || three_char.b != 0x1234)
++ abort ();
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,61 @@
++#include <stdarg.h>
++
++struct tiny
++{
++ char c;
++ char d;
++ char e;
++ char f;
++ char g;
++};
++
++f (int n, ...)
++{
++ struct tiny x;
++ int i;
++
++ va_list ap;
++ va_start (ap,n);
++ for (i = 0; i < n; i++)
++ {
++ x = va_arg (ap,struct tiny);
++ if (x.c != i + 10)
++ abort();
++ if (x.d != i + 20)
++ abort();
++ if (x.e != i + 30)
++ abort();
++ if (x.f != i + 40)
++ abort();
++ if (x.g != i + 50)
++ abort();
++ }
++ {
++ long x = va_arg (ap, long);
++ if (x != 123)
++ abort();
++ }
++ va_end (ap);
++}
++
++main ()
++{
++ struct tiny x[3];
++ x[0].c = 10;
++ x[1].c = 11;
++ x[2].c = 12;
++ x[0].d = 20;
++ x[1].d = 21;
++ x[2].d = 22;
++ x[0].e = 30;
++ x[1].e = 31;
++ x[2].e = 32;
++ x[0].f = 40;
++ x[1].f = 41;
++ x[2].f = 42;
++ x[0].g = 50;
++ x[1].g = 51;
++ x[2].g = 52;
++ f (3, x[0], x[1], x[2], (long) 123);
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++#ifdef NO_VARARGS
++#include <stdarg.h>
++#define va_alist int x_attr, ...
++#define va_dcl
++#else
++#include <varargs.h>
++#endif
++
++struct s { int x, y; };
++
++f (va_alist)
++ va_dcl
++{
++ struct s va_values;
++ va_list va;
++ int attr;
++ int i;
++
++#ifdef NO_VARARGS
++ va_start (va, x_attr);
++ attr = x_attr;
++#else
++ va_start (va);
++ attr = va_arg (va, int);
++#endif
++
++ if (attr != 2)
++ abort ();
++
++ va_values = va_arg (va, struct s);
++ if (va_values.x != 0xaaaa || va_values.y != 0x5555)
++ abort ();
++
++ attr = va_arg (va, int);
++ if (attr != 3)
++ abort ();
++
++ va_values = va_arg (va, struct s);
++ if (va_values.x != 0xffff || va_values.y != 0x1111)
++ abort ();
++
++ va_end (va);
++}
++
++main ()
++{
++ struct s a, b;
++
++ a.x = 0xaaaa;
++ a.y = 0x5555;
++ b.x = 0xffff;
++ b.y = 0x1111;
++
++ f (2, a, 3, b);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++# This doesn't work on mn10200
++
++if { [istarget "mn10200*-*-*"] } {
++ set torture_execute_xfail "mn10200*-*-*"
++}
++
++if { [istarget "h8300*-*-*"] } {
++ set torture_execute_xfail "h8300*-*-*"
++}
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct S
++{
++ char f1;
++ int f2[2];
++};
++
++struct S object = {'X', 8, 9};
++
++main ()
++{
++ if (object.f1 != 'X' || object.f2[0] != 8 || object.f2[1] != 9)
++ abort ();
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++struct {
++ int a:4;
++ int :4;
++ int b:4;
++ int c:4;
++} x = { 2,3,4 };
++
++main ()
++{
++ if (x.a != 2)
++ abort ();
++ if (x.b != 3)
++ abort ();
++ if (x.c != 4)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++struct
++{
++ unsigned int f1:1, f2:1, f3:3, f4:3, f5:2, f6:1, f7:1;
++} result = {1, 1, 7, 7, 3, 1, 1};
++
++main ()
++{
++ if ((result.f3 & ~7) != 0 || (result.f4 & ~7) != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct s {
++ int a[3];
++ int c[3];
++};
++
++struct s s = {
++ c: {1, 2, 3}
++};
++
++main()
++{
++ if (s.c[0] != 1)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++#include <stdio.h>
++#include <string.h>
++
++char out[100];
++
++typedef struct { double d; int i[3]; } B;
++typedef struct { char c[33],c1; } X;
++
++char c1 = 'a';
++char c2 = 127;
++char c3 = (char)128;
++char c4 = (char)255;
++char c5 = -1;
++
++double d1 = 0.1;
++double d2 = 0.2;
++double d3 = 0.3;
++double d4 = 0.4;
++double d5 = 0.5;
++double d6 = 0.6;
++double d7 = 0.7;
++double d8 = 0.8;
++double d9 = 0.9;
++
++B B1 = {0.1,{1,2,3}};
++B B2 = {0.2,{5,4,3}};
++X X1 = {"abcdefghijklmnopqrstuvwxyzABCDEF", 'G'};
++X X2 = {"123",'9'};
++X X3 = {"return-return-return",'R'};
++
++X f (B a, char b, double c, B d)
++{
++ static X xr = {"return val", 'R'};
++ X r;
++ r = xr;
++ r.c1 = b;
++ sprintf (out, "X f(B,char,double,B):({%g,{%d,%d,%d}},'%c',%g,{%g,{%d,%d,%d}})",
++ a.d, a.i[0], a.i[1], a.i[2], b, c, d.d, d.i[0], d.i[1], d.i[2]);
++ return r;
++}
++
++X (*fp) (B, char, double, B) = &f;
++
++main ()
++{
++ X Xr;
++ char tmp[100];
++
++ Xr = f (B1, c2, d3, B2);
++ strcpy (tmp, out);
++ Xr.c[0] = Xr.c1 = '\0';
++ Xr = (*fp) (B1, c2, d3, B2);
++ if (strcmp (tmp, out))
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++typedef struct
++{
++ unsigned char a __attribute__ ((packed));
++ unsigned short b __attribute__ ((packed));
++} three_byte_t;
++
++unsigned char
++f (void)
++{
++ return 0xab;
++}
++
++unsigned short
++g (void)
++{
++ return 0x1234;
++}
++
++main ()
++{
++ three_byte_t three_byte;
++
++ three_byte.a = f ();
++ three_byte.b = g ();
++ if (three_byte.a != 0xab || three_byte.b != 0x1234)
++ abort ();
++ exit (0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/tstdi-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/tstdi-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/tstdi-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/tstdi-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,139 @@
++#define FALSE 140
++#define TRUE 13
++
++feq (x)
++ long long int x;
++{
++ if (x == 0)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++fne (x)
++ long long int x;
++{
++ if (x != 0)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++flt (x)
++ long long int x;
++{
++ if (x < 0)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++fge (x)
++ long long int x;
++{
++ if (x >= 0)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++fgt (x)
++ long long int x;
++{
++ if (x > 0)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++fle (x)
++ long long int x;
++{
++ if (x <= 0)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++main ()
++{
++ if (feq (0LL) != TRUE)
++ abort ();
++ if (feq (-1LL) != FALSE)
++ abort ();
++ if (feq (0x8000000000000000LL) != FALSE)
++ abort ();
++ if (feq (0x8000000000000001LL) != FALSE)
++ abort ();
++ if (feq (1LL) != FALSE)
++ abort ();
++ if (feq (0x7fffffffffffffffLL) != FALSE)
++ abort ();
++
++ if (fne (0LL) != FALSE)
++ abort ();
++ if (fne (-1LL) != TRUE)
++ abort ();
++ if (fne (0x8000000000000000LL) != TRUE)
++ abort ();
++ if (fne (0x8000000000000001LL) != TRUE)
++ abort ();
++ if (fne (1LL) != TRUE)
++ abort ();
++ if (fne (0x7fffffffffffffffLL) != TRUE)
++ abort ();
++
++ if (flt (0LL) != FALSE)
++ abort ();
++ if (flt (-1LL) != TRUE)
++ abort ();
++ if (flt (0x8000000000000000LL) != TRUE)
++ abort ();
++ if (flt (0x8000000000000001LL) != TRUE)
++ abort ();
++ if (flt (1LL) != FALSE)
++ abort ();
++ if (flt (0x7fffffffffffffffLL) != FALSE)
++ abort ();
++
++ if (fge (0LL) != TRUE)
++ abort ();
++ if (fge (-1LL) != FALSE)
++ abort ();
++ if (fge (0x8000000000000000LL) != FALSE)
++ abort ();
++ if (fge (0x8000000000000001LL) != FALSE)
++ abort ();
++ if (fge (1LL) != TRUE)
++ abort ();
++ if (fge (0x7fffffffffffffffLL) != TRUE)
++ abort ();
++
++ if (fgt (0LL) != FALSE)
++ abort ();
++ if (fgt (-1LL) != FALSE)
++ abort ();
++ if (fgt (0x8000000000000000LL) != FALSE)
++ abort ();
++ if (fgt (0x8000000000000001LL) != FALSE)
++ abort ();
++ if (fgt (1LL) != TRUE)
++ abort ();
++ if (fgt (0x7fffffffffffffffLL) != TRUE)
++ abort ();
++
++ if (fle (0LL) != TRUE)
++ abort ();
++ if (fle (-1LL) != TRUE)
++ abort ();
++ if (fle (0x8000000000000000LL) != TRUE)
++ abort ();
++ if (fle (0x8000000000000001LL) != TRUE)
++ abort ();
++ if (fle (1LL) != FALSE)
++ abort ();
++ if (fle (0x7fffffffffffffffLL) != FALSE)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++#include <stdarg.h>
++
++typedef unsigned long L;
++f (L p0, L p1, L p2, L p3, L p4, L p5, L p6, L p7, L p8, ...)
++{
++ va_list select;
++
++ va_start (select, p8);
++
++ if (va_arg (select, L) != 10)
++ abort ();
++ if (va_arg (select, L) != 11)
++ abort ();
++ if (va_arg (select, L) != 0)
++ abort ();
++
++ va_end (select);
++}
++
++main ()
++{
++ f (1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 0L);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,292 @@
++/* The purpose of this test is to catch edge cases when arguments are passed
++ in regs and on the stack. We test 16 cases, trying to catch multiple
++ targets (some use 3 regs for argument passing, some use 12, etc.).
++ We test both the arguments and the `lastarg' (the argument to va_start). */
++
++#include <stdarg.h>
++
++extern __SIZE_TYPE__ strlen ();
++
++int
++to_hex (unsigned int a)
++{
++ static char hex[] = "0123456789abcdef";
++
++ if (a > 15)
++ abort ();
++ return hex[a];
++}
++
++void
++f0 (char* format, ...)
++{
++ va_list ap;
++
++ va_start (ap, format);
++ if (strlen (format) != 16 - 0)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f1 (int a1, char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 1)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f2 (int a1, int a2, char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 2)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f3 (int a1, int a2, int a3, char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 3)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f4 (int a1, int a2, int a3, int a4, char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 4)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f5 (int a1, int a2, int a3, int a4, int a5,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 5)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f6 (int a1, int a2, int a3, int a4, int a5,
++ int a6,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 6)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f7 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 7)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f8 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 8)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f9 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8, int a9,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 9)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f10 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8, int a9, int a10,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 10)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f11 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8, int a9, int a10,
++ int a11,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 11)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f12 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8, int a9, int a10,
++ int a11, int a12,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 12)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f13 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8, int a9, int a10,
++ int a11, int a12, int a13,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 13)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f14 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8, int a9, int a10,
++ int a11, int a12, int a13, int a14,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 14)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f15 (int a1, int a2, int a3, int a4, int a5,
++ int a6, int a7, int a8, int a9, int a10,
++ int a11, int a12, int a13, int a14, int a15,
++ char* format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ if (strlen (format) != 16 - 15)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++main ()
++{
++ char *f = "0123456789abcdef";
++
++ f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15);
++ f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15);
++ f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15);
++ f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15);
++ f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15);
++ f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15);
++ f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15);
++ f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15);
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,339 @@
++/* Same as va-arg-2.c but using varargs.h. */
++/* The purpose of this test is to catch edge cases when arguments are passed
++ in regs and on the stack. We test 16 cases, trying to catch multiple
++ targets (some use 3 regs for argument passing, some use 12, etc.).
++ We test both the arguments and the `lastarg' (the argument to va_start). */
++
++#ifdef NO_VARARGS
++int main()
++{
++ exit (0);
++}
++
++#else
++#include <varargs.h>
++
++extern __SIZE_TYPE__ strlen ();
++
++int
++to_hex (unsigned int a)
++{
++ static char hex[] = "0123456789abcdef";
++
++ if (a > 15)
++ abort ();
++ return hex[a];
++}
++
++void
++f0 (va_alist)
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 0)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f1 (a1, va_alist)
++ int a1;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 1)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f2 (a1, a2, va_alist)
++ int a1, a2;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 2)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f3 (a1, a2, a3, va_alist)
++ int a1, a2, a3;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 3)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f4 (a1, a2, a3, a4, va_alist)
++ int a1, a2, a3, a4;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 4)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f5 (a1, a2, a3, a4, a5, va_alist)
++ int a1, a2, a3, a4, a5;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 5)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f6 (a1, a2, a3, a4, a5, a6, va_alist)
++ int a1, a2, a3, a4, a5, a6;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 6)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f7 (a1, a2, a3, a4, a5, a6, a7, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 7)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f8 (a1, a2, a3, a4, a5, a6, a7, a8, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 8)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f9 (a1, a2, a3, a4, a5, a6, a7, a8, a9, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8, a9;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 9)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f10 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 10)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f11 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
++ va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 11)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f12 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 12)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f13 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 13)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f14 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 14)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++void
++f15 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, va_alist)
++ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;
++ va_dcl
++{
++ va_list ap;
++ char *format;
++
++ va_start (ap);
++ format = va_arg (ap, char *);
++ if (strlen (format) != 16 - 15)
++ abort ();
++ while (*format)
++ if (*format++ != to_hex (va_arg (ap, int)))
++ abort ();
++ va_end(ap);
++}
++
++main ()
++{
++ char *f = "0123456789abcdef";
++
++ f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++ f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15);
++ f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15);
++ f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15);
++ f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15);
++ f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15);
++ f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15);
++ f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15);
++ f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15);
++
++ exit (0);
++}
++#endif /* ! NO_VARARGS */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-3.x gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-3.x
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-3.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-3.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++# This doesn't work on mn10200
++
++if { [istarget "mn10200*-*-*"] } {
++ set torture_execute_xfail "mn10200*-*-*"
++}
++
++if { [istarget "h8300*-*-*"] } {
++ set torture_execute_xfail "h8300*-*-*"
++}
++
++
++return 0
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++/* On the i960 any arg bigger than 16 bytes causes all subsequent args
++ to be passed on the stack. We test this. */
++
++#include <stdarg.h>
++
++typedef struct {
++ char a[32];
++} big;
++
++void
++f (big x, char *s, ...)
++{
++ va_list ap;
++
++ if (x.a[0] != 'a' || x.a[1] != 'b' || x.a[2] != 'c')
++ abort ();
++ va_start (ap, s);
++ if (va_arg (ap, int) != 42)
++ abort ();
++ if (va_arg (ap, int) != 'x')
++ abort ();
++ if (va_arg (ap, int) != 0)
++ abort ();
++ va_end (ap);
++}
++
++main ()
++{
++ static big x = { "abc" };
++
++ f (x, "", 42, 'x', 0);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++#include <stdarg.h>
++
++va_double (int n, ...)
++{
++ va_list args;
++
++ va_start (args, n);
++
++ if (va_arg (args, double) != 3.141592)
++ abort ();
++ if (va_arg (args, double) != 2.71827)
++ abort ();
++ if (va_arg (args, double) != 2.2360679)
++ abort ();
++ if (va_arg (args, double) != 2.1474836)
++ abort ();
++
++ va_end (args);
++}
++
++va_long_double (int n, ...)
++{
++ va_list args;
++
++ va_start (args, n);
++
++ if (va_arg (args, long double) != 3.141592L)
++ abort ();
++ if (va_arg (args, long double) != 2.71827L)
++ abort ();
++ if (va_arg (args, long double) != 2.2360679L)
++ abort ();
++ if (va_arg (args, long double) != 2.1474836L)
++ abort ();
++
++ va_end (args);
++}
++
++main ()
++{
++ va_double (4, 3.141592, 2.71827, 2.2360679, 2.1474836);
++ va_long_double (4, 3.141592L, 2.71827L, 2.2360679L, 2.1474836L);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/va-arg-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/va-arg-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++#include <stdarg.h>
++
++f (int n, ...)
++{
++ va_list args;
++
++ va_start (args, n);
++
++ if (va_arg (args, int) != 10)
++ abort ();
++ if (va_arg (args, long long) != 10000000000LL)
++ abort ();
++ if (va_arg (args, int) != 11)
++ abort ();
++ if (va_arg (args, long double) != 3.14L)
++ abort ();
++ if (va_arg (args, int) != 12)
++ abort ();
++ if (va_arg (args, int) != 13)
++ abort ();
++ if (va_arg (args, long long) != 20000000000LL)
++ abort ();
++ if (va_arg (args, int) != 14)
++ abort ();
++ if (va_arg (args, double) != 2.72)
++ abort ();
++
++ va_end(args);
++}
++
++main ()
++{
++ f (4, 10, 10000000000LL, 11, 3.14L, 12, 13, 20000000000LL, 14, 2.72);
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++
++#include <VxWorks.h>
++#include <stdarg.h>
++#include <stdio.h>
++
++/* Testcase to spot argument alignment trouble between gcc-2.7.2 eabi as
++ used by vxworks, and gcc-2.95.2 (more correct) eabi implementation. */
++
++int bar(int a, long long b, int c, long long d, int e, long long f, int g,
++ long long h, int i, long long j, int k, long long l)
++{
++char buf[256];
++
++ if (a != 3)
++ return 1;
++ if (b != 4)
++ return 1;
++ if (c != 5)
++ return 1;
++ if (d != 6)
++ return 1;
++ if (e != 7)
++ return 1;
++ if (f != 8)
++ return 1;
++ if (g != 9)
++ return 1;
++ if (h != 10)
++ return 1;
++ if (i != 11)
++ return 1;
++ if (j != 12)
++ return 1;
++ if (k != 13)
++ return 1;
++ if (l != 14)
++ return 1;
++
++ return 0;
++}
++
++int main(void)
++{
++
++ if (bar (3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++
++#include <VxWorks.h>
++#include <stdarg.h>
++#include <stdio.h>
++
++/* Testcase to spot argument alignment trouble between gcc-2.7.2 eabi as
++ used by vxworks, and gcc-2.95.2 (more correct) eabi implementation. */
++int bar(float a, double b, float c, double d, float e, double f, float g,
++ double h, float i, double j, float k, double l)
++{
++char buf[256];
++
++ if (a != 1.0)
++ return 1;
++ if (b != 2.0)
++ return 1;
++ if (c != 4.0)
++ return 1;
++ if (d != 8.0)
++ return 1;
++ if (e != 16.0)
++ return 1;
++ if (f != 32.0)
++ return 1;
++ if (g != 64.0)
++ return 1;
++ if (h != 128.0)
++ return 1;
++ if (i != 256.0)
++ return 1;
++ if (j != 512.0)
++ return 1;
++ if (k != 1024.0)
++ return 1;
++ if (l != 2048.0)
++ return 1;
++
++ sprintf(buf, "%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g:%g-%g-%g-%g-%g-%g-"
++ "%g-%g-%g-%g-%g-%g", a, b, c, d, e, f, g, h, i, j, k, l, a, b, c,
++ d, e, f, g, h, i, j, k, l);
++
++ return strcmp(buf, "1-2-4-8-16-32-64-128-256-512-"
++ "1024-2048:1-2-4-8-16-32-64-128-256-512"
++ "-1024-2048");
++}
++
++int main(void)
++{
++
++ if (bar (1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0))
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++
++#include <VxWorks.h>
++#include <stdarg.h>
++#include <stdio.h>
++
++/* Testcase to spot argument alignment trouble between gcc-2.7.2 eabi as
++ used by vxworks, and gcc-2.95.2 (more correct) eabi implementation. */
++
++int bar(void)
++{
++char buf[512];
++
++ sprintf (buf,
++ "%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d:%d-%d-%d-%d-%d-%d-"
++ "%d-%d-%d-%d-%d-%d:"
++ "%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g:%g-%g-%g-%g-%g-%g-"
++ "%g-%g-%g-%g-%g-%g:"
++ "%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d:%d-%d-%d-%d-%d-%d-"
++ "%d-%d-%d-%d-%d-%d:"
++ "%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g:%g-%g-%g-%g-%g-%g-"
++ "%g-%g-%g-%g-%g-%g:",
++ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
++ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
++
++ 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0,
++ 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0,
++
++ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
++ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
++
++ 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0,
++ 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0);
++
++ return strcmp(buf,
++ "3-4-5-6-7-8-9-10-11-12-13-14:3-4-5-6-7-8-9-10-11-"
++ "12-13-14:"
++ "1-2-4-8-16-32-64-128-256-512-"
++ "1024-2048:1-2-4-8-16-32-64-128-256-512"
++ "-1024-2048:"
++ "3-4-5-6-7-8-9-10-11-12-13-14:3-4-5-6-7-8-9-10-11-"
++ "12-13-14:"
++ "1-2-4-8-16-32-64-128-256-512-"
++ "1024-2048:1-2-4-8-16-32-64-128-256-512"
++ "-1024-2048:");
++}
++
++
++int main(void)
++{
++
++ if (bar ())
++ abort ();
++
++ exit (0);
++}
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++
++#include <VxWorks.h>
++#include <stdarg.h>
++#include <stdio.h>
++
++/* Testcase to spot argument alignment trouble between gcc-2.7.2 eabi as
++ used by vxworks, and gcc-2.95.2 (more correct) eabi implementation. */
++
++void baz (char *buffer, const char *format, ...)
++{
++va_list args;
++
++ va_start (args, format);
++ vsprintf (buffer, format, args);
++ va_end (args);
++}
++
++int bar (int a, long long b, int c, long long d, int e, long long f, int g,
++ long long h, int i, long long j, int k, long long l,
++ float fa, double fb, float fc, double fd, float fe, double ff, float fg,
++ double fh, float fi, double fj, float fk, double fl)
++{
++char buf[512];
++
++ baz(buf,
++ "%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d:%d-%d-%d-%d-%d-%d-"
++ "%d-%d-%d-%d-%d-%d:"
++ "%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g:%g-%g-%g-%g-%g-%g-"
++ "%g-%g-%g-%g-%g-%g:"
++ "%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d:%d-%d-%d-%d-%d-%d-"
++ "%d-%d-%d-%d-%d-%d:"
++ "%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g:%g-%g-%g-%g-%g-%g-"
++ "%g-%g-%g-%g-%g-%g:",
++ a, c, e, g, i, k,
++ b, d, f,
++ a, c, e, g, i, k,
++ h, j, l,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl,
++ a, c, e, g, i, k,
++ b, d, f,
++ a, c, e, g, i, k,
++ h, j, l,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl);
++printf("#%s#\n", buf);
++
++ return strcmp(buf,
++ "3-5-7-9-11-13-0-4-0-6-0-8:3-5-7-9-11-13-0-10-0-12-0-14:"
++ "1-2-4-8-16-32-64-128-256-512-1024-2048:"
++ "1-2-4-8-16-32-64-128-256-512-1024-2048:3-5-7-9-11-13-0-4-0-6-0-8:"
++ "3-5-7-9-11-13-0-10-0-12-0-14:1-2-4-8-16-32-64-128-256-512-1024-2048:"
++ "1-2-4-8-16-32-64-128-256-512-1024-2048:");
++
++}
++
++
++int main(void)
++{
++
++ if (bar (3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1.0, 2.0, 4.0, 8.0,
++ 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0))
++ abort ();
++
++ exit (0);
++}
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/vxworks-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/vxworks-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,77 @@
++
++#include <VxWorks.h>
++#include <stdarg.h>
++#include <stdio.h>
++
++/* Testcase to spot argument alignment trouble between gcc-2.7.2 eabi as
++ used by vxworks, and gcc-2.95.2 (more correct) eabi implementation. */
++
++int bar (int a, long long b, int c, long long d, int e, long long f, int g,
++ long long h, int i, long long j, int k, long long l,
++ float fa, double fb, float fc, double fd, float fe, double ff, float fg,
++ double fh, float fi, double fj, float fk, double fl)
++{
++char buf[512];
++
++ sprintf(buf,
++ "%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d:%d-%d-%d-%d-%d-%d-"
++ "%d-%d-%d-%d-%d-%d:"
++ "%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g:%g-%g-%g-%g-%g-%g-"
++ "%g-%g-%g-%g-%g-%g:"
++ "%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d:%d-%d-%d-%d-%d-%d-"
++ "%d-%d-%d-%d-%d-%d:"
++ "%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g-%g:%g-%g-%g-%g-%g-%g-"
++ "%g-%g-%g-%g-%g-%g:",
++ a, c, e, g, i, k,
++ b, d, f,
++ a, c, e, g, i, k,
++ h, j, l,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl,
++ a, c, e, g, i, k,
++ b, d, f,
++ a, c, e, g, i, k,
++ h, j, l,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl,
++ fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl);
++
++ if (strcmp (buf,
++ "3-5-7-9-11-13-0-4-0-6-0-8:3-5-7-9-11-13-0-10-0-12-0-14:"
++ "1-2-4-8-16-32-64-128-256-512-1024-2048:"
++ "1-2-4-8-16-32-64-128-256-512-1024-2048:3-5-7-9-11-13-0-4-0-6-0-8:"
++ "3-5-7-9-11-13-0-10-0-12-0-14:1-2-4-8-16-32-64-128-256-512-1024-2048:"
++ "1-2-4-8-16-32-64-128-256-512-1024-2048:"))
++ return 1;
++
++
++ sprintf (buf, "%d-%g-%d-%g-%d-%g-%d-%g:%d-%g-%d-%g-%d-%g-%d-%g:"
++ "%d-%g-%d-%g-%d-%g-%d-%g:%d-%g-%d-%g-%d-%g-%d-%g:"
++ "%d-%d-%g-%d-%g-%d-%g-%d-%g:%d-%g-%d-%g-%d-%g-%d-%g:"
++ "%d-%g-%d-%g-%d-%g-%d-%g:%d-%g-%d-%g-%d-%g-%d-%g:",
++ 3, 1.0, 4, 2.0, 5, 4.0, 6, 8.0, 7, 16.0, 8, 32.0, 9, 64.0, 10, 128.0,
++ 11, 256.0, 12, 512.0, 13, 1024.0, 14, 2048.0, 15, 4096.0, 16, 8192.0, 17, 16384.0, 18, 32768.0,
++ 2, 3, 1.0, 4, 2.0, 5, 4.0, 6, 8.0, 7, 16.0, 8, 32.0, 9, 64.0, 10, 128.0,
++ 11, 256.0, 12, 512.0, 13, 1024.0, 14, 2048.0, 15, 4096.0, 16, 8192.0, 17, 16384.0, 18, 32768.0);
++
++ return (strcmp (buf, "3-1-4-2-5-4-6-8:7-16-8-32-9-64-10-128:"
++ "11-256-12-512-13-1024-14-2048:"
++ "15-4096-16-8192-17-16384-18-32768:2-3-1-4-2-5-4-6-8:"
++ "7-16-8-32-9-64-10-128:11-256-12-512-13-1024-14-2048:"
++ "15-4096-16-8192-17-16384-18-32768:"));
++
++}
++
++int main(void)
++{
++
++ if (bar (3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1.0, 2.0, 4.0, 8.0,
++ 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0))
++ abort ();
++
++ exit (0);
++}
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/widechar-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/widechar-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/execute/widechar-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/execute/widechar-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++#define C L'\400'
++
++#if C
++#define zero (!C)
++#else
++#define zero C
++#endif
++
++main()
++{
++ if (zero != 0)
++ abort ();
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920507-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920507-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920507-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920507-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(){register*a asm("fr1");int*v[1]={a};}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920616-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920616-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920616-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920616-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(void a,...){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920721-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920721-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920721-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920721-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(int n){int s;for(s=0;s<n;s++)s==5?1 n=1;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920824-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920824-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920824-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920824-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++struct s{struct s{int i;}x;};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920923-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920923-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/920923-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/920923-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++typedef BYTE unsigned char;typedef int item_n;typedef int perm_set;struct
++PENT{caddr_t v_addr;};typedef struct PENT prec;typedef struct PENT*
++prec_t;prec_t mem_hash;BYTE*mem_base;struct PTE{BYTE*p_page;perm_set
++p_perms;};typedef struct PTE pte;struct PTP{union{struct*PTP
++p_tablep;struct*PTE p_entry;}u;int valid;};typedef struct PTP
++(u.p_tablep);int pfree=0;int pcount=0;void mmu_walk_find(va)caddr_t va;{
++BYTE*page_addr;if(mmu_base[Level1(va)]->valid==0x0){l1_base=
++mmu_base[Level1(va)]->(u.p_tablep)=p_alloc();mmu_base[Level1(va)]->valid=
++0x3;for(idx=0;idx<LEVEL1_ENTRIES;idx++)l1_base[idx]->valid=0x0;goto
++build_level2;}else l1_base=mmu_base[Level1(va)]->(u.p_tablep);if
++(l1_base[Level2(va)]->valid==0x0){build_level2:l2_base=
++l1_base[Level2(va)]->(u.p_tablep)=p_alloc();l1_base[Level2(va)]->valid=
++0x3;for(idx=0;idx<LEVEL2_ENTRIES;idx++)l2_base[idx]->valid=0x0;goto
++build_page;}else l2_base=mmu_base[Level2(va)]->(u.p_tablep);
++page_addr=l2_base[Level2(va)]->valid;}void*a_translate(va_op,v_addr)int
++va_op;caddr_t v_addr;{register prec_t bucket;register caddr_t p_addr;
++bucket=mem_hash+((((v_addr)>>ITEMBITS))&hash_mask);do{if
++(bucket->v_addr==((v_addr)>>ITEMBITS){if(!(bucket->perm_set&va_op))
++goto prot_fault;return mem_base+v_addr;}}while((bucket++)->v_addr!=
++((caddr_t)0));page_miss:p_addr=(--bucket)->p_addr;page_type:switch
++(p_addr){case BUCKET_FULL:enlarge_hash_table(mem_hash);case((caddr_t)0):
++p_addr=fill_item_entry(va_op,v_addr);goto page_type;case((caddr_t)1):
++default:((void)(((0))?0:(__eprintf("Failed assertion`%s'at line%d
++of`%s'.\n","FALSE",327,"b.c"),0)));}}void flush_hash(hasht,
++hash_size)prec_t hasht;int hash_size;{register prec_t bucket;register int
++idx;bucket=hasht;for(idx=(hash_size*3)-1;idx>=0;idx--){
++bucket->v_addr=((caddr_t)0);bucket->p_addr=((caddr_t)0);
++bucket->perm_set=VA_EMPTY;}}void init_mem(){mem_base=(BYTE*)calloc(1024
++,(1<<13));((void)((mem_base!=(BYTE*)0)?0:(__eprintf("Failed
++assertion`%s'at line%d of`%s'.\n","mem_base!=(BYTE*)0",366,"b.c"),
++0)));hash_num=INIT_NUM_ENTRIES*3;mem_hash=(prec_t)calloc(hash_num,
++sizeof(prec));((void)((mem_hash!=(prec_t)0)?0:(__eprintf("Failed
++assertion`%s'at line%d of`%s'.\n","mem_hash!=(prec_t)0",370,"b.c"),
++0)));flush_hash(mem_hash,32);build_ptables(mem_base,1024*(1<<13));}
++struct tm{int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int
++tm_year;int tm_wday;int tm_yday;int tm_isdst;char*tm_zone;long tm_gmtoff;};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/921102-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/921102-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/921102-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/921102-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++int x[]={[0.3 ... 4.6]9};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/921116-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/921116-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/921116-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/921116-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++void a (void x) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930301-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930301-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930301-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930301-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++struct a *q;
++f()
++{
++ q++;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930622-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930622-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930622-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930622-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++f ()
++{
++ double b;
++ b = b * 10;
++ goto c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930622-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930622-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930622-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930622-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++f ()
++{
++ int i;
++ for (i--)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930714-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930714-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/930714-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/930714-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++typedef union _yystype
++{
++ int i;
++ int *iptr;
++ int (*ifunc)(int);
++ void (*vfunc)(int);
++}
++YYSTYPE;
++
++extern int f1(int k);
++
++void test()
++{
++ YYSTYPE a;
++ int (*iptr)(int);
++ int foo[5];
++
++ a = f1;
++ a = (YYSTYPE)f1;
++ a = (YYSTYPE)foo;
++ a = (YYSTYPE)(int *)foo;
++ iptr = f1;
++ a = iptr;
++ a = (YYSTYPE)iptr;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/931203-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/931203-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/931203-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/931203-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++typedef struct
++{
++ int x, y;
++} point_t;
++
++
++point_t
++f ()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940112-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940112-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940112-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940112-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++double
++f (int x)
++{
++ double e = 1;
++ e = 1;
++ return (e)
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940227-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940227-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940227-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940227-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++struct font {
++ struct {
++ char *line,*ulmask;
++ } c[2];
++} character[1] = { { {"", ""}, {"", ""} } };
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940510-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940510-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940510-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940510-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++struct { int a[]; } x = { 0 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++/* spanning a .h file */
++
++#if 0
++#endif /* comment start in comment error
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++/* spanning a .h file */
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++/* PR 4713 */
++
++#include "940712-1.h"
++#include "940712-1a.h"
++#include "940712-1b.h"
++
++/* comment start in comment error
++/* in a .c file */
++
++int main ()
++{
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1.h gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1.h
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/940712-1.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/940712-1.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++/* comment start in comment error
++/* in a .h file */
++
++#if 0
++#endif /* comment start in comment error
++/* after a cpp directive */
++
++/* comment start in comment error
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/950825-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/950825-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/950825-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/950825-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++main() { return (struct x) {{y: 0}}; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/950921-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/950921-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/950921-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/950921-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++typedef enum
++{
++ a = (X) 0,
++ b
++} c;
++
++typedef enum
++{
++ d = (X) 0
++} e;
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/951025-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/951025-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/951025-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/951025-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++#include /\
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/951123-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/951123-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/951123-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/951123-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++struct S { int a; int b[2]; };
++struct S x = { 0, [0]; };
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/951227-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/951227-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/951227-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/951227-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++#if 0xe-1
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/971104-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/971104-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/971104-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/971104-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++typedef unsigned short ushort;
++struct sembuf {
++ ushort sem_num;
++ short sem_op;
++ short sem_flg;
++};
++union semun {
++ int val;
++ struct semid_ds *buf;
++ ushort *array;
++ struct seminfo *__buf;
++ void *__pad;
++};
++static union semun semctl_arg;
++static int semid;
++static void up(int sem){
++ struct sembuf sb;
++ sb.sem_num = (unsigned short) sem;
++ sb.sem_op = 1;
++ sb.sem_flg = 0x1000 ;
++ if(semop(semid, &sb, 1) == -1) error("up failure");
++ if(semctl(semid, sb.sem_num, 12 , semctl_arg) == 0)
++ printf("%s had processes sleeping on it!\n",
++ ({ "MUTEX ", "BARB_SEM 1", "BARB_SEM 2", "CUST_SEM 1", "CUST_SEM 2", "WA
++IT_SEM 1", "WAIT_SEM 2", "WAIT_SEM 3", "WAIT_SEM 4"} [( sb.sem_num )]) );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/990416-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/990416-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/990416-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/990416-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++typedef int word_type;
++
++static void
++copy_reg (unsigned int reg, frame_state *udata, frame_state *target_udata)
++{
++ word_type *preg = get_reg_addr (reg, udata, 0);
++ word_type *ptreg = get_reg_addr (reg, target_udata, 0);
++
++ memcpy (ptreg, preg, __builtin_dwarf_reg_size (reg));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=noncompile.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/init-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/init-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/init-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/init-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++struct a
++{ double a, b, c; };
++
++struct b
++{
++ struct a arr[6];
++};
++
++static struct b a_b =
++{
++ {0,0,0},
++ {0,0,0},
++ {0,0,0},
++ {0,0,0},
++ {0,0,0},
++ {0,0,0},
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/init-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/init-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/init-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/init-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++int d[][] = { {1}, {2}, {3} };
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++asm_invalid_register_name(){asm("":::"this_is_an_invalid_register_name");}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,314 @@
++# Copyright (C) 1988, 1990, 1991, 1992, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# This file was written by Jeff Law. (law@cs.utah.edu)
++
++#
++# These tests come from Torbjorn Granlund (tege@cygnus.com)
++# C torture test suite.
++#
++
++load_lib mike-gcc.exp
++
++# Test 920507-1.c
++prebase
++
++set src_code 920507-1.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 920616-2.c
++prebase
++
++set src_code 920616-2.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 920721-2.c
++prebase
++
++set src_code 920721-2.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 920824-1.c
++prebase
++
++set src_code 920824-1.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 920923-1.c
++prebase
++
++set src_code 920923-1.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 921102-1.c
++prebase
++
++set src_code 921102-1.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 921116-1.c
++prebase
++
++set src_code 921116-1.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 930301-1.c
++prebase
++
++set src_code 930301-1.c
++set compiler_output ".*:4:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 930622-1.c
++prebase
++
++set src_code 930622-1.c
++set compiler_output ".*:5:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 930622-2.c
++prebase
++
++set src_code 930622-2.c
++set compiler_output ".*:4:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 930714-1.c
++prebase
++
++set src_code 930714-1.c
++# Not really sure what the error should be here...
++set compiler_output ".*:18.*:23"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++# Test 931203-1.c
++prebase
++
++set src_code 931203-1.c
++set compiler_output ".*:10"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 940112-1.c
++prebase
++
++set src_code 940112-1.c
++set compiler_output ".*:7"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 940227-1.c
++prebase
++
++set src_code 940227-1.c
++set compiler_output ".*:5.*:5"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 940510-1.c
++prebase
++
++set src_code 940510-1.c
++set compiler_output ".*:1.*:1"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 940712-1.c
++prebase
++
++set src_code 940712-1.c
++set compiler_output ".*:8.*:4"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 950825-1.c
++prebase
++set src_code 950825-1.c
++set compiler_output ".*:1.*:1.*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 950921-1.c
++prebase
++set src_code 950921-1.c
++set compiler_output ".*:3.*:3.*:9.*:9:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 951025-1.c
++prebase
++set src_code 951025-1.c
++set compiler_output ".*:\[12\]:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 951123-1.c
++prebase
++set src_code 951123-1.c
++set compiler_output ".*:2:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 951227-1.c
++prebase
++set src_code 951227-1.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test 971104-1.c
++prebase
++set src_code 971104-1.c
++set compiler_output ".*:25:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++# Test 990416-1.c
++prebase
++set src_code 990416-1.c
++set compiler_output ".*:4:.*:6:.*:6:.*:6:.*:6:.*:6:.*:7:.*:7:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++# Test init-1.c
++prebase
++set src_code init-1.c
++set compiler_output ".*:12.*:12.*:13.*:13.*:14.*:14.*:15.*:15.*:16.*:16:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test init-2.c
++prebase
++set src_code init-2.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test invalid_asm.c
++prebase
++set src_code invalid_asm.c
++set compiler_output ".*:1:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
++
++
++# Test va-arg-1.c
++# It is debatable if this test should be included at all.
++# varags may be implemented by macros, which may not actually
++# reference the bogus argument.
++prebase
++
++set src_code va-arg-1.c
++set compiler_output ".*:6:"
++
++set groups {passed gcc-noncompile}
++
++postbase $src_code $run $groups
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++#include <stdarg.h>
++
++f (int x, ...)
++{
++ va_list args;
++ va_start (args, bogus_variable);
++ va_end (args);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920413-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920413-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920413-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920413-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++x(b){unsigned long c;c=4294967295U/(unsigned long)b;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920520-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920520-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920520-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920520-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(){asm("%0"::"r"(1.5F));}g(){asm("%0"::"r"(1.5));}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920521-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920521-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920521-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920521-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(){asm("f":::"cc");}g(x,y){asm("g"::"%r"(x), "r"(y));}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920717-x.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920717-x.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920717-x.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920717-x.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++/* 920717-1.c */
++
++const char s[]="foo";
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920717-y.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920717-y.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920717-y.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920717-y.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++/* 920717-y.c */
++
++extern const char s[];
++
++main()
++{
++ puts(s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920730-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920730-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/920730-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/920730-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++/* 920730-1.c */
++
++f1()
++{
++ int b=0x80000000;
++ return b>=0x80000000;
++}
++
++f2()
++{
++ int b=0x80000001;
++ return b>=0x80000001;
++}
++
++f3()
++{
++ int b=0x7fffffff;
++ return b>=0x7fffffff;
++}
++
++f4()
++{
++ int b=0xffffffff;
++ return b>=0xffffffff;
++}
++
++main ()
++{
++ if((f1()&f2()&f3()&f4())!=1)
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/921210-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/921210-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/921210-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/921210-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++#define a1(y) (y+1)
++#define a2(y) a1(y)+1
++#define f a->f
++a2(f)
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/930510-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/930510-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/930510-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/930510-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++#define ugly 3
++#ugly "foobar" 3 /* { dg-error "invalid" "invalid directive" } */
++int main() { exit (0); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/951130-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/951130-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/951130-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/951130-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++unsigned long long x = -(unsigned long long)(-(long long)(((unsigned long
++long)0 - 1) >> 1) - 1);
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/960224-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/960224-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/960224-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/960224-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#if 0
++#if 0
++#endif \
++\
++
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/960224-2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/960224-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/960224-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/960224-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++#if 0
++#if 0
++#endif /
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/981006-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/981006-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/981006-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/981006-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++/* Test that tablejump insns are correctly handled. If the compiler
++ loses track of the jump targets, it will report that x and y can be
++ used uninitialized.
++
++ This is broken in egcs 1998/10/06 for mips in pic mode. */
++/* { dg-do compile } */
++
++int foo (int a, int b)
++{
++ __label__ z;
++ int x; /* { dg-bogus "warning: `.' might be used uninitialized in this function" } */
++ int y; /* { dg-bogus "warning: `.' might be used uninitialized in this function" } */
++ static void *p;
++
++ switch (a) {
++ case 2:
++ x = 4;
++ break;
++ case 4:
++ x = 6;
++ break;
++ case 8: case 10: case 13: case 11: case 17: case 19:
++ x = 7;
++ break;
++ default:
++ x = -1;
++ break;
++ }
++ switch (b) {
++ case 2:
++ y = 4;
++ break;
++ case 4:
++ y = 6;
++ break;
++ case 8: case 10: case 13: case 11: case 17: case 19:
++ y = 7;
++ break;
++ default:
++ y = -1;
++ break;
++ }
++ z:
++ p = &&z;
++ return x * y;
++}
++int main (int argc, char *argv[])
++{
++ return 1 == foo (argc, argc + 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=special.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/eeprof-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/eeprof-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/eeprof-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/eeprof-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,67 @@
++#define ASSERT(X) if (!(X)) abort ();
++#define NOCHK __attribute__ ((no_instrument_function))
++
++int entry_calls, exit_calls;
++void (*last_fn_entered)();
++void (*last_fn_exited)();
++
++int main () NOCHK;
++
++void foo ()
++{
++ ASSERT (last_fn_entered == foo);
++}
++
++static void foo2 ()
++{
++ ASSERT (entry_calls == 1 && exit_calls == 0);
++ ASSERT (last_fn_entered == foo2);
++ foo ();
++ ASSERT (entry_calls == 2 && exit_calls == 1);
++ ASSERT (last_fn_entered == foo);
++ ASSERT (last_fn_exited == foo);
++}
++
++void nfoo (void) NOCHK;
++void nfoo ()
++{
++ ASSERT (entry_calls == 2 && exit_calls == 2);
++ ASSERT (last_fn_entered == foo);
++ ASSERT (last_fn_exited == foo2);
++ foo ();
++ ASSERT (entry_calls == 3 && exit_calls == 3);
++ ASSERT (last_fn_entered == foo);
++ ASSERT (last_fn_exited == foo);
++}
++
++int main ()
++{
++ ASSERT (entry_calls == 0 && exit_calls == 0);
++
++ foo2 ();
++
++ ASSERT (entry_calls == 2 && exit_calls == 2);
++ ASSERT (last_fn_entered == foo);
++ ASSERT (last_fn_exited == foo2);
++
++ nfoo ();
++
++ ASSERT (entry_calls == 3 && exit_calls == 3);
++ ASSERT (last_fn_entered == foo);
++
++ return 0;
++}
++
++void __cyg_profile_func_enter (void (*fn)(), void (*parent)()) NOCHK;
++void __cyg_profile_func_exit (void (*fn)(), void (*parent)()) NOCHK;
++
++void __cyg_profile_func_enter (void (*fn)(), void (*parent)())
++{
++ entry_calls++;
++ last_fn_entered = fn;
++}
++void __cyg_profile_func_exit (void (*fn)(), void (*parent)())
++{
++ exit_calls++;
++ last_fn_exited = fn;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/special.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/special.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/special/special.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/special/special.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,116 @@
++# Copyright (C) 1988, 90-96, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++
++#
++# These tests come from Torbjorn Granlund (tege@cygnus.com)
++# C torture test suite.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib c-torture.exp
++load_lib gcc-dg.exp
++
++################## ADD NEXT CASE HERE (NOT AT THE END) ##################
++
++# 981006-1
++# For MIPS at least, pic is needed to trigger the problem.
++dg-init
++if { [istarget rs6000-*-aix*]
++ || [istarget powerpc*-*-aix*]
++ || [istarget arm*-*-*]
++} {
++ set extra_flags ""
++} else {
++ set extra_flags "-fpic"
++}
++dg-runtest $srcdir/$subdir/981006-1.c "-Wuninitialized -O2 $extra_flags" ""
++dg-finish
++
++# 921210-1
++set lines [gcc_target_compile $srcdir/$subdir/921210-1.c "" preprocess ""]
++set lines [prune [split [prune_warnings [prune_gcc_output $lines]] "\n"] ""]
++set line [lindex $lines [expr [llength $lines]-1]]
++regsub -all " " $line "" clean
++if [expr [string compare $clean "(a->f+1)+1"]==0] then {
++ pass "921210-1.c"
++} else {
++ fail "921210-1.c"
++}
++
++# 920521-1
++c-torture 920521-1.c "-S"
++
++# 920520-1
++c-torture 920520-1.c "-S"
++
++# 920717-1
++if [isnative] then {
++ set lines [gcc_target_compile "$srcdir/$subdir/920717-x.c" "920717-x.o" object {additional_flags="-w"}]
++ if ![string match "" $lines] then {
++ fail "920717-x.c"
++ } else {
++ # This is a completely bogus test. Sorry.
++ catch exec "rm -f 920717-y.o"
++ send_log "cc -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null\n"
++ catch exec "cc -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null"
++ if ![file exists "920717-y.o"] then {
++ send_log "c89 -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null\n"
++ catch exec "c89 -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null"
++ }
++ if [file exists "920717-y.o"] then {
++ set lines [gcc_target_compile "920717-y.o x.o" "x" executable ""]
++ if [string match "" $lines] then {
++ pass "920717-1.c"
++ } else {
++ fail "920717-1.c"
++ }
++ }
++ }
++}
++
++# 920730-1
++if [isnative] then {
++ c-torture "920730-1.c"
++ c-torture "920730-1.c" "-traditional"
++}
++
++# 920413-1
++c-torture 920413-1.c "-Wtraditional"
++
++# 930510-1
++dg-init
++dg-runtest $srcdir/$subdir/930510-1.c "" ""
++dg-finish
++
++# 951130-1
++c-torture 951130-1.c "-Werror"
++
++# 960224-1
++c-torture 960224-1.c "-E -ansi -pedantic-errors"
++
++# 960224-2
++#c-torture 960224-2.c "-E -ansi -pedantic-errors"
++
++c-torture-execute $srcdir/$subdir/eeprof-1.c "-finstrument-functions"
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++foo (a, p)
++ int *p;
++{
++ p[0] = a;
++ a = (short) a;
++ return a;
++}
++
++main ()
++{
++ int i;
++ foobar (i, &i);
++}
++
++
++foobar (a, b)
++{
++ int c;
++
++ c = a % b;
++ a = a / b;
++ return a + b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/86.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/86.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/86.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/86.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++m32 (a)
++ int *a;
++{
++ a[1] = a[0];
++}
++
++m16 (a)
++ short *a;
++{
++ a[1] = a[0];
++}
++
++
++m8 (a)
++ char *a;
++{
++ a[1] = a[0];
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/a1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/a1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/a1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/a1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++int
++foo (a, p)
++ int *p;
++{
++ p[0] = 85 * a;
++ p[1] = -86 * a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/a3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/a3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/a3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/a3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++foo (a)
++{
++ int i;
++
++ for (i = 1; i < a; i++)
++ ;
++ {
++ int b = (int) &foo;
++
++ return (a & b) == 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/aaa.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/aaa.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/aaa.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/aaa.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (a, b)
++{
++ int t;
++ while (b < 0)
++ {
++ t = a;
++ a = b;
++ b = t;
++ }
++ return a + b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/aa.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/aa.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/aa.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/aa.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++#define w 20
++#define c 1
++
++foo (a)
++ unsigned a;
++{
++ return ((a & ((1 << w) - 1)) << c) > 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/abs.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/abs.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/abs.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/abs.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (a)
++{
++ return __builtin_abs (a);
++}
++
++main ()
++{
++ printf ("%d %d\n", foo (0x80000000), foo (12));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/a.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/a.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/a.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/a.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a & 65535;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ac.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ac.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ac.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ac.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++barfoo (a)
++{
++ return (a << 16) & ~0xffff;
++}
++
++foobar (a)
++{
++ return ((unsigned short) a) << 15;}
++
++foo (a)
++{
++ return (a & 0x121) << 31;
++}
++
++bar (a)
++{
++ return (a & ~0xffff) << 16;
++}
++
++main ()
++{
++ int a;
++
++ for (a = 1; a; a += a)
++ {
++ printf ("%d", (foo (a)));
++ }
++ puts ("");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/acc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/acc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/acc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/acc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++foo (a)
++{
++ int b = a + 1;
++ int c = (short) a;
++ if (b)
++ return b;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/add386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/add386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/add386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/add386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++main (a)
++{
++ return a + 128;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/add.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/add.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/add.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/add.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a, b, p)
++ int *p;
++{
++ return 34 + *p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/addcc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/addcc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/addcc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/addcc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++foo (p, a, b)
++ int *p;
++ int a;
++ int b;
++{
++
++ a += p[0];
++ b += p[1];
++ if (a == 0)
++ return b;
++ return a;
++}
++
++
++bar (a)
++{
++ return -a > 0 ? 1 : 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andm.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andm.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andm.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++foo (p)
++ int *p;
++{
++ return (*p & 255) == 0;
++}
++
++bar (a)
++{
++ return (a & 0xfff00000) == 0;
++}
++
++main ()
++{
++ printf ("%d%d\n", bar (-1), bar(0));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andmem.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andmem.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andmem.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andmem.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++void p1 (p) int *p;
++{ *p &= ~0xff;
++}
++void p2 (p) int *p;
++{ *p &= ~0xff00;
++}
++void p3 (p) int *p;
++{ *p &= ~0xffff0000;
++}
++void p4 (p) int *p;
++{ *p &= ~0xffff;
++}
++
++main ()
++{
++ int a;
++
++ a = 0x12345678; p1 (&a); printf ("%x\n", a);
++ a = 0x12345678; p2 (&a); printf ("%x\n", a);
++ a = 0x12345678; p3 (&a); printf ("%x\n", a);
++ a = 0x12345678; p4 (&a); printf ("%x\n", a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andn.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andn.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andn.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andn.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a)
++{
++ int b = 0x1fff;
++ return a & ~b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andok.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andok.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andok.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andok.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++foo (a, b, p)
++ int *p;
++{
++ p[1] = a & 0xfff0000;
++ p[2] = b & 0xfff0000;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andsi.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andsi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andsi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andsi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo ()
++{
++ return (int)&foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andsparc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andsparc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/andsparc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/andsparc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (int *p)
++{
++ int a, b;
++
++ a = 123456;
++ a += p[0];
++ b = p[0];
++ if (a == 0)
++ return b;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/aos.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/aos.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/aos.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/aos.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++foo (p)
++ int *p;
++{
++ if ((int) p > 0)
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/arr.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/arr.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/arr.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/arr.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (a, b, c)
++{
++ bar (a, b);
++ {
++ int arr[10];
++ arr[c] = b;
++ bar (arr[0], arr[1]);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/as.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/as.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/as.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/as.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++
++#define S 31
++#define A 17
++
++foo (a)
++ unsigned a;
++{
++ return (a >> S) & ((1 << A) - 1);
++}
++
++main ()
++{
++ printf ("%d%d\n", foo (-1), foo (0));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ase.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ase.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ase.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ase.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++ase (p)
++ short *p;
++{
++ int a;
++ a = p[1];
++ p[2] = a;
++ if ((short) a)
++ p[a]++;
++ return (a == 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (long long x)
++{
++ if (x--)
++ return 255;
++ return 0;
++}
++
++main ()
++{
++ printf ("%d\n", foo (0));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++
++struct s
++{
++ unsigned a : 8;
++ unsigned b : 8;
++ unsigned c : 8;
++ unsigned d : 8;
++};
++
++/*
++struct
++{
++ unsigned a : 8;
++ unsigned b : 16;
++ unsigned c : 8;
++};
++*/
++
++struct s
++foo (struct s s, int i)
++{
++ s.b = i;
++ return s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++struct tree_common
++{
++ unsigned int code : 9;
++ unsigned int code2 : 7;
++};
++
++static int
++duplicate_decls (x)
++ register struct tree_common x;
++{
++ return x.code2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b88.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b88.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b88.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b88.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++foo (double d)
++{
++ d = -d;
++ if (d < 0.0)
++ return 1;
++ return 2;
++}
++
++main ()
++{
++ foo (0.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bad.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bad.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bad.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bad.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++typedef union longlong
++{
++ struct {unsigned short h0, h1, h2, h3;} h;
++ struct {signed long low, high;} si;
++ struct {unsigned long low, high;} ui;
++ signed long long sll;
++ unsigned long long ull;
++} long_long;
++
++
++long long
++__negdi2 (u)
++ long long u;
++{
++ long_long uu;
++
++ uu.sll = u;
++
++ uu.si.low = -uu.si.low;
++ if (uu.si.low == 0)
++ uu.si.high = -uu.si.high;
++ else
++ uu.si.high = ~uu.si.high;
++
++ return uu.sll;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/band.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/band.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/band.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/band.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++foo (a)
++{
++ return (a & (1 << 31)) != 0;
++}
++
++main ()
++{
++ if (foo (0))
++ puts ("foo");
++ else
++ puts ("bar");
++ if (foo (~0))
++ puts ("foo");
++ else
++ puts ("bar");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bb0.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bb0.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bb0.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bb0.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a)
++{
++ return (a & 0xfff000) != 0;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bb1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bb1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bb1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bb1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++foo (a)
++{
++ int b = 32;
++ if (b & a)
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bbb.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bbb.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bbb.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bbb.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++struct looksets
++ {
++ int lset[10];
++ };
++
++struct looksets lkst[];
++
++flset( p )
++struct looksets *p;
++{
++ p-- > lkst;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/b.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/b.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++main ()
++{
++ *(short *) 25 = 123;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a % (1 << b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bcopy.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bcopy.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bcopy.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bcopy.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,64 @@
++void
++bcopy1 (s, d, c)
++ long long *s;
++ long long *d;
++ int c;
++{
++ int i;
++ c = c / 8;
++ for (i = 0; i < c; i++)
++ d[i] = s[i];
++}
++
++void
++bcopy2 (s, d, c)
++ long *s;
++ long *d;
++ int c;
++{
++ int i;
++ c = c / 4;
++ for (i = 0; i < c; i++)
++ d[i] = s[i];
++}
++
++
++void
++bcopy3 (s, d, c)
++ char *s;
++ char *d;
++ int c;
++{
++ long long z0, z1;
++ int r = d - s;
++
++ int i;
++
++ c /= 16;
++
++ z0 = *((long long *) s);
++ s += 8;
++ z1 = *((long long *) s);
++ s += 8;
++ for (i = 0; i < c; i++)
++ {
++ *(long long *)(s + r) = z0;
++ z0 = *((long long *) s);
++ s += 8;
++ *(long long *)(s + r) = z1;
++ z1 = *((long long *) s);
++ s += 8;
++ }
++}
++
++#define BYTES 16384
++
++main ()
++{
++ long long s[BYTES / 8];
++ long long d[BYTES / 8];
++ int i;
++
++ for (i = 1; i < 67108864 / BYTES; i++)
++ bcopy (s, d, BYTES);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bf.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bf.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bf.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bf.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++typedef unsigned long uint32;
++typedef signed long sint32;
++
++uint32
++ext (sint32 src, unsigned o5, unsigned w5)
++{
++ return (w5 == 0) ? src >> o5 : (src << (( - o5 - w5) & 31)) >> (32 - w5);
++}
++
++uint32
++extu (uint32 src, unsigned o5, unsigned w5)
++{
++ return (w5 == 0) ? src >> o5 : (src << (( - o5 - w5) & 31)) >> (32 - w5);
++}
++
++uint32
++mak (uint32 src, unsigned o5, unsigned w5)
++{
++ return (w5 == 0) ? src << o5 : (src << (32 - w5)) >> (( - o5 - w5) & 31);
++}
++
++uint32
++rot (uint32 src, unsigned o5)
++{
++ return (src >> o5) | (src << (( - o5) & 31));
++}
++
++main (int argc, char **argv)
++{
++ printf ("%x\n", clr (0xffffffff, atoi (argv[2]), atoi (argv[1])));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bfins.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bfins.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bfins.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bfins.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct foo
++{
++ unsigned j : 16;
++ unsigned i : 16;
++};
++
++struct foo
++foo (a, b)
++ struct foo a;
++ int b;
++{
++ a.j = 123;
++ a.i = b;
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bfx.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bfx.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bfx.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bfx.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (x, c)
++{
++ return x << -c;
++}
++
++main ()
++{
++ printf ("%x\n", foo (0xf05, -4));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bge.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bge.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bge.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bge.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (a)
++ double a;
++{
++ if (a >= 0)
++ return 1;
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bit.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bit.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bit.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bit.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++bar (a)
++{
++ return (a == 0);
++}
++
++foo (a)
++ int a;
++{
++ if ((a & (1 << 26)) >= 0)
++ return 1;
++ else
++ return 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bitf.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bitf.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bitf.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bitf.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++#define int unsigned
++
++struct foo
++{
++ int aa : 1;
++ int a : 9;
++ int c : 16;
++ int d : 6;
++};
++
++
++int
++foo (a, b)
++ struct foo a;
++{
++ return a.d == 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bitw.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bitw.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bitw.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bitw.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (a)
++ unsigned a;
++{
++ unsigned b = 0;
++
++ if ((a & 12345678) > b)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/blk.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/blk.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/blk.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/blk.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++struct
++{
++ double a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t;
++} foo, bar;
++
++foobar ()
++{
++ foo = bar;
++ xxx (&foo, &bar);
++}
++
++main ()
++{
++ bar.g = 1.0;
++ foo.g = 2.0;
++ foobar ();
++ printf ("%lf\n", foo.g);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bt386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bt386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bt386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bt386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++foo (a, b)
++{
++ return (a & (1 << b)) != 0;
++}
++
++bar (a, b)
++{
++ a ^= (1 << b);
++ return a != 0;
++}
++
++main ()
++{
++ int i;
++ for (i = 0; i < 32; i++)
++ printf ("%d ", foo (0x8000000f, i));
++ puts ("");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bt.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bt.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bt.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bt.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++main ()
++{
++ int i;
++
++ for (i = 1000000; --i;)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG11.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG11.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG11.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG11.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++#define DD 2410065408
++
++unsigned
++foo (d)
++ double d;
++{
++ return d;
++}
++
++#if foobar
++
++main ()
++{
++#if bar
++ unsigned u = DD;
++ double d = (double) u;
++#else
++ double d = (double) DD;
++#endif
++ printf ("%u = %u = %lf\n", foo ((double) DD), foo (d), d);
++}
++#else
++
++main ()
++{
++ printf ("%lf\n", (double) ((unsigned) DD));
++ foo ((double) DD);
++}
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG12.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG12.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG12.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG12.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++long long
++main ()
++{
++ return 1.1e10;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG13.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG13.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG13.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG13.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++struct tree_common
++{
++ int uid;
++ unsigned int code : 8;
++ unsigned int code2 : 8;
++ unsigned external_attr : 1;
++ unsigned public_attr : 1;
++
++};
++
++static int
++duplicate_decls (x)
++ register struct tree_common *x;
++{
++ if (x->external_attr)
++ if (x->code)
++ if (x->code2)
++ x->public_attr = 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG16.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG16.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG16.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG16.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++setgetlen (a)
++ int *a;
++{
++ while (*a++ & 0x80000000)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG17.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG17.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG17.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG17.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++double d;
++
++main()
++{
++ int i;
++
++ i = (int) d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG18.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG18.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG18.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG18.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++main()
++{
++ if ((signed int) 1 < (signed int) -2147483648)
++ printf("true\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++struct _XtTextSource {
++ /* ... */
++ void (* SetSelection)();
++ /* ... */
++ };
++
++typedef struct _XtTextSource *XtTextSource;
++
++typedef struct _TextPart {
++ XtTextSource source;
++ /* ... */
++} TextPart;
++
++typedef struct _TextRec {
++ /* ... */
++ TextPart text;
++} TextRec;
++
++typedef struct _TextRec *TextWidget;
++
++
++void XtTextUnsetSelection(w)
++ TextWidget w; /* original is: Widget w; */
++{
++ register TextWidget ctx = (TextWidget) w;
++ void (*nullProc)() = 0;
++
++/*
++ * the following line causes the error, when optimizing:
++ */
++
++ if (ctx->text.source->SetSelection != nullProc) {
++
++ foo();
++
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG21.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG21.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG21.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG21.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++typedef struct {
++ int knock_on_wood; /* leave it out and it works. */
++ int f1;
++} FOO;
++
++typedef struct {
++ FOO *b1;
++} BAR;
++
++Nase ()
++{
++ int i, j;
++ FOO *foop;
++ BAR *barp;
++
++ for (i = 0; i < 2; i++) {
++ foop = &barp->b1[i];
++ for (j = 0; j < foop->f1; j++) {
++ /* dummy() */; /* put it in and it works. */
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG22.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG22.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG22.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG22.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++
++void
++Rotate (float angle)
++{
++ float mag = (angle < 0) ? -angle : angle;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG23.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG23.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG23.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG23.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++main()
++{
++ static char static_char_array[1];
++ static char *static_char_pointer;
++ static char static_char;
++ char char_array[1];
++ char *char_pointer;
++ char character;
++
++ char *cp, c;
++
++ c = cp - static_char_array; /* error */
++ c = cp - static_char_pointer;
++ c = cp - &static_char; /* error */
++ c = cp - char_array;
++ c = cp - char_pointer;
++ c = cp - &character;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG24.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG24.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG24.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG24.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct ack {
++ char a, b, c;
++};
++
++main()
++{
++ struct ack bad;
++
++ foo(bad);
++}
++
++foo(c)
++ struct ack c;
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG25.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG25.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG25.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG25.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++
++foo (a)
++{
++ __builtin_ffs (a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++BUG2 (p) int *p;
++{
++ int a = 0;
++ if (*p == a)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG3.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++BUG2 (p) char *p;
++{
++ int a = 0;
++ if (*p == a)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++int foo()
++{
++ char c;
++
++ return (c ^ 30 ) > (c ^ 40 );
++/*
++ these also get the signal :
++ return (c ^ 30 ) == (c ^ 40 );
++ return ((int)c ^ 30 ) > (c ^ 40 );
++ also fails if c is "extern char"
++
++ these are ok :
++ return (c + 30 ) > (c ^ 40 );
++ return (c ^ 30 ) > (c + 40 );
++ return (c ^ 30 ) + (c ^ 40 );
++ return ('a' ^ 30 ) > (c ^ 40 );
++ return (c ^ 40 );
++ return (c ^ 30 ) > (c ^ 40 );
++*/
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++enum bar
++{
++ one,
++ two
++};
++
++enum bar foo;
++
++void bar()
++{
++ switch (foo)
++ {
++ case one:
++ case two:
++ printf ("one to two\n");
++ break;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG6.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/BUG6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/BUG6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++main()
++{
++ unsigned long L;
++ double D;
++ D = L = -3;
++ printf("L=%lu, D=%g\n", L, D);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a - 65536;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bugc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bugc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bugc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bugc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++
++int
++reg0indreg1 (r0, p1)
++ short r0; short *p1;
++{
++ return (r0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/buns.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/buns.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/buns.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/buns.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++foo (a)
++{
++ int bar = 0;
++
++ return (unsigned) (a - 1) <= (unsigned) bar;
++}
++
++main ()
++{
++ if (foo (-1))
++ puts ("The largest possible unsigned <= 0 on this machine...");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bx.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bx.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/bx.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/bx.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++unsigned
++good (unsigned src, unsigned o5, unsigned w5)
++{
++ return src & ~((w5 == 0) ? (~0 << o5) : (1 << o5));
++}
++
++unsigned
++bad (unsigned src, unsigned o5, unsigned w5)
++{
++ return src & ((w5 == 0) ? ~(~0 << o5) : ~(1 << o5));
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/c1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/c1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/c1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/c1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++unsigned
++rec (a, b)
++ unsigned a;
++ unsigned b;
++{
++ return a * rec (a - 1, b + 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/c2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/c2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/c2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/c2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a)
++{
++ bar (a);
++ bar (a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/call386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/call386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/call386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/call386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++
++foo () {}
++
++main ()
++{
++ int i;
++ for (i = 100000; i >= 0; i--)
++ {
++ foo ();
++ foo ();
++ foo ();
++ foo ();
++ foo ();
++ foo ();
++ foo ();
++ foo ();
++ foo ();
++ foo ();
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/call.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/call.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/call.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/call.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++int foo () {}
++
++main (a, b)
++{
++ foo (foo (a, b), foo (b, a));
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/callind.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/callind.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/callind.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/callind.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++call (foo, a)
++ int (**foo) ();
++{
++
++ (foo)[1] = call;
++
++ foo[a] (1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/c.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/c.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/c.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/c.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++foo (a, b)
++ long long a, b;
++{
++ if (a & ~b)
++ return 1;
++ else
++ return 0;
++}
++
++bar (a, b)
++ long long a, b;
++{
++ if (a & ~b & ((long long) 87612378))
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,96 @@
++cc8 (a, b)
++{
++ if (a < 0)
++ goto L1;
++ if (a == 0)
++ goto L2;
++ L1:b++;
++ L2:b++;
++ return b;
++}
++
++cc7 (a)
++ long long a;
++{
++ if (a < 0)
++ return 1;
++ else
++ return 0;
++}
++
++cc6 (float a, double p)
++{
++ p = a;
++ if (p < 0)
++ return p;
++ else
++ return p + 1;
++}
++
++cc5 (p, a)
++ char *p;
++ char a;
++{
++ p[2] = a;
++ if (a)
++ return 0;
++ else
++ return 1;
++}
++
++
++cc4 (a, b, p)
++ int a, b;
++ int *p;
++{
++ a = (int short)b;
++ *p = a;
++ if ((int) a < 0)
++ return 0;
++ else
++ return 1;
++}
++
++
++cc1 (a, b)
++{
++ int x = 0;
++
++ if ((int) a < (int) b)
++ {
++ if ((unsigned) a < (unsigned) b)
++ x++;
++ x++;
++ }
++
++ return x;
++}
++
++cc2 (a, b)
++{
++ int x = 0;
++
++ if ((int) a <= (int) b)
++ {
++ if ((int) a < (int) b)
++ x++;
++ x++;
++ }
++
++ return x;
++}
++
++cc3 (a, b)
++{
++ int x = 0;
++
++ a += b;
++ if ((unsigned) a > 0)
++ {
++ if (a == 0)
++ x++;
++ x++;
++ }
++
++ return x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/charmtst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/charmtst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/charmtst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/charmtst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++c_move_tst (char b)
++{
++ char a;
++
++ a = b;
++ b = 'b';
++ foo (a);
++ foo (b);
++ foo (a);
++ bar (a, b);
++ b = a;
++ if (b == 0)
++ a++;
++ return a + b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmb.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmb.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmb.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmb.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++foo (p1, p2)
++ short p1, *p2;
++{
++ int a;
++ return (int) p1 + (int) *p2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++struct fooalign {char x; double d;};
++union fooround {long x; double d;};
++
++int
++foo ()
++{
++ int extra = 4;
++ if (extra < sizeof (union fooround))
++ extra = sizeof (union fooround);
++ return extra;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmphi.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmphi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmphi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmphi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (short *p, short a)
++{
++ return a < *p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++foo (a, p)
++ register int a;
++ int *p;
++{
++
++ for (a = 10000000; a >= *p; a--)
++ ;
++}
++
++main ()
++{
++ int a;
++ foo (a, a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmul.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmul.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cmul.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cmul.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a * 84;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cn1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cn1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cn1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cn1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int
++foo ()
++{
++ return 7561;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/comb.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/comb.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/comb.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/comb.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (a, b)
++{
++ int c = a & b;
++ if ((a & b) == 0)
++ return 0;
++ return c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/configure.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=unsorted.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/consec.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/consec.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/consec.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/consec.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++int glob;
++
++conseq (a, b, c, d)
++ int *a, *b;
++{
++ a[2] = d;
++ a[1] = c;
++ sequence (a, b, c, d);
++ sequence (d, c, b, a);
++ b[0] = 0;
++ b[1] = 123;
++ a[0] = 321;
++ a[1] = 0;
++ sequence (111, 0, 0, 222, 0, 333);
++ ((int *)glob)[2] = c;
++ ((int *)glob)[3] = d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/const.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/const.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/const.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/const.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++main (a)
++{
++ return a + (~0 - 240);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/conv.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/conv.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/conv.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/conv.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++double
++u2d (unsigned int u)
++{
++ return u;
++}
++
++double
++i2d (signed int i)
++{
++ return i;
++}
++
++unsigned int
++d2u (double d)
++{
++ return d;
++}
++
++signed int
++d2i (double d)
++{
++ return d;
++}
++
++main ()
++{
++ printf ("%lf, %lf, %lf\n", u2d (~0), u2d (1 << 31), u2d (1));
++ printf ("%lf, %lf, %lf\n", i2d (~0), i2d (1 << 31), i2d (1));
++
++ printf ("%u, %u, %u\n", d2u (u2d (~0)), d2u (u2d (1 << 31)), d2u (u2d (1)));
++ printf ("%d, %d, %d\n", d2i (i2d (~0)), d2i (i2d (1 << 31)), d2i (i2d (1)));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,66 @@
++#define ID_1 2400000000.0
++#define ID_2 1.7
++#define ID_3 -1.7
++
++unsigned ui;
++int si;
++
++conv_i1 ()
++{
++/*
++ ui = (unsigned) ID_1;
++ si = (int) ID_1;
++*/
++}
++
++conv_i2 ()
++{
++ ui = (unsigned) ID_2;
++ si = (int) ID_2;
++}
++
++conv_i3 ()
++{
++/* ui = (unsigned) ID_3;*/
++ si = (int) ID_3;
++}
++
++conv_1 (d)
++ double d;
++{
++ ui = (unsigned) d;
++/*
++ si = (int) d;
++*/
++}
++
++double
++foo (u)
++ unsigned u;
++{
++ return u;
++}
++
++main ()
++{
++ printf ("%lf\n", foo (2400000000));
++
++ conv_i1 ();
++ printf ("%lf, %u, %d\n", ID_1, ui, si);
++
++ conv_i2 ();
++ printf ("%lf, %u, %d\n", ID_2, ui, si);
++
++ conv_i3 ();
++ printf ("%lf, %u, %d\n", ID_3, ui, si);
++
++ conv_1 (ID_1);
++ printf ("%lf, %u, %d\n", ID_1, ui, si);
++
++ conv_1 (ID_2);
++ printf ("%lf, %u, %d\n", ID_2, ui, si);
++
++ conv_1 (ID_3);
++ printf ("%lf, %u, %d\n", ID_3, ui, si);
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++struct _obstack_chunk
++{
++ char *limit;
++ struct _obstack_chunk *prev;
++ char contents[4];
++};
++
++struct obstack
++{
++ long chunk_size;
++ struct _obstack_chunk* chunk;
++ char *object_base;
++ char *next_free;
++ char *chunk_limit;
++ int temp;
++ int alignment_mask;
++ struct _obstack_chunk *(*chunkfun) ();
++ void (*freefun) ();
++};
++
++struct fooalign {char x; double d;};
++union fooround {long x; double d;};
++
++void
++_obstack_begin (h, size, alignment, chunkfun, freefun)
++ struct obstack *h;
++ int size;
++ int alignment;
++ void * (*chunkfun) ();
++ void (*freefun) ();
++{
++ register struct _obstack_chunk* chunk;
++
++ if (alignment == 0)
++ alignment = ((char *)&((struct fooalign *) 0)->d - (char *)0);
++ if (size == 0)
++ {
++ int extra = 4;
++ if (extra < (sizeof (union fooround)))
++ extra = (sizeof (union fooround));
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/csebug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/csebug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/csebug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/csebug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++
++int
++reg0indreg1 (r0, p1)
++ short r0; short *p1;
++{
++ return (r0 + *p1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cvt.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cvt.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/cvt.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/cvt.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (p)
++ unsigned char *p;
++{
++ unsigned char a = 0;
++
++ if (*p > 0)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dblbug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dblbug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dblbug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dblbug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++union real_extract
++{
++ double d;
++ int i[sizeof (double ) / sizeof (int)];
++};
++
++typedef struct
++{
++ int zzzz;
++} *rtx;
++
++rtx
++immed_real_const_1 (d)
++ double d;
++{
++ union real_extract u;
++ register rtx r;
++
++ u.d = d;
++ foo (&(r->zzzz), &u);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++foo (a, b, c)
++ double a;
++ int b;
++ double c;
++{
++ if (b)
++ return a + c;
++ else
++ return a - c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/d.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/d.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/d.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/d.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++long long unsigned
++str2llu (str)
++ char *str;
++{
++ long long unsigned acc;
++ long long b = 10;
++ char d;
++ acc = *str++ - '0';
++ for (;;)
++ {
++ d = *str++;
++ if (d == '\0')
++ break;
++ d -= '0';
++ acc = acc * 10 + d;
++ }
++
++ return acc;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ddd.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ddd.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ddd.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ddd.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++int foo;
++int bar;
++
++main ()
++{
++ return foo + bar;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dead.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dead.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dead.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dead.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a)
++{
++ ++a;
++ return a == 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/delay.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/delay.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/delay.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/delay.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (a, b)
++{
++ if (a == 1)
++ goto foo1;
++ if (a == 2)
++ goto foo2;
++ foo1:
++ return 2;
++ foo2:
++ return 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,280 @@
++#define type double
++
++type glob0, glob1;
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)((int)&glob0))
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)((int)&glob1))
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++reg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= reg1) return 1; else return 0;}
++
++reg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= indreg1) return 1; else return 0;}
++
++reg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= imm1) return 1; else return 0;}
++
++reg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= limm1) return 1; else return 0;}
++
++reg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adr1) return 1; else return 0;}
++
++reg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrreg1) return 1; else return 0;}
++
++reg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrx1) return 1; else return 0;}
++
++reg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= regx1) return 1; else return 0;}
++
++indreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= reg1) return 1; else return 0;}
++
++indreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= indreg1) return 1; else return 0;}
++
++indreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= imm1) return 1; else return 0;}
++
++indreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= limm1) return 1; else return 0;}
++
++indreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adr1) return 1; else return 0;}
++
++indreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrreg1) return 1; else return 0;}
++
++indreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrx1) return 1; else return 0;}
++
++indreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= regx1) return 1; else return 0;}
++
++imm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= reg1) return 1; else return 0;}
++
++imm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= indreg1) return 1; else return 0;}
++
++imm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= imm1) return 1; else return 0;}
++
++imm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= limm1) return 1; else return 0;}
++
++imm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adr1) return 1; else return 0;}
++
++imm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrreg1) return 1; else return 0;}
++
++imm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrx1) return 1; else return 0;}
++
++imm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= regx1) return 1; else return 0;}
++
++limm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= reg1) return 1; else return 0;}
++
++limm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= indreg1) return 1; else return 0;}
++
++limm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= imm1) return 1; else return 0;}
++
++limm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= limm1) return 1; else return 0;}
++
++limm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adr1) return 1; else return 0;}
++
++limm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrreg1) return 1; else return 0;}
++
++limm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrx1) return 1; else return 0;}
++
++limm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= regx1) return 1; else return 0;}
++
++adr0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= reg1) return 1; else return 0;}
++
++adr0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= indreg1) return 1; else return 0;}
++
++adr0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= imm1) return 1; else return 0;}
++
++adr0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= limm1) return 1; else return 0;}
++
++adr0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adr1) return 1; else return 0;}
++
++adr0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrreg1) return 1; else return 0;}
++
++adr0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrx1) return 1; else return 0;}
++
++adr0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= regx1) return 1; else return 0;}
++
++adrreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= reg1) return 1; else return 0;}
++
++adrreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= indreg1) return 1; else return 0;}
++
++adrreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= imm1) return 1; else return 0;}
++
++adrreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= limm1) return 1; else return 0;}
++
++adrreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adr1) return 1; else return 0;}
++
++adrreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrreg1) return 1; else return 0;}
++
++adrreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrx1) return 1; else return 0;}
++
++adrreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= regx1) return 1; else return 0;}
++
++adrx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= reg1) return 1; else return 0;}
++
++adrx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= indreg1) return 1; else return 0;}
++
++adrx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= imm1) return 1; else return 0;}
++
++adrx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= limm1) return 1; else return 0;}
++
++adrx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adr1) return 1; else return 0;}
++
++adrx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrreg1) return 1; else return 0;}
++
++adrx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrx1) return 1; else return 0;}
++
++adrx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= regx1) return 1; else return 0;}
++
++regx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= reg1) return 1; else return 0;}
++
++regx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= indreg1) return 1; else return 0;}
++
++regx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= imm1) return 1; else return 0;}
++
++regx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= limm1) return 1; else return 0;}
++
++regx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adr1) return 1; else return 0;}
++
++regx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrreg1) return 1; else return 0;}
++
++regx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrx1) return 1; else return 0;}
++
++regx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= regx1) return 1; else return 0;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/di.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/di.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/di.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/di.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++long long
++foo (a, b)
++ long long a, b;
++{
++ return a * b;
++}
++
++main ()
++{
++ int a = foo ((long long) 2, (long long) 3);
++ printf ("%d\n", a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dic.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dic.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dic.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dic.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++unsigned long long
++main ()
++{
++ return (unsigned long long) 7816234 << 671111;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dilayout.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dilayout.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dilayout.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dilayout.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++struct ii
++{
++ int a;
++ int b;
++};
++
++struct foo
++{
++ int a;
++ struct ii ab;
++ int b;
++};
++
++struct ii
++foo (int *p, struct foo a)
++{
++ p[0] = a.a;
++ p[1] = a.ab.a;
++ p[2] = a.ab.b;
++ p[3] = a.b;
++ return a.ab;
++}
++
++str (struct ii ab, struct ii *p)
++{
++ *p = ab;
++}
++
++ll (long long ab, long long *p)
++{
++ *p = ab;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dimove.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dimove.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dimove.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dimove.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (long long *p)
++{
++ p[0] = p[1];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dimul.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dimul.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dimul.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dimul.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++long long
++foo (a, b)
++ long long a, b;
++{
++ return a * b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/div.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/div.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/div.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/div.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a / b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/divdf.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/divdf.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/divdf.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/divdf.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++double
++foo (float a, float b)
++{
++ return (double)a / (double)b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dm.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dm.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dm.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++struct dm
++{
++ unsigned q;
++ unsigned r;
++};
++
++struct dm
++dm (a, b)
++ unsigned a, b;
++{
++ struct dm qr;
++
++ qr.q = a / b;
++ qr.r = a % b;
++ return qr;
++}
++
++main ()
++{
++ struct dm qr;
++
++ qr = dm (100, 30);
++ printf ("%u, %u\n", qr.q, qr.r);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dshift.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dshift.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/dshift.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/dshift.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++foo (b, c)
++ unsigned b, c;
++{
++ return (b << 12) | (c >> 20);
++}
++
++main ()
++{
++ printf ("0x%x\n", foo (0x11223344, 0xaabbccdd));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/e.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/e.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/e.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/e.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++foo (short a, int *p, short *s)
++{
++ int i;
++ for (i = 10; i >= 0; i--)
++ {
++ a = (short) bar ();
++ p[i] = a;
++ s[i] = a;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ex.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ex.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ex.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ex.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (a, b)
++{
++ if ((a & (1 << b)) == 0)
++ return 1;
++ return 0;
++}
++
++main ()
++{
++ printf ("%d\n", foo ());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ext.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ext.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ext.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ext.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++struct foo
++{
++ unsigned b31 : 1;
++ unsigned b30 : 1;
++ unsigned b29 : 1;
++ unsigned b28 : 1;
++ unsigned rest : 28;
++};
++foo(a)
++ struct foo a;
++{
++ return a.b30;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/f1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/f1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/f1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/f1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++double
++foo ()
++{
++ return 1.2587624368724;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/f2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/f2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/f2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/f2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (double *p)
++{
++ p[0] = p[1];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/fdmul.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/fdmul.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/fdmul.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/fdmul.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++double
++foo (float a, float b) { return (double) a * (double) b; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/float.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/float.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/float.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/float.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++double
++foo (a, b, c)
++ double a, b, c;
++{
++ return a * b + c * a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/flo.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/flo.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/flo.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/flo.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (a)
++ double a;
++{
++ double b = 0.0;
++
++ return (a == 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/flt_const.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/flt_const.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/flt_const.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/flt_const.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++double
++foo ()
++{
++ return 3.141592653589793238462643;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/fnul.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/fnul.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/fnul.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/fnul.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++main ()
++{
++ int i;
++ int f;
++
++ for (i = 0;; i--)
++ {
++ f = 0;
++
++ if ((i & (i - 1)) == 0)
++ {
++ printf ("d");
++ f = 1;
++ }
++ if ((i & -i) == i)
++ {
++ printf ("t");
++ f = 1;
++ }
++ if (f)
++ printf ("%d\n", i);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/foo.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/foo.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/foo.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/foo.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++int *
++main (s1, s2)
++ int *s1; int *s2;
++{
++ while ((*s1++ = *s2++) != '\0')
++ ;
++ return s1 - 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (hp, p, a)
++ short *hp;
++ int *p;
++ int a;
++{
++ hp[10] = a;
++ p[0] = 10;
++ if (hp[10] > 0)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/fq.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/fq.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/fq.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/fq.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++expand_to_ascii (int *i, int *o)
++{
++ unsigned x, y, out;
++ unsigned x1;
++
++ /* Big endian code. */
++
++ x = *i++;
++
++ y = x >> (32 - 13);
++ out = (y / 91);
++ out = (out << 8) | (y % 91);
++
++ x <<= 13;
++ y = x >> (32 - 13);
++ out = (out << 8) | (y / 91);
++ out = (out << 8) | (y % 91);
++
++ *o++ = out + 0x20202020;
++
++ /* 6 bits left in x. */
++
++ x1 = *i++;
++ x = (x << 26) | (x1 >> 6);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/g.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/g.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/g.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/g.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (a, b)
++ long long a, b;
++
++{
++ if (a == b)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,67 @@
++/* Compiler Test Generator Program.
++ Copyright (C) 1989 FSF. */
++
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)(int)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)(int)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++int glob0, glob1;
++
++#define type double
++
++char *a0[] = {"reg0", "indreg0", "imm0", "limm0",
++ "adr0", "adrreg0", "adrx0", "regx0"};
++char *a1[] = {"reg1", "indreg1", "imm1", "limm1",
++ "adr1", "adrreg1", "adrx1", "regx1"};
++
++main_compare ()
++{
++ int i0, i1;
++
++ for (i0 = 0; i0 < 8; i0++)
++ {
++ for (i1 = 0; i1 < 8; i1++)
++ {
++ printf ("%s%s_cmp (r0, r1, x0, x1, p0, p1)\n", a0[i0], a1[i1]);
++ printf ("type r0, r1; type *p0, *p1;\n");
++ printf ("{if (%s <= %s) return 1; else return 0;}\n\n",
++ a0[i0], a1[i1], a0[i0]);
++ }
++ }
++}
++
++main_assign ()
++{
++ int i0, i1;
++
++ for (i0 = 0; i0 < 8; i0++)
++ {
++ if (i0 < 2 || i0 > 3)
++ for (i1 = 0; i1 < 8; i1++)
++ {
++ printf ("%s%s_set (r0, r1, x0, x1, p0, p1)\n", a0[i0], a1[i1]);
++ printf ("type r0, r1; type *p0, *p1;\n");
++ printf ("{%s = %s; }\n\n",
++ a0[i0], a1[i1]);
++ }
++ }
++}
++
++main () {main_assign ();}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/glob.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/glob.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/glob.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/glob.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++typedef int tt;
++
++tt a1;
++tt a2;
++tt a3;
++
++foo ()
++{
++ a1++;
++ a2++;
++ a1++;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/gronk.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/gronk.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/gronk.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/gronk.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++test_opt (a, b)
++ unsigned a, b;
++{
++ a = a / b;
++ if (a == 0)
++ a++;
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/hibug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/hibug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/hibug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/hibug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct foo
++{
++ short d;
++ int a;
++};
++
++int
++bar (d, u)
++ short d;
++ struct foo u;
++{
++
++ u.d = d;
++ return (int) (&u);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/hi.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/hi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/hi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/hi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a, b)
++ short a, b;
++{
++ return a < b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,280 @@
++#define type short
++
++type glob0, glob1;
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++reg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= reg1) return 1; else return 0;}
++
++reg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= indreg1) return 1; else return 0;}
++
++reg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= imm1) return 1; else return 0;}
++
++reg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= limm1) return 1; else return 0;}
++
++reg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adr1) return 1; else return 0;}
++
++reg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrreg1) return 1; else return 0;}
++
++reg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrx1) return 1; else return 0;}
++
++reg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= regx1) return 1; else return 0;}
++
++indreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= reg1) return 1; else return 0;}
++
++indreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= indreg1) return 1; else return 0;}
++
++indreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= imm1) return 1; else return 0;}
++
++indreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= limm1) return 1; else return 0;}
++
++indreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adr1) return 1; else return 0;}
++
++indreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrreg1) return 1; else return 0;}
++
++indreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrx1) return 1; else return 0;}
++
++indreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= regx1) return 1; else return 0;}
++
++imm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= reg1) return 1; else return 0;}
++
++imm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= indreg1) return 1; else return 0;}
++
++imm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= imm1) return 1; else return 0;}
++
++imm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= limm1) return 1; else return 0;}
++
++imm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adr1) return 1; else return 0;}
++
++imm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrreg1) return 1; else return 0;}
++
++imm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrx1) return 1; else return 0;}
++
++imm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= regx1) return 1; else return 0;}
++
++limm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= reg1) return 1; else return 0;}
++
++limm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= indreg1) return 1; else return 0;}
++
++limm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= imm1) return 1; else return 0;}
++
++limm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= limm1) return 1; else return 0;}
++
++limm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adr1) return 1; else return 0;}
++
++limm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrreg1) return 1; else return 0;}
++
++limm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrx1) return 1; else return 0;}
++
++limm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= regx1) return 1; else return 0;}
++
++adr0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= reg1) return 1; else return 0;}
++
++adr0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= indreg1) return 1; else return 0;}
++
++adr0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= imm1) return 1; else return 0;}
++
++adr0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= limm1) return 1; else return 0;}
++
++adr0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adr1) return 1; else return 0;}
++
++adr0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrreg1) return 1; else return 0;}
++
++adr0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrx1) return 1; else return 0;}
++
++adr0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= regx1) return 1; else return 0;}
++
++adrreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= reg1) return 1; else return 0;}
++
++adrreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= indreg1) return 1; else return 0;}
++
++adrreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= imm1) return 1; else return 0;}
++
++adrreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= limm1) return 1; else return 0;}
++
++adrreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adr1) return 1; else return 0;}
++
++adrreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrreg1) return 1; else return 0;}
++
++adrreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrx1) return 1; else return 0;}
++
++adrreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= regx1) return 1; else return 0;}
++
++adrx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= reg1) return 1; else return 0;}
++
++adrx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= indreg1) return 1; else return 0;}
++
++adrx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= imm1) return 1; else return 0;}
++
++adrx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= limm1) return 1; else return 0;}
++
++adrx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adr1) return 1; else return 0;}
++
++adrx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrreg1) return 1; else return 0;}
++
++adrx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrx1) return 1; else return 0;}
++
++adrx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= regx1) return 1; else return 0;}
++
++regx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= reg1) return 1; else return 0;}
++
++regx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= indreg1) return 1; else return 0;}
++
++regx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= imm1) return 1; else return 0;}
++
++regx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= limm1) return 1; else return 0;}
++
++regx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adr1) return 1; else return 0;}
++
++regx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrreg1) return 1; else return 0;}
++
++regx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrx1) return 1; else return 0;}
++
++regx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= regx1) return 1; else return 0;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/HIset.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/HIset.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/HIset.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/HIset.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,216 @@
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)(int)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)(int)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++int glob0, glob1;
++
++#define type short
++
++reg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = reg1; }
++
++reg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = indreg1; }
++
++reg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = imm1; }
++
++reg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = limm1; }
++
++reg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adr1; }
++
++reg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrreg1; }
++
++reg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrx1; }
++
++reg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = regx1; }
++
++indreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = reg1; }
++
++indreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = indreg1; }
++
++indreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = imm1; }
++
++indreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = limm1; }
++
++indreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adr1; }
++
++indreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrreg1; }
++
++indreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrx1; }
++
++indreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = regx1; }
++
++adr0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = reg1; }
++
++adr0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = indreg1; }
++
++adr0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = imm1; }
++
++adr0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = limm1; }
++
++adr0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adr1; }
++
++adr0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrreg1; }
++
++adr0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrx1; }
++
++adr0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = regx1; }
++
++adrreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = reg1; }
++
++adrreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = indreg1; }
++
++adrreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = imm1; }
++
++adrreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = limm1; }
++
++adrreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adr1; }
++
++adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrreg1; }
++
++adrreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrx1; }
++
++adrreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = regx1; }
++
++adrx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = reg1; }
++
++adrx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = indreg1; }
++
++adrx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = imm1; }
++
++adrx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = limm1; }
++
++adrx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adr1; }
++
++adrx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrreg1; }
++
++adrx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrx1; }
++
++adrx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = regx1; }
++
++regx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = reg1; }
++
++regx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = indreg1; }
++
++regx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = imm1; }
++
++regx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = limm1; }
++
++regx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adr1; }
++
++regx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrreg1; }
++
++regx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrx1; }
++
++regx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = regx1; }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/i.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/i.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/i.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/i.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++ase (p)
++ short *p;
++{
++ int a;
++
++ a = *p;
++ *p = a + 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/i++.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/i++.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/i++.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/i++.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++int main ()
++{
++ int i = 2;
++
++ i = i++;
++ printf ("%d\n",i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ic.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ic.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ic.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ic.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (int *ip, int a)
++{
++ a++;
++ if (a < ip[a])
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/icmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/icmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/icmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/icmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++foo (a, b)
++{
++ b++;
++ if (a <= b)
++ if ((int) a < (int) b)
++ b--;
++ else
++ b++;
++ return b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ifreg.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ifreg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ifreg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ifreg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++union foo
++{
++ float f;
++ int i;
++};
++
++foo (int a, float c)
++{
++ union foo b;
++ b.i = a;
++ return b.f + c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/imm.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/imm.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/imm.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/imm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++int
++imm ()
++
++{
++ return 11234;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/isinf.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/isinf.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/isinf.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/isinf.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int
++isinf ()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/jmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/jmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/jmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/jmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++foo (a)
++{
++ if (a)
++ goto a1;
++ goto a2;
++ a1: goto a3;
++ a2: goto a4;
++ a3: goto a5;
++ a4: goto a6;
++ a5: goto a7;
++ a6: goto a8;
++ a7: goto a9;
++ a8: goto a10;
++ a9: goto a11;
++ a10: goto a12;
++ a11: goto a13;
++ a12:;
++ a13:;
++ return -a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/jumptab.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/jumptab.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/jumptab.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/jumptab.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++jumptab (a)
++{
++ int b;
++ switch (a)
++ {
++ case 0:
++ b = 6;break;
++ case 1:
++ b = 5;break;
++ case 2:
++ b = 4;break;
++ case 3:
++ b = 3;break;
++ case 4:
++ b = 2;break;
++ case 5:
++ b = 1;break;
++ }
++ return b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/layout.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/layout.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/layout.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/layout.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++struct foo
++{
++ char a;
++};
++
++foo ()
++{
++ struct foo bar[3];
++ bar[0].a = '0';
++ bar[1].a = '1';
++ bar[2].a = '2';
++ foof (bar);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/lbug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/lbug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/lbug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/lbug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++long long x = 0;
++main()
++{
++ if (x--)
++ return 255;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/l.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/l.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/l.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/l.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++main (a)
++{
++ return - 256 + a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ll1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ll1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ll1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ll1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++long long
++foo (long long a)
++{
++ return a + ((long long) 10230101 << 32) + 7561;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/llbug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/llbug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/llbug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/llbug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++union foo
++{
++ long long d;
++};
++
++int
++bar (long long d)
++{
++ union foo u;
++
++ u.d = d;
++ return (int) &u;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/lll.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/lll.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/lll.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/lll.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++
++byte_match_count2 (buf, n, xm, m1, m2, m3, m4)
++ unsigned *buf;
++ unsigned n;
++ unsigned xm;
++ unsigned m1, m2, m3, m4;
++{
++ unsigned w, cnt = 0;
++ unsigned *bp;
++
++ n /= 4;
++
++ bp = buf;
++ while (bp < buf + n)
++ {
++ w = *bp++;
++ w ^= xm;
++ cnt += ((m1 & w) == 0);
++ cnt += ((m2 & w) == 0);
++ cnt += ((m3 & w) == 0);
++ cnt += ((m4 & w) == 0);
++
++ w = *bp++;
++ w ^= xm;
++ cnt += ((m1 & w) == 0);
++ cnt += ((m2 & w) == 0);
++ cnt += ((m3 & w) == 0);
++ cnt += ((m4 & w) == 0);
++
++ w = *bp++;
++ w ^= xm;
++ cnt += ((m1 & w) == 0);
++ cnt += ((m2 & w) == 0);
++ cnt += ((m3 & w) == 0);
++ cnt += ((m4 & w) == 0);
++
++ w = *bp++;
++ w ^= xm;
++ cnt += ((m1 & w) == 0);
++ cnt += ((m2 & w) == 0);
++ cnt += ((m3 & w) == 0);
++ cnt += ((m4 & w) == 0);
++ }
++ return cnt;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/load8.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/load8.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/load8.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/load8.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo ()
++{
++ return *(short *) 126;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++typedef int xtype;
++
++foo (p, pc)
++ xtype *p;
++ char *pc;
++{
++ xtype a;
++ unsigned b = 0;
++
++ a = *p;
++ p[1] = a;
++ if ((unsigned) p[1] > 0)
++ return 1;
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/log2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/log2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/log2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/log2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++log2 (a, b)
++{
++ int c;
++ c = ~(~a & ~b);
++ return c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/logic.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/logic.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/logic.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/logic.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++logic (a, b)
++ int *a, b;
++{
++ if (*a & 123)
++ b = 1;
++ if (*a & ~222)
++ b = 2;
++ if (124 & *a)
++ b = 3;
++ if (~111 & *a)
++ b = 4;
++
++ if (~*a & 23)
++ b = 1;
++ if (~*a & ~22)
++ b = 2;
++ if (24 & ~*a)
++ b = 3;
++ if (~11 & ~*a)
++ b = 4;
++
++ if (~*a & b)
++ b = 1;
++ if (~*a & ~b)
++ b = 2;
++ if (*a & ~*a)
++ b = 3;
++ return b;
++}
++
++x (a, b, c)
++{
++ for (a = 0; --a > 0;);
++ for (b = -1; --b > 0;);
++ for (c = -65536; --c > 0;);
++ return a + b + c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/loop-1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/loop-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/loop-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/loop-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (a)
++{
++ while ((a -= 1) != -1)
++ bar (270000);
++ putchar ('\n');
++}
++
++main ()
++{
++ foo (5);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/loop386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/loop386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/loop386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/loop386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++foo (a)
++{
++ do
++ {
++ puts ("a");
++ a -= 1;
++ }
++ while (a != 0);
++}
++
++main ()
++{
++ int p[100];
++ printf ("%d\n", foo (3));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/lop.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/lop.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/lop.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/lop.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++lop (a)
++{
++ do
++ a--;
++ while (a >= -1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (p)
++ int *p;
++{
++ *p = 1234;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++void
++store16 (p, a)
++ short *p;
++ short a;
++{
++ *p = a;
++}
++
++signed int
++sign_extend16 (p)
++ signed short *p;
++{
++ return *p;
++}
++
++unsigned int
++zero_extend16 (p)
++ unsigned short *p;
++{
++ return *p;
++}
++
++void
++store8 (p, a)
++ char *p;
++ char a;
++{
++ *p = a;
++}
++
++signed int
++sign_extend8 (p)
++ signed char *p;
++{
++ return *p;
++}
++
++unsigned int
++zero_extend8 (p)
++ unsigned char *p;
++{
++ return *p;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m5.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a * 5 + 12;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m68.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m68.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/m68.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/m68.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++foo (a)
++{
++ return a | 12345;
++}
++
++bar (a)
++{
++ return a & (0xffff0000 | 12345);
++}
++
++foobar (a)
++{
++ return a - 128;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mbyte.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mbyte.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mbyte.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mbyte.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++foo1 (p)
++ char *p;
++{
++ p[0] = p[1];
++ return p[0];
++}
++
++foo2 (p, x)
++ char *p;
++{
++ p[0] = x;
++ return p[0];
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mchar.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mchar.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mchar.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mchar.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++int
++foo (char *a, char *b)
++{
++ int x;
++ *a = *b;
++ x = *b;
++ if ((char) x)
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (ip, a, x)
++ int a;
++ int *ip;
++ int x;
++{
++ if (a >= 1)
++ x++;
++ return x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mdouble.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mdouble.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mdouble.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mdouble.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++double
++foo (double a)
++{
++
++ return 1.123486712;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/memtst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/memtst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/memtst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/memtst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++#ifdef STACK_SIZE
++#define SIZE STACK_SIZE / 8
++#else
++#define SIZE 65536
++#endif
++
++memtst (int *p, int a)
++{
++ do
++ {
++ if (p[a] == 1)
++ break;
++ }
++ while (--a);
++}
++
++main ()
++{
++ int a[SIZE];
++ int i;
++ bzero (a, SIZE * 4);
++ for (i = 0; i < 100; i++)
++ {
++ memtst (a, SIZE);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/miscomp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/miscomp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/miscomp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/miscomp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++unsigned char foo(unsigned long);
++main()
++{
++ unsigned char AChar;
++ unsigned long ALong = 0x12345678;
++
++ AChar = foo(ALong);
++
++ printf("AChar = %x\n",(int)AChar);
++}
++unsigned char
++foo( unsigned long TheLong)
++{
++ return( (unsigned char) (TheLong & 0xff) );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mm.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mm.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mm.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a * 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mod.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mod.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mod.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mod.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a % b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/modcc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/modcc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/modcc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/modcc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return (a % b) == 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/move.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/move.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/move.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/move.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++typedef char type;
++
++type
++foo (b)
++{
++ type a;
++ for (a = 10; a < b; a++)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++move (a, b)
++ char a, b;
++{
++ char s;
++ s = a;
++ if (s)
++ gurka (s);
++ foo (b, a);
++ a = bar ();
++ b = bar ();
++ gra (s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mregtst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mregtst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mregtst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mregtst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++foo (a, p)
++ int *p;
++{
++ int old, new, i;
++
++ old = 0;
++ for (i = 1; i < 100; i++)
++ {
++ new = p[i];
++ if (new < old)
++ a++;
++ old = new;
++ if (old == 0)
++ return 0;
++ }
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/msp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/msp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/msp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/msp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo ()
++{
++ int a[16384];
++ bar (a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mtst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mtst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mtst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mtst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++foo (int *p, int c)
++{
++ int a, b;
++ a = p[0];
++ b = p[1];
++ c = p[2];
++ if (b == 0)
++ goto foo1;
++ if (b < 0)
++ goto foo2;;
++
++ return a + b + c;
++ foo1:
++ return 1;
++ foo2:
++ return 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mu.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mu.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mu.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mu.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a * b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mul.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mul.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mul.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mul.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++void
++mulqi (char *p, char a, char b)
++{
++ p[0] = a/b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mword1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mword1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mword1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mword1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++int
++foo (a, b)
++int *a, *b;
++{
++ int x;
++ *a = (*b + 1);
++ x = *b;
++ if ((int) x)
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mword.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mword.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/mword.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/mword.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++int
++foo (a, b)
++int *a, *b;
++{
++ int x, y;
++ x++;
++ *a = *b;
++ y = *b;
++
++ if ((int) x)
++ return 1;
++ else
++ return y;
++}
++
++foo1 (p)
++ int *p;
++{
++ p[0] = p[1];
++ return p[0];
++}
++
++foo2 (p, x)
++ int *p;
++{
++ p[0] = x;
++ return p[0];
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/n1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/n1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/n1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/n1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++foo (a, p)
++ long long a;
++ int *p;
++{
++ int b = (int)-a;
++ if (b > 32)
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/nand.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/nand.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/nand.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/nand.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++nadn (a, b)
++{
++ return (~a) | (~b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/n.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/n.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/n.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/n.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++char_autoincr (b1, c)
++ short *b1;
++ short c;
++{
++ *b1 = c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/neg.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/neg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/neg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/neg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++foo (a) {return -a;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/o.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/o.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/o.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/o.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++foo (a, p)
++ char a;
++ int *p;
++{
++ int b = a;
++ *p = b;
++ a = (char) a;
++ if (a)
++ return b;
++ else
++ return b + 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/omit.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/omit.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/omit.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/omit.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++omit (a, b)
++ char a;
++ char *b;
++{
++ char x;
++ int i;
++ x = *b;
++ b[1] = x;
++ foo ((int)x);
++ return x + 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/opout.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/opout.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/opout.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/opout.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++x ()
++{}
++
++y ()
++{}
++
++z (a, b)
++{
++ return (int) &a + (int) &b + (int) x + (int) z;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/opt.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/opt.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/opt.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/opt.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int
++foo (a)
++{
++ return (a == 2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/or386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/or386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/or386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/or386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++typedef int xtype;
++
++xtype
++foo (a)
++ xtype a;
++{
++ return a | 0x7f;
++}
++
++main ()
++{
++ printf ("%08x\n", foo (-1));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/or.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/or.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/or.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/or.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a | 0xffff0101;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/parms.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/parms.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/parms.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/parms.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++#define alloca __builtin_alloca
++
++x (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, x, y)
++{
++ foo (alloca (8));
++ return a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+x+y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pass.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pass.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pass.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pass.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++int
++foo (a, b, c)
++{
++ return a + b + c;
++}
++
++int
++bar ()
++{
++ int q, w, e, r, t, y;
++
++ return foo ((int) & q, q, w, e, q, (int) &w);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/p.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/p.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/p.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/p.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++foo (a, b, p)
++ short *p;
++{
++ p[0] = a;
++ p[1] = b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pmt.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pmt.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pmt.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pmt.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++long long
++foo (a, b)
++ long long a, b;
++{
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/poor.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/poor.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/poor.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/poor.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++typedef struct
++{
++ char c[510];
++} s510;
++
++typedef struct
++{
++ char c[511];
++} s511;
++
++s510 G510, s1;
++s511 G511;
++int I, J;
++double D;
++
++void main(void);
++void f0(double D, ...);
++s510 f1(double D, ...);
++void f2a(s510 S);
++void f2b(s511 S);
++
++
++void main(void)
++{
++
++ f0(D, I, J);
++
++ s1 = f1(D, I, D);
++
++ f2a(G510);
++
++ f2b(G511);
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (a, b, c, d, e, i0, f, i1)
++ double a, b, c, d, e, f;
++ int i0, i1;
++{}
++
++main ()
++{
++ foo (1.0, 2.0, 3.0, 4.0, 5.0, 1, 6.0, 2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a, b, c, d, e, f, g, h, i, j, xx)
++ double xx;
++{
++ return xx + 1.2345;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pyr2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pyr2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pyr2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pyr2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return ((int *)0)[a];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++typedef struct
++{
++ int v;
++ int h;
++} Point;
++
++typedef struct
++{
++ int top, left, bottom, right;
++} Rect;
++
++int
++x_PtInRect (Point pt, Rect *r)
++{
++ return pt.v >= r->top && pt.v < r->bottom
++ && pt.h >= r->left && pt.h < r->right;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pyr.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pyr.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/pyr.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/pyr.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (char *a)
++{
++ char b;
++ int c;
++ b = *a;
++ c = b;
++ if (c < 0)
++ return 1;
++ a[1] = b;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/q.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/q.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/q.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/q.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++
++unsigned
++reg0indreg1 (r0, p1)
++ unsigned short r0; unsigned short p1;
++{
++ return (r0 + p1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,280 @@
++#define type signed char
++
++type glob0, glob1;
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++reg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= reg1) return 1; else return 0;}
++
++reg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= indreg1) return 1; else return 0;}
++
++reg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= imm1) return 1; else return 0;}
++
++reg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= limm1) return 1; else return 0;}
++
++reg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adr1) return 1; else return 0;}
++
++reg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrreg1) return 1; else return 0;}
++
++reg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrx1) return 1; else return 0;}
++
++reg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= regx1) return 1; else return 0;}
++
++indreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= reg1) return 1; else return 0;}
++
++indreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= indreg1) return 1; else return 0;}
++
++indreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= imm1) return 1; else return 0;}
++
++indreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= limm1) return 1; else return 0;}
++
++indreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adr1) return 1; else return 0;}
++
++indreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrreg1) return 1; else return 0;}
++
++indreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrx1) return 1; else return 0;}
++
++indreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= regx1) return 1; else return 0;}
++
++imm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= reg1) return 1; else return 0;}
++
++imm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= indreg1) return 1; else return 0;}
++
++imm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= imm1) return 1; else return 0;}
++
++imm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= limm1) return 1; else return 0;}
++
++imm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adr1) return 1; else return 0;}
++
++imm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrreg1) return 1; else return 0;}
++
++imm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrx1) return 1; else return 0;}
++
++imm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= regx1) return 1; else return 0;}
++
++limm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= reg1) return 1; else return 0;}
++
++limm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= indreg1) return 1; else return 0;}
++
++limm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= imm1) return 1; else return 0;}
++
++limm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= limm1) return 1; else return 0;}
++
++limm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adr1) return 1; else return 0;}
++
++limm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrreg1) return 1; else return 0;}
++
++limm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrx1) return 1; else return 0;}
++
++limm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= regx1) return 1; else return 0;}
++
++adr0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= reg1) return 1; else return 0;}
++
++adr0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= indreg1) return 1; else return 0;}
++
++adr0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= imm1) return 1; else return 0;}
++
++adr0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= limm1) return 1; else return 0;}
++
++adr0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adr1) return 1; else return 0;}
++
++adr0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrreg1) return 1; else return 0;}
++
++adr0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrx1) return 1; else return 0;}
++
++adr0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= regx1) return 1; else return 0;}
++
++adrreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= reg1) return 1; else return 0;}
++
++adrreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= indreg1) return 1; else return 0;}
++
++adrreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= imm1) return 1; else return 0;}
++
++adrreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= limm1) return 1; else return 0;}
++
++adrreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adr1) return 1; else return 0;}
++
++adrreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrreg1) return 1; else return 0;}
++
++adrreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrx1) return 1; else return 0;}
++
++adrreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= regx1) return 1; else return 0;}
++
++adrx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= reg1) return 1; else return 0;}
++
++adrx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= indreg1) return 1; else return 0;}
++
++adrx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= imm1) return 1; else return 0;}
++
++adrx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= limm1) return 1; else return 0;}
++
++adrx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adr1) return 1; else return 0;}
++
++adrx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrreg1) return 1; else return 0;}
++
++adrx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrx1) return 1; else return 0;}
++
++adrx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= regx1) return 1; else return 0;}
++
++regx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= reg1) return 1; else return 0;}
++
++regx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= indreg1) return 1; else return 0;}
++
++regx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= imm1) return 1; else return 0;}
++
++regx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= limm1) return 1; else return 0;}
++
++regx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adr1) return 1; else return 0;}
++
++regx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrreg1) return 1; else return 0;}
++
++regx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrx1) return 1; else return 0;}
++
++regx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= regx1) return 1; else return 0;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/QIset.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/QIset.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/QIset.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/QIset.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,216 @@
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)(int)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)(int)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++int glob0, glob1;
++
++#define type char
++
++reg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = reg1; }
++
++reg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = indreg1; }
++
++reg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = imm1; }
++
++reg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = limm1; }
++
++reg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adr1; }
++
++reg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrreg1; }
++
++reg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrx1; }
++
++reg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = regx1; }
++
++indreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = reg1; }
++
++indreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = indreg1; }
++
++indreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = imm1; }
++
++indreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = limm1; }
++
++indreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adr1; }
++
++indreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrreg1; }
++
++indreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrx1; }
++
++indreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = regx1; }
++
++adr0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = reg1; }
++
++adr0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = indreg1; }
++
++adr0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = imm1; }
++
++adr0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = limm1; }
++
++adr0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adr1; }
++
++adr0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrreg1; }
++
++adr0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrx1; }
++
++adr0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = regx1; }
++
++adrreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = reg1; }
++
++adrreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = indreg1; }
++
++adrreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = imm1; }
++
++adrreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = limm1; }
++
++adrreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adr1; }
++
++adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrreg1; }
++
++adrreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrx1; }
++
++adrreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = regx1; }
++
++adrx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = reg1; }
++
++adrx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = indreg1; }
++
++adrx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = imm1; }
++
++adrx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = limm1; }
++
++adrx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adr1; }
++
++adrx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrreg1; }
++
++adrx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrx1; }
++
++adrx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = regx1; }
++
++regx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = reg1; }
++
++regx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = indreg1; }
++
++regx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = imm1; }
++
++regx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = limm1; }
++
++regx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adr1; }
++
++regx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrreg1; }
++
++regx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrx1; }
++
++regx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = regx1; }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/r1.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/r1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/r1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/r1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++void assert (a) {if (a != 1) abort ();}
++
++int h1 (int *p) {return *p & 255;}
++
++void p1 () {int a = 0x01020304; assert (h1 (&a) == 0x04);}
++
++
++int h2 (a) {return a > 0;}
++
++p2 () {assert (h2 (1));}
++
++h3 (int *p)
++{
++ *p |= 255;
++}
++
++p3 ()
++{
++ int *p;
++ h3 (p);
++}
++
++main ()
++{
++ p1 ();
++ p2 ();
++ p3 ();
++ puts ("Compiler test passed.");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/r.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/r.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/r.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/r.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++r (a, b)
++{
++ if (a < b)
++ return 1;
++ else
++ return 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/rel.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/rel.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/rel.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/rel.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++foo (int *c, int b)
++{
++ int a;
++
++ a = *c + b;
++ c[1] = a;
++ return b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/rmsc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/rmsc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/rmsc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/rmsc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++
++cc1 (x, y)
++ int x, y;
++{
++ int z;
++ z = x - y;
++ if (x >= y)
++ return z + 1;
++ else
++ return z + 0;
++}
++
++cc2 (x, y)
++ int x, y;
++{
++ int z;
++
++ z = x - y;
++ if (z >= 0)
++ return z + 1;
++ else
++ return z + 0;
++}
++
++cc3 (x, y)
++ unsigned x, y;
++{
++ unsigned z;
++ z = x - y;
++ if (x >= y)
++ return z + 1;
++ else
++ return z + 0;
++}
++
++cc4 (x, y)
++ unsigned x, y;
++{
++ unsigned z;
++
++ z = x - y;
++ if (z >= 0)
++ return z + 1;
++ else
++ return z + 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/round.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/round.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/round.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/round.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++foo (a)
++ double a;
++{
++ printf ("%d\n", (int) a);
++}
++
++main ()
++{
++ foo (1.6);
++ foo (1.4);
++ foo (-1.4);
++ foo (-1.6);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/run.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/run.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/run.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/run.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++main ()
++{
++ typedef short int xtype;
++
++ xtype i;
++ xtype ii;
++
++ for (i = 0; i < 100; i++)
++ for (ii = 65535; --ii;)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sar.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sar.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sar.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sar.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++struct foo
++{
++ char a;
++} foo[100];
++
++main ()
++{
++ foo[1].a = '1';
++ foo[2].a = '2';
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/s.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/s.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/s.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/s.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++struct foo
++{
++ int a, b, c, d;
++ double doubl;
++} s1, s2;
++
++struct foo
++structret (s1, i1, i2, s2)
++ struct foo s1, s2;
++ int i1, i2;
++{
++ if (i1 != i2)
++ {
++ if (i1 < i2)
++ return s1;
++ else
++ return s2;
++ }
++ s2.a = 11;
++ s2.b = 22;
++ s2.c = s1.c;
++ s2.d = s1.d;
++ return s2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/scal.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/scal.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/scal.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/scal.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++int g1, g2;
++
++void
++write_at (addr, off, val)
++ int *addr;
++ int off;
++ int val;
++{
++ g2 = 1;
++ addr[off] = val;
++ g2++;
++}
++
++main ()
++{
++ g2 = 12;
++ write_at (&g1, &g2 - &g1, 12345);
++ printf ("%d\n", g2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a, b)
++ int a, b;
++{
++ return (a < 0) | (a <= 0) | (a == 0) | (a != 0) | (a >= 0) | (a > 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/scc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/scc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/scc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/scc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (a, b)
++{
++ if (a < 0)
++ goto ret1;
++ if (a == 0)
++ return 2;
++ return 3;
++ ret1:
++ return 1;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/scond.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/scond.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/scond.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/scond.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++scond (a, b, c, d)
++{
++ return (a > b) & (c < d);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/selfrec.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/selfrec.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/selfrec.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/selfrec.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int
++foo (a)
++{
++ return foo (a - 1) * a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/seq.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/seq.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/seq.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/seq.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a < 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/set386.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/set386.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/set386.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/set386.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a, p)
++ int *p;
++{
++ *p = a > 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/set88.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/set88.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/set88.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/set88.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (a)
++{
++ return -1 << a;
++}
++
++bar (a, b)
++{
++ return b | (-1 << a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/SFset.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/SFset.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/SFset.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/SFset.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,216 @@
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)(int)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)(int)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++int glob0, glob1;
++
++#define type float
++
++reg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = reg1; }
++
++reg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = indreg1; }
++
++reg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = imm1; }
++
++reg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = limm1; }
++
++reg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adr1; }
++
++reg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrreg1; }
++
++reg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrx1; }
++
++reg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = regx1; }
++
++indreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = reg1; }
++
++indreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = indreg1; }
++
++indreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = imm1; }
++
++indreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = limm1; }
++
++indreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adr1; }
++
++indreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrreg1; }
++
++indreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrx1; }
++
++indreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = regx1; }
++
++adr0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = reg1; }
++
++adr0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = indreg1; }
++
++adr0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = imm1; }
++
++adr0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = limm1; }
++
++adr0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adr1; }
++
++adr0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrreg1; }
++
++adr0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrx1; }
++
++adr0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = regx1; }
++
++adrreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = reg1; }
++
++adrreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = indreg1; }
++
++adrreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = imm1; }
++
++adrreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = limm1; }
++
++adrreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adr1; }
++
++adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrreg1; }
++
++adrreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrx1; }
++
++adrreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = regx1; }
++
++adrx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = reg1; }
++
++adrx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = indreg1; }
++
++adrx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = imm1; }
++
++adrx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = limm1; }
++
++adrx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adr1; }
++
++adrx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrreg1; }
++
++adrx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrx1; }
++
++adrx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = regx1; }
++
++regx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = reg1; }
++
++regx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = indreg1; }
++
++regx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = imm1; }
++
++regx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = limm1; }
++
++regx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adr1; }
++
++regx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrreg1; }
++
++regx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrx1; }
++
++regx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = regx1; }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shand.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shand.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shand.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shand.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++int
++foo (x, c)
++ int x;
++{
++ return x >> 24 & 0xff;
++}
++
++bar (x)
++{
++ return (int)(x & 0xfffff) << 13;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sh.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sh.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sh.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sh.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a << b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shft.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shft.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shft.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shft.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++foo (a)
++ int a;
++{
++ int b = 8;
++
++ if ((a << b) >= 0)
++ return 1;
++ return a;
++}
++
++main ()
++{
++ if (foo (0x00ffffff) == 1)
++ puts ("y");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shift.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shift.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shift.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shift.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (a)
++{
++ if (a >= 0)
++ return (unsigned) a << 10;
++ else
++ return (int) a << 10;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shloop.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shloop.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shloop.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shloop.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++main ()
++{
++ int volatile p;
++ int i;
++ for (i = 10000000; i > 0; i--)
++ p = i >> 10;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shm.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shm.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/shm.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/shm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (int *p)
++{
++ int a = *p;
++ return a >> 24;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,280 @@
++#define type int
++
++type glob0, glob1;
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++reg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= reg1) return 1; else return 0;}
++
++reg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= indreg1) return 1; else return 0;}
++
++reg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= imm1) return 1; else return 0;}
++
++reg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= limm1) return 1; else return 0;}
++
++reg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adr1) return 1; else return 0;}
++
++reg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrreg1) return 1; else return 0;}
++
++reg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrx1) return 1; else return 0;}
++
++reg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= regx1) return 1; else return 0;}
++
++indreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= reg1) return 1; else return 0;}
++
++indreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= indreg1) return 1; else return 0;}
++
++indreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= imm1) return 1; else return 0;}
++
++indreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= limm1) return 1; else return 0;}
++
++indreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adr1) return 1; else return 0;}
++
++indreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrreg1) return 1; else return 0;}
++
++indreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrx1) return 1; else return 0;}
++
++indreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= regx1) return 1; else return 0;}
++
++imm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= reg1) return 1; else return 0;}
++
++imm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= indreg1) return 1; else return 0;}
++
++imm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= imm1) return 1; else return 0;}
++
++imm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= limm1) return 1; else return 0;}
++
++imm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adr1) return 1; else return 0;}
++
++imm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrreg1) return 1; else return 0;}
++
++imm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrx1) return 1; else return 0;}
++
++imm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= regx1) return 1; else return 0;}
++
++limm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= reg1) return 1; else return 0;}
++
++limm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= indreg1) return 1; else return 0;}
++
++limm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= imm1) return 1; else return 0;}
++
++limm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= limm1) return 1; else return 0;}
++
++limm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adr1) return 1; else return 0;}
++
++limm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrreg1) return 1; else return 0;}
++
++limm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrx1) return 1; else return 0;}
++
++limm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= regx1) return 1; else return 0;}
++
++adr0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= reg1) return 1; else return 0;}
++
++adr0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= indreg1) return 1; else return 0;}
++
++adr0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= imm1) return 1; else return 0;}
++
++adr0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= limm1) return 1; else return 0;}
++
++adr0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adr1) return 1; else return 0;}
++
++adr0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrreg1) return 1; else return 0;}
++
++adr0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrx1) return 1; else return 0;}
++
++adr0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= regx1) return 1; else return 0;}
++
++adrreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= reg1) return 1; else return 0;}
++
++adrreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= indreg1) return 1; else return 0;}
++
++adrreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= imm1) return 1; else return 0;}
++
++adrreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= limm1) return 1; else return 0;}
++
++adrreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adr1) return 1; else return 0;}
++
++adrreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrreg1) return 1; else return 0;}
++
++adrreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrx1) return 1; else return 0;}
++
++adrreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= regx1) return 1; else return 0;}
++
++adrx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= reg1) return 1; else return 0;}
++
++adrx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= indreg1) return 1; else return 0;}
++
++adrx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= imm1) return 1; else return 0;}
++
++adrx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= limm1) return 1; else return 0;}
++
++adrx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adr1) return 1; else return 0;}
++
++adrx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrreg1) return 1; else return 0;}
++
++adrx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrx1) return 1; else return 0;}
++
++adrx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= regx1) return 1; else return 0;}
++
++regx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= reg1) return 1; else return 0;}
++
++regx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= indreg1) return 1; else return 0;}
++
++regx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= imm1) return 1; else return 0;}
++
++regx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= limm1) return 1; else return 0;}
++
++regx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adr1) return 1; else return 0;}
++
++regx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrreg1) return 1; else return 0;}
++
++regx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrx1) return 1; else return 0;}
++
++regx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= regx1) return 1; else return 0;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/signext2.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/signext2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/signext2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/signext2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++long long
++foo (a)
++ int a;
++{
++ return a;
++}
++
++main ()
++{
++ printf ("%d\n", (int) (foo (-1) >> 32));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/signext.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/signext.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/signext.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/signext.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++void longprint (x)
++ long long x;
++{
++ printf (" %d, %d\n", (unsigned) ((unsigned long long) x >> 32),
++ (unsigned) x);
++}
++
++void
++k_min (p, qa, d)
++ int d;
++{
++ int s = 1;
++ long long x;
++
++ if (s >= d)
++ s -= d;
++
++ x = ((long long)((8 * s) % 3) + qa) % d;
++ longprint (x);
++}
++
++int
++main ()
++{
++ k_min (100003, -600017, 3);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sim.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sim.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sim.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sim.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++main ()
++{
++ int i;
++
++ for (i = 1; i < 10000; i++)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/simple.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/simple.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/simple.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/simple.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/SIset.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/SIset.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/SIset.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/SIset.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,216 @@
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)(int)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)(int)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++int glob0, glob1;
++
++#define type int
++
++reg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = reg1; }
++
++reg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = indreg1; }
++
++reg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = imm1; }
++
++reg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = limm1; }
++
++reg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adr1; }
++
++reg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrreg1; }
++
++reg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = adrx1; }
++
++reg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{reg0 = regx1; }
++
++indreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = reg1; }
++
++indreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = indreg1; }
++
++indreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = imm1; }
++
++indreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = limm1; }
++
++indreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adr1; }
++
++indreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrreg1; }
++
++indreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = adrx1; }
++
++indreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{indreg0 = regx1; }
++
++adr0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = reg1; }
++
++adr0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = indreg1; }
++
++adr0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = imm1; }
++
++adr0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = limm1; }
++
++adr0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adr1; }
++
++adr0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrreg1; }
++
++adr0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = adrx1; }
++
++adr0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adr0 = regx1; }
++
++adrreg0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = reg1; }
++
++adrreg0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = indreg1; }
++
++adrreg0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = imm1; }
++
++adrreg0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = limm1; }
++
++adrreg0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adr1; }
++
++adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrreg1; }
++
++adrreg0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = adrx1; }
++
++adrreg0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrreg0 = regx1; }
++
++adrx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = reg1; }
++
++adrx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = indreg1; }
++
++adrx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = imm1; }
++
++adrx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = limm1; }
++
++adrx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adr1; }
++
++adrx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrreg1; }
++
++adrx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = adrx1; }
++
++adrx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{adrx0 = regx1; }
++
++regx0reg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = reg1; }
++
++regx0indreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = indreg1; }
++
++regx0imm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = imm1; }
++
++regx0limm1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = limm1; }
++
++regx0adr1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adr1; }
++
++regx0adrreg1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrreg1; }
++
++regx0adrx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = adrx1; }
++
++regx0regx1_set (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{regx0 = regx1; }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sne.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sne.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sne.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sne.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (double a)
++{
++ return (a != 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sound.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sound.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sound.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sound.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++
++main ()
++{
++ char audio[8192];
++ int i;
++
++ for (i = 0; i < 4095; i += 1)
++ audio[i] = i / 8,
++ audio[8191 - i] = i / 8;
++
++ for (;;)
++ write (1, audio, 8192);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a)
++{
++ int b = a;
++ return b + 8762345;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/speed.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/speed.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/speed.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/speed.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++main ()
++{
++ int i;
++
++ for (i = 5000000; i >=0; i--)
++ {
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/stor.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/stor.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/stor.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/stor.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#define C 1
++
++foo (p)
++ int *p;
++{
++ p[0] = C;
++ p[1] = C;
++ p[2] = C;
++ p[3] = C;
++ p[4] = C;
++ p[5] = C;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/store0.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/store0.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/store0.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/store0.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (int *p)
++{
++ p[10] = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/storecc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/storecc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/storecc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/storecc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++foo (char *p, int a)
++{
++ *p = a;
++ if ((char) a)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/str.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/str.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/str.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/str.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++typedef struct
++{
++ char a;
++ char b;
++} foo;
++
++bar ()
++{
++ foo foobar[100];
++ foobar[1].a = 'a';
++ foobar[2].a = 'b';
++ barfoo (foobar);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/stru.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/stru.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/stru.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/stru.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++struct foo
++{
++ int a, b, c;
++};
++
++foo (struct foo *a)
++{
++ a[0] = a[1];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/structret.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/structret.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/structret.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/structret.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++struct foo
++{
++ int a, b, c, d;
++ double doubl;
++} s1, s2;
++
++#ifndef ONLY2
++
++struct foo
++structret (s1, i1, i2, s2)
++ struct foo s1, s2;
++ int i1, i2;
++{
++ if (i1 != i2)
++ {
++ if (i1 < i2)
++ return s1;
++ else
++ return s2;
++ }
++ s2.a = 11;
++ s2.b = 22;
++ s2.c = s1.c;
++ s2.d = s1.d;
++ return s2;
++}
++
++#endif
++
++#ifndef ONLY1
++
++struct foo
++mani (a, b)
++{
++ return structret (s1, a, b, s2);
++}
++
++init ()
++{
++ s1.a = 1;
++ s1.b = 2;
++ s1.c = 3;
++ s1.d = 4;
++ s1.doubl = 3.1415;
++ s2.a = -1;
++ s2.b = -2;
++ s2.c = -3;
++ s2.d = -4;
++ s2.doubl = 2.71818;
++}
++
++main ()
++{
++ struct foo s;
++
++ init ();
++ s = mani (1, 1);
++ printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl);
++
++ init ();
++ s = mani (2, 1);
++ printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl);
++
++ init ();
++ s = mani (1, 2);
++ printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl);
++}
++
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/stuct.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/stuct.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/stuct.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/stuct.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#ifdef STACK_SIZE
++#define SIZE STACK_SIZE / 8
++#else
++#define SIZE 10000000
++#endif
++
++struct foo
++{
++ int a, b, c;
++ int arr[SIZE];
++};
++
++struct foo s, ss;
++
++main ()
++{
++
++ s.b = 2;
++ s.c = 3;
++ ss.b = 2;
++ ss.c = 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sub32.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sub32.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sub32.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sub32.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a + 32;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/subcc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/subcc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/subcc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/subcc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++foo (a, c)
++{
++ int b;
++
++ if (a + c >= 0) /* b < 0 ==== a < 10? */
++ return a | 0x80000000;
++ return 0;
++}
++
++bar (a)
++{
++ if (foo (a, 10) & 0x80000000)
++ printf ("y");
++ else
++ printf ("n");
++}
++
++main ()
++{
++ bar (0);
++ bar (1);
++ bar (-1);
++ bar (10);
++ bar (-10);
++ bar (11);
++ bar (-11);
++ bar (0x7fffffff);
++ bar (-0x7fffffff);
++
++ puts ("");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/subcse.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/subcse.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/subcse.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/subcse.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++foo (a, b, p)
++ int *p;
++{
++ p[0] = 1230 - a;
++ p[1] = 1230 - b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sym.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sym.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/sym.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/sym.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo ()
++{
++ return (int) &foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/symconst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/symconst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/symconst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/symconst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo ()
++{
++ return (int)foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/t.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/t.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/t.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/t.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++#define B 95
++
++foo (a, b, p)
++ unsigned a, b;
++ int *p;
++{
++ p[1] = a % B;
++ p[0] = a / B;
++}
++
++bar (a, b, p)
++ unsigned a, b;
++ int *p;
++{
++ p[0] = a / B;
++ p[1] = a % B;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/test.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/test.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/test.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/test.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++foo (a)
++{
++ if (a & 38)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/test-flow.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/test-flow.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/test-flow.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/test-flow.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++foo (a, b, c, d)
++{
++ if (a < 0)
++ {
++ b = c;
++ }
++ else
++ {
++ b = d;
++ }
++ return b + 75;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/test-loop.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/test-loop.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/test-loop.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/test-loop.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++main ()
++{
++ int i;
++ for (i = 100; i >= -1; i--)
++ foo ();
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/time.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/time.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/time.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/time.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++main ()
++{
++ int i;
++ for (i = 3000000; --i;)
++ {
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/tmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/tmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/tmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/tmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a, b)
++{
++ return (a - b) == 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/trivial.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/trivial.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/trivial.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/trivial.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++foo () {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/trunc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/trunc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/trunc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/trunc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++main ()
++{
++ printf ("%x, %x\n", (unsigned char) main, main);
++}
++
++foo (p)
++ char *p;
++{
++ p[0] = (char)foo;
++ p[1] = (char)foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/u.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/u.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/u.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/u.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++foo (a, b) { return a % b; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/udconvert.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/udconvert.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/udconvert.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/udconvert.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++double
++unsigned_to_double1 (u)
++ unsigned u;
++{
++ double d;
++ d = (int) u; /* convert as from a *signed* integer */
++ return ((int) u < 0)
++ ? d + 4294967296.0
++ : d;
++}
++
++/* Alternatively */
++
++double
++unsigned_to_double2 (u)
++ unsigned u;
++{
++ double d;
++ u -= 2147483648; /* complement sign bit */
++ d = (int) u; /* convert as from a *signed* integer */
++ return d + 2147483648.0;
++}
++
++unsigned
++double_to_unsigned (d)
++ double d;
++{
++ d += 2147483648.0;
++ return ((int) d) - 2147483648;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++long long
++xlrandom ()
++{
++ long long x;
++ unsigned a;
++ int bits = 64;
++ unsigned b;
++
++ do
++ {
++ a = random ();
++ b = (a & 15) + 1;
++ x <<= b; /* shift up 1-16 steps */
++ a = (a >> 18) & 1;
++ if (a)
++ x |= (unsigned) (1 << b) - 1;
++ bits -= b;
++ }
++ while (bits >= 0);
++ return x;
++}
++
++
++unsigned long long __udivmoddi4();
++
++main ()
++{
++ int i;
++ unsigned long long n, d, q, r, rr;
++
++ for (i = 0; ;i++)
++ {
++ n = xlrandom ();
++ d = xlrandom ();
++ if (d == 0)
++ continue;
++
++ q = __udivmoddi4 (n, d, &r);
++
++ if (i % 1000000 == 0)
++ printf ("Testing udivmoddi4: %d iterations made\n", i);
++
++ rr = n - q * d;
++ if (rr != r || r >= d)
++ {
++ printf ("Testing udivmoddi4: failure after %d iterations\n", i);
++ printf ("n=%lX%08lX\n", (unsigned) (n >> 32), (unsigned) n);
++ printf ("d=%lX%08lX\n", (unsigned) (d >> 32), (unsigned) d);
++ printf ("q=%lX%08lX\n", (unsigned) (q >> 32), (unsigned) q);
++ printf ("r=%lX%08lX\n", (unsigned) (r >> 32), (unsigned) r);
++ printf ("rr=%lX%08lX\n", (unsigned) (rr >> 32), (unsigned) rr);
++ abort ();
++ }
++ }
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,280 @@
++#define type unsigned short
++
++type glob0, glob1;
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++reg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= reg1) return 1; else return 0;}
++
++reg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= indreg1) return 1; else return 0;}
++
++reg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= imm1) return 1; else return 0;}
++
++reg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= limm1) return 1; else return 0;}
++
++reg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adr1) return 1; else return 0;}
++
++reg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrreg1) return 1; else return 0;}
++
++reg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrx1) return 1; else return 0;}
++
++reg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= regx1) return 1; else return 0;}
++
++indreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= reg1) return 1; else return 0;}
++
++indreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= indreg1) return 1; else return 0;}
++
++indreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= imm1) return 1; else return 0;}
++
++indreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= limm1) return 1; else return 0;}
++
++indreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adr1) return 1; else return 0;}
++
++indreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrreg1) return 1; else return 0;}
++
++indreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrx1) return 1; else return 0;}
++
++indreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= regx1) return 1; else return 0;}
++
++imm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= reg1) return 1; else return 0;}
++
++imm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= indreg1) return 1; else return 0;}
++
++imm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= imm1) return 1; else return 0;}
++
++imm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= limm1) return 1; else return 0;}
++
++imm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adr1) return 1; else return 0;}
++
++imm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrreg1) return 1; else return 0;}
++
++imm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrx1) return 1; else return 0;}
++
++imm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= regx1) return 1; else return 0;}
++
++limm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= reg1) return 1; else return 0;}
++
++limm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= indreg1) return 1; else return 0;}
++
++limm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= imm1) return 1; else return 0;}
++
++limm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= limm1) return 1; else return 0;}
++
++limm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adr1) return 1; else return 0;}
++
++limm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrreg1) return 1; else return 0;}
++
++limm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrx1) return 1; else return 0;}
++
++limm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= regx1) return 1; else return 0;}
++
++adr0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= reg1) return 1; else return 0;}
++
++adr0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= indreg1) return 1; else return 0;}
++
++adr0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= imm1) return 1; else return 0;}
++
++adr0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= limm1) return 1; else return 0;}
++
++adr0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adr1) return 1; else return 0;}
++
++adr0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrreg1) return 1; else return 0;}
++
++adr0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrx1) return 1; else return 0;}
++
++adr0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= regx1) return 1; else return 0;}
++
++adrreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= reg1) return 1; else return 0;}
++
++adrreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= indreg1) return 1; else return 0;}
++
++adrreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= imm1) return 1; else return 0;}
++
++adrreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= limm1) return 1; else return 0;}
++
++adrreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adr1) return 1; else return 0;}
++
++adrreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrreg1) return 1; else return 0;}
++
++adrreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrx1) return 1; else return 0;}
++
++adrreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= regx1) return 1; else return 0;}
++
++adrx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= reg1) return 1; else return 0;}
++
++adrx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= indreg1) return 1; else return 0;}
++
++adrx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= imm1) return 1; else return 0;}
++
++adrx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= limm1) return 1; else return 0;}
++
++adrx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adr1) return 1; else return 0;}
++
++adrx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrreg1) return 1; else return 0;}
++
++adrx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrx1) return 1; else return 0;}
++
++adrx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= regx1) return 1; else return 0;}
++
++regx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= reg1) return 1; else return 0;}
++
++regx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= indreg1) return 1; else return 0;}
++
++regx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= imm1) return 1; else return 0;}
++
++regx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= limm1) return 1; else return 0;}
++
++regx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adr1) return 1; else return 0;}
++
++regx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrreg1) return 1; else return 0;}
++
++regx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrx1) return 1; else return 0;}
++
++regx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= regx1) return 1; else return 0;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/uns.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/uns.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/uns.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/uns.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a)
++{
++ if ((unsigned) a < 234)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++#
++# Expect driver script for GCC Regression Tests
++# Copyright (C) 1993, 1997 Free Software Foundation
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++#
++# Written by Jeffrey Wheat (cassidy@cygnus.com)
++#
++
++#
++# These tests come from Torbjorn Granlund's (tege@cygnus.com)
++# C torture test suite, and other contributors.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib c-torture.exp
++
++#
++# This loop will run c-torture on any *.c file found in this directory.
++# If a *.c has a corresponding *.exp file, then the test is skipped as
++# as the *.exp will drive the test itself. It is done this way so that
++# generic tests do not need a seperate .exp for it. Only the tests that
++# require unique options need their own .exp file.
++#
++
++foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] {
++ if [file exists [file rootname $testcase].exp] then {
++ verbose "INFO:\"[file rootname $testcase].exp\" exists, skipping test" 3
++ continue
++ }
++
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $testcase] then {
++ continue
++ }
++
++ c-torture $testcase
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++a (c)
++ unsigned char c;
++{
++ unsigned u = c;
++ if ((int)u < 0)
++ return 1;
++ else
++ return 0;
++}
++
++b (x, y)
++ unsigned x, y;
++{
++ x /= y;
++ if ((int)x < 0)
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,280 @@
++#define type unsigned char
++
++type glob0, glob1;
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++reg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= reg1) return 1; else return 0;}
++
++reg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= indreg1) return 1; else return 0;}
++
++reg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= imm1) return 1; else return 0;}
++
++reg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= limm1) return 1; else return 0;}
++
++reg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adr1) return 1; else return 0;}
++
++reg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrreg1) return 1; else return 0;}
++
++reg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrx1) return 1; else return 0;}
++
++reg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= regx1) return 1; else return 0;}
++
++indreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= reg1) return 1; else return 0;}
++
++indreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= indreg1) return 1; else return 0;}
++
++indreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= imm1) return 1; else return 0;}
++
++indreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= limm1) return 1; else return 0;}
++
++indreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adr1) return 1; else return 0;}
++
++indreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrreg1) return 1; else return 0;}
++
++indreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrx1) return 1; else return 0;}
++
++indreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= regx1) return 1; else return 0;}
++
++imm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= reg1) return 1; else return 0;}
++
++imm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= indreg1) return 1; else return 0;}
++
++imm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= imm1) return 1; else return 0;}
++
++imm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= limm1) return 1; else return 0;}
++
++imm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adr1) return 1; else return 0;}
++
++imm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrreg1) return 1; else return 0;}
++
++imm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrx1) return 1; else return 0;}
++
++imm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= regx1) return 1; else return 0;}
++
++limm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= reg1) return 1; else return 0;}
++
++limm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= indreg1) return 1; else return 0;}
++
++limm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= imm1) return 1; else return 0;}
++
++limm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= limm1) return 1; else return 0;}
++
++limm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adr1) return 1; else return 0;}
++
++limm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrreg1) return 1; else return 0;}
++
++limm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrx1) return 1; else return 0;}
++
++limm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= regx1) return 1; else return 0;}
++
++adr0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= reg1) return 1; else return 0;}
++
++adr0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= indreg1) return 1; else return 0;}
++
++adr0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= imm1) return 1; else return 0;}
++
++adr0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= limm1) return 1; else return 0;}
++
++adr0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adr1) return 1; else return 0;}
++
++adr0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrreg1) return 1; else return 0;}
++
++adr0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrx1) return 1; else return 0;}
++
++adr0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= regx1) return 1; else return 0;}
++
++adrreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= reg1) return 1; else return 0;}
++
++adrreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= indreg1) return 1; else return 0;}
++
++adrreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= imm1) return 1; else return 0;}
++
++adrreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= limm1) return 1; else return 0;}
++
++adrreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adr1) return 1; else return 0;}
++
++adrreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrreg1) return 1; else return 0;}
++
++adrreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrx1) return 1; else return 0;}
++
++adrreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= regx1) return 1; else return 0;}
++
++adrx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= reg1) return 1; else return 0;}
++
++adrx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= indreg1) return 1; else return 0;}
++
++adrx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= imm1) return 1; else return 0;}
++
++adrx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= limm1) return 1; else return 0;}
++
++adrx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adr1) return 1; else return 0;}
++
++adrx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrreg1) return 1; else return 0;}
++
++adrx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrx1) return 1; else return 0;}
++
++adrx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= regx1) return 1; else return 0;}
++
++regx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= reg1) return 1; else return 0;}
++
++regx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= indreg1) return 1; else return 0;}
++
++regx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= imm1) return 1; else return 0;}
++
++regx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= limm1) return 1; else return 0;}
++
++regx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adr1) return 1; else return 0;}
++
++regx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrreg1) return 1; else return 0;}
++
++regx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrx1) return 1; else return 0;}
++
++regx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= regx1) return 1; else return 0;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,280 @@
++#define type unsigned int
++
++type glob0, glob1;
++
++#define E0 ((type *)10000000)
++#define reg0 r0
++#define indreg0 (*p0)
++#define imm0 22
++#define limm0 ((type)&glob0)
++#define adr0 (*E0)
++#define adrreg0 (p0[10000000])
++#define adrx0 (E0[x0])
++#define regx0 (p0[x0])
++
++#define E1 ((type *)11111111)
++#define reg1 r1
++#define indreg1 (*p1)
++#define imm1 33
++#define limm1 ((type)&glob1)
++#define adr1 (*E1)
++#define adrreg1 (p1[1111111/4])
++#define adrx1 (E1[x1])
++#define regx1 (p1[x1])
++
++reg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= reg1) return 1; else return 0;}
++
++reg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= indreg1) return 1; else return 0;}
++
++reg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= imm1) return 1; else return 0;}
++
++reg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= limm1) return 1; else return 0;}
++
++reg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adr1) return 1; else return 0;}
++
++reg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrreg1) return 1; else return 0;}
++
++reg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= adrx1) return 1; else return 0;}
++
++reg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (reg0 <= regx1) return 1; else return 0;}
++
++indreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= reg1) return 1; else return 0;}
++
++indreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= indreg1) return 1; else return 0;}
++
++indreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= imm1) return 1; else return 0;}
++
++indreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= limm1) return 1; else return 0;}
++
++indreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adr1) return 1; else return 0;}
++
++indreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrreg1) return 1; else return 0;}
++
++indreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= adrx1) return 1; else return 0;}
++
++indreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (indreg0 <= regx1) return 1; else return 0;}
++
++imm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= reg1) return 1; else return 0;}
++
++imm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= indreg1) return 1; else return 0;}
++
++imm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= imm1) return 1; else return 0;}
++
++imm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= limm1) return 1; else return 0;}
++
++imm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adr1) return 1; else return 0;}
++
++imm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrreg1) return 1; else return 0;}
++
++imm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= adrx1) return 1; else return 0;}
++
++imm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (imm0 <= regx1) return 1; else return 0;}
++
++limm0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= reg1) return 1; else return 0;}
++
++limm0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= indreg1) return 1; else return 0;}
++
++limm0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= imm1) return 1; else return 0;}
++
++limm0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= limm1) return 1; else return 0;}
++
++limm0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adr1) return 1; else return 0;}
++
++limm0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrreg1) return 1; else return 0;}
++
++limm0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= adrx1) return 1; else return 0;}
++
++limm0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (limm0 <= regx1) return 1; else return 0;}
++
++adr0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= reg1) return 1; else return 0;}
++
++adr0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= indreg1) return 1; else return 0;}
++
++adr0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= imm1) return 1; else return 0;}
++
++adr0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= limm1) return 1; else return 0;}
++
++adr0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adr1) return 1; else return 0;}
++
++adr0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrreg1) return 1; else return 0;}
++
++adr0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= adrx1) return 1; else return 0;}
++
++adr0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adr0 <= regx1) return 1; else return 0;}
++
++adrreg0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= reg1) return 1; else return 0;}
++
++adrreg0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= indreg1) return 1; else return 0;}
++
++adrreg0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= imm1) return 1; else return 0;}
++
++adrreg0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= limm1) return 1; else return 0;}
++
++adrreg0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adr1) return 1; else return 0;}
++
++adrreg0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrreg1) return 1; else return 0;}
++
++adrreg0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= adrx1) return 1; else return 0;}
++
++adrreg0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrreg0 <= regx1) return 1; else return 0;}
++
++adrx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= reg1) return 1; else return 0;}
++
++adrx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= indreg1) return 1; else return 0;}
++
++adrx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= imm1) return 1; else return 0;}
++
++adrx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= limm1) return 1; else return 0;}
++
++adrx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adr1) return 1; else return 0;}
++
++adrx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrreg1) return 1; else return 0;}
++
++adrx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= adrx1) return 1; else return 0;}
++
++adrx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (adrx0 <= regx1) return 1; else return 0;}
++
++regx0reg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= reg1) return 1; else return 0;}
++
++regx0indreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= indreg1) return 1; else return 0;}
++
++regx0imm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= imm1) return 1; else return 0;}
++
++regx0limm1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= limm1) return 1; else return 0;}
++
++regx0adr1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adr1) return 1; else return 0;}
++
++regx0adrreg1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrreg1) return 1; else return 0;}
++
++regx0adrx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= adrx1) return 1; else return 0;}
++
++regx0regx1 (r0, r1, x0, x1, p0, p1)
++type r0, r1; type *p0, *p1;
++{if (regx0 <= regx1) return 1; else return 0;}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/uuarg.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/uuarg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/uuarg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/uuarg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b, c, d, e, f, g, h, i)
++{
++ return foo () + i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/v.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/v.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/v.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/v.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++main (int *p)
++{
++ int a;
++
++ a = 0;
++ p[1] = a;
++ a = 0;
++ p[2] = a;
++ a = 123456;
++ p[3] = a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/w.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/w.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/w.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/w.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++int foo (unsigned short a, unsigned short b) { return a + b; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ww.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ww.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/ww.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/ww.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (p)
++ short *p;
++{
++ static int *foo;
++ *p = 1234;
++ *foo = 1234;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xb.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xb.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xb.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xb.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++foo (a, b)
++{
++ unsigned x = 1;
++
++ a += b;
++ a += x;
++ if (a <= 0)
++ return 1;
++ return 0;
++}
++
++main ()
++{
++ printf ("%d\n", foo (1, ~0));
++ printf ("%d\n", foo (0, ~0));
++ printf ("%d\n", foo (-1, ~0));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xbg.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xbg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xbg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xbg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++typedef short type;
++
++short
++foo (type *sp, int a)
++{
++ type t;
++ int i;
++
++ t = sp[a];
++ i = (int)(type)sp[a];
++ if (i)
++ return 0;
++ return t;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/x.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/x.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/x.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/x.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++f(m){int i,s=0;for(i=0;i<m;i++)s+=i;return s;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xc.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xc.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xc.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (a, p)
++ int *p;
++{
++ int b;
++
++ a++;
++ b = *p;
++ if (a)
++ return 1;
++ return b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++int g1;
++int g2;
++
++foo ()
++{
++ int i = 1;
++ int x;
++
++ x = g1;
++ (*(&g1 + i - 1)) = x + 1;
++ x = g1;
++ (*(&g1 + i - 1)) = x + 1;
++ g1++;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xdi.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xdi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xdi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xdi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++foo (long long *p, int a, int b)
++{
++ *(p + a + b) = 876243243874343LL;
++}
++
++bar (p, pp)
++ long long *p, *pp;
++{
++ long long a;
++ *p++ = a;
++ fee (*p);
++ *p++ = *pp--;
++ *p++ = *pp--;
++ return (int) p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xfoo.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xfoo.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xfoo.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xfoo.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return (a & ~0xfff) == 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xi.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (a)
++{
++ int r = 0;
++ if (a)
++ r = 1;
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xlop.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xlop.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xlop.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xlop.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++foo (a)
++{
++ int b;
++ do
++ {
++ b = bar ();
++ a = b - 10;
++ }
++ while (a > 10);
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xmtst.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xmtst.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xmtst.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xmtst.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++p1 (int b, int *p, int a)
++{
++ p[0] = p[1];
++ return p[0];
++}
++p2 (int b, int *p, int a)
++{
++ p[0] = p[1];
++ return p[0] == 0;
++}
++p3 (int b, int *p, int a)
++{
++ p[0] = p[1];
++ a = p[0];
++ if (a)
++ return 0;
++ return a;
++}
++p4 (int b, int *p, int a)
++{
++ a = p[1];
++ p[0] = p[1];
++ if (a)
++ return 0;
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xneg.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xneg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xneg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xneg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++foo (a)
++ double a;
++{
++ return -a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xopt.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xopt.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xopt.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xopt.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++proc1 (a)
++ unsigned a;
++{
++ return (a >> 20) & 0x010fffff;
++}
++
++proc2 (a)
++ unsigned a;
++{
++ return (a << 17) & 0xfffff001;
++}
++
++proc3 (a)
++ unsigned a;
++{
++ return (a & 0xff00000a) >> 25;
++}
++
++proc4 (a)
++ unsigned a;
++{
++ return (a & 0x100000ff) << 25;
++}
++
++proc5 (a)
++ unsigned a;
++{
++ return (unsigned char) (a >> 24);
++}
++
++proc6 (a)
++ unsigned a;
++{
++ return ((unsigned char) a) << 30;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xor.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xor.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xor.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xor.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return ~(a ^ ~123);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xorn.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xorn.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xorn.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xorn.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++int
++xorn (a, b)
++ int a, b;
++{
++ return a ^ ~b;
++}
++
++int
++not (a)
++ int a;
++{
++ return ~a;
++}
++
++int
++xor (a, b)
++ int a, b;
++{
++ return a ^ b;
++}
++
++main ()
++{
++ int i, j;
++
++ for (i = 0; i <= 1; i++)
++ for (j = 0; j <= 1; j++)
++ printf ("%d op %d = %d = %d?\n", i, j,
++ 1 & xor (i, not (j)),
++ 1 & xorn (i, j));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a)
++{
++ return a & 255;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xpp.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xpp.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xpp.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xpp.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++foo (a)
++{
++ a++;
++ if (a < 10)
++ return 1;
++ return a;
++}
++
++main ()
++{
++ printf ("%d\n", foo ((1 << 31) - 1));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xs.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xs.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xs.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xs.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++foo (a, b)
++{
++ for (b = 0; b < 10; b++)
++ ;
++ for (a = 0; a < 10; a++)
++ ;
++ a = b << 1;
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xsh.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xsh.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xsh.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xsh.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++foo (a, b)
++{
++ a = b + b;
++ if (a)
++ return a;
++ return b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xz.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xz.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xz.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xz.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (int *p)
++{
++ *p = (unsigned short) *p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xzz.c gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xzz.c
+--- gcc-2.95.3/gcc/testsuite/gcc.c-torture/unsorted/xzz.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.c-torture/unsorted/xzz.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++foo (a, b)
++{
++ return a >> (char) b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980211-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980211-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980211-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980211-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++/* Test long double on x86. */
++
++/* { dg-do run { target i?86-*-* } } */
++/* { dg-options -O2 } */
++
++__inline int
++__signbitl (long double __x)
++{
++ union { long double __l; int __i[3]; } __u = { __l: __x };
++
++ return (__u.__i[2] & 0x8000) != 0;
++}
++
++void
++foo (long double x, long double y)
++{
++ long double z = x / y;
++ if (__signbitl (x) && __signbitl (z))
++ abort ();
++}
++
++int main()
++{
++ if (sizeof (long double) > sizeof (double))
++ foo (-0.0, -1.0);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980217-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980217-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980217-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980217-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++/* Test float on alpha. */
++
++/* { dg-do run { target alpha*-*-* } } */
++/* { dg-options "-mieee -O2" } */
++
++typedef int int32_t __attribute__ ((__mode__ ( __SI__ ))) ;
++typedef union
++{
++ float value;
++ int32_t word;
++} ieee_float_shape_type;
++
++int isinff(float x)
++{
++ int32_t ix,t;
++ ieee_float_shape_type gf_u;
++ gf_u.value = x;
++ ix = gf_u.word;
++ printf ("%x\n", ix);
++ t = ix & 0x7fffffff;
++ t ^= 0x7f800000;
++ t |= -t;
++ return ~(t >> 31) & (1 - ((ix & 0x80000000) >> 30));
++}
++
++main ()
++{
++ float x = 1.0 / 0.0;
++ int i = isinff (x);
++
++ if (i == 0)
++ abort ();
++
++ printf ("%d\n", i);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980226-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980226-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980226-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980226-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++/* { dg-do compile { target i?86-*-* } } */
++/* { dg-options -O2 } */
++
++extern double bar (double);
++
++int
++baz (double d)
++{
++ double e = bar (d);
++ asm volatile ("" : : : "st");
++ return printf ("%lg\n", e);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980312-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980312-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980312-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980312-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++/* { dg-do link { target i?86-*-* } } */
++/* { dg-options "-O2 -march=pentiumpro" } */
++
++extern __inline double
++__expm1 (double __x)
++{
++ double __temp;
++ __temp = 1.0;
++ return __temp;
++}
++extern __inline double
++__sgn1 (double __x)
++{
++ return __x >= 0.0 ? 1.0 : -1.0;
++}
++double
++tanh (double __x)
++{
++ return __expm1 (__x) * __sgn1 (-__x);
++}
++main ()
++{
++ return tanh (3.45) != 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980313-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980313-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980313-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980313-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++/* { dg-do link { target i?86-*-* } } */
++/* { dg-options "-O2 -march=pentiumpro" } */
++
++extern __inline double
++__expm1 (double __x)
++{
++ double __temp;
++ __temp -= 1.0;
++ return __temp;
++}
++extern __inline double
++__sgn1 (double __x)
++{
++ return __x >= 0.0 ? 1.0 : -1.0;
++}
++double
++tanh (double __x)
++{
++ register double __exm1 = __expm1 (__x);
++ return __exm1 / (__exm1 + 2.0) * __sgn1 (-__x);
++}
++main ()
++{
++ return tanh (3.45) != 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980414-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980414-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980414-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980414-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,76 @@
++/* Test double on x86. */
++
++/* { dg-do run { target i?86-*-* } } */
++/* { dg-options -O2 } */
++
++static __inline double
++mypow (double __x, double __y)
++{
++ register double __value, __exponent;
++ long __p = (long) __y;
++ if (__y == (double) __p)
++ {
++ double __r = 1.0;
++ if (__p == 0)
++ return 1.0;
++ if (__p < 0)
++ {
++ __p = -__p;
++ __x = 1.0 / __x;
++ }
++ while (1)
++ {
++ if (__p & 1)
++ __r *= __x;
++ __p >>= 1;
++ if (__p == 0)
++ return __r;
++ __x *= __x;
++ }
++ }
++ __asm __volatile__
++ ("fmul %%st(1),%%st\n\t" /* y * log2(x) */
++ "fst %%st(1)\n\t"
++ "frndint\n\t" /* int(y * log2(x)) */
++ "fxch\n\t"
++ "fsub %%st(1),%%st\n\t" /* fract(y * log2(x)) */
++ "f2xm1\n\t" /* 2^(fract(y * log2(x))) - 1 */
++ : "=t" (__value), "=u" (__exponent) : "0" (__x), "1" (__y));
++ __value += 1.0;
++ __asm __volatile__
++ ("fscale"
++ : "=t" (__value) : "0" (__value), "u" (__exponent));
++ return __value;
++}
++
++const double E1 = 2.71828182845904523536028747135;
++
++double fact (double x)
++{
++ double corr;
++ corr = 1.0;
++ return corr * mypow(x/E1, x);
++}
++
++int main ()
++{
++ double y, z;
++
++ y = fact (46.2);
++ z = mypow (46.2/E1, 46.2);
++
++#if 0
++ printf ("%26.19e, %26.19e\n", y, z);
++#endif
++
++ if (y > z)
++ y -= z;
++ else
++ y = z - y;
++
++ y /= z;
++ if (y > 0.1)
++ abort ();
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980502-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980502-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980502-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980502-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* { dg-do compile }*/
++/* { dg-options "-O2" } */
++
++char *const f(void)
++{
++ char *const line = "/dev/ptyXX";
++ line[8] = 1;
++ return line;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980520-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980520-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980520-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980520-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++/* { dg-do compile { target i?86-*-* } } */
++/* { dg-options -O2 } */
++
++int bug(void)
++{
++ unsigned long a, b;
++
++ __asm__(""
++ : "=d" (a)
++ :
++ : "memory");
++ __asm__ __volatile__(""
++ :
++ : "g" (b)
++ : "memory");
++ return a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980523-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980523-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980523-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980523-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++/* { dg-do run { target rs6000-*-linux* powerpc-*-linux*} } */
++/* { dg-options "-O2 -fpic" } */
++
++void foo1(int a, char *b, int c)
++{
++ c =a+c+234;
++}
++
++int foo2(int d)
++{
++ return d*d;
++}
++
++int bar1, bar2, bar3;
++char * bar4;
++
++int main(void) {
++ int h;
++ bar1 = foo2(1);
++ bar2 = foo2(1);
++
++ h = foo2(1);
++ foo1(1, "a", foo2(1));
++ foo1(bar1, "a", foo2(1));
++ foo2(1);
++
++ h = foo2(1);
++ bar3 = 1;
++ bar4 = "a";
++ foo1(1, "n", foo2(1));
++ foo1(1, "o", foo2(1));
++ foo1(1, "p", foo2(1));
++ foo1(bar1, "a", foo2(1));
++
++ bar3 = h;
++ bar4 = "b"; foo1(bar1, "b", foo2(1));
++ foo1(1, "q", foo2(1));
++ bar4 = "c"; foo1(1, "c", foo2(1));
++ bar4 = "d"; foo1(1, "d", foo2(1));
++ bar4 = "e"; foo1(1, "e", foo2(1));
++ bar4 = "f"; foo1(1, "f", foo2(1));
++ bar4 = "g"; foo1(1, "g", foo2(1));
++ bar4 = "h"; foo1(1, "h", foo2(1));
++ bar4 = "i"; foo1(1, "i", foo2(1));
++ bar4 = "j"; foo1(1, "j", foo2(1));
++ bar4 = "k"; foo1(1, "k", foo2(1));
++ bar4 = "l"; foo1(1, "l", foo2(1));
++ bar4 = "m";
++ foo1(bar2, "m", foo2(1));
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980526-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980526-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980526-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980526-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++/* { dg-do compile { target rs6000-*-linux* powerpc-*-linux* } } */
++/* { dg-options "-O2 -fpic" } */
++
++int
++test(void)
++{
++ double value, maxValue = - (__extension__ ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) { __l: 0x7ff0000000000000ULL }).__d) ;
++ int idx, maxIdx = 1;
++
++ for (idx = 1; idx < 22; idx++) {
++ if (value > maxValue) {
++ maxValue = value;
++ maxIdx = idx;
++ }
++ }
++ return 0 ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980709-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980709-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980709-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980709-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++/* { dg-do compile { target i?86-*-* } } */
++/* { dg-options -O2 } */
++
++extern __inline__ int test_and_set_bit(int nr, volatile void * addr)
++{
++ int oldbit;
++ __asm__ __volatile__( ""
++ "btsl %2,%1\n\tsbbl %0,%0"
++ :"=r" (oldbit),"=m" (addr)
++ :"ir" (nr));
++ return oldbit;
++}
++struct buffer_head {
++ unsigned long b_state;
++};
++extern void lock_buffer(struct buffer_head * bh)
++{
++ while (test_and_set_bit(2 , &bh->b_state))
++ __wait_on_buffer(bh);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980816-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980816-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980816-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980816-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-options -fno-force-mem } */
++
++int
++div_and_round_double (lden_orig, hden_orig)
++ int lden_orig, hden_orig;
++{
++ int quo[4];
++ register int i;
++ unsigned int work;
++ register unsigned int carry = 0;
++ int lden = lden_orig;
++ int hden = hden_orig;
++ neg_double (&lden, &hden);
++ for (i = 4 - 1; i >= 0; i--)
++ {
++ quo[i] = work / (unsigned int ) lden;
++ carry = work % (unsigned int ) lden;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/980827-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/980827-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/980827-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/980827-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++/* { dg-do run { target rs6000-*-linux* powerpc-*-linux*} } */
++/* { dg-options -O2 } */
++
++double dval = 0;
++
++void splat (double d);
++
++int main(void)
++{
++ splat(0);
++ if (dval == 0)
++ abort();
++ exit (0);
++}
++
++void splat (double d)
++{
++ union {
++ double f;
++ unsigned int l[2];
++ } u;
++
++ u.f = d + d;
++ u.l[1] |= 1;
++ asm volatile ("stfd %0,dval@sdarel(13)" : : "f" (u.f));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990117-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990117-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990117-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990117-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++/* { dg-do compile { target i?86-*-* } } */
++/* { dg-options "-O2 -march=pentiumpro" } */
++
++extern __inline double
++fabs (double __x)
++{
++ register double __value;
++ __asm __volatile__
++ ("fabs"
++ : "=t" (__value) : "0" (__x));
++ return __value;
++}
++int
++foo ()
++{
++ int i, j, k;
++ double x = 0, y = ((i == j) ? 1 : 0);
++ for (i = 0; i < 10; i++)
++ ;
++ fabs (x - y);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990119-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990119-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990119-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990119-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/* This checks for two things:
++ - an obscure corner case in the standard rules for __LINE__
++ - regression of an associated bug in cpplib where the semicolon got lost */
++/* { dg-do run } */
++
++int i = __LINE__\
++;
++
++int main (void) /* { dg-bogus "parse error" "semicolon eaten" } */
++{
++ if (i != 6)
++ abort();
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990130-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990130-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990130-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990130-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++/* { dg-do compile { target i?86-*-* } } */
++/* { dg-options -O0 } */
++
++typedef int SItype __attribute__ ((mode (SI)));
++typedef int DItype __attribute__ ((mode (DI)));
++typedef unsigned int USItype __attribute__ ((mode (SI)));
++ struct DIstruct {SItype low, high;};
++typedef union
++{
++ struct DIstruct s;
++ DItype ll;
++} DIunion;
++DItype
++__muldi3 (DItype u, DItype v)
++{
++ DIunion w;
++ DIunion uu, vv;
++ uu.ll = u,
++ vv.ll = v;
++ w.ll = ({DIunion __w; __asm__ ("mull %3" : "=a" ((USItype) ( __w.s.low )), "=d" ((USItype) ( __w.s.high )) : "%0" ((USItype) ( uu.s.low )), "rm" ((USItype) ( vv.s.low ))) ; __w.ll; }) ;
++ w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high
++ + (USItype) uu.s.high * (USItype) vv.s.low);
++ return w.ll;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990213-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990213-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990213-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990213-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++/* { dg-options "-W -Wall -Werror" } */
++
++static inline int unused_fn(int dummyarg)
++{
++ return dummyarg*dummyarg;
++}
++
++int main()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990213-2.c gcc-2.95.4/gcc/testsuite/gcc.dg/990213-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990213-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990213-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/* { dg-do compile { target i?86-*-* } } */
++/* { dg-options "-fPIC" } */
++
++struct normal_encoding {};
++struct unknown_encoding {};
++static const struct normal_encoding latin1_encoding = {};
++
++struct encoding*
++XmlInitUnknownEncoding(void *mem)
++{
++ int i;
++ struct unknown_encoding *e = mem;
++ for (i = 0; i < sizeof(struct normal_encoding); i++)
++ ((char *)mem)[i] = ((char *)&latin1_encoding)[i];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990214-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990214-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990214-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990214-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/* { dg-do compile { target i?86-*-* } } */
++/* { dg-options "-fPIC" } */
++
++typedef int int64_t __attribute__ ((__mode__ ( __DI__ ))) ;
++unsigned *
++bar (int64_t which)
++{
++ switch (which & 15 ) {
++ case 0 :
++ break;
++ case 1 :
++ case 5 :
++ case 2 :
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990228-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990228-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990228-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990228-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++/* Regression test for cpp. The following input may cause core dumps
++ or # line markers in the middle of the line. */
++/* { dg-do preprocess } */
++
++#define foo(string, arg) bar(2, string, arg)
++
++foo ("\
++\
++\
++\
++\
++\
++\
++\
++\
++\
++\
++",
++NULL);
++
++/*
++ { dg-final { if ![file exists 990228-1.i] { return } } }
++ { dg-final { set tmp [grep 990228-1.i ".#"] } }
++ { dg-final { if { [string length $tmp] == 0 } \{ } }
++ { dg-final { pass "990228-1.c: linemarkers in middle of line" } }
++ { dg-final { \} else \{ } }
++ { dg-final { fail "990228-1.c: linemarkers in middle of line" } }
++ { dg-final { \} } }
++ */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990407-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990407-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990407-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990407-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++/* Regression test for a cpplib macro-expansion bug where
++ `@' becomes `@@' when stringified. */
++
++/* { dg-do run } */
++
++#include <string.h>
++
++#define STR(x) #x
++
++char *a = STR(@foo), *b = "@foo";
++
++int
++main(void)
++{
++ if (strcmp (a, b))
++ abort ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990409-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990409-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990409-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990409-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++/* Test that __LINE__ works when embedded in a macro. */
++/* { dg-do run } */
++
++#define XLINE __LINE__
++
++void
++bar(int x, int y)
++{
++ if (x != y)
++ abort();
++}
++
++int
++main(void)
++{
++ bar(XLINE, __LINE__);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990413-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990413-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990413-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990413-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++/* Verify that cpp doesn't screw up the line numbering when a macro argument
++ extends over multiple lines. */
++/* { dg-do compile } */
++
++#define FOO(x) /* nothing */
++
++void
++func(void)
++{
++ FOO(i
++ = 4)
++ else; /* { dg-error "parse error" "error on this line" { target native } { 12 } } */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990424-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/990424-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990424-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990424-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++/* Test that stack alignment is preserved with pending_stack_adjust
++ with stdcall functions. */
++
++/* { dg-do run { target i?86-*-* } } */
++/* { dg-options -mpreferred-stack-boundary=4 } */
++
++void __attribute__((stdcall)) foo(int a, int b, int c);
++
++int
++main ()
++{
++ foo(1, 2, 3);
++ foo(1, 2, 3);
++ exit (0);
++}
++
++void __attribute__((stdcall))
++foo(int a, int b, int c)
++{
++ static int last_align = -1;
++ int dummy, align = (int)&dummy & 15;
++ if (last_align < 0)
++ last_align = align;
++ else if (align != last_align)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/990506-0.c gcc-2.95.4/gcc/testsuite/gcc.dg/990506-0.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/990506-0.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/990506-0.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Verify that a diagnostic is issued without crashing due to
++ --enable-checking catching a bug in the C front end. */
++/* { dg-do compile } */
++x()
++{
++ foo (i);
++ /* { dg-error "undeclared" "undeclared-variable message" { target native } { 6 } } */
++ /* { dg-error "function it appears in" "reminder message" { target native } { 6 } } */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/bf-spl1.c gcc-2.95.4/gcc/testsuite/gcc.dg/bf-spl1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/bf-spl1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/bf-spl1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++/* { dg-do run { target m68k-*-* sparc-*-* } } */
++/* { dg-options { -m68000 -O2 } { target m68k-*-* } } */
++/* { dg-options { -O2 } { target sparc-*-* } } */
++
++typedef SFtype __attribute__ ((mode (SF)));
++typedef DFtype __attribute__ ((mode (DF)));
++
++typedef int HItype __attribute__ ((mode (HI)));
++typedef int SItype __attribute__ ((mode (SI)));
++typedef int DItype __attribute__ ((mode (DI)));
++
++typedef unsigned int UHItype __attribute__ ((mode (HI)));
++typedef unsigned int USItype __attribute__ ((mode (SI)));
++typedef unsigned int UDItype __attribute__ ((mode (DI)));
++
++typedef UDItype fractype;
++typedef USItype halffractype;
++typedef DFtype FLO_type;
++typedef DItype intfrac;
++
++
++typedef union
++{
++ long long foo;
++ FLO_type value;
++ struct
++ {
++ fractype fraction:52 __attribute__ ((packed));
++ unsigned int exp:11 __attribute__ ((packed));
++ unsigned int sign:1 __attribute__ ((packed));
++ }
++ bits;
++} FLO_union_type;
++
++void foo (long long a);
++long long x;
++
++void
++pack_d ()
++{
++ FLO_union_type dst = { 0x0123456789abcdefLL };
++
++ x = dst.bits.fraction;
++}
++
++main ()
++{
++ pack_d ();
++ foo (x);
++ return 0;
++}
++
++void
++foo (long long a)
++{
++ if (a != 0x0123456789abcLL)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/cast-qual-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/cast-qual-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/cast-qual-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/cast-qual-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++/* Incorrect `cast discards `const'' warnings. There should be warnings
++ in bad_cast and bad_assign; bad_assign gets the correct warning, but
++ good_cast may get the warning instead of bad_cast.
++ gcc 2.7.2.3 passes, egcs-1.1.2 and egcs-ss-19990428 fail.
++ http://www.cygnus.com/ml/egcs-bugs/1998-Aug/0635.html */
++/* { dg-do compile } */
++/* { dg-options "-Wcast-qual" } */
++void
++good_cast(const void *bar)
++{
++ (char *const *)bar; /* { dg-bogus "cast discards" "discarding `const' warning" } */
++}
++
++void
++bad_cast(const void *bar)
++{
++ (const char **)bar; /* { dg-warning "cast discards" "discarding `const' warning" } */
++}
++
++void
++good_assign(const void *bar)
++{
++ char *const *foo = bar;
++}
++
++void
++bad_assign(const void *bar)
++{
++ const char **foo = bar; /* { dg-warning "initialization discards" "discarding `const' warning" } */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/clobbers.c gcc-2.95.4/gcc/testsuite/gcc.dg/clobbers.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/clobbers.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/clobbers.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++/* Test asm clobbers on x86. */
++
++/* { dg-do run { target i?86-*-* } } */
++
++int main ()
++{
++ int i;
++ __asm__ ("movl $1,%0\n\txorl %%eax,%%eax" : "=r" (i) : : "eax");
++ if (i != 1)
++ abort ();
++ __asm__ ("movl $1,%0\n\txorl %%ebx,%%ebx" : "=r" (i) : : "ebx");
++ if (i != 1)
++ abort ();
++ __asm__ ("movl $1,%0\n\txorl %%ecx,%%ecx" : "=r" (i) : : "ecx");
++ if (i != 1)
++ abort ();
++ __asm__ ("movl $1,%0\n\txorl %%edx,%%edx" : "=r" (i) : : "edx");
++ if (i != 1)
++ abort ();
++ __asm__ ("movl $1,%0\n\txorl %%esi,%%esi" : "=r" (i) : : "esi");
++ if (i != 1)
++ abort ();
++ __asm__ ("movl $1,%0\n\txorl %%edi,%%edi" : "=r" (i) : : "edi");
++ if (i != 1)
++ abort ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/compare1.c gcc-2.95.4/gcc/testsuite/gcc.dg/compare1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/compare1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/compare1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++/* Test for a bogus warning on comparison between signed and unsigned.
++ This was inspired by code in gcc. */
++
++/* { dg-do compile } */
++/* { dg-options "-Wsign-compare" } */
++
++int target_flags = 1;
++
++enum machine_mode
++{
++ VOIDmode , PQImode , QImode , PHImode , HImode ,
++ PSImode , SImode , PDImode , DImode , TImode , OImode , QFmode ,
++ HFmode , TQFmode , SFmode , DFmode , XFmode , TFmode , QCmode ,
++ HCmode , SCmode , DCmode , XCmode , TCmode , CQImode , CHImode ,
++ CSImode , CDImode , CTImode , COImode , BLKmode , CCmode , CCXmode,
++ CC_NOOVmode, CCX_NOOVmode, CCFPmode, CCFPEmode , MAX_MACHINE_MODE
++};
++
++#define Pmode ( target_flags ? DImode : SImode )
++
++int main()
++{
++ enum machine_mode mode = DImode;
++
++ return (mode == Pmode); /* dg-bogus "warning:" "comparison between signed and unsigned" } */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-if1.c gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-if1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-if1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-if1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++/* { dg-do preprocess } */
++/* { dg-options "-pedantic-errors" } */
++
++#if 0xa != 10
++#error 0xa != 10 /* { dg-bogus "#error" "normal conversion" } */
++#endif
++
++#if 077 != 63
++#error 077 != 63 /* { dg-bogus "#error" "normal conversion" } */
++#endif
++
++#if 12wrt /* { dg-error "nvalid number|missing white" "invalid number" } */
++#endif
++
++#if 0abc /* { dg-error "nvalid number|missing white" "invalid number" } */
++#endif
++
++#if 42abc /* { dg-error "nvalid number|missing white" "invalid number" } */
++#endif
++
++#if 1.2 /* { dg-error "loating point numbers" "floating point in #if" } */
++#endif
++
++#if 4uu /* { dg-error "(too many|two) `u'" "too many suffixes" } */
++#endif
++
++#if 124123231lll /* { dg-error "too many `l'" "too many suffixes" } */
++#endif
++
++#if 099 /* { dg-error "digits beyond the radix" "decimal in octal constant" } */
++#endif
++
++#if 0xfffffffffffffffff /* { dg-error "integer constant out of range" "range error" } */
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-if2.c gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-if2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-if2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-if2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++/* { dg-do preprocess } */
++/* { dg-options -pedantic-errors } */
++
++#if 'a' != 'a' || '\001' != 1 || '\x12' != 0x12
++#error a,1,0x12 /* { dg-bogus "#error" "basic charconst recognition" } */
++#endif
++
++#if 'a' != L'a' || L'\xfeed' != 0xfeed
++#error L'a',0xfeed /* { dg-bogus "#error" "wide charconst recognition" } */
++#endif
++
++#if 'abcd' /* { dg-warning "multi-character character constant" "multi-character charconst" } */
++#endif
++
++#if 'abcdefghi' /* { dg-error "character constant (is )?too long" "charconst too long" } */
++#endif
++
++#if '' /* { dg-error "empty character constant" "empty charconst" } */
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-if3.c gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-if3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-if3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-if3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++/* Test that the preprocessor is capable of 64-bit arithmetic.
++ (Must turn off -pedantic, since `LL' constants are only in C9x.) */
++/* { dg-do preprocess } */
++/* { dg-options "" } */
++
++#define U_MAX 4294967295U
++#define ULL_MAX 18446744073709551615ULL
++#define LL_MAX 9223372036854775807LL
++#define LL_MIN (-LL_MAX-1)
++
++/* Check simple truncation. */
++#if U_MAX == ULL_MAX || LL_MIN == 0 || LL_MAX == -1
++#error "simple truncation" /* { dg-bogus "trunc" "simple truncation" } */
++#endif
++
++/* Check left/right shifting with all bits set and with one bit set. */
++#if !(~0ULL >> 63) || !(~0ULL << 63) || !(~0LL >> 63) || !(~0LL << 63) || \
++ !(LL_MIN >> 63) || !(1LL << 62) || !(ULL_MAX >> 63) || !(1ULL << 63)
++#error "bit shift truncation" /* { dg-bogus "trunc" "bit shift truncation" } */
++#endif
++
++/* Check math expressions. */
++#if (2ULL * U_MAX < U_MAX) || (1ULL + U_MAX < U_MAX)
++#error "math truncation" /* { dg-bogus "trunc" "math truncation" } */
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-mi.c gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-mi.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-mi.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-mi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++/* Test "ignore redundant include" facility.
++ This doesn't test for the case where the file is opened, and then ignored
++ (the file shouldn't have even been opened). That would require tracing
++ system calls. It could be done on some systems however. */
++
++/* We have to test two cases: C comments at the top and C++ comments
++ at the top. */
++
++/*
++{ dg-do preprocess }
++{ dg-options "-Wp,-lang-c-c++-comments" }
++*/
++
++#include "cpp-mic.h"
++#include "cpp-mic.h"
++
++#include "cpp-micc.h"
++#include "cpp-micc.h"
++
++main ()
++{
++}
++
++/*
++ { dg-final { if ![file exists cpp-mi.i] { return } } }
++
++ { dg-final { set tmp [grep cpp-mi.i cpp-micc? line] } }
++ { dg-final { # send_user "$tmp\n" } }
++ { dg-final { if [regexp "^{\[0-9\]+ cpp-mic} {\[0-9\]+ cpp-micc}$" $tmp] \{ } }
++ { dg-final { pass "cpp-mi.c: redundant include check" } }
++ { dg-final { \} else \{ } }
++ { dg-final { fail "cpp-mi.c: redundant include check" } }
++ { dg-final { \} } }
++*/
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-micc.h gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-micc.h
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-micc.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-micc.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Redundant header include test with C comments at top.
++
++#ifndef CPP_MICC_H
++#define CPP_MICC_H
++
++int a;
++
++#endif
++
++// And at the end too!
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-mic.h gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-mic.h
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/cpp-mic.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/cpp-mic.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++/* Redundant header include test with C comments at top. */
++
++#ifndef CPP_MIC_H
++#define CPP_MIC_H
++
++int a;
++
++#endif
++
++/* And at the end too! */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/dg.exp gcc-2.95.4/gcc/testsuite/gcc.dg/dg.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/dg.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/dg.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# GCC testsuite that uses the `dg.exp' driver.
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++# Utility for scanning compiler result, invoked via dg-final.
++# Call pass if pattern is present, otherwise fail.
++proc scan-assembler { testcase pattern } {
++ global subdir
++
++ set fd [open [file rootname $testcase].s r]
++ set text [read $fd]
++ close $fd
++
++ if [regexp -- $pattern $text] {
++ pass "$subdir/$testcase scan-assembler"
++ } else {
++ fail "$subdir/$testcase scan-assembler"
++ }
++}
++
++# Call pass if pattern is not present, otherwise fail.
++proc scan-assembler-not { testcase pattern } {
++ global subdir
++
++ set fd [open [file rootname $testcase].s r]
++ set text [read $fd]
++ close $fd
++
++ if ![regexp -- $pattern $text] {
++ pass "$subdir/$testcase scan-assembler-not"
++ } else {
++ fail "$subdir/$testcase scan-assembler-not"
++ }
++}
++
++# If a testcase doesn't have special options, use these.
++global DEFAULT_CFLAGS
++if ![info exists DEFAULT_CFLAGS] then {
++ set DEFAULT_CFLAGS " -ansi -pedantic-errors"
++}
++
++# Initialize `dg'.
++dg-init
++
++# Main loop.
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] "" $DEFAULT_CFLAGS
++
++# All done.
++dg-finish
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/dll-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/dll-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/dll-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/dll-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++/* { dg-do compile { target arm*-*-pe* } } */
++/* { dg-do compile { target thumb*-*-pe* } } */
++/* { dg-options -mno-nop-fun-dllimport } */
++
++__declspec (dllimport) void imp ();
++
++__declspec (dllexport) void exp () { imp (); }
++
++/* { dg-final { scan-assembler dll-1.c "\.section\[ \t\]*.drectve\n\[^\n\]*-export:exp.*__imp_imp" } } */
++/* { dg-final { scan-assembler-not dll-1.c "__imp_exp" } } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/dll-2.c gcc-2.95.4/gcc/testsuite/gcc.dg/dll-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/dll-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/dll-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++/* These dllimport and dllexport appearing for a symbol.
++ The desired behaviour is that if both dllimport
++ and dllexport appear (in either order) the result is dllexport.
++
++ Microsoft's MSVC 2.0 allows dllimport followed by dllexport for variables,
++ but does not allow dllexport followed by dllimport.
++
++ In C, it's ok to redeclare a variable so this works for variables
++ and functions. In C++, it only works for functions. */
++
++/* { dg-do compile { target arm*-*-pe* } } */
++/* { dg-do compile { target thumb*-*-pe* } } */
++
++__declspec (dllimport) int foo1 ();
++__declspec (dllexport) int foo1 ();
++
++__declspec (dllexport) int foo2 ();
++__declspec (dllimport) int foo2 ();
++
++__declspec (dllimport) int bar1;
++__declspec (dllexport) int bar1;
++
++__declspec (dllexport) int bar2;
++__declspec (dllimport) int bar2;
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/dll-3.c gcc-2.95.4/gcc/testsuite/gcc.dg/dll-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/dll-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/dll-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++/* Ensure dllexport overrides dllimport. */
++
++/* { dg-do compile { target arm*-*-pe* } } */
++/* { dg-do compile { target thumb*-*-pe* } } */
++
++__declspec (dllimport) int foo1 ();
++__declspec (dllexport) int foo1 ();
++
++__declspec (dllexport) int foo2 ();
++__declspec (dllimport) int foo2 ();
++
++__declspec (dllexport) int foo1 () { return foo2 (); }
++__declspec (dllexport) int foo2 () { return foo1 (); }
++
++/* { dg-final { scan-assembler dll-3.c "\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo1.*\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo2" } } */
++/* { dg-final { scan-assembler-not dll-3.c "(__imp_foo1|__imp_foo2)" } } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/dll-4.c gcc-2.95.4/gcc/testsuite/gcc.dg/dll-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/dll-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/dll-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++/* { dg-do compile { target arm*-*-pe* } } */
++/* { dg-do compile { target thumb*-*-pe* } } */
++
++__declspec (dllimport) int foo1;
++int foo1;
++
++__declspec (dllimport) int foo2;
++int foo2 = 5;
++
++int f () { return foo1 + foo2; }
++
++/* FIXME: We should scan the output of nm for this case. */
++/* { dg-final { scan-assembler dll-4.c "(foo2:.*\.comm\[ \t_\]*foo1)" } } */
++/* { dg-final { scan-assembler-not dll-4.c "__imp_" } } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/ifelse-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/ifelse-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/ifelse-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/ifelse-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++/*
++{ dg-do compile }
++{ dg-options "-W -Wall" }
++*/
++
++
++extern int bar ();
++extern int com ();
++extern int baz ();
++void
++foo (a,b)
++ int a, b;
++{
++ if (a)
++ if (b)
++ bar ();
++ else
++ com (); /* { dg-bogus ".*warning.*" "bogus warning" } */
++ else
++ baz ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/noreturn-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/noreturn-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/noreturn-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/noreturn-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++/* Check for various valid and erroneous "noreturn" cases. */
++/* { dg-do compile } */
++/* { dg-options "-O -Wmissing-noreturn" } */
++
++extern void foo1(void) __attribute__ ((__noreturn__));
++void
++foo1(void)
++{
++} /* { dg-warning "`noreturn' function does return" "detect falling off end of noreturn" } */
++
++extern void foo2(void) __attribute__ ((__noreturn__));
++void
++foo2(void)
++{
++ exit(0);
++} /* { dg-bogus "warning:" "this function should not get any warnings" } */
++
++extern void foo3(void);
++void
++foo3(void)
++{
++} /* { dg-bogus "warning:" "this function should not get any warnings" } */
++
++extern void foo4(void);
++void
++foo4(void)
++{
++ exit(0);
++} /* { dg-warning "candidate for attribute `noreturn'" "detect noreturn candidate" } */
++
++extern void foo5(void) __attribute__ ((__noreturn__));
++void
++foo5(void)
++{
++ return; /* { dg-warning "`noreturn' has a `return' statement" "detect invalid return" } */
++} /* { dg-warning "`noreturn' function does return" "detect return from noreturn" } */
++
++extern void foo6(void);
++void
++foo6(void)
++{
++ return;
++} /* { dg-bogus "warning:" "this function should not get any warnings" } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/README gcc-2.95.4/gcc/testsuite/gcc.dg/README
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/README 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/README 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++Notes for testsuite/gcc.dg.
++
++1) There should be only one driver, dg.exp.
++
++2) Try to organize the tests by topic using file name prefixes.
++
++ Eg: All bitfield tests are named "bf-*.c".
++
++ This lets the person running the tests choose particular sets of tests to
++ run easily (using wildcards).
++
++ Eg: make check RUNTESTFLAGS='dg.exp=bf-*.c'
++
++3) Remember DOS file name restrictions (8.3). Sigh.
++
++4) Send bugs, comments, etc. to dje@cygnus.com.
+\ No newline at end of file
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/return-type-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/return-type-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/return-type-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/return-type-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Missing warning for falling off the end of a non-void function.
++ egcs-1.1.2 passes, egcs-ss-19990428 fails.
++ http://egcs.cygnus.com/ml/egcs-bugs/1999-03/msg00220.html */
++/* { dg-do compile } */
++/* { dg-options "-O -Wreturn-type" } */
++int
++foo(void)
++{
++} /* { dg-warning "control reaches end of non-void function" "warning for falling off end of non-void function" } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/setjmp-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/setjmp-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/setjmp-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/setjmp-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++/* Test for bogus "variable `x' may be clobbered by longjmp" warnings.
++ Inspired by cse.c:simplify_relational_operation. */
++
++/* { dg-do compile } */
++/* { dg-options "-O -W -Wall" } */
++
++#include <setjmp.h>
++
++extern void set_float_handler (jmp_buf *);
++
++#define EQ 0x01
++#define LT 0x02
++#define GT 0x04
++
++int
++compare_float (double a, double b) /* { dg-bogus "clobbered" "spurious clobbered warning" { xfail *-*-* } } */
++{
++ jmp_buf handler;
++ int result;
++
++ a += 1.0;
++
++ if (setjmp (handler))
++ {
++ set_float_handler (0);
++ return 0;
++ }
++
++ set_float_handler (&handler);
++ if (a == b) result = EQ;
++ else if (a > b) result = LT;
++ else if (a < b) result = GT;
++ else result = 0;
++ set_float_handler (0);
++ return result;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/alias-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/alias-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/alias-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/alias-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/* { dg-do link } */
++
++extern int foo(void) __attribute__((alias("bar")));
++
++int bar(void) {
++ return 1;
++}
++
++int main(void) {
++
++ if (foo())
++ exit(0);
++ else
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/ecos.exp gcc-2.95.4/gcc/testsuite/gcc.dg/special/ecos.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/ecos.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/ecos.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,214 @@
++# Copyright (C) 1999 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# jlarmour@cygnus.co.uk
++
++# This file was written by Jonathan Larmour (jlarmour@cygnus.co.uk).
++
++# GCC testsuite that uses the `dg.exp' driver.
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++###################################
++# proc gcc_target_object_format { }
++###################################
++
++proc gcc_target_object_format { } {
++ global gcc_target_object_format_saved
++
++ if [info exists gcc_target_object_format_saved] {
++ verbose "gcc_target_object_format returning saved $gcc_target_object_format_saved" 2
++ return $gcc_target_object_format_saved
++ } else {
++
++ set objdump_name [find_binutils_prog objdump]
++ set open_file [open objfmtst.c w]
++ puts $open_file "void foo(void) { }"
++ close $open_file
++
++ gcc_target_compile objfmtst.c objfmtst.o object ""
++
++ set output [exec $objdump_name --file-headers objfmtst.o ]
++
++ file delete objfmtst.o
++
++ if ![ regexp "file format (.*)arch" $output dummy objformat ] {
++ verbose "Could not parse objdump output" 2
++ set gcc_target_object_format_saved unknown
++ } else {
++ switch -regexp $objformat {
++ elf {
++ verbose "gcc_target_object_format returning elf" 2
++ set gcc_target_object_format_saved elf
++ }
++ ecoff {
++ verbose "gcc_target_object_format returning ecoff" 2
++ set gcc_target_object_format_saved ecoff
++ }
++ coff {
++ verbose "gcc_target_object_format returning coff" 2
++ set gcc_target_object_format_saved coff
++ }
++ a\.out {
++ verbose "gcc_target_object_format returning a.out" 2
++ set gcc_target_object_format_saved a.out
++ }
++ default {
++ verbose "gcc_target_object_format returning unknown" 2
++ set gcc_target_object_format_saved unknown
++ }
++ }
++ }
++ return $gcc_target_object_format_saved
++ }
++}
++
++###############################
++# proc check_weak_available { }
++###############################
++
++# weak symbols are only supported in some configs/object formats
++# this proc returns 1 if they're support, 0 if they're not, or -1 if unsure
++
++proc check_weak_available { } {
++ global target_cpu
++
++ # All mips targets should support it
++
++ if { [ string first "mips" $target_cpu ] >= 0 } {
++ return 1
++ }
++
++ # ELF and ECOFF support it. a.out does with gas/gld but may also with
++ # other linkers, so we should try it
++
++ set objformat [gcc_target_object_format]
++
++ switch $objformat {
++ elf { return 1 }
++ ecoff { return 1 }
++ a.out { return 1 }
++ unknown { return -1 }
++ default { return 0 }
++ }
++}
++
++##########
++# weak-1.c
++##########
++
++if { [ check_weak_available ] == 1 } {
++ dg-init
++
++ set lines [gcc_target_compile "$srcdir/$subdir/weak-1a.c" "weak-1a.o" object ""]
++ if ![string match "" $lines] then {
++ fail "weak-1a.o"
++ } else {
++ dg-runtest "$srcdir/$subdir/weak-1.c" "weak-1a.o" ""
++ file delete weak-1a.o
++ }
++ dg-finish
++} elseif { [ check_weak_available ] == 0 } {
++ unsupported "weak-1.c"
++} else {
++ unresolved "weak-1.c"
++}
++
++##########
++# weak-2.c
++##########
++
++if { [ check_weak_available ] == 1 } {
++ dg-init
++
++ set lines [gcc_target_compile "$srcdir/$subdir/weak-2a.c" "weak-2a.o" object ""]
++ if ![string match "" $lines] then {
++ fail "weak-2a.o"
++ } else {
++ set lines [gcc_target_compile "$srcdir/$subdir/weak-2b.c" "weak-2b.o" object ""]
++ if ![string match "" $lines] then {
++ fail "weak-2b.o"
++ } else {
++ dg-runtest "$srcdir/$subdir/weak-2.c" "weak-2a.o weak-2b.o" ""
++ file delete weak-2a.o weak-2b.o
++ }
++ }
++ dg-finish
++} elseif { [ check_weak_available ] == 0 } {
++ unsupported "weak-2.c"
++} else {
++ unresolved "weak-2.c"
++}
++
++###########
++# alias-1.c
++###########
++
++dg-init
++dg-runtest "$srcdir/$subdir/alias-1.c" "" ""
++dg-finish
++
++###########
++# wkali-1.c
++###########
++
++dg-init
++dg-runtest "$srcdir/$subdir/wkali-1.c" "" ""
++dg-finish
++
++###########
++# wkali-2.c
++###########
++
++if { [ check_weak_available ] == 1 } {
++ dg-init
++ set lines [gcc_target_compile "$srcdir/$subdir/wkali-2a.c" "wkali-2a.o" object ""]
++ if ![string match "" $lines] then {
++ fail "wkali-2a.o"
++ } else {
++ set lines [gcc_target_compile "$srcdir/$subdir/wkali-2b.c" "wkali-2b.o" object ""]
++ if ![string match "" $lines] then {
++ fail "wkali-2b.o"
++ } else {
++ dg-runtest "$srcdir/$subdir/wkali-2.c" "wkali-2a.o wkali-2b.o" ""
++ file delete wkali-2a.o wkali-2b.o
++ }
++ }
++ dg-finish
++} elseif { [ check_weak_available ] == 0 } {
++ unsupported "wkali-2.c"
++} else {
++ unresolved "wkali-2.c"
++}
++
++###########
++# gcsec-1.c
++###########
++
++set ld_output [ exec [ find_ld ] --help ]
++
++if { [ string first "--gc-sections" $ld_output ] >= 0 } {
++
++ dg-init
++ dg-runtest "$srcdir/$subdir/gcsec-1.c" "-ffunction-sections -fdata-sections -Wl,--gc-sections" ""
++ dg-finish
++} else {
++ unsupported "gcsec-1.c"
++}
++
++### EOF ecos.exp
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/gcsec-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/gcsec-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/gcsec-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/gcsec-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++
++static int unusedint=5;
++
++static int usedint=1;
++
++int unused(void) {
++ return 1;
++}
++
++int foo(void) {
++ return usedint;
++}
++
++int main(void) {
++
++ if (foo())
++ exit(0);
++ else
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-1a.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-1a.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-1a.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-1a.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++int foo(void) {
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/* { dg-do run } */
++
++int foo(void) __attribute__((weak));
++
++int foo(void) {
++ return 0;
++}
++
++int main(void) {
++
++ if (foo())
++ exit(0);
++ else
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-2a.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-2a.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-2a.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-2a.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int foo(void) __attribute__((weak));
++
++int foo(void) {
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-2b.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-2b.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-2b.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-2b.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++int foo(void) {
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-2.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/weak-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/weak-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++/* { dg-do run } */
++
++extern int foo(void);
++
++int main(void) {
++
++ if (foo())
++ exit(0);
++ else
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/* { dg-do link } */
++
++extern int foo(void) __attribute__((weak, alias("bar")));
++
++int bar(void) {
++ return 1;
++}
++
++int main(void) {
++
++ if (foo())
++ exit(0);
++ else
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-2a.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-2a.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-2a.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-2a.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++/* { dg-do run } */
++
++extern int foo(void) __attribute__((weak, alias("bar_a")));
++
++int bar_a(void) {
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-2b.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-2b.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-2b.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-2b.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++/* { dg-do run } */
++
++extern int foo(void) __attribute__((alias("bar_b")));
++
++int bar_b(void) {
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-2.c gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/special/wkali-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/special/wkali-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++/* { dg-do run } */
++
++extern int foo(void);
++
++int main(void) {
++
++ if (foo())
++ exit(0);
++ else
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/splet-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/splet-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/splet-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/splet-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++/* Test inl-sparc.h. */
++
++/* { dg-do run { target sparclet-*-* } } */
++/* { dg-options -mcpu=sparclet } */
++
++#include <inl-sparc.h>
++
++main ()
++{
++ int a,b;
++
++ a = scan (1, 2);
++ if (a != 3)
++ abort ();
++
++ b = shuffle (4, 5);
++ if (b != 6)
++ abort ();
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/struct-ret-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/struct-ret-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/struct-ret-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/struct-ret-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++/* { dg-do run { target hppa*-*-* } } */
++/* { dg-options { -O2 } { target hppa*-*-* } } */
++typedef struct {
++ int x;
++ int y;
++} point_t;
++
++int main(int argc, char *argv[]);
++int printPoints(point_t a, point_t b);
++point_t toPoint(int x1, int y1);
++
++int
++main(int argc, char *argv[])
++{
++
++ if (printPoints(toPoint(0, 0), toPoint(1000, 1000)) != 1)
++ abort();
++ else
++ exit();
++
++ return 0;
++}
++
++int
++printPoints(point_t a, point_t b)
++{
++ if (a.x != 0
++ || a.y != 0
++ || b.x != 1000
++ || b.y != 1000)
++ return 0;
++ else
++ return 1;
++}
++
++point_t
++toPoint(int x1, int y1)
++{
++ point_t p;
++
++ p.x = x1;
++ p.y = y1;
++
++ return p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/switch-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/switch-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/switch-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/switch-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++/* { dg-do compile { target rs6000-*-linux* powerpc-*-linux*} } */
++/* { dg-options "-fpic -O2" } */
++
++void f (char *s)
++{
++ for (;;)
++ {
++ int t = 6;
++ switch (t)
++ {
++ case 2:
++ *s = '2';
++ case 6: case 4: case 3: case 1:
++ break;
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/ultrasp1.c gcc-2.95.4/gcc/testsuite/gcc.dg/ultrasp1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/ultrasp1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/ultrasp1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Simplified from testcase by David Staepelaere <staapa@ultimatech.com> */
++
++/* { dg-do compile { xfail sparc-*-* } } */
++/* { dg-options "" } */
++/* { dg-options -mcpu=ultrasparc { target sparc-*-*-* } } */
++
++int foo(long long y) {
++ return -1 * y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++/* Spurious uninitialized variable warnings, case 1.
++ Taken from cppfiles.c (merge_include_chains) */
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++struct list
++{
++ struct list *next;
++ int id;
++};
++
++extern void free (void *);
++
++void remove_dupes (struct list *el)
++{
++ struct list *p, *q, *r; /* { dg-bogus "r" "uninitialized variable warning" { xfail *-*-* } } */
++
++ for (p = el; p; p = p->next)
++ {
++ for (q = el; q != p; q = q->next)
++ if (q->id == p->id)
++ {
++ r->next = p->next;
++ free (p);
++ p = r;
++ break;
++ }
++ r = p;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-2.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++/* Spurious uninitialized variable warnings, case 2.
++ Taken from cpphash.c (macroexpand) */
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++struct definition
++{
++ int nargs;
++ int rest_args;
++};
++
++struct cpp_reader;
++
++enum cpp_token
++{
++ CPP_EOF, CPP_POP, CPP_COMMA, CPP_RPAREN
++};
++
++extern enum cpp_token macarg (struct cpp_reader *, int);
++
++void
++macroexpand (struct cpp_reader *pfile, struct definition *defn)
++{
++ int nargs = defn->nargs;
++
++ if (nargs >= 0)
++ {
++ enum cpp_token token; /* { dg-bogus "token" "uninitialized variable warning" { xfail *-*-* } } */
++ int i, rest_args;
++ i = 0;
++ rest_args = 0;
++ do
++ {
++ if (rest_args)
++ continue;
++ if (i < nargs || (nargs == 0 && i == 0))
++ {
++ /* if we are working on last arg which absorbs rest of args... */
++ if (i == nargs - 1 && defn->rest_args)
++ rest_args = 1;
++ token = macarg (pfile, rest_args);
++ }
++ else
++ token = macarg (pfile, 0);
++ if (token == CPP_EOF || token == CPP_POP)
++ return;
++
++ i++;
++ }
++ while (token == CPP_COMMA);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-3.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++/* Spurious uninit variable warnings, case 3.
++ Inspired by cppexp.c (parse_charconst) */
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++extern void error (char *);
++
++int
++parse_charconst (const char *start, const char *end)
++{
++ int c; /* { dg-bogus "c" "uninitialized variable warning" { xfail *-*-* } } */
++ int nchars, retval;
++
++ nchars = 0;
++ retval = 0;
++ while (start < end)
++ {
++ c = *start++;
++ if (c == '\'')
++ break;
++ nchars++;
++ retval += c;
++ retval <<= 8;
++ }
++
++ if (nchars == 0)
++ return 0;
++
++ if (c != '\'')
++ error ("malformed character constant");
++
++ return retval;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-4.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++/* Spurious uninit variable warnings, case 4.
++ Simplified version of cppexp.c (cpp_parse_expr).
++
++ This one is really fragile, it gets it right if you take out case
++ 1, or if the structure is replaced by an int, or if the structure
++ has fewer members (!) */
++
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++struct operation {
++ short op;
++ char rprio;
++ char flags;
++ char unsignedp;
++ long value;
++};
++
++extern struct operation cpp_lex (void);
++
++void
++cpp_parse_expr (void)
++{
++ int rprio; /* { dg-bogus "rprio" "uninitialized variable warning" { xfail *-*-* } } */
++ struct operation op;
++
++ for (;;)
++ {
++ op = cpp_lex ();
++
++ switch (op.op)
++ {
++ case 0:
++ break;
++ case 1:
++ return;
++ case 2:
++ rprio = 1;
++ break;
++ default:
++ return;
++ }
++
++ if (op.op == 0)
++ return;
++
++ if (rprio != 1)
++ abort();
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-5.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Spurious uninitialized-variable warnings.
++ These cases are documented as not working in the gcc manual. */
++
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++extern void use(int);
++extern void foo(void);
++
++void
++func1(int cond)
++{
++ int x; /* { dg-bogus "x" "uninitialized variable warning" { xfail *-*-* } } */
++
++ if(cond)
++ x = 1;
++
++ foo();
++
++ if(cond)
++ use(x);
++}
++
++void
++func2 (int cond)
++{
++ int x; /* { dg-bogus "x" "uninitialized variable warning" { xfail *-*-* } } */
++ int flag = 0;
++
++ if(cond)
++ {
++ x = 1;
++ flag = 1;
++ }
++
++ foo();
++
++ if(flag)
++ use(x);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-6.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++/* Spurious uninitialized variable warnings.
++ This one inspired by java/class.c:build_utf8_ref. */
++
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++#include <stddef.h>
++
++struct tree
++{
++ struct tree *car;
++ struct tree *cdr;
++ int type, data;
++};
++
++extern void *malloc(size_t);
++
++#define INTEGER_T 1
++#define PTR_T 2
++
++#define APPEND(TREE, LAST, TYPE, VALUE) \
++do { \
++ struct tree *tmp = malloc (sizeof (struct tree)); \
++ tmp->car = 0; tmp->cdr = 0; tmp->type = TYPE; \
++ tmp->data = VALUE; \
++ if (TREE->car) \
++ LAST->cdr = tmp; \
++ else \
++ TREE->car = tmp; \
++ LAST = tmp; \
++} while(0)
++
++struct tree *
++make_something(int a, int b, int c)
++{
++ struct tree *rv;
++ struct tree *field; /* { dg-bogus "field" "uninitialized variable warning" { xfail *-*-* } } */
++
++ rv = malloc (sizeof (struct tree));
++ rv->car = 0;
++
++ APPEND(rv, field, INTEGER_T, a);
++ APPEND(rv, field, PTR_T, b);
++ APPEND(rv, field, INTEGER_T, c);
++
++ return rv;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-8.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-8.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-8.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-8.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++/* Uninitialized variable warning tests...
++ Inspired by part of optabs.c:expand_binop.
++ May be the same as uninit-1.c. */
++
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++#include <limits.h>
++
++void
++add_bignums (int *out, int *x, int *y)
++{
++ int p, sum;
++ int carry; /* { dg-bogus "carry" "uninitialized variable warning" { xfail *-*-* } } */
++
++ p = 0;
++ for (; *x; x++, y++, out++, p++)
++ {
++ if (p)
++ sum = *x + *y + carry;
++ else
++ sum = *x + *y;
++
++ if (sum < 0)
++ {
++ carry = 1;
++ sum -= INT_MAX;
++ }
++ else
++ carry = 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-9.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-9.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-9.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-9.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++/* Spurious uninitialized variable warnings. Slight variant on the
++ documented case, inspired by reg-stack.c:record_asm_reg_life. */
++
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++struct foo
++{
++ int type;
++ struct foo *car;
++ struct foo *cdr;
++ char *data;
++ int data2;
++};
++
++extern void use(struct foo *);
++
++#define CLOBBER 6
++#define PARALLEL 3
++
++void
++func(struct foo *list, int count)
++{
++ int n_clobbers = 0;
++ int i;
++ struct foo **clob_list; /* { dg-bogus "clob_list" "uninitialized variable warning" { xfail *-*-* } } */
++
++ if(list[0].type == PARALLEL)
++ {
++ clob_list = __builtin_alloca(count * sizeof(struct foo *));
++
++ for(i = 1; i < count; i++)
++ {
++ if(list[i].type == CLOBBER)
++ clob_list[n_clobbers++] = &list[i];
++ }
++ }
++
++ for(i = 0; i < n_clobbers; i++)
++ use(clob_list[i]);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-A.c gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-A.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/uninit-A.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/uninit-A.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,115 @@
++/* Inspired by part of java/parse.y.
++ May be a real bug in CSE. */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -Wall" } */
++
++struct tree
++{
++ struct tree *car, *cdr, *wfl;
++ int code;
++ struct { int renp:1; int rtnp:1; int rpnp:1; } flags;
++};
++typedef struct tree *tree;
++#define NULL_TREE ((tree)0)
++
++/* Codes */
++enum
++{
++ CALL_EXPR, NEW_ARRAY_EXPR, NEW_CLASS_EXPR, CONVERT_EXPR,
++ ARRAY_REF, CONDITIONAL_EXPR, STRING_CST, EXPR_WITH_FILE_LOCATION
++};
++
++/* Flags */
++#define RESOLVE_EXPRESSION_NAME_P(t) ((t)->flags.renp)
++#define RESOLVE_TYPE_NAME_P(t) ((t)->flags.rtnp)
++#define RESOLVE_PACKAGE_NAME_P(t) ((t)->flags.rpnp)
++
++/* Macros */
++#define EXPR_WFL_QUALIFICATION(t) ((t)->wfl)
++#define QUAL_WFL(t) ((t)->wfl)
++#define EXPR_WFL_NODE(t) ((t)->wfl)
++#define TREE_CODE(t) ((t)->code)
++#define TREE_OPERAND(t,x) ((t)->car)
++#define CLASSTYPE_SUPER(t) ((t)->car)
++#define IDENTIFIER_LOCAL_VALUE(t) ((t)->car)
++#define TREE_CHAIN(t) ((t)->cdr)
++#define QUAL_RESOLUTION(t) ((t)->cdr)
++
++extern tree current_class, this_identifier_node;
++extern tree super_identifier_node, length_identifier_node;
++
++tree resolve_and_layout (tree, tree);
++tree lookup_field_wrapper (tree, tree);
++
++void
++qualify_ambiguous_name (id)
++ tree id;
++{
++ tree qual, qual_wfl, decl;
++ tree name; /* { dg-bogus "name" "uninitialized variable warning" { xfail *-*-* } } */
++ tree ptr_type; /* { dg-bogus "ptr_type" "uninitialized variable warning" { xfail *-*-* } } */
++ int again, new_array_found = 0;
++ int super_found = 0, this_found = 0;
++
++ qual = EXPR_WFL_QUALIFICATION (id);
++ do {
++ qual_wfl = QUAL_WFL (qual);
++ switch (TREE_CODE (qual_wfl))
++ {
++ case CALL_EXPR:
++ qual_wfl = TREE_OPERAND (qual_wfl, 0);
++ if (TREE_CODE (qual_wfl) != EXPR_WITH_FILE_LOCATION)
++ {
++ qual = EXPR_WFL_QUALIFICATION (qual_wfl);
++ qual_wfl = QUAL_WFL (qual);
++ }
++ break;
++ case NEW_ARRAY_EXPR:
++ qual = TREE_CHAIN (qual);
++ new_array_found = again = 1;
++ continue;
++ case NEW_CLASS_EXPR:
++ case CONVERT_EXPR:
++ qual_wfl = TREE_OPERAND (qual_wfl, 0);
++ break;
++ case ARRAY_REF:
++ while (TREE_CODE (qual_wfl) == ARRAY_REF)
++ qual_wfl = TREE_OPERAND (qual_wfl, 0);
++ break;
++ default:
++ break;
++ }
++
++ name = EXPR_WFL_NODE (qual_wfl);
++ ptr_type = current_class;
++ again = 0;
++
++ } while (again);
++
++ /* If you put straightforward uses of name and ptr_type here
++ instead of the if-else sequence below, the warnings go away.
++ Therefore I suspect a real bug. */
++
++ if (!this_found && !super_found && (decl = IDENTIFIER_LOCAL_VALUE (name)))
++ {
++ RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1;
++ QUAL_RESOLUTION (qual) = decl;
++ }
++ else if ((decl = lookup_field_wrapper (ptr_type, name))
++ || (new_array_found && name == length_identifier_node))
++ {
++ RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1;
++ QUAL_RESOLUTION (qual) = (new_array_found ? NULL_TREE : decl);
++ }
++ else if ((decl = resolve_and_layout (name, NULL_TREE)))
++ {
++ RESOLVE_TYPE_NAME_P (qual_wfl) = 1;
++ QUAL_RESOLUTION (qual) = decl;
++ }
++ else if (TREE_CODE (QUAL_WFL (qual)) == CALL_EXPR
++ || TREE_CODE (QUAL_WFL (qual)) == ARRAY_REF)
++ RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1;
++ else
++ RESOLVE_PACKAGE_NAME_P (qual_wfl) = 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.dg/unused-1.c gcc-2.95.4/gcc/testsuite/gcc.dg/unused-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.dg/unused-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.dg/unused-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++/* Missing `unused parameter' warning.
++ egcs-1.1.2 fails, egcs-ss-19990418 passes.
++ http://www.cygnus.com/ml/egcs-bugs/1998-Sep/0199.html */
++/* { dg-do compile } */
++/* { dg-options "-O -Wall -W" } */
++int
++f(c)
++ char c; /* { dg-warning "unused parameter" "unused parameter warning" } */
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.failure/940409-1.c gcc-2.95.4/gcc/testsuite/gcc.failure/940409-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.failure/940409-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.failure/940409-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++struct S { volatile int field; };
++int f (register struct S arg);
++int g (register struct S);
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.failure/940409-1.x gcc-2.95.4/gcc/testsuite/gcc.failure/940409-1.x
+--- gcc-2.95.3/gcc/testsuite/gcc.failure/940409-1.x 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.failure/940409-1.x 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++# gcc doesn't handle compile/940409-1.cexp properly, but it's an obscure bug
++# so rather than constantly seeing it fail, just record it as expected to
++# fail.
++
++set torture_compile_xfail "*-*-*"
++return 0 ;# `0' says we didn't handle the testcase ourselves so continue
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.failure/failure.exp gcc-2.95.4/gcc/testsuite/gcc.failure/failure.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.failure/failure.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.failure/failure.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++#
++# Expect driver script for GCC Regression Tests
++# Copyright (C) 1993, 1997 Free Software Foundation
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++#
++# Written by Jeffrey Wheat (cassidy@cygnus.com)
++#
++
++#
++# These tests come from Torbjorn Granlund's (tege@cygnus.com)
++# C torture test suite, and other contributors.
++#
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib c-torture.exp
++
++#
++# This loop will run c-torture on any *.c file found in this directory.
++# If a *.c has a corresponding *.exp file, then the test is skipped as
++# as the *.exp will drive the test itself. I did things this way so that
++# generic tests did not need a seperate .exp for it. Only the tests that
++# required unique options would need it's own .exp file.
++#
++
++#
++# The main logic is in ../lib/c-torture.exp. This was done to eliminate
++# redundant code that otherwise lived in each of these driver files.
++#
++foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] {
++
++ # let c-torture.exp figure out the path. this lets users add new
++ # special tests without having to remeber to use $srcdir/$subdir
++
++ if [file exists [file rootname $testcase].exp] then {
++ verbose "INFO:\"[file rootname $testcase].exp\"exists, skipping test" 1
++ continue
++ } else {
++ c-torture [file tail $testcase]
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/acker1.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/acker1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/acker1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/acker1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++int acker(int, int);
++
++void main()
++{
++ acker(3,6);
++ /* */
++ exit(0);
++ /* */
++}
++
++int
++acker(int x,int y)
++{
++ if (x==0)
++ return(y+1);
++ else if (y==0)
++ return(acker(x-1,1));
++ else
++ return(acker(x-1, acker(x, y-1)));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/acker1.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/acker1.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/acker1.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/acker1.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++global PERF_TEST
++if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } {
++ return
++}
++
++load_lib mike-gcc.exp
++
++prebase
++set actions run
++set compiler_output "^$"
++set program_output "^$"
++postbase acker1.c $run $groups
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/configure.in gcc-2.95.4/gcc/testsuite/gcc.misc-tests/configure.in
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=compile.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-10.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-10.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-10.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-10.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-options "-Wall" } */
++
++/* FIXME: we want to test dg-lose here. Anyone know of a good way to
++ crash the compiler? */
++
++int
++main (int argc, char *argv[])
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-11.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-11.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-11.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-11.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do run { target sparc-sun-solaris2* } } */
++/* The \n is left out of the pattern because tcl's exec will remove it. */
++/* { dg-output {^Hello world[.]$} } */
++
++#include <stdio.h>
++
++main () { printf ("Hello world.\n"); return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-12.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-12.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-12.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-12.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do run { target foo-bar-eh } } */
++/* The \n is left out of the pattern because tcl's exec will remove it. */
++/* { dg-output {^Hello world[.]$} } */
++
++#include <stdio.h>
++
++main () { printf ("Hello world.\n"); return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-1.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do compile } */
++
++main () { return 0; }
++
++/* { dg-final { if ![file exists dg-1.s] { fail "dg-1.c (compile)"; return; } } } */
++
++/* { dg-final { set tmp [grep dg-1.s main line] } } */
++/* { dg-final { if ![string match "" $tmp] \{ } } */
++/* { dg-final { pass "dg-1.c (main function present)" } } */
++/* { dg-final { \} else \{ } } */
++/* { dg-final { fail "dg-1.c (main function not present)" } } */
++/* { dg-final { \} } } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-2.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do assemble } */
++
++main () { return 0; }
++
++/* { dg-final { if [file exists dg-2.o] \{ } } */
++/* { dg-final { pass "dg-2.c (assemble: produce .o test)" } } */
++/* { dg-final { \} else \{ } } */
++/* { dg-final { fail "dg-2.c (assemble: produce .o test)" } } */
++/* { dg-final { \} } } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-3.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-3.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-3.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-3.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do link } */
++
++main () { return 0; }
++
++/* { dg-final { if [file exists a.out] \{ } } */
++/* { dg-final { pass "dg-2.c (link: produce a.out test)" } } */
++/* { dg-final { \} else \{ } } */
++/* { dg-final { fail "dg-2.c (link: produce a.out test)" } } */
++/* { dg-final { \} } } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-4.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-4.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-4.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-4.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do run } */
++
++main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-5.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-5.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-5.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-5.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do run } */
++/* The \n is left out of the pattern because tcl's exec will remove it. */
++/* { dg-output {^Hello world[.]$} } */
++
++#include <stdio.h>
++
++main () { printf ("Hello world.\n"); return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-6.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-6.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-6.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-6.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do run { target *-*-* } } */
++/* The \n is left out of the pattern because tcl's exec will remove it. */
++/* { dg-output {^Hello world[.]$} { xfail *-*-* } } */
++
++#include <stdio.h>
++
++main () { printf ("Hello world (oops).\n"); return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-7.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-7.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-7.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-7.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-do run { xfail *-*-* } } */
++
++main () { abort (); return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-8.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-8.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-8.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-8.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-options "-Wall" } */
++/* { dg-do run } */
++/* { dg-excess-errors "excess errors" } */
++
++/* should get warning about defaulting return type - excess error */
++
++main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-9.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-9.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-9.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-9.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/* Test the tester. */
++/* { dg-prms-id 42 } */
++/* { dg-options "-Wall" } */
++
++f ()
++{ /* { dg-warning "return-type" "warning test" } */
++} /* { dg-warning "control reaches end" "warning test" } */
++
++main (int argc, char *argv[])
++{ /* { dg-warning "return-type" "warning test" } */
++ foo a; /* { dg-error "syntax" "error test" } */
++ /* { dg-bogus "foobar" "bogus fail test" } */
++
++ return a; /* { dg-bogus "undeclared|identifier|appears" "bogus pass test" { xfail *-*-* } } */
++} /* { dg-warning "control reaches end" "warning test" } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-test.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-test.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dg-test.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dg-test.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# Test the dg.exp driver.
++# This is a testsuite tester tester. As such we *want* to test things like
++# expected failure handling. But expected failures must continually be
++# monitored and so in the normal case we create unnecessary work. So only
++# run these tests if DG_TEST is defined to "yes".
++
++global DG_TEST
++if { ![info exists DG_TEST] || "$DG_TEST" != "yes" } {
++ return
++}
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++# Initialize harness.
++dg-init
++
++# Main loop.
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/dg-*.c]] "" ""
++
++# All done.
++dg-finish
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dhry.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dhry.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dhry.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dhry.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,602 @@
++/*
++ ****************************************************************************
++ *
++ * "DHRYSTONE" Benchmark Program
++ * -----------------------------
++ *
++ * Version: C, Version 2.1
++ *
++ * File: dhry_1.c (part 2 of 3)
++ *
++ * Date: May 25, 1988
++ *
++ * Author: Reinhold P. Weicker
++ *
++ ****************************************************************************
++ */
++
++#include "dhry.h"
++
++/* Global Variables: */
++
++Rec_Pointer Ptr_Glob,
++ Next_Ptr_Glob;
++int Int_Glob;
++Boolean Bool_Glob;
++char Ch_1_Glob,
++ Ch_2_Glob;
++int Arr_1_Glob [50];
++int Arr_2_Glob [50] [50];
++
++extern char *malloc ();
++Enumeration Func_1 ();
++ /* forward declaration necessary since Enumeration may not simply be int */
++
++#ifndef REG
++ Boolean Reg = false;
++#define REG
++ /* REG becomes defined as empty */
++ /* i.e. no register variables */
++#else
++ Boolean Reg = true;
++#endif
++
++/* variables for time measurement: */
++
++/*
++#ifdef TIMES
++struct tms time_info;
++extern int times ();
++#endif
++*/
++/*
++#ifdef TIME
++extern long time();
++#endif
++*/
++#define Too_Small_Time 2
++ /* Measurements should last at least 2 seconds */
++
++long Begin_Time,
++ End_Time,
++ User_Time;
++float Microseconds,
++ Dhrystones_Per_Second;
++
++/* end of variables for time measurement */
++
++
++main ()
++/*****/
++
++ /* main program, corresponds to procedures */
++ /* Main and Proc_0 in the Ada version */
++{
++ One_Fifty Int_1_Loc;
++ REG One_Fifty Int_2_Loc;
++ One_Fifty Int_3_Loc;
++ REG char Ch_Index;
++ Enumeration Enum_Loc;
++ Str_30 Str_1_Loc;
++ Str_30 Str_2_Loc;
++ REG int Run_Index;
++ REG int Number_Of_Runs;
++
++ /* Initializations */
++
++ Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
++ Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
++
++ Ptr_Glob->Ptr_Comp = Next_Ptr_Glob;
++ Ptr_Glob->Discr = Ident_1;
++ Ptr_Glob->variant.var_1.Enum_Comp = Ident_3;
++ Ptr_Glob->variant.var_1.Int_Comp = 40;
++ strcpy (Ptr_Glob->variant.var_1.Str_Comp,
++ "DHRYSTONE PROGRAM, SOME STRING");
++ strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING");
++
++ Arr_2_Glob [8][7] = 10;
++ /* Was missing in published program. Without this statement, */
++ /* Arr_2_Glob [8][7] would have an undefined value. */
++ /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */
++ /* overflow may occur for this array element. */
++
++/*
++ printf ("\n");
++ printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n");
++ printf ("\n");
++*/
++ if (Reg)
++ {
++/*
++ printf ("Program compiled with 'register' attribute\n");
++ printf ("\n");
++*/
++ }
++ else
++ {
++/*
++ printf ("Program compiled without 'register' attribute\n");
++ printf ("\n");
++*/
++ }
++/*
++ printf ("Please give the number of runs through the benchmark: ");
++*/
++ {
++ int n;
++/*
++ scanf ("%d", &n);
++*/
++ Number_Of_Runs = n=1000;
++ }
++/*
++ printf ("\n");
++
++ printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs);
++*/
++
++ /***************/
++ /* Start timer */
++ /***************/
++
++/*
++#ifdef TIMES
++ times (&time_info);
++ Begin_Time = (long) time_info.tms_utime;
++#endif
++#ifdef TIME
++ Begin_Time = time ( (long *) 0);
++#endif
++*/
++
++ for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
++ {
++
++ Proc_5();
++ Proc_4();
++ /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */
++ Int_1_Loc = 2;
++ Int_2_Loc = 3;
++ strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
++ Enum_Loc = Ident_2;
++ Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc);
++ /* Bool_Glob == 1 */
++ while (Int_1_Loc < Int_2_Loc) /* loop body executed once */
++ {
++ Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc;
++ /* Int_3_Loc == 7 */
++ Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc);
++ /* Int_3_Loc == 7 */
++ Int_1_Loc += 1;
++ } /* while */
++ /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
++ Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
++ /* Int_Glob == 5 */
++ Proc_1 (Ptr_Glob);
++ for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
++ /* loop body executed twice */
++ {
++ if (Enum_Loc == Func_1 (Ch_Index, 'C'))
++ /* then, not executed */
++ {
++ Proc_6 (Ident_1, &Enum_Loc);
++ strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
++ Int_2_Loc = Run_Index;
++ Int_Glob = Run_Index;
++ }
++ }
++ /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
++ Int_2_Loc = Int_2_Loc * Int_1_Loc;
++ Int_1_Loc = Int_2_Loc / Int_3_Loc;
++ Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
++ /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */
++ Proc_2 (&Int_1_Loc);
++ /* Int_1_Loc == 5 */
++
++ } /* loop "for Run_Index" */
++
++ /**************/
++ /* Stop timer */
++ /**************/
++
++/*
++#ifdef TIMES
++ times (&time_info);
++ End_Time = (long) time_info.tms_utime;
++#endif
++#ifdef TIME
++ End_Time = time ( (long *) 0);
++#endif
++*/
++
++/*
++ printf ("Execution ends\n");
++ printf ("\n");
++ printf ("Final values of the variables used in the benchmark:\n");
++ printf ("\n");
++ printf ("Int_Glob: %d\n", Int_Glob);
++ printf (" should be: %d\n", 5);
++ printf ("Bool_Glob: %d\n", Bool_Glob);
++ printf (" should be: %d\n", 1);
++ printf ("Ch_1_Glob: %c\n", Ch_1_Glob);
++ printf (" should be: %c\n", 'A');
++ printf ("Ch_2_Glob: %c\n", Ch_2_Glob);
++ printf (" should be: %c\n", 'B');
++ printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]);
++ printf (" should be: %d\n", 7);
++ printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]);
++ printf (" should be: Number_Of_Runs + 10\n");
++ printf ("Ptr_Glob->\n");
++ printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp);
++ printf (" should be: (implementation-dependent)\n");
++ printf (" Discr: %d\n", Ptr_Glob->Discr);
++ printf (" should be: %d\n", 0);
++ printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp);
++ printf (" should be: %d\n", 2);
++ printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp);
++ printf (" should be: %d\n", 17);
++ printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp);
++ printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n");
++ printf ("Next_Ptr_Glob->\n");
++ printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp);
++ printf (" should be: (implementation-dependent), same as above\n");
++ printf (" Discr: %d\n", Next_Ptr_Glob->Discr);
++ printf (" should be: %d\n", 0);
++ printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp);
++ printf (" should be: %d\n", 1);
++ printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp);
++ printf (" should be: %d\n", 18);
++ printf (" Str_Comp: %s\n",
++ Next_Ptr_Glob->variant.var_1.Str_Comp);
++ printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n");
++ printf ("Int_1_Loc: %d\n", Int_1_Loc);
++ printf (" should be: %d\n", 5);
++ printf ("Int_2_Loc: %d\n", Int_2_Loc);
++ printf (" should be: %d\n", 13);
++ printf ("Int_3_Loc: %d\n", Int_3_Loc);
++ printf (" should be: %d\n", 7);
++ printf ("Enum_Loc: %d\n", Enum_Loc);
++ printf (" should be: %d\n", 1);
++ printf ("Str_1_Loc: %s\n", Str_1_Loc);
++ printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n");
++ printf ("Str_2_Loc: %s\n", Str_2_Loc);
++ printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n");
++ printf ("\n");
++*/
++
++ User_Time = End_Time - Begin_Time;
++
++ if (User_Time < Too_Small_Time)
++ {
++/*
++ printf ("Measured time too small to obtain meaningful results\n");
++ printf ("Please increase number of runs\n");
++ printf ("\n");
++*/
++ }
++ else
++ {
++#ifdef TIME
++/*
++ Microseconds = (float) User_Time * Mic_secs_Per_Second
++ / (float) Number_Of_Runs;
++ Dhrystones_Per_Second = (float) Number_Of_Runs / (float) User_Time;
++*/
++#else
++/*
++ Microseconds = (float) User_Time * Mic_secs_Per_Second
++ / ((float) HZ * ((float) Number_Of_Runs));
++ Dhrystones_Per_Second = ((float) HZ * (float) Number_Of_Runs)
++ / (float) User_Time;
++*/
++#endif
++/*
++ printf ("Microseconds for one run through Dhrystone: ");
++ printf ("%6.1f \n", Microseconds);
++ printf ("Dhrystones per Second: ");
++ printf ("%6.1f \n", Dhrystones_Per_Second);
++ printf ("\n");
++*/
++ }
++
++ exit (0);
++}
++
++
++Proc_1 (Ptr_Val_Par)
++/******************/
++
++REG Rec_Pointer Ptr_Val_Par;
++ /* executed once */
++{
++ REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp;
++ /* == Ptr_Glob_Next */
++ /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */
++ /* corresponds to "rename" in Ada, "with" in Pascal */
++
++ structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
++ Ptr_Val_Par->variant.var_1.Int_Comp = 5;
++ Next_Record->variant.var_1.Int_Comp
++ = Ptr_Val_Par->variant.var_1.Int_Comp;
++ Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
++ Proc_3 (&Next_Record->Ptr_Comp);
++ /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp
++ == Ptr_Glob->Ptr_Comp */
++ if (Next_Record->Discr == Ident_1)
++ /* then, executed */
++ {
++ Next_Record->variant.var_1.Int_Comp = 6;
++ Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp,
++ &Next_Record->variant.var_1.Enum_Comp);
++ Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
++ Proc_7 (Next_Record->variant.var_1.Int_Comp, 10,
++ &Next_Record->variant.var_1.Int_Comp);
++ }
++ else /* not executed */
++ structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp);
++} /* Proc_1 */
++
++
++Proc_2 (Int_Par_Ref)
++/******************/
++ /* executed once */
++ /* *Int_Par_Ref == 1, becomes 4 */
++
++One_Fifty *Int_Par_Ref;
++{
++ One_Fifty Int_Loc;
++ Enumeration Enum_Loc;
++
++ Int_Loc = *Int_Par_Ref + 10;
++ do /* executed once */
++ if (Ch_1_Glob == 'A')
++ /* then, executed */
++ {
++ Int_Loc -= 1;
++ *Int_Par_Ref = Int_Loc - Int_Glob;
++ Enum_Loc = Ident_1;
++ } /* if */
++ while (Enum_Loc != Ident_1); /* true */
++} /* Proc_2 */
++
++
++Proc_3 (Ptr_Ref_Par)
++/******************/
++ /* executed once */
++ /* Ptr_Ref_Par becomes Ptr_Glob */
++
++Rec_Pointer *Ptr_Ref_Par;
++
++{
++ if (Ptr_Glob != Null)
++ /* then, executed */
++ *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp;
++ Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp);
++} /* Proc_3 */
++
++
++Proc_4 () /* without parameters */
++/*******/
++ /* executed once */
++{
++ Boolean Bool_Loc;
++
++ Bool_Loc = Ch_1_Glob == 'A';
++ Bool_Glob = Bool_Loc | Bool_Glob;
++ Ch_2_Glob = 'B';
++} /* Proc_4 */
++
++
++Proc_5 () /* without parameters */
++/*******/
++ /* executed once */
++{
++ Ch_1_Glob = 'A';
++ Bool_Glob = false;
++} /* Proc_5 */
++
++
++ /* Procedure for the assignment of structures, */
++ /* if the C compiler doesn't support this feature */
++#ifdef NOSTRUCTASSIGN
++memcpy (d, s, l)
++register char *d;
++register char *s;
++register int l;
++{
++ while (l--) *d++ = *s++;
++}
++#endif
++
++
++/*
++ ****************************************************************************
++ *
++ * "DHRYSTONE" Benchmark Program
++ * -----------------------------
++ *
++ * Version: C, Version 2.1
++ *
++ * File: dhry_2.c (part 3 of 3)
++ *
++ * Date: May 25, 1988
++ *
++ * Author: Reinhold P. Weicker
++ *
++ ****************************************************************************
++ */
++
++#ifndef REG
++#define REG
++ /* REG becomes defined as empty */
++ /* i.e. no register variables */
++#endif
++
++extern int Int_Glob;
++extern char Ch_1_Glob;
++
++
++Proc_6 (Enum_Val_Par, Enum_Ref_Par)
++/*********************************/
++ /* executed once */
++ /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */
++
++Enumeration Enum_Val_Par;
++Enumeration *Enum_Ref_Par;
++{
++ *Enum_Ref_Par = Enum_Val_Par;
++ if (! Func_3 (Enum_Val_Par))
++ /* then, not executed */
++ *Enum_Ref_Par = Ident_4;
++ switch (Enum_Val_Par)
++ {
++ case Ident_1:
++ *Enum_Ref_Par = Ident_1;
++ break;
++ case Ident_2:
++ if (Int_Glob > 100)
++ /* then */
++ *Enum_Ref_Par = Ident_1;
++ else *Enum_Ref_Par = Ident_4;
++ break;
++ case Ident_3: /* executed */
++ *Enum_Ref_Par = Ident_2;
++ break;
++ case Ident_4: break;
++ case Ident_5:
++ *Enum_Ref_Par = Ident_3;
++ break;
++ } /* switch */
++} /* Proc_6 */
++
++
++Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref)
++/**********************************************/
++ /* executed three times */
++ /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3, */
++ /* Int_Par_Ref becomes 7 */
++ /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */
++ /* Int_Par_Ref becomes 17 */
++ /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */
++ /* Int_Par_Ref becomes 18 */
++One_Fifty Int_1_Par_Val;
++One_Fifty Int_2_Par_Val;
++One_Fifty *Int_Par_Ref;
++{
++ One_Fifty Int_Loc;
++
++ Int_Loc = Int_1_Par_Val + 2;
++ *Int_Par_Ref = Int_2_Par_Val + Int_Loc;
++} /* Proc_7 */
++
++
++Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val)
++/*********************************************************************/
++ /* executed once */
++ /* Int_Par_Val_1 == 3 */
++ /* Int_Par_Val_2 == 7 */
++Arr_1_Dim Arr_1_Par_Ref;
++Arr_2_Dim Arr_2_Par_Ref;
++int Int_1_Par_Val;
++int Int_2_Par_Val;
++{
++ REG One_Fifty Int_Index;
++ REG One_Fifty Int_Loc;
++
++ Int_Loc = Int_1_Par_Val + 5;
++ Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
++ Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc];
++ Arr_1_Par_Ref [Int_Loc+30] = Int_Loc;
++ for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index)
++ Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc;
++ Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1;
++ Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc];
++ Int_Glob = 5;
++} /* Proc_8 */
++
++
++Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val)
++/*************************************************/
++ /* executed three times */
++ /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */
++ /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */
++ /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */
++
++Capital_Letter Ch_1_Par_Val;
++Capital_Letter Ch_2_Par_Val;
++{
++ Capital_Letter Ch_1_Loc;
++ Capital_Letter Ch_2_Loc;
++
++ Ch_1_Loc = Ch_1_Par_Val;
++ Ch_2_Loc = Ch_1_Loc;
++ if (Ch_2_Loc != Ch_2_Par_Val)
++ /* then, executed */
++ return (Ident_1);
++ else /* not executed */
++ {
++ Ch_1_Glob = Ch_1_Loc;
++ return (Ident_2);
++ }
++} /* Func_1 */
++
++
++Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref)
++/*************************************************/
++ /* executed once */
++ /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */
++ /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */
++
++Str_30 Str_1_Par_Ref;
++Str_30 Str_2_Par_Ref;
++{
++ REG One_Thirty Int_Loc;
++ Capital_Letter Ch_Loc;
++
++ Int_Loc = 2;
++ while (Int_Loc <= 2) /* loop body executed once */
++ if (Func_1 (Str_1_Par_Ref[Int_Loc],
++ Str_2_Par_Ref[Int_Loc+1]) == Ident_1)
++ /* then, executed */
++ {
++ Ch_Loc = 'A';
++ Int_Loc += 1;
++ } /* if, while */
++ if (Ch_Loc >= 'W' && Ch_Loc < 'Z')
++ /* then, not executed */
++ Int_Loc = 7;
++ if (Ch_Loc == 'R')
++ /* then, not executed */
++ return (true);
++ else /* executed */
++ {
++ if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0)
++ /* then, not executed */
++ {
++ Int_Loc += 7;
++ Int_Glob = Int_Loc;
++ return (true);
++ }
++ else /* executed */
++ return (false);
++ } /* if Ch_Loc */
++} /* Func_2 */
++
++
++Boolean Func_3 (Enum_Par_Val)
++/***************************/
++ /* executed once */
++ /* Enum_Par_Val == Ident_3 */
++Enumeration Enum_Par_Val;
++{
++ Enumeration Enum_Loc;
++
++ Enum_Loc = Enum_Par_Val;
++ if (Enum_Loc == Ident_3)
++ /* then, executed */
++ return (true);
++ else /* not executed */
++ return (false);
++} /* Func_3 */
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dhry.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dhry.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dhry.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dhry.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++global PERF_TEST
++if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } {
++ return
++}
++
++load_lib mike-gcc.exp
++
++prebase
++set actions run
++set compiler_output "^$"
++set program_output "^$"
++postbase dhry.c $run $groups
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dhry.h gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dhry.h
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/dhry.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/dhry.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,431 @@
++/*
++ ****************************************************************************
++ *
++ * "DHRYSTONE" Benchmark Program
++ * -----------------------------
++ *
++ * Version: C, Version 2.1
++ *
++ * File: dhry.h (part 1 of 3)
++ *
++ * Date: May 25, 1988
++ *
++ * Author: Reinhold P. Weicker
++ * Siemens AG, AUT E 51
++ * Postfach 3220
++ * 8520 Erlangen
++ * Germany (West)
++ * Phone: [+49]-9131-7-20330
++ * (8-17 Central European Time)
++ * Usenet: ..!mcsun!unido!estevax!weicker
++ *
++ * Original Version (in Ada) published in
++ * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
++ * pp. 1013 - 1030, together with the statistics
++ * on which the distribution of statements etc. is based.
++ *
++ * In this C version, the following C library functions are used:
++ * - strcpy, strcmp (inside the measurement loop)
++ * - printf, scanf (outside the measurement loop)
++ * In addition, Berkeley UNIX system calls "times ()" or "time ()"
++ * are used for execution time measurement. For measurements
++ * on other systems, these calls have to be changed.
++ *
++ * Collection of Results:
++ * Reinhold Weicker (address see above) and
++ *
++ * Rick Richardson
++ * PC Research. Inc.
++ * 94 Apple Orchard Drive
++ * Tinton Falls, NJ 07724
++ * Phone: (201) 389-8963 (9-17 EST)
++ * Usenet: ...!uunet!pcrat!rick
++ *
++ * Please send results to Rick Richardson and/or Reinhold Weicker.
++ * Complete information should be given on hardware and software used.
++ * Hardware information includes: Machine type, CPU, type and size
++ * of caches; for microprocessors: clock frequency, memory speed
++ * (number of wait states).
++ * Software information includes: Compiler (and runtime library)
++ * manufacturer and version, compilation switches, OS version.
++ * The Operating System version may give an indication about the
++ * compiler; Dhrystone itself performs no OS calls in the measurement loop.
++ *
++ * The complete output generated by the program should be mailed
++ * such that at least some checks for correctness can be made.
++ *
++ ***************************************************************************
++ *
++ * History: This version C/2.1 has been made for two reasons:
++ *
++ * 1) There is an obvious need for a common C version of
++ * Dhrystone, since C is at present the most popular system
++ * programming language for the class of processors
++ * (microcomputers, minicomputers) where Dhrystone is used most.
++ * There should be, as far as possible, only one C version of
++ * Dhrystone such that results can be compared without
++ * restrictions. In the past, the C versions distributed
++ * by Rick Richardson (Version 1.1) and by Reinhold Weicker
++ * had small (though not significant) differences.
++ *
++ * 2) As far as it is possible without changes to the Dhrystone
++ * statistics, optimizing compilers should be prevented from
++ * removing significant statements.
++ *
++ * This C version has been developed in cooperation with
++ * Rick Richardson (Tinton Falls, NJ), it incorporates many
++ * ideas from the "Version 1.1" distributed previously by
++ * him over the UNIX network Usenet.
++ * I also thank Chaim Benedelac (National Semiconductor),
++ * David Ditzel (SUN), Earl Killian and John Mashey (MIPS),
++ * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley)
++ * for their help with comments on earlier versions of the
++ * benchmark.
++ *
++ * Changes: In the initialization part, this version follows mostly
++ * Rick Richardson's version distributed via Usenet, not the
++ * version distributed earlier via floppy disk by Reinhold Weicker.
++ * As a concession to older compilers, names have been made
++ * unique within the first 8 characters.
++ * Inside the measurement loop, this version follows the
++ * version previously distributed by Reinhold Weicker.
++ *
++ * At several places in the benchmark, code has been added,
++ * but within the measurement loop only in branches that
++ * are not executed. The intention is that optimizing compilers
++ * should be prevented from moving code out of the measurement
++ * loop, or from removing code altogether. Since the statements
++ * that are executed within the measurement loop have NOT been
++ * changed, the numbers defining the "Dhrystone distribution"
++ * (distribution of statements, operand types and locality)
++ * still hold. Except for sophisticated optimizing compilers,
++ * execution times for this version should be the same as
++ * for previous versions.
++ *
++ * Since it has proven difficult to subtract the time for the
++ * measurement loop overhead in a correct way, the loop check
++ * has been made a part of the benchmark. This does have
++ * an impact - though a very minor one - on the distribution
++ * statistics which have been updated for this version.
++ *
++ * All changes within the measurement loop are described
++ * and discussed in the companion paper "Rationale for
++ * Dhrystone version 2".
++ *
++ * Because of the self-imposed limitation that the order and
++ * distribution of the executed statements should not be
++ * changed, there are still cases where optimizing compilers
++ * may not generate code for some statements. To a certain
++ * degree, this is unavoidable for small synthetic benchmarks.
++ * Users of the benchmark are advised to check code listings
++ * whether code is generated for all statements of Dhrystone.
++ *
++ * Version 2.1 is identical to version 2.0 distributed via
++ * the UNIX network Usenet in March 1988 except that it corrects
++ * some minor deficiencies that were found by users of version 2.0.
++ * The only change within the measurement loop is that a
++ * non-executed "else" part was added to the "if" statement in
++ * Func_3, and a non-executed "else" part removed from Proc_3.
++ *
++ ***************************************************************************
++ *
++ * Defines: The following "Defines" are possible:
++ * -DREG=register (default: Not defined)
++ * As an approximation to what an average C programmer
++ * might do, the "register" storage class is applied
++ * (if enabled by -DREG=register)
++ * - for local variables, if they are used (dynamically)
++ * five or more times
++ * - for parameters if they are used (dynamically)
++ * six or more times
++ * Note that an optimal "register" strategy is
++ * compiler-dependent, and that "register" declarations
++ * do not necessarily lead to faster execution.
++ * -DNOSTRUCTASSIGN (default: Not defined)
++ * Define if the C compiler does not support
++ * assignment of structures.
++ * -DNOENUMS (default: Not defined)
++ * Define if the C compiler does not support
++ * enumeration types.
++ * -DTIMES (default)
++ * -DTIME
++ * The "times" function of UNIX (returning process times)
++ * or the "time" function (returning wallclock time)
++ * is used for measurement.
++ * For single user machines, "time ()" is adequate. For
++ * multi-user machines where you cannot get single-user
++ * access, use the "times ()" function. If you have
++ * neither, use a stopwatch in the dead of night.
++ * "printf"s are provided marking the points "Start Timer"
++ * and "Stop Timer". DO NOT use the UNIX "time(1)"
++ * command, as this will measure the total time to
++ * run this program, which will (erroneously) include
++ * the time to allocate storage (malloc) and to perform
++ * the initialization.
++ * -DHZ=nnn
++ * In Berkeley UNIX, the function "times" returns process
++ * time in 1/HZ seconds, with HZ = 60 for most systems.
++ * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY
++ * A VALUE.
++ *
++ ***************************************************************************
++ *
++ * Compilation model and measurement (IMPORTANT):
++ *
++ * This C version of Dhrystone consists of three files:
++ * - dhry.h (this file, containing global definitions and comments)
++ * - dhry_1.c (containing the code corresponding to Ada package Pack_1)
++ * - dhry_2.c (containing the code corresponding to Ada package Pack_2)
++ *
++ * The following "ground rules" apply for measurements:
++ * - Separate compilation
++ * - No procedure merging
++ * - Otherwise, compiler optimizations are allowed but should be indicated
++ * - Default results are those without register declarations
++ * See the companion paper "Rationale for Dhrystone Version 2" for a more
++ * detailed discussion of these ground rules.
++ *
++ * For 16-Bit processors (e.g. 80186, 80286), times for all compilation
++ * models ("small", "medium", "large" etc.) should be given if possible,
++ * together with a definition of these models for the compiler system used.
++ *
++ **************************************************************************
++ *
++ * Dhrystone (C version) statistics:
++ *
++ * [Comment from the first distribution, updated for version 2.
++ * Note that because of language differences, the numbers are slightly
++ * different from the Ada version.]
++ *
++ * The following program contains statements of a high level programming
++ * language (here: C) in a distribution considered representative:
++ *
++ * assignments 52 (51.0 %)
++ * control statements 33 (32.4 %)
++ * procedure, function calls 17 (16.7 %)
++ *
++ * 103 statements are dynamically executed. The program is balanced with
++ * respect to the three aspects:
++ *
++ * - statement type
++ * - operand type
++ * - operand locality
++ * operand global, local, parameter, or constant.
++ *
++ * The combination of these three aspects is balanced only approximately.
++ *
++ * 1. Statement Type:
++ * ----------------- number
++ *
++ * V1 = V2 9
++ * (incl. V1 = F(..)
++ * V = Constant 12
++ * Assignment, 7
++ * with array element
++ * Assignment, 6
++ * with record component
++ * --
++ * 34 34
++ *
++ * X = Y +|-|"&&"|"|" Z 5
++ * X = Y +|-|"==" Constant 6
++ * X = X +|- 1 3
++ * X = Y *|/ Z 2
++ * X = Expression, 1
++ * two operators
++ * X = Expression, 1
++ * three operators
++ * --
++ * 18 18
++ *
++ * if .... 14
++ * with "else" 7
++ * without "else" 7
++ * executed 3
++ * not executed 4
++ * for ... 7 | counted every time
++ * while ... 4 | the loop condition
++ * do ... while 1 | is evaluated
++ * switch ... 1
++ * break 1
++ * declaration with 1
++ * initialization
++ * --
++ * 34 34
++ *
++ * P (...) procedure call 11
++ * user procedure 10
++ * library procedure 1
++ * X = F (...)
++ * function call 6
++ * user function 5
++ * library function 1
++ * --
++ * 17 17
++ * ---
++ * 103
++ *
++ * The average number of parameters in procedure or function calls
++ * is 1.82 (not counting the function values as implicit parameters).
++ *
++ *
++ * 2. Operators
++ * ------------
++ * number approximate
++ * percentage
++ *
++ * Arithmetic 32 50.8
++ *
++ * + 21 33.3
++ * - 7 11.1
++ * * 3 4.8
++ * / (int div) 1 1.6
++ *
++ * Comparison 27 42.8
++ *
++ * == 9 14.3
++ * /= 4 6.3
++ * > 1 1.6
++ * < 3 4.8
++ * >= 1 1.6
++ * <= 9 14.3
++ *
++ * Logic 4 6.3
++ *
++ * && (AND-THEN) 1 1.6
++ * | (OR) 1 1.6
++ * ! (NOT) 2 3.2
++ *
++ * -- -----
++ * 63 100.1
++ *
++ *
++ * 3. Operand Type (counted once per operand reference):
++ * ---------------
++ * number approximate
++ * percentage
++ *
++ * Integer 175 72.3 %
++ * Character 45 18.6 %
++ * Pointer 12 5.0 %
++ * String30 6 2.5 %
++ * Array 2 0.8 %
++ * Record 2 0.8 %
++ * --- -------
++ * 242 100.0 %
++ *
++ * When there is an access path leading to the final operand (e.g. a record
++ * component), only the final data type on the access path is counted.
++ *
++ *
++ * 4. Operand Locality:
++ * -------------------
++ * number approximate
++ * percentage
++ *
++ * local variable 114 47.1 %
++ * global variable 22 9.1 %
++ * parameter 45 18.6 %
++ * value 23 9.5 %
++ * reference 22 9.1 %
++ * function result 6 2.5 %
++ * constant 55 22.7 %
++ * --- -------
++ * 242 100.0 %
++ *
++ *
++ * The program does not compute anything meaningful, but it is syntactically
++ * and semantically correct. All variables have a value assigned to them
++ * before they are used as a source operand.
++ *
++ * There has been no explicit effort to account for the effects of a
++ * cache, or to balance the use of long or short displacements for code or
++ * data.
++ *
++ ***************************************************************************
++ */
++
++/* Compiler and system dependent definitions: */
++/*
++#ifndef TIME
++#define TIMES
++#endif
++*/ /* Use times(2) time function unless */
++ /* explicitly defined otherwise */
++
++/*
++ #ifndef HZ
++ #define HZ 60
++ #endif
++*/
++
++/*
++#ifdef TIMES
++#include <sys/types.h>
++#include <sys/times.h>
++*/ /* for "times" */
++/*
++#endif
++*/
++#define Mic_secs_Per_Second 1000000.0
++ /* Berkeley UNIX C returns process times in seconds/HZ */
++
++#ifdef NOSTRUCTASSIGN
++#define structassign(d, s) memcpy(&(d), &(s), sizeof(d))
++#else
++#define structassign(d, s) d = s
++#endif
++
++#ifdef NOENUM
++#define Ident_1 0
++#define Ident_2 1
++#define Ident_3 2
++#define Ident_4 3
++#define Ident_5 4
++ typedef int Enumeration;
++#else
++ typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
++ Enumeration;
++#endif
++ /* for boolean and enumeration types in Ada, Pascal */
++
++/* General definitions: */
++
++#include <stdio.h>
++ /* for strcpy, strcmp */
++
++#define Null 0
++ /* Value of a Null pointer */
++#define true 1
++#define false 0
++
++typedef int One_Thirty;
++typedef int One_Fifty;
++typedef char Capital_Letter;
++typedef int Boolean;
++typedef char Str_30 [31];
++typedef int Arr_1_Dim [50];
++typedef int Arr_2_Dim [50] [50];
++
++typedef struct record
++ {
++ struct record *Ptr_Comp;
++ Enumeration Discr;
++ union {
++ struct {
++ Enumeration Enum_Comp;
++ int Int_Comp;
++ char Str_Comp [31];
++ } var_1;
++ struct {
++ Enumeration E_Comp_2;
++ char Str_2_Comp [31];
++ } var_2;
++ struct {
++ char Ch_1_Comp;
++ char Ch_2_Comp;
++ } var_3;
++ } variant;
++ } Rec_Type, *Rec_Pointer;
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/gcov-1.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/gcov-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/gcov-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/gcov-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++/* Test Gcov basics. */
++
++/* { dg-options "-fprofile-arcs -ftest-coverage" } */
++/* { dg-do run { target native } } */
++
++void noop ()
++{
++}
++
++int main ()
++{
++ int i;
++
++ for (i = 0; i < 10; i++) /* count(11) */
++ noop (); /* count(10) */
++
++ return 0; /* count(1) */
++}
++
++/* { dg-final { run-gcov gcov-1.c } } */
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/gcov-2.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/gcov-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/gcov-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/gcov-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++/* Test Gcov basics. */
++
++/* { dg-prms-id 8294 } */
++/* { dg-options "-fprofile-arcs -ftest-coverage -g" } */
++/* { dg-do run { target native } } */
++
++void noop ()
++{
++}
++
++int main ()
++{
++ int i;
++
++ for (i = 0; i < 10; i++) /* count(11) */
++ noop (); /* count(10) */
++
++ return 0; /* count(1) */
++}
++
++int a_variable = 0;
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/gcov.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/gcov.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/gcov.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/gcov.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,95 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# Gcov test driver.
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++global GCC_UNDER_TEST
++
++# For now find gcov in the same directory as $GCC_UNDER_TEST.
++if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } {
++ set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/gcov
++} else {
++ set GCOV gcov
++}
++
++# Proc to delete the working files created by the compiler for gcov.
++
++proc clean-gcov { testcase } {
++ set basename [file tail $testcase]
++ set base [file rootname $basename]
++ remote_file host delete $base.bb $base.bbg $base.da $basename.gcov
++}
++
++# Called by dg-final to run gcov and analyze the results.
++
++proc run-gcov { testcase } {
++ global GCOV
++
++ verbose "Running $GCOV $testcase" 2
++ set testcase [remote_download host $testcase];
++ set result [remote_exec host $GCOV $testcase];
++ if { [lindex $result 0] != 0 } {
++ fail "gcov failed: [lindex $result 1]"
++ clean-gcov $testcase
++ return
++ }
++
++ remote_upload host $testcase.gcov $testcase.gcov;
++ set output [grep $testcase.gcov ".*count\\(\[0-9\]+\\)" line]
++ #send_user "output:$output\n"
++ set failed 0
++ foreach line $output {
++ verbose "Processing count line: $line" 3
++ #send_user "line:$line\n"
++ if [regexp "(\[0-9\]+) *(\[0-9\]+).*count\\((\[0-9\]+)\\)" "$line" all n is shouldbe] {
++ #send_user "n $n:is $is:shouldbe $shouldbe\n"
++ if { $is == "" } {
++ fail "$testcase:$n:no data available for this line"
++ incr failed
++ } elseif { $is != $shouldbe } {
++ fail "$testcase:$n:is $is:should be $shouldbe"
++ incr failed
++ }
++ } else {
++ fail "$testcase: can't parse $line (in wrong place?)"
++ incr failed
++ }
++ }
++ clean-gcov $testcase
++ if !$failed {
++ pass "gcov $testcase"
++ }
++}
++
++# Initialize harness.
++dg-init
++
++# Delete old .da files.
++set files [glob -nocomplain gcov-*.da];
++if { $files != "" } {
++ eval "remote_file build delete $files";
++}
++
++# Main loop.
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/gcov-*.c]] "" ""
++
++dg-finish
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/Makefile.in gcc-2.95.4/gcc/testsuite/gcc.misc-tests/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/matrix1.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/matrix1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/matrix1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/matrix1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++/* Matrix operations */
++
++#define BOUND 100
++
++int a[BOUND][BOUND],b[BOUND][BOUND],c[BOUND][BOUND];
++
++main()
++{
++int i,j,k;
++
++
++
++ for (i=0; i<BOUND; i++)
++ {
++ for (j=0; j<BOUND; j++)
++ {
++ a[i][j] = 1;
++ b[i][j] = 1;
++ }
++ }
++ for (i=0; i<BOUND; i++)
++ {
++ for (j=0; j<BOUND; j++)
++ {
++ c[i][j] = 0;
++ for (k=0; k<BOUND; k++)
++ {
++ c[i][j] = c[i][j] + a[i][k] * b[k][j];
++ }
++ }
++ }
++ for (i=0; i<BOUND; i++)
++ {
++ for (j=0; j<BOUND; j++)
++ {
++ if (c[i][j] != BOUND)
++ {
++ /*printf("ERROR\n");*/
++ return 0;
++ }
++ }
++ }
++ i=5;
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/matrix1.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/matrix1.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/matrix1.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/matrix1.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++global PERF_TEST
++if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } {
++ return
++}
++
++load_lib mike-gcc.exp
++
++prebase
++set actions run
++set compiler_output "^$"
++set program_output "^$"
++postbase matrix1.c $run $groups
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/mg.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/mg.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/mg.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/mg.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++/* PR 2981 */
++
++#include "nonexist.h"
++int
++main ()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/mg.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/mg.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/mg.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/mg.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# Test the -MG flag.
++
++load_lib mike-gcc.exp
++
++prebase
++set actions none-of-the-above
++set compiler_output "mg.o ?: .*mg.c \[ \\\n\]*nonexist.h"
++postbase mg.c "" "" "-MM -MG 2>/dev/null"
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/msgs.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/msgs.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/msgs.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/msgs.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# Test gcc warning and error messages.
++# Our testcases are named m-*.c ("m" and not "msg" to avoid DOS problems).
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++# Initialize harness.
++dg-init
++
++# Main loop.
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/m-*.c]] "" ""
++
++# All done.
++dg-finish
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/m-un-1.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/m-un-1.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/m-un-1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/m-un-1.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++/* m-un-1.c: "un" for "uninitialized" */
++
++/*
++From: Jim Wilson <wilson@cygnus.com>
++Date: Wed, 6 Jul 1994 13:11:47 -0700
++To: dje@cygnus.com
++Subject: Re: devo/gcc ChangeLog.fsf stmt.c
++Cc: cvs-gcc@cygnus.com, tege@cygnus.com
++
++ How about a test case? :-)
++
++Compile with -O -Wall and the broken compiler gives you:
++tmp.c:6: warning: `k' might be used uninitialized in this function
++The fixed compiler (and gcc 2.5.8) gives no warning.
++
++This happens to fix a performance regression in the code generated for
++while loops, but that is presumably much much harder to test for.
++*/
++
++/* { dg-do compile } */
++/* { dg-options "-O -Wall" } */
++
++int
++sub ()
++{
++ int i = 0;
++ int j = 0;
++ int k; /* { dg-bogus "`k' might be used uninitialized" "uninitialized warning regression" } */
++
++ while (i == 0 && j == 0)
++ {
++ k = 10;
++ i = sub ();
++ }
++
++ return k;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/m-un-2.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/m-un-2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/m-un-2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/m-un-2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++/* { dg-do compile } */
++/* { dg-options "-W -Wall" } */
++
++typedef unsigned long size_t;
++extern void* malloc (size_t);
++extern void free (void*);
++extern void* realloc (void*, size_t);
++
++struct vtable {
++ void* (* _malloc) (size_t);
++ void (* _free) (void*);
++ void* (* _realloc) (void*, size_t);
++};
++
++struct vtable mtable = {
++ malloc,
++ free
++}; /* { dg-warning "missing initializer" "warning regression" { target native } {18} } */
++ /* { dg-warning "initialization for `mtable._realloc'" "warning regression" { target native } {18} } */
++
++struct vtable mtable2 = {
++ ._malloc = malloc,
++ ._realloc = realloc
++}; /* { dg-warning "missing initializer" "warning regression" { target native } {24} } */
++ /* { dg-warning "initialization for `mtable2._free'" "warning regression" { target native } {24} } */
++
++struct vtable mtable3 = {
++ ._free = free,
++ ._malloc = malloc,
++ ._realloc = realloc
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sieve.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sieve.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sieve.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sieve.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++
++#define TRUE 1
++#define FALSE 0
++#define SIZE 8190
++
++char flags[SIZE+1];
++
++main()
++{
++ register int i, prime, k, count, iter;
++ for (iter=1;iter<=100;iter++) {
++ count=0;
++ for (i=0;i<=SIZE;i++)
++ flags[i]=TRUE;
++ for (i=0;i<=SIZE;i++) {
++ if (flags[i]) {
++ prime=i+i+3;
++ for (k=i+prime;k<=SIZE;k+=prime)
++ flags[k]=FALSE;
++ count++;
++ }
++ }
++ }
++/* */ exit(0); /* */
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sieve.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sieve.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sieve.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sieve.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++global PERF_TEST
++if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } {
++ return
++}
++
++load_lib mike-gcc.exp
++
++prebase
++set actions run
++set compiler_output "^$"
++set program_output "^$"
++postbase sieve.c $run $groups
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sort2.c gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sort2.c
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sort2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sort2.c 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++/* Simple test program: bubble sort of a fixed table. */
++/* This demonstrates some of the compiler's common-subexpression*/
++/* elimination capabilities. For example, inspect the code */
++/* generated for procedure Sort_array. See the Programmer's */
++/* Guide for how to request an assembly listing on your host. */
++
++typedef unsigned char boolean;
++
++void Sort_array();
++int Tab[100];
++
++main () {
++ int I,J,K,L;
++
++for (L = 0; L < 1000; L++) {
++ /* Initialize the table that will be sorted. */
++ K = 0;
++ for (I = 9; I >= 0; I--)
++ for (J = I*10; J < (I+1)*10; J++)
++ Tab[K++] = J&1 ? J+1 : J-1;
++
++/* Print_array(); */
++ Sort_array(Tab,99); /* Sort it. */
++/* Print_array(); */
++}
++/* */ exit(0); /* */
++}
++
++void Sort_array(Tab,Last) int Tab[]; int Last; {
++ boolean Swap;
++ int Temp,I;
++ do {
++ Swap = 0;
++ for (I = 0; I<Last; I++)
++ if (Tab[I] > Tab[I+1]) {
++ Temp = Tab[I];
++ Tab[I] = Tab[I+1];
++ Tab[I+1] = Temp;
++ Swap = 1;
++ }
++ }
++ while (Swap);
++}
++
++
++void Print_array() {
++ int I,J;
++ /*printf("\nArray Contents:\n");*/
++ for (I=0; I<=9; I++) {
++ /*printf("%5d:",10*I); */
++ for (J=0; J<=9; J++); /*printf("%5d",Tab[10*I+J]); */
++ /* printf("\n");*/
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sort2.exp gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sort2.exp
+--- gcc-2.95.3/gcc/testsuite/gcc.misc-tests/sort2.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/gcc.misc-tests/sort2.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++global PERF_TEST
++if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } {
++ return
++}
++
++load_lib mike-gcc.exp
++
++prebase
++set actions run
++set compiler_output "^$"
++set program_output "^$"
++postbase sort2.c $run $groups
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-1.C gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++/* { dg-do run } */
++
++class foo_t {
++ int x;
++public:
++ foo_t(void) { x=1; }
++ int get(void) { return x; }
++};
++
++static foo_t foo __attribute__((init_priority(5000)));
++
++int main(void) {
++
++ if (foo.get())
++ exit(0);
++ else
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-2a.C gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-2a.C
+--- gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-2a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-2a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++/* { dg-do run } */
++
++class foo_t {
++ int x;
++ static int count;
++public:
++ foo_t(void) { x=++count; }
++ int get(void) { return x; }
++};
++
++foo_t foo1 __attribute__((init_priority(6000)));
++foo_t foo2 __attribute__((init_priority(5000)));
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-2.C gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-2.C
+--- gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++/* { dg-do run } */
++
++class foo_t {
++ int x;
++ static int count;
++public:
++ foo_t(void) { x=++count; }
++ int get(void) { return x; }
++};
++
++int foo_t::count;
++
++extern foo_t foo1, foo2;
++
++int main(void) {
++
++ if ( (foo1.get() != 2) || (foo2.get() != 1) )
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-3a.C gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-3a.C
+--- gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-3a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-3a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++/* { dg-do run } */
++
++class foo_t {
++ int x;
++ static int count;
++public:
++ foo_t(void) { x=++count; }
++ int get(void) { return x; }
++};
++
++foo_t foo1 __attribute__((init_priority(6000)));
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-3b.C gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-3b.C
+--- gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-3b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-3b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++/* { dg-do run } */
++
++class foo_t {
++ int x;
++ static int count;
++public:
++ foo_t(void) { x=++count; }
++ int get(void) { return x; }
++};
++
++foo_t foo2 __attribute__((init_priority(5000)));
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-3.C gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-3.C
+--- gcc-2.95.3/gcc/testsuite/g++.dg/special/conpr-3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.dg/special/conpr-3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++/* { dg-do run } */
++
++class foo_t {
++ int x;
++ static int count;
++public:
++ foo_t(void) { x=++count; }
++ int get(void) { return x; }
++};
++
++int foo_t::count;
++
++extern foo_t foo1, foo2;
++
++int main(void) {
++
++ if ( (foo1.get() != 2) || (foo2.get() != 1) )
++ abort();
++ exit(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.dg/special/ecos.exp gcc-2.95.4/gcc/testsuite/g++.dg/special/ecos.exp
+--- gcc-2.95.3/gcc/testsuite/g++.dg/special/ecos.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.dg/special/ecos.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,75 @@
++# Copyright (C) 1999 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# jlarmour@cygnus.co.uk
++
++# This file was written by Jonathan Larmour (jlarmour@cygnus.co.uk).
++
++# G++ testsuite that uses the `dg.exp' driver.
++
++# Load support procs.
++load_lib g++-dg.exp
++
++###########
++# conpr-1.C
++###########
++
++dg-init
++dg-runtest "$srcdir/$subdir/conpr-1.C" "-finit-priority" ""
++dg-finish
++
++
++###########
++# conpr-2.C
++###########
++
++dg-init
++
++set lines [g++_target_compile "$srcdir/$subdir/conpr-2a.C" "conpr-2a.o" object "additional_flags=-finit-priority"]
++if ![string match "" $lines] then {
++ fail "conpr-2a.o"
++} else {
++ dg-runtest "$srcdir/$subdir/conpr-2.C" "conpr-2a.o" "-finit-priority"
++ file delete conpr-2a.o
++}
++dg-finish
++
++
++###########
++# conpr-3.C
++###########
++
++dg-init
++
++set lines [g++_target_compile "$srcdir/$subdir/conpr-3a.C" "conpr-3a.o" object "additional_flags=-finit-priority"]
++if ![string match "" $lines] then {
++ fail "conpr-3a.o"
++} else {
++ set lines [g++_target_compile "$srcdir/$subdir/conpr-3b.C" "conpr-3b.o" object "additional_flags=-finit-priority"]
++ if ![string match "" $lines] then {
++ fail "conpr-3b.o"
++ } else {
++ # run it with objects both ways around!
++ dg-runtest "$srcdir/$subdir/conpr-3.C" "conpr-3a.o conpr-3b.o" "-finit-priority"
++ dg-runtest "$srcdir/$subdir/conpr-3.C" "conpr-3b.o conpr-3a.o" "-finit-priority"
++ file delete conpr-3a.o conpr-3b.o
++ }
++}
++dg-finish
++
++
++### EOF ecos.exp
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/configure.in gcc-2.95.4/gcc/testsuite/g++.old-deja/configure.in
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=old-deja.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/13478.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/13478.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/13478.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/13478.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// 981203 bkoz
++// g++/13478
++// Build don't link:
++
++class A {};
++class AData {};
++
++typedef void (A::* hand) (void);
++
++struct hand_table {
++ const int data1;
++ const hand data2;
++};
++
++class Agent : public A {
++public:
++ enum { first = 1, last };
++protected:
++ static const hand_table table_1[];
++ static const AData table_2;
++private:
++ void foo (void);
++};
++
++const hand_table Agent::table_1[] =
++{
++ {0, &Agent::table_2},
++ {first, &Agent::foo},
++ {last, &(hand)Agent::foo} // ERROR - // ERROR -
++}; // ERROR - // ERROR -
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/13523.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/13523.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/13523.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/13523.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// 981203 bkoz
++// g++/13523
++// Build don't link:
++
++template<typename T> class latin_america;
++
++class peru
++{
++ friend class latin_america<int>; // Particular template class friend works
++ template<class T> friend class latin_america; // This does not work.
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// 981203 bkoz
++// g++/13908
++// Build don't link:
++
++class chile
++{
++public:
++protected:
++private:
++};
++
++typedef void (chile::* pmf) ();
++
++void* foo;
++
++void bar (chile* pobj, pmf pmethod)
++{
++ //-edg: expected member name
++ //-g++: taking address of bound pointer-to-member expression
++ foo = (void*) &(pobj->*pmethod); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14139.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14139.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14139.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14139.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// 981203 bkoz
++// g++/14309
++// test for global functions, mf's, and templatized mf's.
++// Build don't link:
++
++static int fooe_1(void) { return 5; }
++static int fooe_2(int x = fooe_1()) { return x; }
++
++struct antigua {
++ static int& foo_1();
++ static int foo_2(int& x = antigua::foo_1());
++ static int foo_3(int x = fooe_2());
++};
++
++template <typename T>
++ struct jamacia {
++ static int& foo_1();
++ static int foo_2(int& x = antigua::foo_1());
++ static int foo_3(int x = fooe_2());
++ };
++
++template class jamacia<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14664-1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14664-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14664-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14664-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// 981203 bkoz
++// g++/14664 - test
++// Build don't link:
++// Special g++ Options: -fconst-strings
++
++char foo[26];
++
++void bar()
++{
++ //-g++: incompatible types in assignment of 'const char[]' to 'char[]'
++ //-edg: expression must be a modifiable lvalue
++ foo = "0123456789012345678901234"; // ERROR - // ERROR -
++}
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// 981203 bkoz
++// g++/14664 + test
++// Build don't link:
++// Special g++ Options: -fno-const-strings
++
++char foo[26];
++
++void bar()
++{
++ // the addition of the flag "-fno-const-string-literal" reverts to pre-ISO.
++ // -g++: ANSI C++ forbids assignment of arrays
++ foo = "0123456789012345678901234"; // WARNING -
++}
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14687.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14687.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/14687.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/14687.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// 981203 bkoz
++// g++/14687
++// excess errors test - XFAIL *-*-*
++
++#include <assert.h>
++unsigned int gtest;
++
++// 7.3.3 the using declaration
++
++// p 3
++struct belieze {
++ void f(char);
++ void g(char);
++ enum E { e };
++ union { int x; };
++};
++
++struct dominica: belieze {
++ using belieze::f;
++ void f(int i) { f('c'); } // calls belieze::f(char)
++ void g(int i) { g('c'); } // recursively calls dominca::g(int)
++};
++
++
++// p 6
++namespace A {
++ void f(int i) { gtest = 1; }
++}
++
++using A::f; //f is a synonym for A::f, that is for A::f(int)
++
++namespace A {
++ void f(char c) { gtest = 3; }
++}
++
++void foo(void) {
++ f('a'); //calls f(int), even though A::f(char) exits
++ assert (gtest = 1);
++}
++
++void bar(void) {
++ using A::f; //f is a synonm for A::f, that is for A::f(int) and A::f(char)
++ f('a'); //calls f(char)
++ assert (gtest = 3);
++}
++
++int main(void)
++{
++ foo();
++ bar();
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15054.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15054.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15054.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15054.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// 981203 bkoz
++// g++/15054
++// Build don't link:
++// Special g++ Options: -Wno-pointer-arith
++// note that -pedantic also turns on this warning
++
++void cuba(void) {
++ void* p;
++ p++;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15071.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15071.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15071.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15071.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// 981203 bkoz
++// g++/15071
++// gcc invocation fails to link in libstdc++
++
++#include <iostream.h>
++
++int main() {
++ cout<<"hi"<<endl;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// 981203 bkoz
++// g++/15309
++// Build don't link:
++// Special g++ Options: -Wnon-virtual-dtor -Weffc++
++
++class bahamian {
++public:
++ bahamian ();
++ ~bahamian ();
++};
++
++class miami : public bahamian
++{
++public:
++ miami ();
++ ~miami ();
++}; // WARNING - // WARNING -
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15309-2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15309-2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15309-2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15309-2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// 981203 bkoz
++// g++/15309
++// Build don't link:
++// Special g++ Options: -Wnon-virtual-dtor -Weffc++
++
++class bermuda {
++public:
++ virtual int func1(int);
++ ~bermuda();
++}; // WARNING - // WARNING -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15351-1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15351-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15351-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15351-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// 981203 bkoz
++// g++/15351 - test
++// Special g++ Options: -fno-const-strings
++
++#include <assert.h>
++
++bool gtest;
++
++struct acapulco {
++ acapulco(const char *) { gtest = false; }
++ acapulco(char *) { gtest = true; }
++};
++
++void foo(void)
++{
++ acapulco("some such string\n");
++}
++
++int main()
++{
++ foo();
++ if (!gtest)
++ assert (0);
++
++ return !gtest;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15351-2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15351-2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15351-2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15351-2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// 981203 bkoz
++// g++/15351 + test
++// Special g++ Options: -fconst-strings
++
++#include <assert.h>
++
++bool gtest;
++
++struct acapulco {
++ acapulco(const char *) { gtest = true; }
++ acapulco(char *) { gtest = false; }
++};
++
++void foo(void)
++{
++ acapulco("some such string\n");
++}
++
++int main()
++{
++ foo();
++ if (!gtest)
++ assert (0);
++
++ return !gtest;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15756-1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15756-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15756-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15756-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// 981203 bkoz
++// g++/15756 test1
++// Build don't link:
++// Special g++ Options: -Wsign-promo
++
++enum e_value { first = 0, next = 30 };
++
++struct sanjuan {
++ sanjuan(int value);
++ sanjuan(unsigned value);
++ friend sanjuan operator&(const sanjuan& x, const sanjuan& y);
++ friend int operator!=(const sanjuan& x, const sanjuan& y);
++};
++
++extern void mod_enum(e_value*);
++extern int a;
++
++void foo(void) {
++ e_value mod = first;
++ mod_enum(&mod);
++ if (mod != next)
++ ++a;
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15756-2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15756-2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15756-2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15756-2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// 981203 bkoz
++// g++/15756 test2
++// Build don't link:
++// Special g++ Options: -Wsign-promo
++// this test may only be valid for 32bit targets at present
++
++enum e_i {
++ vali
++}
++enum_int;
++
++enum e_ui {
++ valui = 0xF2345678
++}
++enum_uint;
++
++int i;
++unsigned int ui;
++
++struct caracas {
++ caracas(int);
++ caracas(unsigned int);
++ void foo();
++};
++
++int main ()
++{
++ caracas obj_ei ( enum_int ); // WARNING - // WARNING -
++ caracas obj_eui ( enum_uint ); // WARNING - // WARNING -
++ caracas obj_i ( i );
++ caracas obj_ui ( ui );
++
++ obj_ei.foo();
++ obj_eui.foo();
++ obj_i.foo();
++ obj_ui.foo();
++}
++
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15799.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15799.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15799.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15799.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// 981203 bkoz
++// g++/15799 test1
++// Build don't link:
++
++/*
++15799.cpp: In function `void foo()':
++15799.cpp:21: call of overloaded `sanjose({anonymous enum})' is ambiguous
++15799.cpp:13: candidates are: sanjose::sanjose(const sanjose &) <near match>
++15799.cpp:14: sanjose::sanjose(unsigned int)
++*/
++
++typedef char int_8;
++typedef unsigned long uint_32;
++
++class sanjose {
++public:
++ sanjose();
++ sanjose(const sanjose&);
++ sanjose(int_8 value); // ERROR - // ERROR -
++ sanjose(uint_32 value); // ERROR - // ERROR -
++};
++
++enum { first, last};
++
++void foo(void) {
++ sanjose obj(first); // ERROR - // ERROR -
++};
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// 981203 bkoz
++// g++/15800 - test
++// Build don't link:
++
++struct panama {
++ panama();
++ panama(panama &);
++ panama& operator=(panama&); // ERROR - // ERROR -
++};
++
++extern panama dig();
++
++void foo() {
++ panama obj;
++ obj = dig(); // ERROR - // ERROR -
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15800-2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15800-2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15800-2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15800-2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// 981203 bkoz
++// g++/15800 + test
++// Build don't link:
++
++struct panama {
++ panama();
++ panama(panama &);
++ panama& operator=(panama&);
++ panama& getref() { return *this; }
++};
++
++extern panama dig();
++
++void foo() {
++ panama obj;
++ obj = dig().getref();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15822.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15822.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/15822.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/15822.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// 981203 bkoz
++// g++/15822
++
++#include <assert.h>
++
++static unsigned int gcount;
++
++struct playahermosa {
++ playahermosa() { ++gcount; }
++ playahermosa(const playahermosa &) { ++gcount; }
++ ~playahermosa() { --gcount; }
++};
++
++struct playacoco {
++ playacoco(const playahermosa& = playahermosa()) { } //create a temporary
++};
++
++void foo(playacoco *) { }
++
++int main()
++{
++ playacoco bar[2];
++ foo(bar);
++ assert (gcount == 0);
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// 981203 bkoz
++// g++/16077
++// Build don't link:
++
++class nicaragua;
++struct colombia {
++ colombia();
++ colombia(const colombia &);
++ colombia(const nicaragua &);
++ colombia &operator= (const colombia&);
++};
++
++struct nicaragua {
++public:
++ nicaragua();
++ nicaragua(const nicaragua&);
++ operator colombia();
++};
++
++void peace(const colombia&); // WARNING - // WARNING -
++
++void foo(nicaragua& b) {
++ peace(b); // WARNING - // WARNING -
++}
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/16567.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/16567.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/16567.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/16567.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// 981203 bkoz
++// g++/16567
++// Build don't link:
++
++typedef bool Bool;
++typedef unsigned char Uint8;
++typedef unsigned short Uint16;
++typedef unsigned int Uint32;
++
++enum e_ms { third = 3, fourth = 4 };
++
++struct bitmask {
++ Uint8* anon1;
++ Uint32 anon2;
++ Uint8 anon3;
++ Uint8 here: 2;
++ Uint8 anon4: 2;
++ Uint8 anon5: 4;
++};
++
++struct control {
++ Uint8 foo_1();
++};
++
++inline Uint8 foo_2(bitmask* p) {
++ return p->here;
++}
++
++inline Uint8 control::foo_1() {
++ return foo_2((bitmask*) this);
++}
++
++void foo(void) {
++ control obj;
++ control *fp = &obj;
++ e_ms result;
++
++ result = (e_ms) fp->foo_1; // ERROR - // ERROR -
++}
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/17922.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/17922.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/17922.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/17922.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// 981204 bkoz
++// g++/17922
++// Build don't link:
++
++class base { };
++
++struct derived : public base {
++ derived (const derived&);
++ derived (const base&);
++};
++
++class tahiti {
++public:
++ static void mf (derived);
++};
++
++void foo (const derived aaa) {
++ tahiti::mf(aaa);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/17930.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/17930.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/17930.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/17930.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// 981204 bkoz
++// g++/17930
++// Build don't link:
++
++char const one[] = "test";
++char const two[] = one; // ERROR - // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/18208.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/18208.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/18208.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/18208.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// 981204 bkoz
++// g++/18208
++// Build don't link:
++
++typedef unsigned int uint_32;
++
++class puertorico {
++public:
++ void *f ();
++private:
++ uint_32 member;
++};
++
++void foo( )
++{
++ uint_32 ui;
++ puertorico obj;
++
++ // Bug using static_cast<>
++ ui = static_cast<uint_32>(obj); // ERROR - // ERROR -
++
++ // Bug when missing the pair of braces
++ ui = (uint_32) obj.f; // ERROR - // ERROR -
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/bool01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/bool01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/bool01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/bool01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,74 @@
++//980323 bkoz
++//test for bools with inclusive ors
++
++#include <assert.h>
++void bar ( bool x ) {};
++void bars ( short x ) {};
++
++/* 980326 bkoz this is not initialized and so can have indeterminate value. */
++#if 0
++int orb(){
++ bool y;
++ bar ( y );
++ int blob = ( 27 | int (y) );
++ return blob; //expect 27 or 0
++}
++#endif
++
++int orbtrue(){
++ bool y = true;
++ bar ( y );
++ int blob = ( 27 | int (y) );
++ return blob; //expect 27
++}
++
++int orbfalse(){
++ bool y = false;
++ bar ( y );
++ int blob = ( 27 | int (y) );
++ return blob; //expect 27
++}
++
++int orbfalse2(){
++ bool y = 0;
++ bar ( y );
++ int blob = ( 27 | int (y) );
++ return blob; //expect 27
++}
++
++int ors(){
++ short y = 1;
++ bars ( y );
++ int blob = ( 27 | int (y) );
++ return blob; //expect 27
++}
++
++
++int orus(){
++ unsigned short y = 1;
++ bars ( y );
++ int blob = ( 65539 | int (y) );
++ return blob; //expect 65539, will be 3 if done in us type
++}
++
++
++int main() {
++ int tmp;
++#if 0
++ tmp = orb();
++ assert (tmp == 27 || tmp == 0);
++#endif
++ tmp = orbtrue();
++ assert (tmp ==27);
++ tmp = orbfalse();
++ assert (tmp ==27);
++ tmp = orbfalse2();
++ assert (tmp ==27);
++ tmp = ors();
++ assert (tmp ==27);
++ tmp = orus();
++ assert (tmp == 65539);
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/bool02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/bool02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/bool02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/bool02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++//980324 bkoz
++//test for bool and bitwise ands
++
++#include <assert.h>
++
++
++void bar ( bool x ) {};
++void bars ( short x ) {};
++
++#if 0
++int andb(){
++ bool y;
++ bar ( y );
++ int blob = ( 27 & int (y) );
++ return blob; //expect 1 or 0
++}
++#endif
++
++int andbtrue(){
++ bool y = true;
++ bar ( y );
++ int blob = ( 27 & int (y) );
++ return blob; //expect 1
++}
++
++int andbfalse(){
++ bool y = false;
++ bar ( y );
++ int blob = ( 27 & int (y) );
++ return blob; //expect 0
++}
++
++int andbfalse2(){
++ bool y = 0;
++ bar ( y );
++ int blob = ( 27 & int (y) );
++ return blob; //expect 0
++}
++
++int ands(){
++ short y = 1;
++ bars ( y );
++ int blob = ( 27 & int (y) );
++ return blob; //expect 1
++}
++
++
++int main() {
++ int tmp;
++#if 0
++ tmp = andb();
++ assert (tmp == 1 || tmp == 0);
++#endif
++ tmp = andbtrue();
++ assert (tmp == 1);
++ tmp = andbfalse();
++ assert (tmp == 0);
++ tmp = andbfalse2();
++ assert (tmp == 0);
++ tmp = ands();
++ assert (tmp == 1);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++Makefile
++config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/friend01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/friend01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/friend01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/friend01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++//980610 bkoz
++// example 1: buggy
++
++class foo {
++public:
++ class bar;
++ int func(bar *);
++ class bar {
++ int st;
++ public:
++ bar(){st=12;}
++ ~bar(){}
++ friend int foo::func(bar *);
++ };
++ foo(){}
++ ~foo(){}
++};
++
++
++int foo::func(bar *obj) {
++ obj->st++;
++ return (obj->st);
++}
++
++void test02() {
++ foo obj_f;
++ foo::bar obj_b;
++
++ obj_f.func( &obj_b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/friend02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/friend02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/friend02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/friend02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++//980610 bkoz
++// example 2: ok
++
++class bar;
++class foo {
++public:
++ int func(bar *);
++ foo(){}
++ ~foo(){}
++};
++
++class bar {
++ int st;
++public:
++ bar(){st=12;}
++ ~bar(){}
++ friend int foo::func(bar *);
++};
++
++int foo::func(bar *obj) {
++ obj->st++;
++ return (obj->st);
++}
++
++void test02() {
++ foo obj_f;
++ bar obj_b;
++
++ obj_f.func( &obj_b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// prms-id: 12475
++
++#include <limits.h>
++
++#if LONG_MAX == 2147483647
++#define TEST 2147483648
++#elif LONG_MAX == 9223372036854775807
++#define TEST 9223372036854775808
++#else
++#error "Unsupported test -- add new constants."
++#endif
++
++enum huh { start =-TEST, next }; // WARNING -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/p13417.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/p13417.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/p13417.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/p13417.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Special g++ Options:
++// prms-id: 13417
++
++class Foo {
++public:
++ explicit Foo (int){}
++};
++Foo f(10);
++Foo blat() return f(4){}; //this should not give an error
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// prms-id: 13721
++
++class A
++{
++ public :
++ int a;
++};
++class B : public A
++{
++ public :
++ void cmp(int a, int b) {}
++ B(int a = 0)
++ {
++ cmp(A::a, a); //should not give warning
++ }
++};
++int main(void)
++{
++ return(1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/scope01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/scope01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/scope01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/scope01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++// Build don't link:
++// 980604 bkoz
++// 3.4.5 Class member access p 4
++// nested and non-nested calls, no dtors
++
++struct L {
++ int ii;
++ void foo(int a) {++a;}
++ struct Linner {
++ int ii_inner;
++ void foo_inner(int b) {++b;}
++ };
++};
++class A : public L {};
++class B : public L {};
++class C : public A, public B {};
++
++
++void foo() {
++ // straight call
++ C x;
++ x.A::ii = 5;
++ x.A::foo(x.A::ii);
++
++ // 5.1 Primary expressions
++ // p 8
++ // a nested name specifier that names a class,
++ // optionally followed by the keyword template and then followd by
++ // the name of a member of either that class or one of its base
++ // classes is a qualified-id. (3.4.3.1 describes their lookup.)
++
++ // 5.2.5 Class memember access
++
++ // p 3 if E1 has the type 'pointer to class X' then
++ // E1->E2 == (*(E1)).E32
++ // E1 == object-expression
++ // E2 == id-expression
++ // thus everything gets converted to the "." notation
++
++ // p 2
++ // the id-expression shall name a member of the class
++ // (object-expression) or of one of its base classes.
++
++ // p4 if E2 is a nested type (of the object-expression), tye
++ // expression E1.E2 is ill formed.
++
++ // try 1 nested call - ERROR
++#if 0
++ C x2;
++ x2.A::L::Linner::ii_inner = 6; //ERROR violates p2, does not name member of C
++ x2.A::L::Linner::foo_inner(x2.A::L::Linner::ii_inner);
++#endif
++
++ //try2: scoped method call -edg +acc +g++
++#if 1
++ C::A::Linner x2;
++ x2.A::Linner::ii_inner = 6;
++ x2.A::Linner::foo_inner(x2.A::Linner::ii_inner);
++#endif
++
++ //try 3: non-scoped method call -edg +acc +g++
++#if 0
++ C::A::L::Linner x3;
++ x3.ii_inner = 6;
++ x3.foo_inner(x3.ii_inner);
++#endif
++}
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/scope02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/scope02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/scope02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/scope02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,208 @@
++// Build don't link:
++//980529 bkoz
++//3.4.5 Class member access via pointer and non-pointer
++// non-nested dtor calls
++
++int counter = 0;
++
++struct X {
++ int rank;
++ X(int init = 64) : rank(init) { }
++ ~X() { ++counter; }
++ typedef X classtype;
++};
++typedef X globaltype;
++
++#if 0
++template <typename T>
++struct X_tem {
++ T rank;
++ X_tem(T init = T(64) ) : rank(init) { }
++ ~X_tem() { ++counter; }
++ typedef X_tem classtype_tem;
++};
++typedef X_tem<int> globaltype_tem;
++#endif
++
++
++
++
++int main(void)
++{
++ // 3.4.5 Class member access
++ // p 2
++ // if the id-expression in a class member access is an
++ // unqualified-id, and the type of the object expression is of class
++ // type C (or pointer to class type C), the unqualified-id is looked
++ // up in the scope of class C. If the type of the object-expression
++ // is of pointer to scalar type, the unqualified-id is looked up in
++ // the context of the complete postfix-expression.
++
++ // p 3
++ // if the unqualitified id is ~type-name, and the type of the object
++ // expression is of a class type C (or pointer to class type C), the
++ // type-name is looked up in the context of the entire
++ // postfix-expression and in the scope of class C. The type-name
++ // shall refer to a class-name. If type-name is found in both
++ // contexts, the name shall refer to the same class type. If the
++ // type of the object expression is of scalar type, the type-name is
++ // looked up in the complete postfix-expression.
++
++ typedef X localtype;
++
++ //
++ // 1 non-templatized, pointer, unqualified
++ //
++ X x01 ;
++ X *px = &x01;
++ px->~X();
++
++ X x02 (66);
++ px = &x02;
++ px->~localtype();
++
++ X x03 (68);
++ px = &x03;
++ px->~classtype(); //-g++ //p3: unqual-id lookup in object and postfix-expr
++
++ X x04 (70);
++ px = &x04;
++ px->~globaltype();
++
++
++ // p 1
++ // . . . the id-expression is first looked up in the class of the
++ // object-expression. If the identifier is not found, itis then
++ // looked up in the context of the entier postfix-expression and
++ // shall name a class or function template. If the lookup in the
++ // class of the object-expression finds a template, the name is also
++ // looked up in teh context of the entier postfix-expression and
++ // 1 if the name is not found, use the name from the object-expr
++ // 2 if the name found in postfix-expr != class template, use object-expr
++ // 3 if name found is class template, name must match object-expr or error
++
++ // p 4
++
++ // if the id-expr in a class member acess is a qualified-id, the
++ // id-expression is looked up in both the context of the entire
++ // postfix-expr and in the scope of the class of the object-expr. If
++ // the name is found in both contexts, the id-expr shall refer to
++ // the same entity.
++
++
++ //
++ // 2 non-templatized, pointer, qualified
++ //
++ X x05 ;
++ px = &x05;
++ px->X::~X();
++
++ X x06 (66);
++ px = &x06;
++ px->X::~localtype();
++
++ X x07 (68);
++ px = &x07;
++ px->X::~classtype(); // -edg
++
++ X x08 (70);
++ px = &x08;
++ px->X::~globaltype();
++
++ X x09 (66);
++ px = &x09;
++ px->localtype::~localtype();
++
++ X x10 (68);
++ px = &x10;
++ px->classtype::~classtype();
++
++ X x11 (70);
++ px = &x11;
++ px->globaltype::~globaltype();
++
++ X x12 (66);
++ px = &x12;
++ px->classtype::~localtype();
++
++ X x13 (68);
++ px = &x13;
++ px->globaltype::~localtype();
++
++ X x14 (70);
++ px = &x14;
++ px->localtype::~globaltype();
++
++ X x15 (70);
++ px = &x15;
++ px->classtype::~globaltype();
++
++ X x16 (70);
++ px = &x16;
++ px->localtype::~classtype(); //-edg
++
++ X x17 (70);
++ px = &x17;
++ px->globaltype::~classtype(); //-edg
++
++#if 0
++ //
++ // non-templatized, non-pointer
++ //
++ X xo5 ;
++ xo5.~X(); //unqualified
++
++ localtype xo6 (66);
++ xo6.~localtype();
++
++ X xo7 (68);
++ xo7.~classtype();
++
++ X xo8 (70);
++ xo8.~globaltype();
++
++
++ //
++ // templatized, pointer
++ //
++ X_tem<int> xto1 ;
++ X_tem<int> *pxt = &xto1;
++ pxt->~X_tem(); //unqualified
++
++ typedef X_tem<int> localtype_tem;
++ localtype_tem xto2 (66);
++ pxt = &xto2;
++ pxt->~localtype_tem();
++
++ //paragraph 2: unqualitifed id looked up in scope of post-fix expr if object
++ X_tem<int> xto3 (68);
++ pxt = &xto3;
++ pxt->~classtype_tem();
++
++ X_tem<int> xto4 (70);
++ pxt = &xto4;
++ pxt->~globaltype_tem();
++
++ //
++ // templatized, non-pointer
++ //
++ X_tem<int> xto5 ;
++ xto5.~X_tem(); //unqualified
++
++ localtype_tem xto6 (66);
++ xto6.~localtype_tem();
++
++ X_tem<int> xto7 (68);
++ xto7.~classtype_tem();
++
++ X_tem<int> xto8 (70);
++ xto8.~globaltype_tem();
++#endif
++ return 0;
++}
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,136 @@
++// Build don't link:
++// prms-id: 13911
++
++template<unsigned int N>
++class ref_counter {
++public:
++ ref_counter() : p_refcnt(new unsigned int(N)) {}
++ ref_counter(const ref_counter<N>& x) : p_refcnt(x.p_refcnt) {
++ ++*p_refcnt;
++ }
++ ref_counter& operator=(const ref_counter<N>& rhs) {
++ ++*rhs.p_refcnt;
++ decrement();
++ p_refcnt = rhs.p_refcnt;
++ return *this;
++ }
++ ~ref_counter() {decrement();}
++
++ bool unique() const {return *p_refcnt == N;}
++
++private:
++ unsigned int* p_refcnt;
++ void decrement() {
++ if (unique()) delete p_refcnt;
++ else --*p_refcnt;
++ }
++};
++
++template<class T, unsigned int N>
++class ref_pointer {
++public:
++
++ ref_pointer() : the_p(0) {}
++ ref_pointer(T* just_newed) : the_p(just_newed) {}
++ virtual ~ref_pointer() {if (unique()) delete the_p;}
++protected:
++ ref_pointer(T* the_p_arg, ref_counter<N>& ref_count_arg)
++ : the_p(the_p_arg), ref_count(ref_count_arg) {}
++
++public:
++
++ ref_pointer& operator=(const ref_pointer&);
++ ref_pointer& operator=(T*);
++ operator const T*() const {return the_p;}
++ T* operator()() {return the_p;}
++ T* operator()() const {return the_p;}
++ T& operator*() const {return *the_p;}
++ friend bool operator==(const ref_pointer<T, N>& lhs,
++ const ref_pointer<T, N>& rhs) {
++ return lhs.the_p == rhs.the_p;
++ }
++ friend bool operator!=(const ref_pointer<T, N>& lhs,
++ const ref_pointer<T, N>& rhs) {
++ return lhs.the_p != rhs.the_p;
++ }
++
++
++ bool unique() const {return ref_count.unique();}
++ bool isNull() const {return the_p==0;}
++
++protected:
++ ref_counter<N>& refCount() {return ref_count;}
++
++private:
++
++ ref_counter<N> ref_count;
++ T* the_p;
++};
++
++template<class T, unsigned int N>
++ref_pointer<T, N>& ref_pointer<T, N>::operator=(const ref_pointer<T, N>& rhs) {
++ if (the_p != rhs.the_p) {
++ if (unique()) delete the_p;
++ the_p = rhs.the_p;
++ ref_count = rhs.ref_count;
++ }
++ return *this;
++}
++
++
++template<class T, unsigned int N>
++ref_pointer<T, N>& ref_pointer<T, N>::operator=(T* just_newed) {
++ if (unique()) delete the_p;
++ the_p = just_newed;
++ ref_count = ref_counter<N>();
++ return *this;
++}
++
++
++
++template<class T>
++class CountedObjPtr : public ref_pointer<T, 1> {
++public:
++ CountedObjPtr() {}
++ CountedObjPtr(T* just_newed) : ref_pointer<T, 1>(just_newed) {}
++ CountedObjPtr(T* the_p_arg, ref_counter<1>& ref_count_arg)
++ : ref_pointer<T, 1>(the_p_arg, ref_count_arg) {}
++ CountedObjPtr<T>& operator=(T* rhs) {
++ ref_pointer<T, 1>::operator=(rhs);
++ return *this;
++ }
++ CountedObjPtr<T>& operator=(const CountedObjPtr<T>& rhs) {
++ ref_pointer<T, 1>::operator=(rhs);
++ return *this;
++ }
++ T* operator->() const {return (*this)();}
++
++};
++
++
++
++
++
++//instantiating type
++
++class TSObservable;
++
++class TSObserver {
++public:
++
++ enum TSType { NormalTS, UpYldCrvTS, DownYldCrvTS, ZeroVolTS };
++
++ virtual ~TSObserver() {}
++
++ virtual void update(TSObservable* theChangedObservable) = 0;
++ virtual TSType key() const { return myKey; }
++ virtual TSType& key() { return myKey; }
++protected:
++ TSObserver(TSType myKeyArg) : myKey(myKeyArg) {}
++ TSType myKey;
++};
++
++
++
++//now try to instantiate
++template class CountedObjPtr<TSObserver>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++// Build don't link:
++//980519 bad error from nathan
++//$ egcs -fhonor-std -nostdinc -c redef.C
++//redef.C:56: redefinition of default argument for `class _Traits'
++
++template<class _CharT> struct char_traits;
++template<class _CharT> struct char_traits { };
++template<> struct char_traits<char>;
++template<> struct char_traits<char> { };
++
++template<class _CharT, class _Traits = char_traits<_CharT> > class istreambuf_iterator;
++
++
++template<class _CharT, class _Traits>
++ class istreambuf_iterator
++{
++ public:
++ typedef _Traits traits_type;
++ class _Proxy;
++ public:
++ inline istreambuf_iterator() throw();
++ inline istreambuf_iterator(const _Proxy& __p) throw();
++};
++
++
++template <class _CharT, class _Traits>
++ class istreambuf_iterator<_CharT,_Traits>::_Proxy
++{
++ public:
++ _CharT operator*();
++
++ //bug -g++ w/ decl "redef", no decl no prob.
++ //ok -edg: no warnings
++ friend class istreambuf_iterator; // XXX OK?
++
++ //bug -g++ w/ decl "redef", no decl no prob.
++ //ok -edg: no warnings
++ //friend class istreambuf_iterator<_CharT,_Traits>;
++
++ //bug -g++ w/ decl "redef", no decl no prob.
++ //ok -edg: declaration of "_CharT" and "_Traits" hides template parameter
++ //template <class _CharT, class _Traits> friend class istreambuf_iterator;
++
++ //ok -g++
++ //ok -edg
++ //friend class istreambuf_iterator<_CharT>;
++
++};
++
++
++
++//explicit instantiation of a nested class
++template class istreambuf_iterator<char, char_traits<char> >::_Proxy;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,209 @@
++// Build don't link:
++// 980808-980824 bkoz
++// template parameter redeclaration bugs
++
++// 14.1 Template parameters
++// p 13
++// The scope of a template-parameter extens from its point of
++// declartion until the end of its template. In particular, a
++// template-parameter can be used in the declaration of subsequent
++// template-parameters and their default arguments.
++
++// 14.6.1 Locally declared names
++// p 4
++// A template-parameter shall not be redeclared within its scope
++// (including nested scopes). A template-parameter shall not have the
++// sname name as the template name.
++
++
++// 01
++// declared friend template
++template <class T4>// ERROR - .*
++class Xone {
++protected:
++ T4* next;
++ T4* prev;
++ T4 value;
++public:
++ Xone(): next(0), prev(0), value(1999){}
++ Xone(T4 init): value(init) {}
++
++ // these are ok:
++ // can also do template-decl and then can ditch the foward-declaration
++ // template <class T5> friend bool isequal (Xone<T5>& lhs, Xone<T5>& rhs);
++ // this is not ok:
++ template <class T4> friend bool isequal (Xone<T4>& lhs, Xone<T4>& rhs);// ERROR - .*
++};
++
++
++// 02
++// nested template class
++template <class T6>// ERROR - .*
++class Xtwo {
++protected:
++ T6* next;
++ T6* prev;
++ T6 value;
++public:
++ Xtwo(): next(0), prev(0), value(1999){}
++ Xtwo(T6 init): value(init) {}
++
++ template <class T6> class nested {// ERROR - .*
++ T6 value;
++ public:
++ nested(): value( T6(0)) {}
++ };
++};
++
++
++// 03
++// member templates
++template <class T8>// ERROR - .*
++class Xthree {
++protected:
++ T8* next;
++ T8* prev;
++ T8 value;
++public:
++ Xthree(): next(0), prev(0), value(1999){}
++ Xthree(T8 init): value(init) {}
++
++ template <class T8> T8 comp_ge(T8 test) {// ERROR - .*
++ T8 local_value;
++ if (local_value > value)
++ return local_value;
++ else
++ return value;
++ }
++};
++
++
++// 04
++// local names (14.6.1 p 4)
++template <class T10, int i> struct Xfour {// ERROR - .*
++ int T10; // ERROR - .*
++ void f(){
++ char T10;
++ }
++};
++
++
++// 05
++// using different tempate-parms for out-of-line defs
++template <class T12, int i> struct Xfive {
++ void f();
++};
++
++template <class T13, int i> void Xfive<T13,i>::f() {// ERROR - .*
++ int T13; // ERROR - .*
++ int T12; //should be ok
++}
++
++
++// 06
++// multiple names at the same level
++template <class T14, class T14> class Xsix { // ERROR - .*
++private:
++public:
++ void f();
++};
++
++
++// 07
++// multiple names, one in template parameter one in class-name
++template <class T12> class T12; // ERROR - .*
++
++
++// 08
++// with multiple template params, and second (third) one is redeclared
++template <class T16, int i, class T161> class Xseven { // ERROR - .*
++private:
++ char T161; // ERROR - .*
++public:
++ template <class U>
++ friend bool fooy(U u);
++
++ template <class T161>
++ friend bool foo(T161 u)
++ {
++ Xseven<T161, 5, int> obj;
++ return (obj.inst == u.inst);
++ }
++
++};
++
++
++// 09
++// check for correct scoping of member templates
++template <class T>
++struct S1
++{
++ template <class U>
++ void f(U u)
++ {
++ S1<U> s2u(u);
++ s2u.g();
++ }
++
++ template <class U> //ok
++ void f2(U u)
++ {
++ S1<U> s2u(u);
++ s2u.g();
++ }
++
++};
++
++
++// 10
++// check for non-type parameters, should still be able to redeclare?
++// local names (14.6.1 p 4)
++template <class T18, int i> class Xten {// ERROR - .*
++ float i; // ERROR - .*
++};
++
++
++// 11
++// declared friend template, non-type parameters
++template <long l>// ERROR - .*
++class Xeleven {
++public:
++ template <long l> friend bool isequal (Xeleven<5> lhs, Xeleven<5> rhs); // ERROR - .*
++};
++
++
++
++// 12
++// nested template class, non-type parameters
++template <long l>// ERROR - .*
++class Xtwelve {
++public:
++ template <long l> class nested {// ERROR - .
++ long value;
++ public:
++ nested(): value(0) {}
++ };
++};
++
++
++// 13
++// member templates, non-type parameters
++template <long l>// ERROR - .*
++struct Xthirteen {
++ template <long l> long comp_ge(long test) {// ERROR - .
++ long local_value;
++ if (local_value > value)
++ return local_value;
++ else
++ return value;
++ }
++};
++
++
++
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,182 @@
++// Build don't link:
++// 980827 bkoz
++// template parameter redeclaration bugs, part two:
++// template template params and expanded template non-type parms
++
++// 14.1 Template parameters
++// p 13
++// The scope of a template-parameter extens from its point of
++// declartion until the end of its template. In particular, a
++// template-parameter can be used in the declaration of subsequent
++// template-parameters and their default arguments.
++
++// 14.6.1 Locally declared names
++// p 4
++// A template-parameter shall not be redeclared within its scope
++// (including nested scopes). A template-parameter shall not have the
++// same name as the template name.
++
++// 14
++// declared friend template (v3, template type parameters)
++template <class T4>// ERROR - .*
++class Xfourteen {
++protected:
++ T4 value;
++public:
++ Xfourteen(T4 init): value(init) {}
++ template <template <typename T4> class T5> // ERROR - .*
++ friend bool isequal (Xfourteen<int>& lhs, Xfourteen<int>& rhs);
++};
++
++
++// 15
++// nested template class (v3, template type parameters)
++template <class T6>// ERROR - .*
++class Xfifteen {
++protected:
++ T6 value;
++public:
++ Xfifteen(T6 init): value(init) {}
++
++ template <template <typename T6> class T7> class nested {// ERROR - .*
++ int value;
++ public:
++ nested(): value( int(0)) {}
++ };
++};
++
++
++// 16
++// member templates (v3, template type parameters)
++template <class T8>// ERROR - .*
++class Xsixteen {
++protected:
++ T8 value;
++public:
++ Xsixteen(T8 init): value(init) {}
++
++ template <template <typename T8> class T9> int comp_ge(int test) {// ERROR - .*
++ int local_value;
++ if (local_value > value)
++ return local_value;
++ else
++ return value;
++ }
++};
++
++
++// 17
++// declared friend template (v4, template type parameters on the class)
++template <typename T9> class tem_base {
++public:
++ T9 value;
++};
++
++template <typename T10, template <typename T12> class C10>
++class Xseventeen {
++protected:
++ C10<T10> value;
++public:
++ Xseventeen(){}
++ template <typename T12> // ok??
++ friend bool isequal (Xseventeen<T10, tem_base>& lhs,
++ Xseventeen<T10, tem_base>& rhs);
++};
++
++//template class Xseventeen<int, tem_base>;
++
++
++// 18
++// more template template redecl tests
++template <typename T14, template <typename T15> class C12>// ERROR - .*
++class Xeighteen {
++protected:
++ C12<T14> value;
++ int C12; // ERROR - .*
++};
++
++
++// 19
++// more template template redecl tests
++template <typename T16, template <typename T17> class C14>// ERROR - .*
++class Xnineteen{
++protected:
++ C14<T16> value;
++ template <class C14> class nested {// ERROR - .*
++ T16 value;
++ public:
++ nested(): value( T16(0)) {}
++ };
++};
++
++
++// 20
++// local names (14.6.1 p 4) part two, variable names as template param
++template <class T17, int i> struct Xtwenty {
++ void f(){
++ T17 my_type; //ok
++ for (int j = 0; j < 5; ++l)
++ {
++ T17 my_type; //ok
++ ++my_type;
++ }
++ }
++};
++
++
++// 14.1 Template parameters
++// p 4
++// A non-type templat- parameter shall have one of the following
++// (optionally cv-qualified) types:
++// integral or enumeration type
++// pointer to object or pointer to function
++// referenct to object or referece to function
++// pointer to member
++
++// 21
++// non-type template parameters v1: enum
++enum my_enum {my_A = 45, my_B, my_C};
++
++template <my_enum T18> class Xtwentyone {// ERROR - .*
++ float T18; // ERROR - .*
++};
++
++
++// 22
++// non-type template parameters v1: pointer to object
++struct base {
++ int gcount;
++ int ret_gcount() {return gcount;}
++};
++
++template <class T20, base* b> class Xtwentytwo {// ERROR - .*
++ float b; // ERROR - .*
++};
++
++
++// 23
++// non-type template parameters v2: reference to object
++template <class T20, base& b2> class Xtwentythree {// ERROR - .*
++ float b2; // ERROR - .*
++};
++
++
++// 24
++// non-type template parameters v3: pointer to member
++template <class T20, int base::* b3> class Xtwentyfour {// ERROR - .*
++ float b3; // ERROR - .*
++};
++
++
++// 25
++// non-type template parms that use push_class_level
++template <class T22> void f1() {// ERROR - .*
++ struct foo {
++ enum T22 { un, du, toi }; // ERROR - .*
++ };
++}
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++// 980924 bkoz
++// just a quick test for export, to make sure we are warning for it.
++// CHANGE ME when it's supported
++// Build don't link:
++
++
++// 14 Templates
++//p 6
++// A namespace-scope declaration or definintion of a non-line function
++// template, a non-inline member function template, a non-inline
++// member function of a class template or a static data member of a
++// class template may be preceeded by the export keyword. If such a
++// template is defined in the same translation unit in which it is
++// declared as exported, the definition is considered to be
++// exported. The first declaration of the template containing the
++// export keyword must not follow the definition. (meaning that export
++// can't beredeclared as non-export??)
++
++// 1
++// template definition
++export template <class T> // WARNING -
++bool templ_one(T a) {
++ if (a > 0)
++ return true;
++ else
++ return false;
++}
++
++
++// 2
++// static data, mf, mf template
++template <class T>
++class X_one {
++ unsigned short id;
++ T type;
++public:
++ static const bool is_specialized ;
++
++ X_one(const unsigned short& us = 5): id(us), type(T(0)) {}
++ unsigned short ret_id ();
++ template <class T2> bool compare_ge(T2 test);
++};
++
++export template <class T> // WARNING -
++const bool X_one<T>::is_specialized = false;
++
++export template <class T> // WARNING -
++unsigned short X_one<T>::ret_id() {
++ return id;
++}
++
++export template <class T> template <class T2> // WARNING -
++bool compare_ge(T2 test) {
++ if (test > type)
++ return true;
++ return false;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// 980945 bkoz
++// test for correct operators at link time
++
++/*
++/tmp/cca211431.o: In function `void blah<foo<int> >(foo<int> const &)':
++/tmp/cca211431.o(.void gnu.linkonce.t.blah<foo<int> >(foo<int> const &)+0x1e): undefined reference to `void x<int>(int const &)'
++*/
++
++template<class T>
++class foo {
++public:
++ foo () {}
++ friend void x (const T &) { }
++};
++
++template<class T>
++void blah (const T &) {
++ T y;
++ x (4);
++};
++
++int main () {
++ const foo<int> v;
++ blah (v);
++}
++
++/*
++fno-exceptions -fno-rtti
++
++1.98r1.o:
++00000000 W __t3foo1Zi
++00000000 W blah__H1Zt3foo1Zi_RCX01_v
++00000000 t gcc2_compiled.
++00000000 T main
++ U x__H1Zi_RCX01_v
++
++1.egcs.o:
++00000000 W __t3foo1Zi
++00000000 W blah__H1Zt3foo1Zi_RCX01_v
++00000000 t gcc2_compiled.
++00000000 T main
++00000000 W x__FRCi
++
++
++the reason this goes away at -O is because the U or W function is
++elided completely.
++
++*/
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem07.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem07.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/tem07.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/tem07.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++
++template <class T>
++class Foo
++{
++public:
++ Foo(const T&);
++ Foo(const T&, const T&);
++};
++
++template <class T>
++Foo<T>::Foo(const T& t0)
++{
++}
++
++template <class T>
++Foo<T>::Foo(const T& t0, const T& t1)
++{
++}
++
++template Foo<int>::Foo(const int& t0);
++
++
++int main (void) {
++ return 0;
++}
++
++
++
++
++
++
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/typedef01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/typedef01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/typedef01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/typedef01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// Build don't link:
++//980205 bkoz
++
++//7.1.3 the typedef specifier
++
++
++//p1
++typedef int MILES, *KLICKSP;
++MILES distance;
++extern KLICKSP metricp;
++
++//p2--can redefine to same type
++typedef struct s { /* ... */ } s;
++typedef int I;
++typedef int I;
++typedef I I;
++
++//p3--cannot redefine to a different type in a given scope
++class complex2 { /* ... */ };// ERROR - .*
++typedef int complex2;// ERROR - .*
++typedef int complex3;// ERROR - .*
++class complex3 { /* ... */ };// ERROR - .*
++
++
++//p4
++/*
++4 A typedef-name that names a class is a class-name (_class.name_). If
++ a typedef-name is used
++ 1) following the class-key in an elaborated-type-specifier
++ 2) or in the class-head of a class declaration
++ 3) or is used as the identifier in the declarator for a
++ constructor or destructor declaration
++ the program is ill-formed. [Example:
++*/
++struct S {
++ S();
++ ~S();
++};
++
++typedef struct S T;
++
++S a = T(); // OK
++struct T * p; // ERROR - using typedef after struct
++
++//case01
++typedef bool short;// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/typedef03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/typedef03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/typedef03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/typedef03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Build don't link:
++//980526 bkoz
++// reduced testcase for 980511 brendan qt bug
++
++
++class QTextStream
++{
++public:
++ QTextStream();
++ virtual ~QTextStream();
++
++ enum {
++ skipws = 0x0001,
++ left = 0x0002,
++ right = 0x0004,
++ internal = 0x0008,
++ bin = 0x0010,
++ oct = 0x0020,
++ dec = 0x0040,
++ hex = 0x0080,
++ showbase = 0x0100,
++ showpoint = 0x0200,
++ uppercase = 0x0400,
++ showpos = 0x0800,
++ scientific= 0x1000,
++ fixed = 0x2000
++ };
++
++ static const int basefield;
++ static const int adjustfield;
++};
++
++typedef QTextStream QTS;
++const int QTS::basefield = (QTS::bin | QTS::dec | QTS::hex) ;
++const int QTS::adjustfield = QTS::left | QTS::right | QTS::internal;
++#if 0
++#define QTS QTextStream
++const int QTS::basefield = (QTS::bin | QTS::dec | QTS::hex) ;
++const int QTS::adjustfield = QTS::left | QTS::right | QTS::internal;
++#endif
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/typeid01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/typeid01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/typeid01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/typeid01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++// 980617 bkoz
++// typeid for local types
++// typeid bool vs int and enum vs int
++
++#include <typeinfo>
++#ifdef DEBUG_ASSERT
++#include <assert.h>
++#endif
++
++// 4: local class in non-main function
++
++void test1 (void) {
++ bool class_p = false;
++ class X2 {
++ private:
++ unsigned int counter;
++ public:
++ X2 (unsigned int i = 35): counter(i) {}
++ ~X2(){}
++ unsigned int ret_counter() {return counter;}
++ };
++ X2 obj_1;
++ class_p = typeid(X2) == typeid(obj_1);
++}
++
++int main ()
++{
++ // 1: simple
++#if 1
++ bool enum_p = false;
++ enum E { A, B, C };
++ enum_p = typeid(A) == typeid(E);
++#ifdef DEBUG_ASSERT
++ assert (enum_p);
++#endif
++#endif
++
++ // 2: complex
++#if 0
++ bool enum2_p = false;
++ bool int_p = false;
++ bool bool_p = false;
++ enum E2 { A2, B2};
++ enum2_p = typeid(A2) == typeid(E2);
++ int_p = typeid(int) == typeid(E2);
++ bool_p = typeid(bool) == typeid(E2);
++#ifdef DEBUG_ASSERT
++ assert (enum2_p);
++ assert (!int_p);
++ assert (!bool_p);
++#endif
++#endif
++
++ // 3: local class
++ bool class_p = false;
++ class X {
++ private:
++ unsigned int counter;
++ public:
++ X (unsigned int i = 35): counter(i) {}
++ ~X(){}
++ unsigned int ret_counter() {return counter;}
++ };
++ X obj_1;
++ class_p = typeid(X) == typeid(obj_1);
++
++ // 4: local class in function
++ test1();
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,98 @@
++// Build don't link:
++// Special g++ Options: -Wall -Weffc++
++
++//1 g++/12952 un-named variables in a catch block
++//Wall or Wunused should not give warnings here
++template <class T>
++void f (void) {
++ try
++ {
++ }
++
++ catch( int)
++ {
++ }
++};
++
++//
++//2 g++/12923 __attribute__((__unused__)) not working for objects
++//Weffc++ or Wunused should not report the object as an error
++class C {
++ public:
++ C();
++};
++
++void f (void){
++ C x __attribute__ ((__unused__));
++ int y __attribute__ ((__unused__));
++}
++
++//
++//3 g++/12982 lock should not give error here, as above
++void setLock ();
++void clearLock ();
++
++template <class T>
++class test {
++public:
++ class lock
++ {
++ public:
++ lock () { setLock(); }
++ ~lock () { clearLock(); }
++ };
++
++ static void f (void)
++ {
++ lock local __attribute__ ((__unused__));
++ }
++
++};
++
++
++//
++//4 g++/12988 neither Mutex nor AutoMutex varibles should give warnings here
++//compile with -Weffc++ or -Wunused depending on post or pre 97r1
++class Mutex {
++private:
++ long counter;
++public:
++ virtual long retcntr() {return counter;};
++ Mutex(int i = 0): counter(i) {};
++ virtual ~Mutex() {};
++} __attribute__ ((__unused__));
++
++class AutoMutex: public Mutex{
++private:
++ long counter2;
++public:
++ long retcntr() {return counter2;};
++ AutoMutex(int i = 0): counter2(i) {};
++ virtual ~AutoMutex() {};
++} __attribute__ ((__unused__));
++
++
++template <class T>
++int foofunc(T x){
++ Mutex sm(2);
++ AutoMutex m(&sm);
++ return 0;
++};
++
++
++//5 sanity check to make sure other attributes cannot be used
++class Mutex2 {
++private:
++ long counter;
++public:
++ virtual long retcntr() {return counter;};
++ Mutex2(int i = 0): counter(i) {};
++ virtual ~Mutex2() {};
++} __attribute__ ((warn)); // WARNING -
++
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++// 980413 bkoz
++// from g++/15307, tests for -Wredundant-decls
++// for friend functions and functions
++// Build don't link:
++//Special g++ Options: -Wredundant-decls
++
++
++extern int foo(const char *);
++
++class A
++{
++ friend int foo(const char *);
++ int a;
++};
++
++class B
++{
++ friend int foo(const char *);
++ int foo2() {return b;}
++ int b;
++};
++
++class C
++{
++ friend int foo(const char *);
++ friend int foo(const char *); // WARNING -
++ int foo2() {return b;}
++ int b;
++};
++
++class D
++{
++public:
++ int foo2() {return b;}
++ int foo2() {return b;} // ERROR -
++ int b;
++};
++
++class E
++{
++public:
++ int foo2();
++ int foo2(); // ERROR -
++ int b;
++};
++
++extern int foo3(const char *); // WARNING -
++extern int foo3(const char *); // WARNING -
++
++
++
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// 980420 bkoz
++// from g++/15307, tests for -Wredundant-decls for decls
++// Build don't link:
++// Special g++ Options: -Wredundant-decls
++
++//shouldn't crash
++extern unsigned char *foo5[];
++extern unsigned char *foo5[];
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.benjamin/warn04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.benjamin/warn04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// 980903 bkoz
++// make sure this option works
++// Build don't link:
++// Special g++ Options: -Wno-non-template-friend
++
++
++template<class T> class task {
++ friend void next_time(); //shouldn't give a warning
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/array1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/array1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/array1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/array1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++char *stuff() {
++ char array[10]; // WARNING -
++
++ return array;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/array2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/array2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/array2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/array2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++extern const int a[];
++extern const int a[];
++extern const int a[];
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/case1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/case1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/case1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/case1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// prms-id: 9028
++class Foo;
++
++int main()
++{
++ int i=0;
++ switch (i)
++ {
++ case ((Foo *)0): // ERROR -
++ case ((Foo *)1): // ERROR -
++ break;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/cond1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/cond1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/cond1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/cond1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++// prms-id: 9866
++class TChar
++ {
++public:
++ explicit inline TChar(unsigned int aChar);
++ inline operator unsigned int() const;
++private:
++ unsigned int iChar;
++ };
++inline TChar::TChar(unsigned int aChar)
++ : iChar(aChar)
++ {}
++inline TChar::operator unsigned int() const
++ {return(iChar);}
++
++class TDes8
++ {
++public:
++ inline const unsigned char &operator[](int anIndex) const;
++ const unsigned char &AtC(int anIndex) const;
++ };
++
++inline const unsigned char &TDes8::operator[](int anIndex) const
++ {return(AtC(anIndex));}
++
++
++void doExponent(TDes8 &aDigBuf)
++ {
++ 2 ? TChar(aDigBuf[2]) : '0';
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/delete1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/delete1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/delete1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/delete1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// prms-id: 7330
++#include <stddef.h>
++int size = 0;
++
++struct X {
++ int x;
++ void *operator new[](size_t sz) throw() {
++ size = sz;
++ return 0;
++ }
++ void operator delete[] (void *vp) { ::operator delete(vp); }
++};
++int main()
++{
++ X (*px) [10];
++
++ px = new X[5][10];
++
++ delete [] px;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/extern_C.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/extern_C.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/extern_C.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/extern_C.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++extern "C" {
++ class A {
++ public:
++ void a();
++ };
++};
++
++void A::a() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/friend1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/friend1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/friend1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/friend1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++class C {
++public:
++ static friend int f(); // ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// prms-id: 5274
++class VHDLIdentifier;
++
++class VHDLPackageProtoRep {
++public:
++ int thing();
++private:
++ virtual VHDLIdentifier &actual_name() ;
++};
++extern void form(const char *format, ... );
++int
++VHDLPackageProtoRep::thing()
++{
++ form("package `%s'", (char *)actual_name()); // ERROR - can't convert from incomplete type
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/inherit1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/inherit1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/inherit1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/inherit1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++class A {
++char str[10];
++public:
++ char* m1 () { return str;};
++};
++
++class C : public A {
++public:
++};
++
++class B : public A {
++public:
++ char* m1 () { C::m1(); return ""; } // ERROR -
++};
++
++int main () {
++A a;
++B b;
++C c;
++
++a.m1();
++c.m1();
++b.m1();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++class A {
++public:
++ void z();
++ A(void) {}
++private:
++ A(const A &) { abort(); } // ERROR -
++ const A& operator =(const A &) { abort(); }
++};
++
++class B : public A {
++public:
++ B(void) {}
++};
++
++void f(B b) {
++};
++
++void g() {
++ B h;
++ f(h); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/nested1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/nested1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/nested1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/nested1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++ class A {
++ class B {
++ typedef long T;
++ int i;
++ };
++ };
++ class C {
++ class B {
++ typedef float T;
++ int i;
++ };
++ };
++
++C::B::T a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/packed1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/packed1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/packed1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/packed1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++int
++main() {
++ struct s
++ {
++ int a;
++ short b;
++ } __attribute__((packed)) t;
++
++ if (sizeof (t) != (sizeof(int)+sizeof(short)))
++ {
++ return 1;
++ }
++ else
++ {
++ return 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/protected1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/protected1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/protected1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/protected1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Build don't link:
++class A {
++public:
++ int i;
++ A(int j) : i(j){}
++};
++
++class B : protected A {
++public:
++ B(int j) : A(j){}
++ void f(){
++ A k(*this);
++ }
++};
++
++class C : protected B {
++public:
++ C(int j) : B(j){}
++ void f();
++
++ void g(){
++ A k(i);
++ }
++};
++
++
++class D : public C {
++public:
++ D(int w) : C(i) {}
++ void j() { A k(*this); }
++ void h() { i=3; }
++};
++
++void C::f() {
++ A k(*this);
++}
++
++B b(3);
++int
++main() {
++ A *z = &b; // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/static1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/static1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/static1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/static1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++class A {
++ public:
++ static int a;
++};
++
++class B : public A {
++ public:
++ static int b;
++};
++
++int B::a; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// prms-id: 10038
++template < class Referencee >
++class Referencer
++{
++public:
++ Referencer (Referencee const * pReferencee);
++};
++
++template <class T>
++class Array
++{
++public:
++ int addElement (T const & e);
++ int addElement ();
++};
++
++class ScenarioGroup;
++
++class ScenarioSet : public Array< Referencer<ScenarioGroup> >
++{
++ typedef Array< Referencer<ScenarioGroup> > arrayBase;
++ void addElement(ScenarioGroup *group)
++ {
++ arrayBase::addElement(group);
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// Build don't link:
++// prms-id: 10046
++template <class T>
++class Array
++{
++public:
++ T const & operator[] (int i) const;
++};
++
++class Referenceable {};
++
++template < class Referencee >
++class Referencer
++{
++public:
++ operator Referencee *() const { return i_referencee; }
++
++protected:
++ Referencee* i_referencee;
++};
++
++class ScenarioGroup {};
++
++class ScenarioSpace;
++
++class ScenarioSet : public Referenceable,
++ public Array< Referencer<ScenarioGroup> >
++{
++public:
++ ScenarioSet& operator=(ScenarioSet const & s);
++};
++
++class ScenarioSpace : public Referenceable,
++ public Array< Referencer<ScenarioSet> >
++{
++};
++
++class ScenarioSetNameSelector
++{
++public:
++ bool operator () (ScenarioSpace &space)
++ {
++ int idx;
++ i_set = space[idx];
++ return false;
++ }
++private:
++ ScenarioSet *i_set;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// Build don't link:
++// prms-id: 9979
++
++template < class Referencee >
++class Referencer
++{
++public:
++ Referencer() {}
++};
++
++template <class T>
++class List
++{
++public:
++ List() {}
++};
++
++template<class T, class KEY>
++class Dictionary
++{
++public:
++ Dictionary() : i_buckets (new List<T>[1234]) {}
++ ~Dictionary() { delete [] i_buckets; }
++
++ List<T> * i_buckets;
++};
++
++class Exchangeable {};
++class ExchangeableHandle {};
++
++class ExchangeableList
++ : public Dictionary<Referencer<Exchangeable>, ExchangeableHandle>
++{
++public:
++ ExchangeableList(int size=0);
++};
++
++class ObjectExchange
++{
++public:
++ ObjectExchange() {};
++
++ ExchangeableList i_theWatchList; // Instruments being monitored
++};
++
++int
++main()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bob/template4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bob/template4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// prms-id: 10166
++
++template <class A>
++class B {
++ public:
++ int f() {
++ for(int x=0;x<10;x++) {
++ continue;
++ return 1;
++ }
++ return 0;
++ }
++ private:
++ A w;
++};
++
++int
++main() {
++ B<int> c;
++ return c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed abstract-functions
++class O
++{
++public:
++ virtual int c()=0;
++};
++
++class I: public O
++{
++};
++
++class S: public virtual I
++{
++public:
++ int c();
++ virtual int v()=0;
++};
++
++class D: public S
++{
++ int v();
++};
++
++D *p=new D();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/access1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/access1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/access1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/access1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed access-control
++class Base
++{
++protected:
++ virtual void DoSomething() = 0;
++};
++
++class Fibber : public Base
++{
++public:
++ void DoBP() {
++ DoSomething();
++ }
++};
++
++class Flat : public virtual Fibber
++{
++public:
++ void DoIt() {
++ DoSomething();
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/alignof.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/alignof.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/alignof.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/alignof.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed extensions
++struct bar { int bit : 1; };
++
++void foo (int *r, bar t)
++{
++ // doing alignof on a bit-field should be illegal
++ __alignof__ (t.bit);// ERROR - .*
++
++ // both of these (a regular ref and an INDIRECT_REF) should work
++ __alignof__ (r);
++ __alignof__ (*r);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed ambiguity
++struct A {
++ A (int);
++};
++
++struct B {
++ B (int);
++};
++
++void myfunc (const A& t0); // ERROR -
++void myfunc (const B& t0); // ERROR -
++
++int main ()
++{
++ myfunc(1); // ERROR - ambiguous call
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed anonymous-unions
++static union {
++ char* uC;
++private:
++ int uI;// ERROR - .*private member.*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/arm1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/arm1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/arm1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/arm1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed ARM-compliance
++// ARM $5.7, it's illegal to do math on a `void*'.
++
++int
++main()
++{
++ void *p;
++ ++p;// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// ARM 9.4 ``There cannot be a static and a nonstatic member function
++// with the same name and the same argument types.''
++//
++// The trick is to make sure it's caught with both orders (static,
++// then normal, and vice-versa.
++
++class X {
++public:
++ int foo();
++ static int foo(); // error: redeclaration// ERROR - .*
++};
++
++class Y {
++public:
++ static int foo();
++ int foo(); // error: redeclaration// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/arm3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/arm3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/arm3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/arm3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed initialization
++// ARM $11.4: A function first declared in a friend decl is equivalent
++// to an extern decl, so the below is illegal.
++
++class X {
++ friend g(); // ERROR - previous declaration
++};
++static g() { return 1; }// ERROR - previously declared
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/array1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/array1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/array1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/array1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Special g++ Options: -fconserve-space -fcommon
++// GROUPS passed array-bindings
++
++extern "C" void printf (char *, ...);
++char array[~(~0ul>>1)|~(0ul>>3)]; // ERROR - overflow in array dimension.*
++int main () { printf ("PASS\n"); return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed arm
++int a, b;
++
++// declaring an array of references should be illegal
++int & v[ 2] = { a, b};// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -S
++// GROUPS passed asm-extension
++// Skip if not target: sparc-sun-*
++// This used to crash because c_expand_asm_keyword didn't know what to
++// do with this. The parser rules were changed to accept an expr, instead
++// of a stmt.
++
++extern void traptable(void);
++
++main()
++{
++ asm("wr %0,%%tbr" : : "r" (traptable));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed bit-fields
++struct bar {
++ int : 2 = 1;// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed bit-fields
++ struct {
++ char c;
++ int i:8;
++ } s;
++
++ int main()
++ {
++ int &ir = s.i; // ERROR - address of bitfield
++ int *ip = &s.i; // ERROR - address of bitfield
++ ir = 10;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/bool1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/bool1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/bool1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/bool1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed boolean
++int
++main()
++{
++ typedef char Boolean; // Instrinsic.h
++ Boolean c = false;
++ bool b = true;
++
++ if (!c != !b)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// GROUPS passed code-generation
++// Check that sub-word sized structs/classes are passed correctly
++// if the struct/class has a constructor (i.e. ANY constructor).
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ unsigned int f1 : 8;
++ unsigned int f2 : 8;
++
++ base (int ii)
++ {
++ }
++};
++
++base global_base (7);
++
++int test2 (base formal_base);
++
++int main ()
++{
++ global_base.f1 = 0x55;
++ global_base.f2 = 0xee;
++
++ if (test2 (global_base) == 0)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++
++ return 0;
++}
++
++int test2 (base formal_base)
++{
++ if (formal_base.f1 != global_base.f1)
++ return -1;
++ if (formal_base.f2 != global_base.f2)
++ return -1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// GROUPS passed code-generation
++// Check that declarations with initializations are executed
++// correctly.
++
++extern "C" void printf (char *, ...);
++
++int main ()
++{
++ char buff[40] ;
++ char *tmp = &buff[0]; // also fails for char *tmp = buff;
++
++ if ((unsigned int) tmp != (unsigned int) &buff[0])
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// GROUPS passed code-generation
++// Check that passing things which are not a multiple of
++// 4 bytes in size doesn't mess up other subsequent parameters.
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ int f1 : 8;
++ int f2 : 8;
++};
++
++base global_base;
++
++int val1;
++
++int test2 (struct base formal_base, int v1);
++
++int main ()
++{
++ val1 = 0x5e5e;
++ return test2 (global_base, val1);
++}
++
++int test2 (struct base formal_base, int v1)
++{
++ formal_base.f1 = formal_base.f2; // prevent warnings
++
++ if (v1 != 0x5e5e)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Special g++ Options: -O
++// GROUPS passed code-generation
++// Options: -O
++//
++// Check that when an int value is assigned to a short int, the proper
++// half of the int (i.e. the low order half) ends up in the short.
++//
++// This fails with 1.32.0 with -O and f1() is inline.
++//
++// Workaround - declare "f1_arg" as type "short int".
++
++extern "C" void printf (char *, ...);
++
++short int v2;
++
++long v1 = 0x11117777;
++
++inline void f1 (long f1_arg)
++{
++ v2 = f1_arg;
++}
++
++int main ()
++{
++ f1 (v1);
++
++ if (v2 != 0x00007777)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++// Special g++ Options: -Wno-deprecated -fthis-is-variable
++// GROUPS passed code-generation
++// Check that the "this" pointer is zero when a method is
++// called for an object pointed to by a null pointer.
++
++// Normally, the "__builtin_new" operation which actually
++// allocates objects in heap space is *not* called at the
++// actual point of the "new" keyword. Rather, a check is
++// made within each constructor and if the "this" pointer
++// value passed in is zero, then the actual allocation of
++// memory (via __builtin_new) is done at that point (i.e.
++// at the very beginning of the constructor).
++
++// A special trick allows one to subvert this mechanism.
++// Specifically, if a given constructor contains a statement
++// like: "this = this", then no attempt will be made to
++// implicitly call __builtin_new within that constructor.
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ int member;
++
++ base ();
++ void member_function ();
++};
++
++base *base_pointer_1 = 0;
++base *base_pointer_2 = 0;
++
++int errors = 0;
++
++int main ()
++{
++ //base_pointer_2 = new base();
++ base_pointer_1->member_function ();
++
++ if (errors)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
++
++base::base ()
++{
++ this = this;
++ if ((int) this != 0)
++ errors++;
++}
++
++void base::member_function ()
++{
++ if ((int) this != 0)
++ errors++;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++// GROUPS passed code-generation
++// Check that type float parameters can be correctly passed to
++// methods.
++
++extern "C" void printf (char *, ...);
++
++class tres_floats {
++ float ff1;
++ float ff2;
++ float ff3;
++public:
++ tres_floats (float f1, float f2, float f3);
++ float get_f1 ();
++ float get_f2 ();
++ float get_f3 ();
++};
++
++float v1 = 1.2345;
++float v2 = 3.14159;
++float v3 = 0.707;
++
++int main ()
++{
++ tres_floats tf (v1, v2, v3);
++
++ if ((tf.get_f1() != v1) || (tf.get_f2() != v2) || (tf.get_f3() != v3))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
++
++tres_floats::tres_floats (float f1, float f2, float f3)
++{
++ ff1 = f1;
++ ff2 = f2;
++ ff3 = f3;
++}
++
++float tres_floats::get_f1 ()
++{
++ return ff1;
++}
++
++float tres_floats::get_f2 ()
++{
++ return ff2;
++}
++
++float tres_floats::get_f3 ()
++{
++ return ff3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/complex1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/complex1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/complex1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/complex1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Special g++ Options:
++
++// This test makes sure that the stuff in lex.c (real_yylex) is
++// set up to handle real and imag numbers correctly. This test is against
++// a bug where the compiler was not converting the integer `90' to a
++// complex number, unless you did `90.0'. Fixed 10/1/1997.
++
++extern "C" void printf (char *, ...);
++
++__complex__ double cd;
++
++int
++main(int argc, char *argv[])
++{
++ cd = 1.0+90i;
++ cd *= argc;
++
++ if (__real__ cd != 1 || __imag__ cd != 90)
++ exit (1);
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// GROUPS passed copy-ctors
++extern "C" void printf (char *, ...);
++int count = 0;
++
++class C {
++public:
++ C (int) { count++; }
++ operator int () { return 0; }
++};
++
++int
++main ()
++{
++ C c1 (1);
++ C c2 (c1);
++
++ if (count != 1)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,79 @@
++// GROUPS passed copy-ctors
++/*
++The old g++ output is
++
++Item()
++Compound()
++Pre foo
++foo
++~Compound()
++~Item()
++Post foo
++~Compound()
++~Item()
++
++The output should be something like (produced from ATT 2.1)
++
++Item()
++Compound()
++Pre foo
++Item(const Item& i) <------ missing above
++foo
++~Compound()
++~Item()
++Post foo
++~Compound()
++~Item()
++
++*/
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++int count = 0;
++
++void
++die (int x)
++{
++ if (x != ++count)
++ {
++ printf ("FAIL\n");
++ exit (1);
++ }
++}
++
++
++class Item {
++ public:
++ Item() { die (1); }
++ Item(const Item& i) { die (4); }
++ ~Item() { count++; if (count != 7 && count != 10) die (-1); }
++};
++
++
++class Compound {
++ Item i;
++ public:
++ Compound() { die (2); }
++ ~Compound() { count++; if (count != 6 && count != 9) die (-1); }
++};
++
++
++void foo(Compound a)
++{
++ die (5);
++}
++
++int
++main()
++{
++ Compound a;
++
++ die (3);
++ foo(a);
++
++ die (8);
++
++ printf ("PASS\n");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++// GROUPS passed copy-ctors
++/*
++
++If I compile it with cfront (AT&T C++ Translator 2.00.02 08/25/89) and run it
++I get:
++
++ A::A()
++ A::A(const A&)
++ B::Bar()
++ A::~A()
++ A::~A()
++
++If I compile it with g++ (gcc version 2.2.2) and run it I get:
++
++ A::A()
++ B::Bar()
++ A::~A()
++ A::~A()
++
++*/
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++int count = 0;
++
++void
++die (int x)
++{
++ if (x != ++count)
++ {
++ printf ("FAIL\n");
++ exit (1);
++ }
++}
++
++
++class A {
++public:
++ A() { die (1); }
++ A(const A&) { die (2); }
++ ~A() { count++; if (count != 4 && count != 5) die (-1); }
++};
++
++class B : public A {
++public:
++ void Bar() { die (3); }
++};
++
++void Foo(B b) { b.Bar(); }
++
++int
++main()
++{
++ B b;
++ Foo(b);
++
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++// GROUPS passed copy-ctors
++// Using Cfront 3.0.1 the programm below prints
++//
++// A()
++// A(const A& a)
++// ~A()
++// A(A& a) <---- !!!
++// ~A()
++// ~A()
++//
++// the g++ 2.2.2 (sparc-sun-sunos4.1) generated code prints
++//
++// A()
++// A(const A& a)
++// ~A()
++// A(const A& a) <---- !!!
++// ~A()
++// ~A()
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++int count = 0;
++
++void
++die (int x)
++{
++ if (x != ++count)
++ {
++ printf ("FAIL\n");
++ exit (1);
++ }
++}
++
++class A {
++public:
++ A() { die (1); }
++ A(const A& a) { die (2); }
++ A(A& a) { die (4); }
++ ~A() { count++; if (count != 3 && count != 5 && count != 6) die (-1); }
++};
++
++void foo1(const A& a) {
++ A b = a;
++}
++
++void foo2( A& a) {
++ A b = a;
++}
++
++int main() {
++ A a;
++
++ foo1(a);
++ foo2(a);
++
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,85 @@
++// GROUPS passed copy-ctors
++/*
++bad:
++sibelius402> a.out
++a=5 a.virtMember()=30
++BaseClass::Increm --> {i=5, virtMember()=30}
++a=7 a.virtMember()=30
++b=7 b.virtMember()=30
++BaseClass::Increm --> {i=7, virtMember()=999}
++b=9 b.virtMember()=30
++sibelius403>
++
++ good:
++
++sibelius406> a.out
++a=5 a.virtMember()=30
++BaseClass::Increm --> {i=5, virtMember()=30}
++a=7 a.virtMember()=30
++b=7 b.virtMember()=30
++BaseClass::Increm --> {i=7, virtMember()=30}
++b=9 b.virtMember()=30
++*/
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++void die () { printf ("FAIL\n"); exit (1); }
++
++class BaseClass {
++
++ friend int operator != (const BaseClass irv, int x);
++
++ int i;
++
++public:
++
++ BaseClass( const BaseClass& ir ) : i(ir.i) {};
++ BaseClass() : i(5) {};
++
++ virtual int virtMember() { return( 999 ); };
++
++ void Increm( int r );
++};
++
++void BaseClass::Increm( int r )
++{
++ if ((i == 5 && virtMember () == 30)
++ || (i == 7 && virtMember () == 30))
++ i += r;
++ else
++ die ();
++};
++
++class DerivedClass : public BaseClass {
++public:
++ int virtMember() { return( 30 ); };
++};
++
++int operator != (const BaseClass irv, int x) { return irv.i != x; }
++
++int
++main ()
++{
++ DerivedClass a;
++
++ if (a != 5 || a.virtMember () != 30)
++ die ();
++
++ a.Increm(2);
++
++ if (a != 7 || a.virtMember () != 30)
++ die ();
++
++ DerivedClass b = a;
++
++ if (b != 7 || a.virtMember () != 30)
++ die ();
++
++ b.Increm(2);
++
++ if (b != 9 || a.virtMember () != 30)
++ die ();
++
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++// GROUPS passed copy-ctors
++/*
++g++ 2.3.3 will prefer using type conversions over the
++implicitly generated copy constructor. This is wrong.
++If you explicitly define a copy constructor, it will
++use it. However, the implicit copy constructor MUST be
++called whenever an explicit one would have been called
++also. See below: g++ converts from and back into
++unsigned, instead of using the implicit copy constructor:
++here is the version:
++Reading specs from /usr/lib/gcc-lib/i386-linux/2.3.3/specs
++gcc version 2.3.3
++ /usr/lib/gcc-lib/i386-linux/2.3.3/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -Dunix -Di386 -Dlinux -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux bug2.cc /usr/tmp/cca02008.i
++GNU CPP version 2.3.3 (80386, BSD syntax)
++ /usr/lib/gcc-lib/i386-linux/2.3.3/cc1plus /usr/tmp/cca02008.i -quiet -dumpbase bug2.cc -version -o /usr/tmp/cca02008.s
++GNU C++ version 2.3.3 (80386, BSD syntax) compiled by GNU C version 2.3.3.
++ as -o /usr/tmp/cca020081.o /usr/tmp/cca02008.s
++ ld /usr/lib/crt0.o -nojump -L/usr/lib/gcc-lib/i386-linux/2.3.3 /usr/tmp/cca020081.o -lg++ -lgcc -lc -lgcc
++
++Ok, and here is the output:
++test k: constructing from scratch
++test l=k: type conversion into unsigned
++constructing from unsigned
++
++*/
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++int count = 0;
++
++void die () { printf ("FAIL\n"); exit (1); }
++
++struct test {
++ test() { if (count != 0) die (); }
++
++ test(unsigned) {
++ die ();
++ }
++ operator unsigned() {
++ die ();
++ return 0;
++ }
++};
++
++int
++main() {
++ test k;
++ test l=k;
++
++ printf ("PASS\n");
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// GROUPS passed copy-ctors
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++void die () { printf ("FAIL\n"); exit (1); }
++
++class B {
++public:
++ B() {}
++ B(const B &) { printf ("PASS\n"); exit (0); };
++private:
++ int x;
++};
++
++class A : public B {
++public:
++ A() {}
++
++ A(const B &) { printf ("FAIL\n"); exit (1); }
++};
++
++int
++main()
++{
++ A a;
++ A b(a);
++
++ printf ("FAIL\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,67 @@
++// GROUPS passed copy-ctors
++/*
++This report is for GCC 2.3.3 running on a Sun/4. The bug is that when
++a class instance is passed-by-value, GCC does not correctly copy the value.
++At the end of this report is an example program that demonstrates the bug.
++It should print:
++
++ construct A('x')
++ copy A('x')
++ destruct A('x')
++ destruct A('x')
++
++and in fact does for IBM's xlC C++. However, for GCC 2.3.3, it fails
++to print the second line ["copy A('x')"], which indicates that it failed
++to call the copy-constructor for class A when it should have. Below is a
++typescript that lists the program, shows how I compiled it, and shows the
++incorrect output.
++*/
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++int count = 0;
++
++void
++die (int x)
++{
++ if (x != ++count)
++ {
++ printf ("FAIL\n");
++ exit (1);
++ }
++}
++
++class A { // Class with explicit & instrumented copy-constructor and destructor.
++public:
++ const char * id;
++ A( const char * id1 ) : id(id1) { die (1); }
++
++ // Copy constructor
++ A( const A& a ) : id(a.id) { die (2); }
++
++ // Destructor
++ ~A() { count++; if (count != 3 && count != 4) die (-1); }
++};
++
++class X { // Class without explicit copy-constructor
++private:
++ A a;
++public:
++ X( const char * id ) : a(id) {}
++};
++
++void Func( X x ) { // Function with call-by-value argument
++}
++
++int
++main() {
++ X x("x"); // Construct instance of x.
++
++ // The next line should call the copy-constructor for X since x is
++ // being passed by value. For GCC 2.3.3 on a Sun/4, it does not.
++ Func(x);
++
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/copy9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/copy9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// GROUPS passed copy-ctors
++#include <iostream.h>
++
++// token types: from state parser
++const int T_EOF = 257;
++const int T_ERROR = 258;
++const int T_Float = 259;
++const int T_Int = 260;
++const int T_ID = 261;
++const int T_STRING = 262;
++
++class Complex;
++class State;
++
++// token, from state parser.
++class ParseToken {
++public:
++ int tok;
++ union {
++ char cval;
++ const char *sval;
++ int intval;
++ double doubleval;
++ Complex* Complexval;
++ const State* s;
++ };
++ ParseToken () { tok = 0; intval = 0;}
++};
++
++int
++main () {
++ ParseToken a;
++ a.tok = T_Float;
++ a.doubleval = 23.2;
++ ParseToken b(a);
++
++ if (b.doubleval == 23.2)
++ cout << "PASS\n";
++ else
++ cout << "FAIL\n";
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed old-abort
++class word
++{
++ unsigned char b1, b2;
++public:
++ word (unsigned int i = 0) { b1 = i & 0xff; b2 = (i & 0xff00) >> 8; }
++ operator unsigned int () { return (b2 << 8) + b1; }
++};
++
++class just_another
++{
++ int foo;
++ char bar[23];
++};
++
++int mumble(word w)
++{
++ just_another *jap;
++ unsigned bar;
++
++ bar = w;
++
++ jap = new just_another [w];
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed old-abort
++extern "C" void printf (char *, ...);
++
++class A {
++ int i; // ERROR - private
++ int j; // ERROR - private
++ public:
++ int h;
++ A() { i=10; j=20; }
++ virtual void f1() { printf("i=%d j=%d\n",i,j); }
++ friend virtual void f2() { printf("i=%d j=%d\n",i,j); }// ERROR - virtual.*
++};
++
++class B : public A {
++ public:
++ virtual void f1() { printf("i=%d j=%d\n",i,j); }// ERROR - member.*// ERROR - member.*
++ friend virtual void f2() { printf("i=%d j=%d\n",i,j); }// ERROR - virtual.*// ERROR - member.*// ERROR - member.*
++};
++
++int
++main() {
++ A * a = new A;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed old-abort
++class X
++{
++ int i;
++public:
++ X(int j);
++}
++
++X *x = new X[10]();// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++// GROUPS passed old-abort
++class gen_op
++{
++public:
++ gen_op ( );
++ gen_op (const gen_op &Op1);
++ ~gen_op ( );
++ void operator = (const gen_op &Op1);
++};
++
++
++
++
++class spin_op
++{
++public:
++ spin_op();
++ spin_op(const spin_op& SOp);
++ ~spin_op();
++ void operator= (const spin_op& SOp);
++ operator gen_op();
++};
++
++
++spin_op Fe();
++
++
++gen_op Spul_U_axis()
++{
++ gen_op U1;
++ U1 = Fe();
++}; // ERROR - reaches end of non-void function
++
++int
++main () {};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed old-abort
++extern "C" void printf (char *, ...);
++
++
++class cl
++{
++ int i;
++public:
++ cl(int j = 0) {i = j;}
++ int get_i() {return i;}
++ };
++
++int
++main()
++{
++ cl ob[3] = {1, 2, 3};
++ int i;
++
++ for(i=0; i<3; i++)
++ printf("%d\n", ob[i].get_i());
++
++ return 0;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed old-abort
++#include <iostream.h>
++
++class A {
++ public:
++ virtual ~A() {cout << "executed ~A()\n";};
++};
++
++class B : public A {
++ public:
++ virtual ~B() {cout << "executed ~B()\n";};
++};
++
++int
++main() {
++ cout << "starting\n";
++ B b;
++ b.~A();// ERROR - destructor
++ cout << "done\n";
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed old-abort
++class Graph {
++public:
++ unsigned char N;
++ Graph(void) {}; // ERROR - previously defined here
++}
++
++Graph::Graph(void)
++{ N = 10;// ERROR - return type.*
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed old-abort
++//
++// This one creates
++//
++// gcc2: Internal compiler error: program cc1plus got fatal signal 11
++//
++// when compiled with g++.
++// The error goes away, if
++// 1) int ClassInvariant() is not virtual or
++// 2) GnObject has a virtual destructor or
++// 3) GnWidget has no virtual destructor or
++// 4) GnContracts has a virtual destructor
++//
++
++
++class GnContracts {
++ public:
++ virtual int ClassInvariant();
++// virtual ~GnContracts();
++};
++
++class GnObject : public GnContracts {
++ public:
++// virtual ~GnObject();
++};
++
++class GnWidget : public GnObject {
++ public:
++ virtual ~GnWidget();
++};
++
++class GnOptionGroup : public GnObject, public GnWidget {
++};// ERROR - warning
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed old-abort
++typedef int element;
++class Pix {
++public:
++ Pix();
++ Pix(const Pix&);
++
++ // Friend functions so that v == x works as does x == v works
++ friend int operator==(void *v, const Pix& x)
++ { return v == index; }// ERROR - .*
++ friend int operator==(void *v, const Pix& x)
++ { return v != index; }// ERROR - .*
++private:
++// friend class List<T>;
++ element *index;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Build don't link:
++// GROUPS passed old-abort
++class D_Interval;
++
++class Date
++{
++ public:
++ Date(const D_Interval*,const Date&);
++private:
++ const D_Interval* interval;
++};
++
++class Time_Interval
++{
++ public:
++ Time_Interval(const Date& start,const Date& stop);
++ const Date& Start() const { return start; }
++ const Date& Stop() const { return stop; }
++ private:
++ Date start;
++ Date stop;
++};
++
++class Dated_Data
++{
++ public:
++ Dated_Data(const Time_Interval& dates);
++ virtual ~Dated_Data();
++ Time_Interval Dates() const { return dates; }
++ private:
++ Time_Interval dates;
++};
++
++class Raw_Data : public Dated_Data
++{
++ public:
++ Raw_Data(const Dated_Data *source,const D_Interval& period);
++};
++
++Raw_Data::Raw_Data(const Dated_Data *source,const D_Interval& period)
++ : Dated_Data(Time_Interval(Date(&period,source->Dates().Start()),
++ Date(&period,source->Dates().Stop())))
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed old-abort
++#include <complex>
++typedef complex<double> Complex;
++
++Complex ComputeVVself()
++{
++Complex temp1;
++Complex self[3][3];
++
++ self[1][2] = 100.0;
++ return self[1][2];
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed old-abort
++struct A {
++ void a1();
++ void a2();
++};
++
++struct B {
++ void A::a1(); // this used to die in chainon(), now grokdeclarator should// ERROR - cannot declare.*
++ void A::a2(); // should be fixed by the 930629 change.// ERROR - cannot declare.*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed old-abort
++// This used to die in chainon; it shouldn't any more.
++
++class A
++{
++public:
++ class B {
++ public:
++ void f ();
++ void g (int);
++ };
++ void B::f () {}// ERROR - .*
++ void B::g (int val) {}// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options: -O
++// GROUPS passed old-abort
++// gcc puts the array into a register, and then the store_bit_field () code
++// in expmed.c gets confused when it tries to store zero past the end of the
++// register (because the index is past the array bounds). It ends up calling
++// store_split_bit_field, which then aborts, because we don't have a split bit
++// field.
++//
++// Seems easiest to detect this case in the front end, i.e. access outside the
++// array bounds, and then force the array to be allocated on the stack instead
++// of a register.
++
++main()
++{
++ char i[1];
++
++ i[1] = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed old-abort
++class memo{
++public:
++ static int rep;
++};
++
++class port_head : public memo {
++public:
++ static int rep;
++ unsigned cap();
++};
++
++class buff_head : private port_head {
++public:
++ static int rep;
++ port_head::cap;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed old-abort
++struct B {
++ B();
++};
++
++class C : virtual public B
++{
++ public:
++ C() { }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed old-abort
++class First {
++public:
++ First(const First& a);
++};
++
++class Second {
++ int i;
++ First f;
++public:
++ ~Second() {}
++ Second func();
++};
++
++void foo()
++{
++ extern Second x;
++ x = x.func();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed old-abort
++ class abc
++ {
++ public:
++ void F() { return; }
++
++ private:
++ typedef int myint;
++ typedef struct { int b; } mystruct;
++ typedef union { int c; } myunion;
++ };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed old-abort
++
++union Value
++{
++ Value(){}
++};
++
++struct GlobalAddress
++{
++ GlobalAddress(Value *nvar){}// ERROR - .*
++};// ERROR - candidates .*
++
++int
++main()
++{
++ new GlobalAddress(Value()); // internal error occured here// ERROR - no matching function .*
++ //new GlobalAddress(new Value()); // This line is correct code
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed old-abort
++// The compiler used to crash on this example.
++
++class x {
++public:
++ x();
++ static const x y[23];
++};
++const x x::y[23];
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed old-abort
++#include <string>
++
++int
++main(void) {
++
++ string a[] = {"Hello"};
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed old-abort
++struct mbuf {
++ struct mbuf *next;
++};
++
++void* malloc(int);
++struct mbuf *
++mbuf_allocate(int size)
++{
++ struct mbuf *bp;
++
++ bp = (struct mbuf *) malloc( 10 /*(unsigned) (size + sizeof(struct mbuf))*/);
++ return bp;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// Special g++ Options: -fshort-enums
++// GROUPS passed old-abort
++enum Bool { FALSE, TRUE };
++Bool foo () { return TRUE; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed old-abort
++extern void foo(void *);
++int
++main() {
++ foo((struct bar *)0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++// GROUPS passed old-abort
++operator int () {}// ERROR - .*// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed old-abort
++const unsigned int ENET_INTERRUPT_MID = 5;
++
++extern "C" void ENET_RxP();
++
++class EnetReceiver
++ {
++ public:
++ friend void ENET_RxP();
++ void receiveMessage();
++ int *messagePointer;
++ };
++
++void EnetReceiver::receiveMessage()
++ {
++ if (*((unsigned int*) messagePointer) == ENET_INTERRUPT_MID)
++ {
++ }
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed old-abort
++struct wait { int w_status; };
++int wait();
++extern "C" int wait(int*);
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed old-abort
++typedef int _sigset_t;
++extern "C" {
++ extern int sigaction(int signo, const struct sigaction *action_spec_p, struct sigaction *old_action_p);
++}
++extern "C" {
++ extern void foo();
++};
++class SS {
++ friend void foo();
++protected:
++ void goo();
++};
++inline void
++SS::goo() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Build don't link:
++// GROUPS passed old-abort
++/*
++ I received the following message when using g++ (version 2.3.3):
++
++ main.cc: In method 'Implicit<implicit<INTEGER,2>,3>::Implicit()':
++ main.cc: Internal compiler error 241.
++ main.cc: Please report this to 'bug-g++@prep.ai.mit.edu'
++ */
++
++#include <stream.h>
++
++class INTEGER {
++int x;
++public:
++ typedef int BASE;
++ INTEGER(int y) : x(y) {}
++ INTEGER() {}
++ void encode() { cout << "Integer encoder";}
++ int operator=(int y) { x=y; return x; }
++ operator int() {return x; }
++};
++
++template< class T, int n> class Implicit : public T {
++ public:
++ typedef typename T::BASE BASE;
++ Implicit(BASE value ): T(value) {};
++ Implicit() : T() {};
++ int myTag() { return n; }
++ void encode() { T::encode(); }
++ BASE operator=(BASE t) { return T::operator=(t); }
++};
++
++int
++main()
++{
++ Implicit<Implicit<INTEGER, 2> , 3> y;
++
++ y = 10;
++};
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++// Special g++ Options: -w
++// GROUPS passed old-abort
++//#include <GetOpt.h>
++#include <stdio.h>
++
++class GetOpt
++{
++private:
++ static char *nextchar;
++ enum OrderingEnum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER };
++ OrderingEnum ordering;
++ static int first_nonopt;
++ static int last_nonopt;
++ void exchange (char **argv);
++public:
++ char *optarg;
++ int optind;
++ int opterr;
++
++ int nargc;
++ char **nargv;
++ const char *noptstring;
++
++ GetOpt (int argc, char **argv, const char *optstring);
++ int operator () (void);
++};
++//end <GetOpt.h>
++#include <string>
++
++class foo {public: foo () {}};
++class bar {public: bar (const foo& dflt);};
++class baz: public bar {public: baz (): bar (foo ()) {}};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed old-abort
++int strcmp();
++
++extern "C" {
++ // dies in common_type, cuz the TREE_TYPE of t2 is 0, so it can't get its
++ // TYPE_MAIN_VARIANT value.
++ // <void_type 184510 void permanent VOID
++ // size <integer_cst 1844e0 type <integer_type 182548 int> constant permanent 0
++ // align 1 symtab 0
++ // pointer_to_this <pointer_type 1845e0>
++
++int strcmp(const char*, const char*);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed old-abort
++class foo {
++
++public:
++
++ virtual foo &operator <<(foo &(foo::*)(foo &));
++};
++
++
++foo &foo::operator<<(foo &(foo::*manip)(foo &))
++{
++
++ (this->*manip)(*this);
++
++ return *this;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed old-abort
++typedef void (**ppfn)(void);
++
++int main() {
++ ppfn fn;
++
++ fn = new (void(*)(void));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// GROUPS passed old-abort
++// Build don't link:
++int fn();// ERROR - ambiguates.*
++int x;
++int& fn() {// ERROR - new decl.*
++return x;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash43.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash43.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash43.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash43.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// Special g++ Options: -g -fno-strict-prototype
++// GROUPS passed old-abort
++// excess errors test - XFAIL sparc64-*-elf
++extern "C" { typedef int jmp_buf[12]; }
++
++enum Error { NO_ERROR };
++class ErrorHandler
++{
++ ErrorHandler *previous;
++ static ErrorHandler *error_stack;
++ jmp_buf error_buffer;
++protected:
++ static void pop()
++ {
++ error_stack = error_stack->previous;
++ }
++public:
++ jmp_buf *push()
++ {
++ previous = error_stack;
++ error_stack = this;
++ return &error_buffer;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash44.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash44.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash44.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash44.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// GROUPS passed old-abort
++template <class T> class bug {
++
++public:
++ void Foo(const int = 0);
++ void NotRedeclared(const int);
++
++private:
++ T TheItem;
++};
++
++template <class T> void bug<T>::NotRedeclared(const int)
++{
++}
++
++template <class T> void bug<T>::Foo(const int)
++{
++}
++
++int
++main()
++{
++ bug<char> InstantiatedBug;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash45.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash45.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash45.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash45.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++// GROUPS passed old-abort
++void foo() { static const char *const v[] = { 0 }; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash46.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash46.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash46.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash46.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed old-abort
++class Rational {
++public:
++ Rational(int v): value(v)
++ { }
++
++ int value;
++};
++typedef Rational __Rational;
++
++extern int operator>(const Rational&, const Rational&);
++
++class V {
++public:
++ class Rational {
++ public:
++ static int x(const __Rational& value);
++ };
++};
++
++int
++V::Rational::x(const __Rational& value)
++{
++ return value > 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash47.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash47.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash47.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash47.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,94 @@
++// Build don't link:
++// GROUPS passed old-abort
++const int TRUE = 1;
++const int FALSE = 0;
++
++class Rep {
++protected:
++ Rep(): count(0)
++ { }
++ Rep(const Rep& other): count(0)
++ { }
++
++ Rep& operator=(const Rep& other)
++ { /* DO NOT copy over other.count */
++ return *this; }
++
++public: // TODO - for now
++ // Because it is to hard to restrict these operations to the descendants
++ // of Rep<REP> that we haven't named yet. So we just make them public.
++ void inc()
++ { count++; }
++ void dec()
++ { if (0 == --count) delete this; }
++private:
++ unsigned count;
++};
++
++template<class REP>
++class Ref {
++public:
++ Ref(): rep(0)
++ { }
++ Ref(const Ref<REP>& other): rep(other.rep)
++ { if (rep) rep->inc(); }
++ ~Ref()
++ { if (rep) rep->dec();
++ rep = 0; }
++
++ Ref<REP>& operator=(const Ref<REP>& other)
++ { if (rep != other.rep) {
++ if (rep) rep->dec();
++ rep = other.rep;
++ if (rep) rep->inc(); }
++ return *this; }
++
++ bool null() const
++ { return 0 == rep ? TRUE: FALSE; }
++ bool valid() const
++ { return 0 != rep ? TRUE: FALSE; }
++
++ REP* operator->() const // should be a valid() reference
++ { return rep; }
++ operator REP*() const; // should be a valid() reference
++
++protected:
++ REP *rep;
++
++ Ref(REP *r): rep(r)
++ { if (rep) rep->inc(); }
++
++ Ref<REP>& operator=(REP *r)
++ { if (rep != r) {
++ if (rep) rep->dec();
++ rep = r;
++ if (rep) rep->inc(); }
++ return *this; }
++};
++
++template<class REP>
++Ref<REP>::operator REP*() const // should be a valid() reference
++{ return rep; }
++
++template<class REP>
++inline int
++operator==(const Ref<REP>& a, const Ref<REP>& b)
++{ return (REP *) a == (REP *) b; }
++
++template<class REP>
++inline int
++operator!=(const Ref<REP>& a, const Ref<REP>& b)
++{ return (REP *) a != (REP *) b; }
++
++class XRep: public Rep {
++public:
++ int i;
++};
++
++int
++main()
++{
++ Ref<XRep> y;
++
++ return y != y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash48.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash48.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash48.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash48.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed old-abort
++class internal {
++ int field;
++ int anotherfield;
++}; // ERROR - candidates are
++
++class bug {
++ internal* numbers;
++ bug(int size);
++}; // ERROR - several errors
++
++bug::bug(int size)
++{ // ERROR - candidates
++ numbers = new internal(size * size);// ERROR - no match.*
++}
++
++int
++main()
++{
++ bug test;// ERROR - no match
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash49.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash49.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash49.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash49.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed old-abort
++#include<iostream.h>
++
++const int keys = 10;
++const int key[keys] = {6, key[1], 2, keys, 1, 7, 6, key[2], key[8]};
++
++void main()
++{ // ERROR - return type for main
++ for(int i = 0; i < keys;) cout << key[i++] << " ";
++ endl(cout);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed old-abort
++typedef struct Thing {
++ Thing();
++ int x;
++} Thing;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash50.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash50.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash50.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash50.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// GROUPS passed old-abort
++class B
++ {
++public:
++ int i;
++ };
++int operator & (const B &s) { return ( s.i );};
++
++
++
++
++
++class C
++ {
++public:
++ C &operator = (const C &x)
++ {
++ return *this;
++ };
++ };
++
++C &(C::*DD)(const C &x) = &C::operator=;
++
++int main()
++{
++ &DD;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash51.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash51.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash51.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash51.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed old-abort
++class obj;
++
++typedef obj *obj_t;
++
++class obj {
++public:
++ obj( const obj& o );
++};
++
++extern obj nowhere;
++
++class set: public obj {
++ unsigned bit_vector;
++public:
++ set( const obj& o );
++ set& operator|=( const int q );
++};
++
++enum pin_enum { E_F, O_C, O_D, O_S, P_D, P_U, R, T, A, C };
++
++set t_q = ( ( ( ( ( ( set( nowhere ) |= E_F ) |= O_C ) |= O_D ) |= O_S )
++ |= P_U ) |= P_D ) |= T;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed old-abort
++#include <iostream.h>
++
++class A {
++public:
++ friend A f(A &a);// ERROR - ambiguates.*
++};
++
++A &f(A &a) {// ERROR - new decl.*
++ cout << "Blah\n";
++} // ERROR - non-void function
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash53.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash53.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash53.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash53.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed old-abort
++class A
++{
++ public:
++ class B
++ {
++ public:
++ virtual ~B();
++ };
++};
++
++template<int I>
++class C
++{
++ public:
++ class B
++ : public A::B
++ {
++ }; // bug2.cc:18: Internal compiler error 233.
++ // bug2.cc:18: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'.
++};
++
++C<0> c;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash54.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash54.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash54.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash54.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed old-abort
++int main()
++{
++ int a[100], **p;
++
++ p = &a[50];// ERROR - assignment to.*
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash55.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash55.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash55.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash55.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed old-abort
++ extern f(int);// ERROR - ambiguates.*
++
++ int& f(int x)
++ {// ERROR - new declaration.*
++ int local;// ERROR - warning
++
++ local = x+2;
++
++ return local;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,385 @@
++// Build don't link:
++// GROUPS passed old-abort
++// Special g++ Options:
++
++const bool FALSE = 0;
++const bool TRUE = 1;
++class ListDProto {
++public:
++ ListDProto();
++ ListDProto(const ListDProto&);
++ virtual ~ListDProto();
++ void operator=(const ListDProto&);
++ unsigned length() const;
++ bool empty() const;
++ void clear();
++ void remove_head();
++ void remove_tail();
++ class link;
++ class Vix {
++ public:
++ Vix();
++ friend int operator==(void *v, const Vix& x)
++ { return v == x.item; }// ERROR - list of candidates
++ friend int operator==(const Vix& x, void *v)
++ { return v == x.item; }// ERROR - candidate for call
++ friend int operator!=(void *v, const Vix& x)
++ { return v != x.item; }
++ friend int operator!=(const Vix& x, void *v)
++ { return v != x.item; }
++ friend int operator==(const Vix& x1, const Vix& x2)
++ { return x1.owner == x2.owner && x1.item == x2.item; }// ERROR - candidate for call
++ friend int operator!=(const Vix& x1, const Vix& x2)
++ { return x1.owner != x2.owner || x1.item != x2.item; }
++ bool first;
++ bool last;
++ protected:
++ friend class ListDProto;
++ Vix(const ListDProto *o, link *i);
++ const ListDProto *owner;
++ private:
++ link *item;
++ };
++ enum Action { NORMAL, REMOVE_CURRENT };
++ Vix first() const;
++ void first(Vix& x) const;
++ void next(Vix& x) const;
++ void next(Vix& x, Action a = NORMAL);
++ Vix last() const;
++ void last(Vix& x) const;
++ void prev(Vix& x) const;
++ void prev(Vix& x, Action a = NORMAL);
++protected:
++ struct link {
++ link *next;
++ link *prev;
++ link(link *n = 0, link *p = 0);
++ virtual ~link();
++ private:
++ link(const link&);
++ void operator=(const link&);
++ };
++ unsigned count;
++ link *list_head;
++ link *list_tail;
++ virtual link *copy_item(link *old_item) const = 0;
++ void prepend(link *item);
++ void append(link *item);
++ void prepend(const ListDProto& proto);
++ void append(const ListDProto& proto);
++ void remove(link *item);
++ link *ref(const Vix&) const;
++};
++template<class T>
++class ListD: public ListDProto {
++public:
++ void prepend(const T& item);
++ void append(const T& item);
++ const T& head() const;
++ T& head();
++ void head(T& fill) const;
++ void remove_head()
++ { ListDProto::remove_head(); }
++ void remove_head(T& fill);
++ const T& tail() const;
++ T& tail();
++ void tail(T& fill) const;
++ void remove_tail()
++ { ListDProto::remove_tail(); }
++ void remove_tail(T& fill);
++ class Vix: public ListDProto::Vix {
++ public:
++ Vix(): ListDProto::Vix()
++ { }
++ protected:
++ friend class ListD<T>;
++ Vix(const ListDProto::Vix& x): ListDProto::Vix(x)
++ { }
++ };
++ Vix first() const
++ { return ListDProto::first(); };
++ void first(Vix& x) const
++ { ListDProto::first(x); };
++ void next(Vix& x, ListDProto::Action a = NORMAL) const
++ { ListDProto::next(x, a); }// ERROR - .*// ERROR - .*
++ Vix last() const
++ { return ListDProto::last(); }
++ void last(Vix& x) const
++ { return ListDProto::last(x); }
++ void prev(Vix& x, ListDProto::Action a = NORMAL) const
++ { return ListDProto::prev(x, a); }
++protected:
++ struct link_item: public ListDProto::link {
++ T item;
++ link_item(const T& i): link(0, 0), item(i)
++ { }
++ private:
++ link_item(const link_item&);
++ void operator=(const link_item&);
++ };
++public:
++ T& operator()(const Vix& x)
++ { link_item *li = (link_item *) ref(x);
++ return li->item; }
++ const T& operator()(const Vix& x) const
++ { link_item *li = (link_item *) ref(x);
++ return li->item; }
++private:
++ ListDProto::link *copy_item(ListDProto::link *old_item) const;
++};
++template<class T>
++class SetLD: private ListD<T> {
++public:
++ SetLD();
++ SetLD(const ListD<T>&);
++ void add(const T& item);
++ void add(const ListD<T>& other);
++ void add(const SetLD<T>& other);
++ void remove(const T& item);
++ bool contains(const T& item) const;
++ ListD<T>::length;
++ ListD<T>::empty;
++ ListD<T>::clear;
++ typedef ListD<T>::Vix Vix;
++ ListD<T>::first;
++ ListD<T>::next;
++ ListD<T>::operator();
++};
++extern "C" {
++extern void __eprintf (const char *, const char *, unsigned, const char *);
++}
++extern "C" {
++extern void __eprintf (const char *, const char *, unsigned, const char *);
++}
++template<class T>
++void
++ListD<T>::prepend(const T& item)
++{
++ link *newl = new link_item(item);
++ ListDProto::prepend(newl);
++}
++template<class T>
++void
++ListD<T>::append(const T& item)
++{
++ link *newl = new link_item(item);
++ ListDProto::append(newl);
++}
++template<class T>
++const T&
++ListD<T>::head() const
++{
++ ((void) (( 0 != list_head ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 50 , "0 != list_head" ), 0) )) ;
++ link_item *h = (link_item *) list_head;
++ return h->item;
++}
++template<class T>
++T&
++ListD<T>::head()
++{
++ ((void) (( 0 != list_head ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 59 , "0 != list_head" ), 0) )) ;
++ link_item *h = (link_item *) list_head;
++ return h->item;
++}
++template<class T>
++void
++ListD<T>::head(T& fill) const
++{
++ ((void) (( 0 != list_head ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 68 , "0 != list_head" ), 0) )) ;
++ link_item *h = (link_item *) list_head;
++ fill = h->item;
++}
++template<class T>
++void
++ListD<T>::remove_head(T& fill)
++{
++ head(fill);
++ remove_head();
++}
++template<class T>
++const T&
++ListD<T>::tail() const
++{
++ ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 85 , "0 != list_tail" ), 0) )) ;
++ link_item *h = (link_item *) list_tail;
++ return h->item;
++}
++template<class T>
++T&
++ListD<T>::tail()
++{
++ ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 94 , "0 != list_tail" ), 0) )) ;
++ link_item *h = (link_item *) list_tail;
++ return h->item;
++}
++template<class T>
++void
++ListD<T>::tail(T& fill) const
++{
++ ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 103 , "0 != list_tail" ), 0) )) ;
++ link_item *h = (link_item *) list_tail;
++ fill = h->item;
++}
++template<class T>
++void
++ListD<T>::remove_tail(T& fill)
++{
++ ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 112 , "0 != list_tail" ), 0) )) ;
++ link_item *h = (link_item *) list_tail;
++ fill = h->item;
++}
++template<class T>
++ListDProto::link *
++ListD<T>::copy_item(ListDProto::link *old) const
++{
++ link_item *old_item = (link_item *) old;
++ link_item *new_item = new link_item(old_item->item);
++ return new_item;
++}
++template<class T>
++SetLD<T>::SetLD():
++ListD<T>()
++{ }
++template<class T>
++SetLD<T>::SetLD(const ListD<T>& other):
++ListD<T>(other)
++{ }
++template<class T>
++void
++SetLD<T>::add(const T& item)
++{
++ if ( ! contains(item) )
++ append(item);
++}
++template<class T>
++void
++SetLD<T>::add(const ListD<T>& other)
++{
++ ListD<T>::Vix x;
++ for (first(x); 0 != x; next(x))
++ add(other(x));
++}
++template<class T>
++void
++SetLD<T>::add(const SetLD<T>& other)
++{
++ const ListD<T>& lother = other;
++ add(lother);
++}
++template<class T>
++void
++SetLD<T>::remove(const T& item)
++{
++ Action a = NORMAL;
++ Vix x;
++ for (first(x); 0 != x && REMOVE_CURRENT != a; next(x, a))
++ a = operator()(x) == item ? REMOVE_CURRENT: NORMAL;// ERROR - .*
++}
++template<class T>
++bool
++SetLD<T>::contains(const T& item) const
++{
++ Vix x;
++ for (first(x); 0 != x; next(x)) {
++ if (operator()(x) == item)// ERROR - .*
++ return TRUE;
++ }
++ return FALSE;
++}
++template<class T>
++int
++operator==(const SetLD<T>& a, const SetLD<T>& b)
++{
++ if (a.length() != b.length())
++ return FALSE;
++ SetLD<T>::Vix x;
++ for (a.first(x); 0 != x; a.next(x)) {
++ if ( ! b.contains(a(x)) )
++ return FALSE;
++ }
++ for (b.first(x); 0 != x; b.next(x)) {
++ if ( ! a.contains(b(x)) )
++ return FALSE;
++ }
++ return TRUE;
++}
++template<class T>
++int
++operator!=(const SetLD<T>& a, const SetLD<T>& b)
++{ return ! (a == b); }
++template<class T>
++int
++operator<=(const SetLD<T>& a, const SetLD<T>& b)
++{
++ if (a.length() > b.length())
++ return FALSE;
++ SetLD<T>::Vix x;
++ for (x=a.first(); 0 != x; a.next(x)) {
++ if ( ! b.contains(a(x)) )
++ return FALSE;
++ }
++ return TRUE;
++}
++template<class T>
++int
++operator<(const SetLD<T>& a, const SetLD<T>& b)
++{
++ if (a.length() >= b.length())
++ return FALSE;
++ return a <= b;
++}
++template<class T>
++int
++operator>(const SetLD<T>& a, const SetLD<T>& b)
++{ return ! (a <= b); }
++template<class T>
++int
++operator>=(const SetLD<T>& a, const SetLD<T>& b)
++{ return ! (a < b); }
++class String { };
++class IcaseString: public String { };
++class SetLD< IcaseString >: public SetLD< String > { public: SetLD (): SetLD< String >() { }; SetLD (const ListD< IcaseString >& other): SetLD< String >() { ListD< IcaseString >::Vix x; for (other.first(x); 0 != x; other.next(x)) add(other(x)); }; SetLD (const SetLD & other): SetLD< String >(other) { }; const IcaseString & operator()(const Vix& x) const { return ( IcaseString &) SetLD< String >::operator()(x); } }; typedef SetLD< String > SetLD_String_IcaseString_old_tmp99; typedef SetLD< IcaseString > SetLD_String_IcaseString_new_tmp99;
++inline int operator== (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b)
++{// ERROR - candidate for call
++const SetLD_String_IcaseString_old_tmp99& oa = a;
++const SetLD_String_IcaseString_old_tmp99& ob = b;
++return operator== (oa, ob); }
++inline int operator!= (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b)
++{
++const SetLD_String_IcaseString_old_tmp99& oa = a;
++const SetLD_String_IcaseString_old_tmp99& ob = b;
++return operator!= (oa, ob); }
++inline int operator< (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b)
++{
++const SetLD_String_IcaseString_old_tmp99& oa = a;
++const SetLD_String_IcaseString_old_tmp99& ob = b;
++return operator< (oa, ob); }
++inline int operator<= (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b)
++{
++const SetLD_String_IcaseString_old_tmp99& oa = a;
++const SetLD_String_IcaseString_old_tmp99& ob = b;
++return operator<= (oa, ob); }
++inline int operator> (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b)
++{
++const SetLD_String_IcaseString_old_tmp99& oa = a;
++const SetLD_String_IcaseString_old_tmp99& ob = b;
++return operator> (oa, ob); }
++inline int operator>= (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b)
++{
++const SetLD_String_IcaseString_old_tmp99& oa = a;
++const SetLD_String_IcaseString_old_tmp99& ob = b;
++return operator>= (oa, ob); } ;
++typedef SetLD<IcaseString> SLDiS;
++static void
++nop(int i)
++{
++ SetLD<IcaseString> x, y;
++ nop(x == y);
++ nop(x != y);
++nop(x < y);
++nop(x <= y);
++nop(x > y);
++nop(x >= y);
++}
++
++template class SetLD<String>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash57.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash57.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash57.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash57.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed old-abort
++class foo {
++private:
++ char buffer[1024];
++public:
++ foo();
++};
++
++int main()
++{
++ static foo& a = *(new foo);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash58.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash58.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash58.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash58.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed old-abort
++class X {
++public:
++void doit();
++};
++
++X::::doit()// ERROR - (syntax|parse) error.*
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,107 @@
++// Build don't link:
++// GROUPS passed old-abort
++// Should have been fixed by:
++//
++// Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
++//
++// * cp-cvt.c (build_default_binary_type_conversion): Look deeper into
++// what ARG1 and ARG2 are if they're POINTER_TYPEs.
++
++volatile void exit(int);
++
++class CountableSet
++{
++ public:
++ virtual ~CountableSet() { }
++};
++
++template<class T>
++class FixedSet : virtual public CountableSet
++{
++ public:
++ virtual int Get(int, T&) = 0;
++ virtual ~FixedSet() { }
++};
++
++class ShrinkableSet
++{
++ public:
++ virtual int Remove(int) = 0;
++};
++
++template<class T>
++class PVSet : virtual public FixedSet<T>, virtual public ShrinkableSet
++{
++ public:
++ virtual void Append(const T&) = 0;
++ virtual void operator+=(const T& a) { Append(a); }
++ virtual ~PVSet() { }
++};
++
++template<class T>
++class MutSet : virtual public FixedSet<T>, virtual public FixedSet<T *>
++{
++ protected:
++ typedef T *Tp;
++
++ public:
++ void Append(const Tp& tp) { Append(*tp); }
++
++ T& Access(int p)
++ {
++ Tp tp;
++ Get(p, tp);
++ return *tp;
++ }
++ virtual ~MutSet() { }
++};
++
++template <class T>
++class SimpleSet : virtual public MutSet<T>
++{
++ protected:
++ T *array;
++ int size;
++
++ virtual void Allocate(int s)
++ {
++ array = new T[s];
++ }
++ public:
++ SimpleSet()
++ {
++ size = 0;
++ array = ((void*)0) ; // ERROR - implicit conversion
++ }
++ int Get(int p, T& t)
++ {
++ t = array[p-1];
++ return 1;
++ }
++ int Get(int p, T *& t)
++ {
++ t = &array[p-1];
++ return 1;
++ }
++ inline void Append(const T& a)
++ {
++ array[size-1] = a;
++ }
++ inline int Remove(int n) { return 0; }
++};
++
++class Dummy
++{
++ public:
++ Dummy() {}
++};
++
++int
++main()
++{
++ SimpleSet<Dummy *> bs1;
++ int i, j;
++ Dummy foo;
++
++ bs1+=&foo;// ERROR - no .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash60.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash60.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash60.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash60.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed old-abort
++class X
++{
++public:
++ X ();
++ int f[4];
++};
++
++// Note that we mistakenly initialize the array data member as if it
++// was scalar
++X::X () : f (0) {}// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash61.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash61.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash61.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash61.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed old-abort
++ template <class TP> class sapp { };
++ class foo {};
++ extern foo& __iomanip_setw (foo&, TP);// ERROR - type spec.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash62.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash62.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash62.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash62.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++// GROUPS passed old-abort
++#include <iostream.h>
++
++ void
++ fubar(ostream* out, const char* string)
++ {
++ (*out) << string << endl;
++ return;
++ }
++
++ int
++ main()
++ {
++ // Declare a ref and a pointer to the same ostream.
++ //
++ ostream* out = &cerr;
++ ostream& die = cerr;
++
++ // Valid call to fubar.
++ //
++ fubar(out, "First line.");
++
++ // Invalid call to fubar. (1st arg is an ostream&. fubar expects
++ // ostream*.)This should be a syntax error, but g++ does not catch it.
++ // Call to this function results in a bus error in fubar when the 1st
++ // arg is dereferenced.
++ //
++ fubar(die, "Second line.");// ERROR - cannot convert .die.*
++
++ return 1;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash63.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash63.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash63.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash63.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed old-abort
++class String
++ {
++ public:
++ String (const char *str);
++ };
++
++class UnitList
++ {
++ public:
++ UnitList (...);
++ };
++
++UnitList unit_list (String("keV"));
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash64.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash64.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash64.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash64.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed old-abort
++typedef long unsigned int size_t;
++typedef void (*RF_Ptr)(void *);
++
++struct _im_pers_mem_spec {
++ inline _im_pers_mem_spec(void );
++ inline _im_pers_mem_spec(auto int of, auto int n);
++};
++
++struct _type_desc {
++ _type_desc(char *, int , RF_Ptr , int , int ,...);
++};
++
++struct metatype { int base_list; };
++
++static _type_desc _type_metatype("metatype", sizeof(metatype),
++ (RF_Ptr)0, 0, 1, 1,
++ _im_pers_mem_spec( ((size_t)&((( metatype *)0)-> base_list )) , 1));
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash65.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash65.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash65.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash65.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed old-abort
++class X {
++public:
++ virtual const char* XY(const void* val) const = 0;
++};
++
++
++class Y : public X {
++public:
++ using X::xy;// ERROR - no memb.*
++
++ using X::z;// ERROR - no memb.*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash66.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash66.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash66.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash66.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,137 @@
++// Build don't link:
++// Special g++ Options: -O
++// GROUPS passed old-abort
++typedef unsigned char uchar;
++typedef unsigned short ushort;
++typedef unsigned long ulong;
++extern int swap_endian;
++inline ushort
++swapshort(ushort value)
++{
++ value &= 0xffff;
++ return ((value << 8) | (value >> 8));
++}
++struct eshort
++{
++ ushort data;
++ operator ushort() { return swap_endian ? swapshort(data) : data;}
++ eshort(ushort t) { data = swap_endian ? swapshort(t) : t;}
++ eshort() {}
++};
++inline ulong
++swaplong(ulong value)
++{
++ ulong v = (value << 16) | (value >> 16);
++ return ((v >> 8) & 0x00ff00ff) | ((v << 8) & 0xff00ff00);
++};
++struct elong
++{
++ ulong data;
++ operator ulong() { return swap_endian ? swaplong(data) : data;}
++ elong(ulong t) { data = swap_endian ? swaplong(t) : t; }
++ elong() {}
++};
++struct digiheader
++{
++ uchar type[2];
++ eshort soft_version;
++ eshort lo_boot_rev;
++ eshort hi_boot_rev;
++ eshort load_segment;
++ eshort length;
++ eshort exec_start;
++ eshort image_offset;
++ elong startup_code[2];
++ elong checksum;
++};
++extern void uncompress(uchar* buf, ulong len);
++extern ulong compress(char* filename, uchar* buffer, ulong);
++struct filehdr
++{
++ eshort f_magic;
++ eshort f_nscns;
++ elong f_timdat;
++ elong f_symptr;
++ elong f_nsyms;
++ eshort f_opthdr;
++ eshort f_flags;
++};
++struct aouthdr
++{
++ eshort magic;
++ eshort vstamp;
++ elong tsize;
++ elong dsize;
++ elong bsize;
++ elong entry;
++ elong text_start;
++ elong data_start;
++ elong bss_start;
++ elong gprmask;
++ elong cprmask[4];
++ elong gp_value;
++};
++struct scnhdr
++{
++ char s_name[8];
++ elong s_paddr;
++ elong s_vaddr;
++ elong s_size;
++ elong s_scnptr;
++ elong s_relptr;
++ elong s_lnnoptr;
++ eshort s_nreloc;
++ eshort s_nlnno;
++ elong s_flags;
++};
++int file_little_endian;
++int host_little_endian;
++int swap_endian;
++int docheck;
++int expand;
++ulong memsize;
++ulong compression_quality;
++char *compressfile;
++int debug_level;
++extern "C" int getopt (int, char**, char*);
++int
++main(int argc, char** argv)
++{
++ uchar checksum;
++ uchar docrc;
++ ulong len;
++ ulong maxlen;
++ int i;
++ int c;
++ int magic;
++ int tsize;
++ int dsize;
++ int quality;
++ char dummy;
++ uchar* code;
++ uchar* buf;
++ char* ap;
++ digiheader *dh;
++ compression_quality = 10000;
++ docheck = 0;
++ while ((c = getopt(argc, argv, "Ccdf:k:q:x:")) != -1)
++ {
++ switch (c)
++ {
++ default:
++ goto usage;
++ }
++ }
++ if ((expand && (docheck || compressfile || quality)) ||
++ (quality && !compressfile))
++ {
++ usage:
++ return(2);
++ }
++ if (compressfile)
++ {
++ dh->image_offset = len;
++
++ len += compress(compressfile, code + len, maxlen - len);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash67.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash67.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash67.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash67.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++// GROUPS passed old-abort
++#pragma comment(exestr, "@(#) errno.h 10.2 92/03/26 ")
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash68.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash68.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash68.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash68.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// Special g++ Options: -w -O
++// GROUPS passed old-abort
++class RWDlist
++{
++public:
++ RWDlist& operator=(const RWDlist&);
++};
++class DataItemRWGDlist : public RWDlist {};
++
++class Base {};
++class DataItemList : public Base
++{
++ private:
++ DataItemRWGDlist m_diList;
++};
++
++class StatementGroup
++{
++ public:
++ DataItemList dataItemList;
++ StatementGroup(const StatementGroup&);
++};
++
++StatementGroup::StatementGroup(const StatementGroup& sg)
++{
++ dataItemList = sg.dataItemList;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed old-abort
++// Should be fixed by:
++// Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
++//
++// * cp-decl.c (start_function): Avoid a null-reference on CTYPE.
++
++template<int>
++class Program {
++} ;
++
++class Program<0> {
++public:
++ inline friend float EvalNextArg()
++ { return 1.0 ; }
++} ;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// Build don't link:
++// GROUPS passed templates
++
++template<class T>
++class Vector
++{
++ int sz;
++ T *v;
++public:
++ Vector (int s) : sz (s) { v = new T[sz]; }
++ ~Vector () { delete[] v; }
++ T &operator[] (int i) { return v[i]; }
++ int size () { return sz; }
++};
++
++template<class T>// ERROR - previous definition of T
++struct Comparator
++{
++ typedef T T;// ERROR - use of template type T in typedef to T
++ static int lessthan (T &a, T &b) { return a < b; }
++};
++
++template<class Comp>
++struct Sort
++{
++ static void sort (Vector<Comp::T> &);// ERROR - use of bad T
++};
++
++template<class Comp>
++void Sort<Comp>::sort (Vector<Comp::T> &v)// ERROR - use of bad T
++{
++ int n = v.size ();
++
++ for (int i = 0; i < n - 1; i++)
++ for (int j = n - 1; i < j; j--)
++ if (Comp::lessthan (v[j], v[j - 1]))
++ {
++ typename Comp::T temp = v[j];
++ v[j] = v[j - 1];
++ v[j - 1] = temp;
++ }
++}
++
++void
++f (Vector<int> &vi)
++{
++ Sort<Comparator<int> >::sort (vi);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed old-abort
++template<int a, int b>
++class Elvis
++{// ERROR - in template.*
++} ;
++
++template<int a>
++class Elvis<0>
++{ // ERROR - incorrect number of parameters
++ int geta() { return a ; }
++} ;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/crash9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/crash9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed old-abort
++class A {};
++
++class SimQuery
++{
++public:
++ SimQuery();
++ ~SimQuery();
++ int SetMeshFile(char name[]);
++protected:
++ A& scaling;
++ A* mesh;
++};
++
++SimQuery::SimQuery():scaling(A) {}// ERROR - .*
++
++SimQuery::~SimQuery() {}// ERROR -
++
++int SimQuery::SetMeshFile(char name[])
++{// ERROR -
++ mesh = new C;// ERROR - .*
++ return 0; // needed to avoid warning of reaching end of non-void fn
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// GROUPS passed constructors
++// Check that global level object constructors get called.
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ int f1;
++ int f2;
++ base (int arg1, int arg2);
++};
++
++
++base global_base(0x55, 0xff);
++
++int main ()
++{
++ if ((global_base.f1 != 0x55) || (global_base.f2 != 0xff))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
++
++base::base(int arg1, int arg2)
++{
++ f1 = arg1;
++ f2 = arg2;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// GROUPS passed constructors
++// Check that sub-words sized class members are correctly set
++// by constructors.
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ int f1 : 8;
++ int f2 : 8;
++ base (int arg1, int arg2);
++};
++
++
++base global_base(0x55, 0x7e);
++
++int main ()
++{
++ if ((global_base.f1 != 0x55) || (global_base.f2 != 0x7e))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
++
++base::base(int arg1, int arg2)
++{
++ f1 = arg1;
++ f2 = arg2;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed constructors
++class A;
++
++class B {
++public:
++ B();
++static A sa;
++};
++
++class A {
++public:
++ A(int i);
++};
++
++A B::sa(1);
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Build don't link:
++// GROUPS passed conversions
++#include <iostream.h>
++
++class Thing
++{
++public:
++ typedef enum { GOOD_THING, BAD_THING, } ThingType ; // ERROR - comma
++ Thing (ThingType type) : thingType (type) { }
++ ~Thing () { }
++private:
++ ThingType thingType ;
++} ;
++
++class Group
++{
++public:
++ typedef enum { THIS_GROUP, THAT_GROUP, } GroupType ; // ERROR - comma
++ Group (GroupType type) : groupType (type), groupCount (0) { }
++ ~Group () { }
++ void append (Thing* const &entry) { groupCount ++ ; }
++ operator GroupType () const { return groupType ; }
++ operator int () const { return groupCount ; } // remove this and problem gone
++
++private:
++ int groupCount ;
++ GroupType groupType ;
++} ;
++
++inline Group& operator += (Group& g, Thing* const t)
++{
++ g.append (t) ;
++ return g ; // complaint is here
++}
++
++int
++main (int argc, char** argv)
++{
++ Group g (Group::THIS_GROUP) ;
++
++ g += new Thing (Thing::GOOD_THING) ;
++ cout << "Group type is " << (Group::GroupType) g << endl ;
++ return 0 ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed conversions
++void f(const short & s) { }
++
++ int
++main() {
++ f(0);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// Build don't link:
++// GROUPS passed conversions
++class GttObject {};
++class GctObject: virtual public GttObject {};
++class NDAMObject: virtual public GttObject, virtual public GctObject {};
++class GctHashObject: virtual public GctObject {};
++
++class GctRef: virtual public GctHashObject
++{ public: operator void*() const; };
++
++class NDAMAssemblerObject: virtual public NDAMObject {};
++class GctReferenceObject: virtual public GctHashObject {};
++class NDAMValue: virtual public NDAMAssemblerObject, public GctReferenceObject {};
++
++class nnyacc;
++class NDAMValueRef : virtual public NDAMObject, public GctRef
++{
++ NDAMValue *operator->() const;
++ operator NDAMValue *() const;
++friend class nnyacc;
++};
++
++typedef void* Pix;
++class NDAMValueRefSLList
++{
++public:
++ NDAMValueRefSLList();
++ NDAMValueRefSLList(const NDAMValueRefSLList& a);
++ ~NDAMValueRefSLList();
++ NDAMValueRef& operator () (Pix p) const;
++};
++
++struct bar
++{
++ NDAMValueRefSLList *valueList;
++};
++
++class nnyacc
++{
++public:
++ static void assign(void*& lval, void*& rval); // ERROR - candidates
++};
++
++void
++foo (bar yylval, bar *yyvsp)
++{
++ nnyacc::assign(yylval.valueList, yyvsp[0].valueList);// ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// GROUPS passed conversions
++class A {};
++
++template <class TP>
++class B
++{
++ A &(*_f) (A &, TP);
++ TP _a;
++public:
++ B (A &(*f) (A &, TP), TP a) : _f (f), _a (a) {}
++ friend A &operator<< (A &o, const B<TP> &m)
++ { (*m._f) (o, m._a); return o; }
++};
++
++A &setw (A &, int);
++B<int> setw (int n)
++{
++ return B<int> (setw, n);
++}
++
++A x;
++
++void f ()
++{
++ x << setw (2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// GROUPS passed conversions
++// Build don't link:
++typedef unsigned long Array[3];
++
++void sample(const unsigned long (&an_array)[3]);
++
++class Sample
++ {
++ public:
++ void simple(const Array &an_array);
++ static void sample(const Array &an_array);
++ };
++
++class A
++ {
++ public:
++ Array array;
++ };
++
++ Sample s;
++
++ void simple(const A &a)
++ {
++ s.simple(a.array);
++ sample(a.array);
++ Sample::sample(a.array);
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/def-args1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/def-args1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/def-args1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/def-args1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// PRMS Id: 10860
++class Beige
++{
++public:
++ static int yellow();
++ void white(int green = yellow());
++ void aqua(int green = Beige::yellow());
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed default-functions
++class dictionary {
++public:
++ dictionary (int);
++};
++
++class symbol {
++public:
++ symbol ();
++};
++
++// a default ctor should not be generated for hyphenation_language,
++// since a ctor has already been declared; if one is generated, there
++// will be an error about not enough args to the ctor for dictionary,
++// since dictionary only defines a ctor taking an int (it ALSO should
++// not get a default ctor)
++struct hyphenation_language {
++ symbol name;
++ dictionary exceptions;
++ hyphenation_language(symbol nm) : name(nm), exceptions(501) {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/delete1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/delete1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/delete1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/delete1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed operator-delete
++/* ARM $5.3.4 */
++void f(char *p, char *q[], const char *r, const char *s[])
++{
++ delete 0; /* illegal: non-pointer */// ERROR - .*expected pointer.*
++ delete (char*)0; /* no effect */
++ delete p;
++ delete[] q;
++ delete[4] q; /* ANSI forbids size arg */// ERROR - anachronistic .*
++ delete r; /* no longer illegal: const */
++ delete[] s;
++ delete[4] s; /* ANSI forbids size arg */// ERROR - anachronistic.*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/delete2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/delete2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/delete2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/delete2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// GROUPS passed operator-delete
++// Check that using the delete operator with a null pointer
++// is allowed (as called for by The Book, pg. 259)
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ int member;
++};
++
++base* bp;
++
++void test ()
++{
++ delete bp;
++}
++
++int main ()
++{
++ bp = (base *) 0;
++ test ();
++
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++// GROUPS passed destructors
++// Check that when an object of a derived class is (implicitly)
++// destructed (on exit from the block in which it is declared)
++// that the destructor for the base class also gets executed.
++//
++// (also check that this execution doesn't seg-fault)
++
++extern "C" void printf (char *, ...);
++
++int derived_destructed;
++int base_destructed;
++
++struct base {
++ int base_data_member;
++
++ base()
++ {
++ base_data_member = 0x5e5e;
++ }
++ ~base()
++ {
++ base_destructed = 0x781f;
++ }
++};
++
++struct derived : public base {
++ int derived_data_member;
++
++ derived()
++ {
++ derived_data_member = 0xe5e5;
++ }
++ ~derived()
++ {
++ derived_destructed = 0xf178;
++ }
++};
++
++
++void test2 ();
++
++int main ()
++{
++ test2 ();
++ if ((base_destructed != 0x781f) || (derived_destructed != 0xf178))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
++
++void test2 ()
++{
++ derived derived_object;
++
++ derived_object.derived_data_member = 99;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,74 @@
++// GROUPS passed destructors
++// Check that virtual destructors work correctly. Specifically,
++// check that when you destruct an object of a derived class for
++// which the base class had an explicitly declared virtual destructor
++// no infinite recursion occurs.
++//
++// Bug description:
++// The generated g++ code apparently calls the base class destructor via
++// the virtual table, rather than directly. This, of course, results in the
++// infinite recursion.
++
++extern "C" void printf (char *, ...);
++
++int errors = 0;
++
++struct base {
++ int member;
++ base();
++ virtual ~base();
++};
++
++base::base()
++{
++}
++
++base::~base()
++{
++}
++
++struct derived : public base
++{
++ int member;
++ derived();
++ ~derived();
++};
++
++derived::derived() : base()
++{
++}
++
++int derived_destructor_calls = 0;
++
++extern void exit (int);
++
++derived::~derived()
++{
++ if (++derived_destructor_calls > 2)
++ errors++;
++}
++
++void test ();
++
++int main ()
++{
++ test ();
++
++ if (errors)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
++
++base* bp;
++
++void test()
++{
++ derived a;
++
++ a.member = 99;
++ bp = new derived;
++ delete bp;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,66 @@
++// GROUPS passed destructors
++// Check that member and base classes get properly destructed
++// when an object of a derived class is destructed via a pointer
++// to it which only has a "compile-time" type of "pointer-to-base".
++//
++// Note that in order for this test to work properly, the destructor
++// for the base class should be explicitly declared to be virtual.
++
++extern "C" void printf (char *, ...);
++
++int member_destructor_calls = 0;
++int middle_destructor_calls = 0;
++
++struct member_type {
++ int data_member;
++ member_type () {}
++ ~member_type ();
++};
++
++struct base {
++ int data_member;
++ base () {}
++ virtual ~base ();
++};
++
++struct middle : public base {
++ member_type member1;
++ member_type member2;
++ middle () {}
++ ~middle (); // should be implicitly virtual
++};
++
++struct derived : public middle {
++ member_type member1;
++ member_type member2;
++ //~derived () {}
++};
++
++int main ()
++{
++ base* bp = new derived;
++ delete bp;
++ derived *dp = new derived;
++ delete dp;
++
++ if ((member_destructor_calls != 8) || (middle_destructor_calls != 2))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
++
++member_type::~member_type ()
++{
++ member_destructor_calls++;
++}
++
++base::~base ()
++{
++}
++
++middle::~middle ()
++{
++ middle_destructor_calls++;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/eh1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/eh1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/eh1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/eh1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,62 @@
++// Special g++ Options: -O
++// PRMS Id: 10776
++
++extern "C" void printf (char *, ...);
++
++class Foo
++{
++ public:
++ Foo(int n) : n_(n) { }
++ int f() { return n_; }
++
++ int badTest();
++ int goodTest();
++
++ private:
++
++ int n_;
++};
++
++int Foo::badTest()
++{
++ try {
++ throw int(99);
++ }
++
++ catch (int &i) {
++ n_ = 16;
++ }
++
++ return n_;
++ // On the sparc, the return will use a ld [%l0],%i0 instruction.
++ // However %l0 was clobbered at the end of the catch block. It was
++ // used to do an indirect call.
++}
++
++
++int Foo::goodTest()
++{
++ int n;
++
++ try {
++ throw int(99);
++ }
++
++ catch (int &i) {
++ n = 16;
++ }
++
++ return n_;
++ // The return will use a ld [%l2],%i0 instruction. Since %l2
++ // contains the "this" pointer this works.
++}
++
++int main()
++{
++ Foo foo(5);
++ foo.goodTest();
++ foo.badTest();
++
++ // the badTest will have failed
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed enums
++class Type
++{
++ public:
++
++ enum name
++ {
++ A
++ };
++};
++
++class A
++{
++};
++
++class B: public A
++{
++ public:
++ B();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed enums
++class X
++{
++ enum
++ {
++ oneMask = 0x0000FFFF,
++ twoMask = 0x000F0000,
++ thiMask = 0xFFF00000,
++ }; // ERROR - comma
++ unsigned int foo;
++
++public:
++ X (int) : foo (oneMask | twoMask ) {} // No warning
++ X () : foo (oneMask | twoMask | thiMask) {} // Warning
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed enums
++enum Bool { False, True };
++
++enum Bool object;
++
++struct S
++{
++ Bool field:1;
++
++ void copy_enum_bit_field () const { object = field; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed enums
++enum COLOR { red, green, blue };
++
++struct S {
++ COLOR color:2;
++};
++
++COLOR color;
++S object;
++
++void fubar ()
++{
++ color = object.color;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// Special g++ Options: -fshort-enums
++// GROUPS passed enums
++ enum E { A = 0x80000000 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed enums
++class foo {
++public:
++ enum bar { baz = 1, bat = 7 };
++};
++
++class derv : public foo { };
++
++int main()
++{
++ foo::bar x = foo::baz;
++ derv::bar y = derv::bat;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed enums
++class foo {
++public:
++ enum bar { baz = 1, bat = 7 };
++};
++
++class foo2 {
++public:
++ enum bar2 { baz2 = 1, bat2 = 7 };
++};
++
++class derv : public foo, public foo2 { };
++
++int main()
++{
++ foo::bar x = foo::baz;
++ derv::bar2 y = derv::bat2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed enums
++enum foo
++{
++ x = 0
++};
++
++enum bar
++{
++ // this used to say `x' wasn't a constant, because build_enumerator
++ // was getting the value of x wrapped around a NOP_EXPR. It now
++ // strips them off before working on it, so we shouldn't get any
++ // errors for this.
++ y = (x + 0x0000)
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed enums
++class X {
++public:
++ enum { a };
++};
++
++enum { b = 1 };
++enum ok { y = b };
++enum notok { z = X::a };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed enums
++enum Thing { FIRST, SECOND } ;
++
++int main()
++{
++ Thing x = FIRST ;
++ x = 27 ; // this line should be a type error.// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed enums
++class X {
++ private:
++ enum E1 {a1, b1}; // ERROR - private
++ public:
++ enum E2 {a2, b2};
++ };
++
++void h(X* p) {
++ X::E2 e2;
++ int x2 = X::a2;
++
++ X::E1 e1;
++ int x1 = X::a1; // ERROR - within this context
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed enums
++enum color { red, green, blue, orange, brown };
++
++struct s {
++ enum color field:2; // ERROR - too small
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed enums
++class foo1
++{
++ public:
++ enum foo1_enum
++ {
++ ENUM1,
++ ENUM2,
++ }; // ERROR - comma
++};
++
++
++class foo2
++{
++ private:
++ enum foo1::foo1_enum Enum;
++};
++
++
++class foo3
++{
++ private:
++ foo1::foo1_enum Enum;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed enums
++enum fig {
++ figgy,
++ pudding,
++}; // ERROR - comma
++
++class X {
++public:
++ static fig (*open)(void *thing, const char *filename);
++ static fig (*parse)(void *thing);
++};
++
++enum fig (*X::open)(void *thing, const char *filename) = 0;
++fig (*X::parse)(void *thing) = 0;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed arm
++enum color {red, yellow, green=20, blue};
++color c = 1; // this should be an error// ERROR - .*
++int i = yellow;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed error-messages
++class foo {
++public:
++ virtual static int f () = 0;// ERROR - member `f' cannot be declared both virtual and static.*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++// GROUPS passed error-messages
++void foo (mutable int x);// ERROR - non-member `x' cannot be declared `mutable'.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed error-messages
++class foo {
++public:
++ friend mutable int x ();// ERROR - non-object member `x' cannot be declared `mutable'
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed error-messages
++class A { };
++
++int i = A::_ter;// ERROR - ._ter.*
++int j = A::term;// ERROR - .term.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed error-messages
++typedef void (*pfv)(double, double);
++extern "C" typedef void (*pfv)(double, double);// ERROR - multiple.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed error-messages
++#include <fstream.h>
++#include <iomanip.h>
++
++// This error should not appear:
++// bug.C: In method `test::test(const class test &)':
++// bug.C:8: field `' not in immediate context
++
++class test{
++public:
++ int flags;
++ test() {};
++ };
++
++int main()
++
++{
++return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed error-messages
++class X {
++public:
++ static int x;// ERROR - previous.*
++ static int y;// ERROR - previous.*
++};
++
++unsigned X::x;// ERROR - conflict.*
++unsigned X::y;// ERROR - conflict.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed error-messages
++class foo {};
++~foo () {}// ERROR - destructors must be member functions.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed error-messages
++class foo {
++public:
++ ~bar () {}// ERROR - destructor `bar' must match class name `foo'.*
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed error-messages
++class foo {
++public:
++ volatile int () {}// ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++// GROUPS passed error-messages
++operator int ;// ERROR - declaration of `operator int' as non-function.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed error-messages
++class foo {
++public:
++ int ~foo ();// ERROR - return type specification for destructor invalid.*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/explicit1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/explicit1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/explicit1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/explicit1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// $7.1.2 disallows explicit on anything but declarations of
++// constructors ... including friends.
++class foo { public: foo(); };
++class bar { public: friend explicit foo::foo(); }; // ERROR - explicit friend
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed friends
++class A
++{
++private:
++ A () {}
++
++friend struct B;
++};
++
++class B
++{
++public:
++ A a;
++};
++
++B b;
++
++int main () {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed friends
++class X {
++ int a;
++friend void friend_set (X*, int);
++};
++
++void friend_set (X *p, int i) { p->a = i; }
++
++void f()
++{
++ X obj;
++ friend_set (&obj, 10);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed friends
++class B {
++
++ friend class A;
++
++ enum {
++ bEnum = 1,
++ }; // ERROR - comma
++
++ int bArray[ bEnum ];
++
++public:
++ void bFunction(int arg[ bEnum ]);
++};
++
++
++class A {
++ int aMember;
++
++public:
++ void aFunction(int a[B::bEnum])
++ {
++ B b;
++ b.bArray[ B::bEnum ] = aMember;
++ }
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/friend4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/friend4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed friends
++// do_friend should complain that foo was declared as a friend of
++// A before A was defined
++struct A;
++struct B { friend A::foo (); };// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/groff1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/groff1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/groff1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/groff1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// GROUPS passed groff
++/* This should compile properly with the new overloading scheme. */
++
++extern "C" void printf (const char *, ...);
++extern "C" void exit (int);
++
++int win = 0;
++
++class symbol
++{
++public:
++ symbol(const char *p, int how = 0) {}
++ symbol() {}
++};
++
++class dictionary
++{
++public:
++ void *lookup(symbol s, void *v=0) { win = 1; }
++ void *lookup(const char *) {}
++};
++
++int main()
++{
++ char buf[2048];
++ dictionary exceptions;
++ unsigned char *tem = new unsigned char[19 + 1];
++
++ exceptions.lookup (symbol (buf), tem);
++
++ printf (win ? "PASS\n" : "FAIL\n");
++ exit (! win);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++// GROUPS passed initialization
++struct { int :0; } a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed initialization
++struct String {
++ char * string;
++ String(const char* st);
++};
++
++extern char array [];
++static String sub = array;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed array-bindings
++char * bob();
++
++int main()
++{
++ char a[1][2];
++ a[0] = bob();// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed initialization
++struct A {
++ operator int ();
++};
++
++int i = A();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed initialization
++ class Thing{
++ private:
++ int x,y;
++ public:
++ Thing (int v, int q) { x = v; q = y; }
++ void doit(int);
++ };
++
++ Thing t(18,19);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed initialization
++// this should give an error in require_instantiated_type about not
++// being allowed to have an initializer list in an argument list.
++int f(int a = {1});// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// GROUPS passed initialization
++// p2766: Make sure that members are initialized in order of declaration
++// in the class, not in order of specification in the mem-initializer list.
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++int count = 0;
++
++void die () { printf ("FAIL\n"); exit (1); }
++
++class bar1 {
++public:
++ bar1 (int) { if (count != 0) die (); count = 1; }
++};
++
++class bar2
++{
++public:
++ bar2 (int) { if (count != 1) die (); count = 2; }
++};
++
++class foo
++{
++public:
++ bar1 a;
++ bar2 b;
++ foo (int, int);
++};
++
++// bar1 should get built before bar2
++foo::foo (int x, int y) : b(x), a(y) {}
++
++int main()
++{
++ foo f (1, 2);
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed initialization
++struct CharList { int i; };
++
++const CharList& terminals = { 1 };// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed initialization
++int main( int argc, char**argv, char** envp ){
++ char* domain = argv[1];
++ domain = domain? (char*)"component" : domain;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed initialization
++class Tag {
++public:
++ Tag(int i):value(i){}
++ int value;
++};
++
++extern const Tag myTag;
++extern const Tag myTag=9;
++
++// The compiler should not issue an error on this line; expand_static_init
++// should be checking that there's no initializer for this line, and thus
++// doesn't need to produce an error.
++extern const Tag myTag;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed initialization
++struct myChoiceList
++{
++ int bla;
++ int blubb;
++ int brummbrumm;
++};
++
++extern const myChoiceList foo;
++
++extern const myChoiceList foo = {1,1,1};
++
++// finish_decl should have an exclusion so an error is not produced
++// for this line.
++extern const myChoiceList foo;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed initialization
++class A
++{
++public:
++ A(const A & a) : i_member(a.i_member)
++ {
++ }
++ A(const int & i) : i_member(i)
++ {
++ }
++ union
++ {
++ int i_member;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/init9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/init9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed initialization
++int FALSE = 0;
++class X {
++public:
++ static int FALSE;
++};
++
++// The compiler should NOT complain about redeclaration of the global
++// `FALSE' with this declaration...grokvardecl shouldn't be doing that.
++int X::FALSE = 0;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/label1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/label1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/label1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/label1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed labels
++// it should only give 1 error, about using an undefined label
++int main(void) { goto dummy; }// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/label2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/label2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/label2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/label2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed labels
++class X {
++public:
++ X();
++};
++void foo ()
++{
++X: ::abort();
++ goto X;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/line1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/line1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/line1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/line1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed error-messages
++typedef struct s S;// ERROR - previous.*
++struct S { int member:1; }; // the lineno for this should be 2, not 0// ERROR - conflicting types.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed miscellaneous
++// The compiler shouldn't give a `invalid operands to binary +' for this
++// case.
++enum flag { OFF, ON };
++enum BOOL { FALSE = (enum flag) 0, TRUE };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed miscellaneous
++// This should not complain about A::f being abstract.
++struct A
++{
++ virtual int f() = 0;
++};
++
++struct B : virtual A
++{
++ virtual int f() { return 1; }
++ virtual int g() = 0;
++};
++
++struct C: B
++{
++ int g() { return 2; }
++};
++
++C c;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// GROUPS passed miscellaneous
++extern "C" void exit (int);
++extern "C" int printf (char *, ...);
++
++/* Make sure cp-lex.c handles these properly--if this links, that means
++ it emitted the strings instead of __FUNCTION__.0, etc. */
++
++int
++main()
++{
++ char *a = __FUNCTION__;
++ char *b = __PRETTY_FUNCTION__;
++
++ printf ("PASS\n");
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++// This should only give warnings from duplicate_decls; it should not get
++// errors from push_overloaded_decl as well.
++
++extern "C"
++{
++ long unsigned int strlen(char*);// ERROR - warning// ERROR - warning.*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++class X {
++public:
++ enum e {
++ New,// ERROR - conflicts with other.*
++ }; // ERROR - comma
++
++ static int New(int);// ERROR - declaration.*
++};
++
++int main() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++// we shouldn't get any warnings or errors for this code
++struct A {
++ int aa;
++};
++struct B : public A {
++};
++struct C : public A {
++};
++struct D : public C, public B {
++ void fun() { C::aa = 10; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++// Using a typedef causes a compiler error
++typedef unsigned int Uint32;
++
++// Using a define so that there isn't a typedef works OK.
++//#define Uint32 unsigned int
++
++Uint32 func0(Uint32, Uint32)
++{
++ return 0;
++}
++
++Uint32 func1(Uint32, Uint32)
++{
++ return 1;
++}
++
++Uint32 (*mf[])(Uint32, Uint32) = {func0, func1};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++typedef int va_list;
++class ostream;
++class String {
++public:
++operator const char *() const;
++};
++class FwtErrorManager {
++public:
++ FwtErrorManager(ostream& err, const char *program);
++public:
++ void form(const char *format, ...);
++protected:
++ const String _program;
++private:
++ FwtErrorManager(const FwtErrorManager&);
++ void operator=(const FwtErrorManager&);
++};
++class FwtProgram: public FwtErrorManager {
++public:
++ FwtProgram();
++};
++class FwtArgOptions { };
++class FwtStdProgram: public FwtProgram, public FwtArgOptions {
++public:
++ FwtStdProgram();
++ void usage_if_not_complete();
++};
++void
++FwtStdProgram::usage_if_not_complete()
++{
++ FwtStdProgram& thisp = *this;
++ thisp.form("%s: error, there were unrecognized options",
++ (char *) FwtErrorManager::_program);// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++int main( int argc, char**argv, char** envp ){
++ char* domain = argv[1];
++ domain = domain? (char*)"component" : domain;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++// Should be fixed by:
++// Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
++//
++// * cp-decl.c (grokvardecl): Don't complain about duplicate
++// definitions of `extern "C"' declarations (parallelize it with how
++// regular `extern' decls are handled).
++
++extern "C" double _MaXdOuB, _MiNdOuB;
++extern "C" double _MaXdOuB, _MiNdOuB; // no error should be emitted for this
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed miscellaneous-bugs
++// The compiler should not error about taking the addr of main in this example.
++class fred {
++private:
++ void main () {
++ }
++public:
++ fred ( ) {
++ &fred::main;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed miscellaneous
++// This should not emit an error about A::~A() being redefined; we
++// should check that it is a pure virtual.
++class A {
++public:
++ virtual ~A() = 0;
++};
++
++A::~A() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed miscellaneous
++class A {
++ static A aa[2];
++};
++
++A A::aa[2]; // should be completely legal
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed miscellaneous
++// test that use of `inline' is forbidden when it should be
++inline int i;// ERROR - .*
++struct c { inline int i; };// ERROR - .*
++int foo (inline int i);// ERROR - .*
++inline class c; // ERROR - inline
++inline typedef int t; // ERROR - inline
++class d { inline friend class c; }; // ERROR - inline
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// GROUPS passed miscellaneous
++extern "C" void printf (char *, ...);
++
++int main()
++{
++ int i = 0;
++ // Make sure build_unary_op correctly computes this.
++ int *pi = &(++i);
++ *pi = 4;
++
++ if (i != 4)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed miscellaneous
++// used to say invalid lvalue in `&\'
++class foo {
++ int a;
++ public:
++ foo(int a);
++};
++
++foo::foo(int a)
++{
++ foo::a=a;
++}
++
++int main()
++{
++foo obj(4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/misc9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/misc9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed miscellaneous
++//The program listed below produces the following error during compilation:
++// % g++ bug17.cc
++// bug17.cc: In method `class Y& Y::operator = (const class Y&)':
++// bug17.cc:18: invalid use of non-lvalue array
++
++class X {
++public:
++ X& operator=(const X&) { return *this; }
++};
++
++struct S {
++ char c[10];
++ X x;
++};
++
++class Y {
++ S s;
++public:
++ const S& f() const { return s; }
++
++ Y& operator=(const Y& _Y) {
++ s = _Y.s; // this line compiles
++ s = _Y.f(); // this line does not compile
++ return *this;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed mutable
++class foo;
++class bar {
++ mutable foo const *foobar;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class A
++ {
++ public:
++ class B
++ {
++ public:
++ int f ();
++ void g (int);
++ private:
++ int b;
++ };
++ };
++
++int A::B::f ()
++ {
++ int val=b;
++ return val;
++ }
++
++void A::B::g (int val)
++ {
++ b = val;
++ }
++
++
++int main ()
++ {
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class A {
++ int x;
++
++ struct B {
++ int x;
++ };
++ struct C {
++ int bug (A::B &y);
++ };
++};
++
++int
++A::C::bug (A::B &y)
++{
++ return y.x;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed nested-classes
++struct enclose {
++ class nested;
++ nested *nptr;
++ class nested {
++ int x;
++ };
++ void f();
++};
++
++void enclose::f()
++{
++ nptr = new enclose::nested;
++}
++
++void g()
++{
++ enclose obj;
++ obj.nptr = new enclose::nested;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed nested-classes
++// The bug here is that wer'e getting a message about inner not
++// being a basetype itself. I think it's because it's being
++// compared as the "inner" we knew about when it was forward-declared,
++// versus the "inner" we know about when it *has* been defined.
++
++class temp
++{
++public:
++ struct inner;
++ inner *trump()
++ {
++ return (tt);
++ }
++ struct inner
++ {
++ int ll;
++ }*tt;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class BDDHeap {
++public:
++ BDDHeap();
++ BDDHeap(const BDDHeap&);
++
++ class Page {
++ public:
++ int i;
++ };
++ struct Pointer {
++ Page *page;
++ unsigned index;
++
++ Pointer();
++ Pointer(const BDDHeap& heap);
++ };
++
++ struct Half {
++ struct {
++ Page *top;
++ Page **tail;
++ } inuse;
++
++ Half();
++ };
++
++ Half half[2];
++ unsigned halfspace;
++};
++
++inline
++BDDHeap::Pointer::Pointer(const BDDHeap& heap):
++page(heap.half[heap.halfspace].inuse.top),
++index(0)
++{ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class BDDHeap {
++public:
++ BDDHeap();
++ BDDHeap(const BDDHeap&);
++
++ class Page {
++ public:
++ int i;
++ };
++ struct Pointer {
++ Page *page;
++ unsigned index;
++
++ Pointer();
++ Pointer(const BDDHeap& heap);
++ };
++
++ struct Half {
++ struct {
++ Page *top;
++ Page **tail;
++ } inuse;
++
++ Half();
++ };
++
++ Half half[2];
++ unsigned halfspace;
++};
++
++inline
++BDDHeap::Pointer::Pointer(const BDDHeap& heap):
++page(0),
++index(0)
++{
++ Page *x = heap.half[heap.halfspace].inuse.top;
++ page = x;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class T {
++public:
++ typedef int I;
++ class Y {int y;};
++ typedef Y Z;
++};
++
++T::I i;
++T::Y y;
++T::Z z;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++// GROUPS passed nested-classes
++// This is the first line of file ||t2.C||.
++
++// This code demonstrates what appears to be a bug with nested types.
++// In C++, nested typedefs are not supposed to be visible outside
++// their class scopes but they apparently are in gcc 2.4.5. This code
++// compiles fine in AT&T cfront 3.0.1, but will not compile with gcc.
++
++// If this class does not precede String, then the code will compile.
++
++class Another {
++public:
++ typedef int Length;
++};
++
++// If String does not define typedef int Length, then the code will
++// compile.
++
++class String {
++public:
++ typedef int Length; // remove this and it will compile fine
++
++ int foo(Length length) const;
++};
++
++int String::foo(Length length) const {
++ return length;
++}
++
++// File ||t2.C|| ends here.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Build don't link:
++// GROUPS passed nested-classes
++// This is the first line of file ||t3.C||.
++
++// This code demonstrates a variation of the same problem with nested
++// types. In C++, nested typedefs are not supposed to be visible
++// outside their class scopes but they apparently are in gcc 2.4.5.
++// This code compiles fine in AT&T cfront 3.0.1, but gcc rejects it
++// with the messages given below.
++
++// If this class does not precede Expr, then the code will compile.
++
++class Another {
++public:
++ typedef int Boolean;
++ enum { FALSE, TRUE };
++};
++
++// If Expr does not define typedef int Boolean, then the code will
++// compile.
++
++class Expr {
++public:
++ typedef int Boolean;
++ enum { FALSE, TRUE };
++ void foo();
++ void call_something_with(Boolean);
++};
++
++// t3.C: In method `void Expr::foo ()':
++// t3.C:36: uninitialized const `Boolean'
++// t3.C:36: parse error before `='
++// t3.C:37: `argument' undeclared (first use this function)
++// t3.C:37: (Each undeclared identifier is reported only once
++// t3.C:37: for each function it appears in.)
++
++void Expr::foo() {
++ const Boolean argument = TRUE;
++ call_something_with(argument);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed nested-classes
++int x;
++class enclose {
++public:
++ int x;
++
++ class inner {
++ public:
++ void f (int i) {
++ x = i;// ERROR - .*
++ }
++ };
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed nested-classes
++// This is the first line of file ||t5.C||.
++
++// This code initializing an unnamed union inside a class appears to
++// be legal C++ input and compiles fine with AT&T cfront 3.0.1, but
++// gcc 2.4.5 complains about multiple initializations of the same
++// member.
++
++class Expr {
++public:
++ enum Type { undefined, slong, ulong, ldouble };
++ Expr();
++ Expr(Type type, const Expr* initializer);
++private:
++ Type type_;
++ union {
++ long slong_;
++ unsigned long ulong_;
++ long double ldouble_;
++ };
++};
++
++// Construct an undefined expression.
++
++Expr::Expr()
++ :
++ type_(undefined),
++ slong_(-1)
++{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,95 @@
++// GROUPS passed nested-classes
++#include <iostream.h>
++#include <stdio.h>
++
++static char output[1024];
++
++class BDDRetrace {
++public:
++ class Dump {
++ public:
++ virtual Dump& operator<<(char c) = 0;
++ virtual Dump& operator<<(int i) = 0;
++ virtual Dump& operator<<(double r) = 0;
++ };
++
++ class Dump1: public Dump {
++ public:
++ Dump& operator<<(char c);
++ Dump& operator<<(int i);
++ Dump& operator<<(double r);
++ };
++};
++
++class Dump2: public BDDRetrace::Dump {
++public:
++ BDDRetrace::Dump& operator<<(char c);
++ BDDRetrace::Dump& operator<<(int i);
++ BDDRetrace::Dump& operator<<(double r);
++};
++
++BDDRetrace::Dump&
++BDDRetrace::Dump1::operator<<(char c)
++{ char tempout[1024];
++ sprintf (tempout, "%s%s%c", output, "1-", c);
++ strcpy (output, tempout);
++ return *this;
++}
++
++BDDRetrace::Dump&
++BDDRetrace::Dump1::operator<<(int i)
++{ char tempout[1024];
++ sprintf (tempout, "%s%s%d", output, "1-", i);
++ strcpy (output, tempout);
++ return *this; }
++
++BDDRetrace::Dump&
++BDDRetrace::Dump1::operator<<(double r)
++{ char tempout[1024];
++ sprintf (tempout, "%s%s%1.0f", output, "1-", r);
++ strcpy (output, tempout);
++ return *this; }
++
++BDDRetrace::Dump&
++Dump2::operator<<(char c)
++{ char tempout[1024];
++ sprintf (tempout, "%s%s%c", output, "2-", c);
++ strcpy (output, tempout);
++ return *this; }
++
++BDDRetrace::Dump&
++Dump2::operator<<(int i)
++{ char tempout[1024];
++ sprintf (tempout, "%s%s%d", output, "2-", i);
++ strcpy (output, tempout);
++ return *this; }
++
++BDDRetrace::Dump&
++Dump2::operator<<(double r)
++{ char tempout[1024];
++ sprintf (tempout, "%s%s%1.0f", output, "2-", r);
++ strcpy (output, tempout);
++ return *this; }
++
++int main()
++{
++ BDDRetrace::Dump1 d1;
++ Dump2 d2;
++
++ sprintf (output, " ");
++
++ d1 << 'a';
++ d1 << 1;
++ d1 << 1.0;
++
++ d2 << 'a';
++ d2 << 1;
++ d2 << 1.0;
++
++ if (strcmp (output, " 1-a1-11-12-a2-12-1") == 0)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class foo {
++public:
++ typedef int bar;
++ foo::bar fb; // this line causes a syntax error!
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class CS {
++public:
++ class PS {
++ };
++};
++
++class NCS: public CS {
++public:
++ class S: public PS {
++ };
++};
++
++int i;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed nested-classes
++struct A {
++ A (){}
++};
++
++void foo ()
++{
++ struct B {};
++
++ struct S : B {
++ A a;
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class A {
++protected:
++ class B {
++ public:
++ ~B();
++ private:
++ float _datum;
++ };
++private:
++ B *_b;
++};
++
++A::B::~B()
++{
++ _datum = 8.0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed nested-classes
++class X {
++public:
++ struct M2 { int m; };
++ M2 g(int);
++};
++
++
++X::M2 X::g(int i) { X::M2 m2; return m2; }
++
++int main() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/nest4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/nest4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed nested-classes
++class vec {
++ class blah { };
++
++ ::vec::blah satan( 0);// ERROR - .*
++ blah herman( 0);// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed operator-new
++typedef __SIZE_TYPE__ size_t;
++struct x { int a; void * operator new (size_t, void *); };
++struct x * f(void *p) { return new (p) x; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,67 @@
++// GROUPS passed operator-new
++// Check that if there is a user defined class-specific operator
++// new for a given class, that operator is invoked when a new
++// object of the class is requested, regardless of whether or not
++// there is also a constructor for the given class, and regardless
++// of whether or not the constructor for the given class is defined
++// before or after the new operator is even declared.
++
++extern "C" void printf (char *, ...);
++
++typedef __SIZE_TYPE__ size_t;
++
++struct base {
++ int i;
++
++ base ()
++ {
++ i = 7;
++ }
++
++ void * operator new (size_t size);
++ void operator delete (void*);
++};
++
++class derived : public base {
++ int j;
++};
++
++int new_call_count = 0;
++int expected_size = 0;
++int errors = 0;
++
++int main ()
++{
++ base* base_ptr;
++ derived* derived_ptr;
++
++ expected_size = 4;
++ base_ptr = new base;
++ expected_size = 8;
++ derived_ptr = new derived ();
++
++ if ((new_call_count != 2) || (errors != 0))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
++
++char allocation_space[1000];
++char* allocation_ptr = allocation_space;
++
++void base::operator delete (void* p)
++{
++}
++
++void *base::operator new (size_t size)
++{
++ char* return_value = allocation_ptr;
++
++ new_call_count++;
++ if (size != expected_size)
++ errors++;
++ allocation_ptr = allocation_ptr + size;
++ return (void*) return_value;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// GROUPS passed operator-new
++#include <stdio.h>
++#include <stdlib.h>
++#include <new>
++
++int pass = 0;
++
++void *operator new(size_t sz) throw (std::bad_alloc) {
++
++ void *p;
++
++ pass = 1;
++ p = malloc(sz);
++ return p;
++}
++
++class A {
++public:
++ A() {}
++ ~A() {}
++
++ int a;
++ int b;
++};
++
++
++int main()
++{
++ A *bb = new A[10];
++ delete [] bb;
++
++ if (pass)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new-array.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new-array.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/new-array.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/new-array.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed operator-new
++typedef struct {
++ int a;
++} AStruct;
++
++void MakeBug() {
++ AStruct *job;
++
++ // This used to crash, it should now give error(s).
++ job = new AStruct[];// ERROR - .*
++
++ job = new AStruct;
++}
++
++int main () {
++ MakeBug();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ns1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ns1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ns1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ns1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed old-abort
++struct B
++{
++ void f(char);
++ void g(char);
++};
++
++class C
++{
++ int g();
++};// ERROR - warning
++
++class D2 : public B
++{
++ using B::f; // ok: B is a base of D
++ using C::g; // error: C isn't a base of D2
++}; // ERROR - type C is not a base type for type D2
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed operators
++struct A {
++ int x;
++};
++
++int operator()(A x,float y) { // MUST be a member function// ERROR - .*
++ return 1;
++}
++
++int main() {
++ A x;
++ x(1.0); // ERROR - no match for call
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed operators
++class X { };
++void operator[](X& a, X& b) {} // MUST be a member function// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed operators
++class X { };
++void operator->(X& a, X& b) {} // MUST be a member function// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,121 @@
++// GROUPS passed operators
++// Check that the & operator, when applied to a global function
++// or member function returns a proper value as long as the context
++// in which the result of & is used requires a pointer to a specific
++// unambigous (function-pointer) type.
++//
++// This test fails (in test5()) when compiled with g++ 1.34.1.
++
++extern "C" void printf (char *, ...);
++
++int function (char c);
++int function (float f);
++
++class base {
++ int filler;
++public:
++ int method (char);
++ int method (float);
++};
++
++void* vp;
++
++typedef int (*ptr_to_func_of_char)(char);
++typedef int (*ptr_to_func_of_float)(float);
++typedef int (base::*ptr_to_method_of_char)(char);
++typedef int (base::*ptr_to_method_of_float)(float);
++
++int test2 (void*);
++int test3 (void*);
++int test4 (void*);
++int test5 (void*);
++
++base* base_ptr;
++
++int fail ()
++{
++ printf ("FAIL\n");
++ return 1;
++}
++
++int main ()
++{
++ base_ptr = new base;
++
++ ptr_to_func_of_char p0 = &function;
++ vp = (void*) p0;
++ if (test2 (vp))
++ return fail ();
++ ptr_to_func_of_float p1 = &function;
++ vp = (void*) p1;
++ if (test3 (vp))
++ return fail ();
++ ptr_to_method_of_char p2 = &base::method;
++ vp = (void*) p2; // ERROR -
++ if (test4 (vp))
++ return fail ();
++ ptr_to_method_of_float p3 = &base::method;
++ vp = (void*) p3; // ERROR -
++ if (test5 (vp))
++ return fail ();
++
++ printf ("PASS\n");
++ return 0;
++}
++
++int test2 (void* vp)
++{
++ char ch = 'x';
++
++ return (((ptr_to_func_of_char)vp)(ch) != 9901);
++}
++
++int test3 (void* vp)
++{
++ float flt = 9.9;
++
++ return (((ptr_to_func_of_float)vp)(flt) != 9902);
++}
++
++int test4 (void* vp)
++{
++ char ch = 'x';
++ ptr_to_method_of_char p = (ptr_to_method_of_char) vp; // ERROR - bad type conversion
++
++ return ((base_ptr->*p)(ch) != 9904);
++}
++
++int test5 (void* vp)
++{
++ float flt = 9.9;
++ ptr_to_method_of_float p = (ptr_to_method_of_float) vp; // ERROR - bad type conversion
++
++ if ((base_ptr->*p)(flt) != 9905) {
++ return 1;
++ } else
++ return 0;
++}
++
++int function (char c)
++{
++ c = c;
++ return 9901;
++}
++
++int function (float f)
++{
++ f = f;
++ return 9902;
++}
++
++int base::method (char c)
++{
++ c = c;
++ return 9904;
++}
++
++int base::method (float f)
++{
++ f = f;
++ return 9905;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++// GROUPS passed operators
++// Check that operators may be (directly) recursive.
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ int i;
++};
++
++base base_variable;
++
++base operator+ (const base& left, const base& right)
++{
++ base ret_val;
++
++ ret_val.i = left.i + right.i;
++ return ret_val;
++}
++
++base operator- (const base& left, int right)
++{
++ base ret_val;
++
++ ret_val.i = left.i - right;
++ return ret_val;
++}
++
++// Define the unary ! operator for class base to be the fibonachi
++// operator.
++
++base operator! (const base& right)
++{
++ if (right.i < 2)
++ return right;
++ else
++ return ((!(right-1)) + (!(right-2)));
++}
++
++int main ()
++{
++ base k;
++
++ k.i = 15;
++ k = !k; // fib it!
++
++ if (k.i != 610)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed operators
++class a {
++public:
++ a* operator->() { return this; }
++ void p();
++};
++
++void a::p() {
++ operator->();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed operators
++class A {
++ char *p;
++public:
++ operator const char *() const { return p; }
++};
++
++int foo(const A &a)
++{
++ return (a != 0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/operators8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/operators8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed operators
++struct A {
++ char *p;
++ operator char *();
++};
++
++char foo(A a)
++{
++ return a[0];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed overloading
++class Bed {
++ public:
++ static void bed_func(
++ int (*f)(int &, int, int));
++};
++class g_func {
++public:
++ static int save_status;
++
++ // in compute_harshness, we should be using comptypes, not ==, to
++ // check if this is equivalent to the previous decl; the only
++ // difference is the default arg
++ static int rpt_func(int &status, int expand,
++ int restore_cursor=1 );
++};
++
++int main (int argc,
++ char **argv,
++ char **envp)
++{
++ Bed::bed_func(g_func::rpt_func);
++ return(1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed overloading
++class foo_int
++{
++public:
++ int & i;
++
++ foo_int (int &j) : i(j) {};
++ void inc () { i++; }
++
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed overloading
++class Foo
++{
++public:
++ int f (void);
++};
++
++class Bar : public Foo
++{
++public:
++ int f (int); // ERROR - candidates are
++};
++
++int main ()
++{
++ Bar b;
++
++ b.f ();// ERROR -
++ b.f (10);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// GROUPS passed overloading
++// Check that calls to the correct overloaded virtual
++// functions are generated even where the type of the formal
++// arguments for the overloadings are similar or related.
++
++extern "C" void printf (char *, ...);
++
++int proper_method_called = 0;
++
++struct base {
++ int member;
++ virtual void method (char)
++ {
++ }
++ virtual void method (char *)
++ {
++ }
++};
++
++struct derived : public base {
++ int member;
++ virtual void method (char)
++ {
++ }
++ virtual void method (char *)
++ {
++ proper_method_called++;
++ }
++};
++
++char *message;
++
++int main ()
++{
++ derived derived_object;
++
++ derived_object.method (message);
++
++ if (proper_method_called != 1)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// GROUPS passed overloading
++typedef int rutBoolean;
++
++class rutBigIntRep
++{
++public:
++ friend rutBoolean operator>(const rutBigIntRep& a, const rutBigIntRep& b);
++ operator rutBoolean() const;
++protected:
++ enum Kluge {kluge};
++ rutBigIntRep(Kluge) {}
++ rutBigIntRep();
++ rutBigIntRep(const rutBigIntRep& value);
++ rutBigIntRep& operator=(const rutBigIntRep& value);
++};
++
++rutBoolean operator>(const rutBigIntRep& a, const rutBigIntRep& b) {
++ // This should not result in a warning. It used to warn about the
++ // conversion from int to enum while exploring the possibility of
++ // converting `a' via `operator rutBoolean', then using the
++ // rutBigIntRep(Kluge) constructor. It later realizes it shouldn't
++ // do this, but the call to build_type_conversion was ending up with
++ // a warning in convert.
++ rutBigIntRep diff(a);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed overloading
++ typedef void * (*NewObject) (void);
++
++ class B
++ {
++ public:
++ static void WantsNew (NewObject creator); // ERROR - candidates are
++ };
++
++ class A
++ {
++ public:
++ static A * NewOne (void);
++
++ static void InitClass (void)
++ {
++ B::WantsNew ( (NewObject) A::NewOne );
++ // This used to die in convert_harshness_{ansi,old} cuz it
++ // didn't know what to do about a void type.
++ B::WantsNew ( A::NewOne );// ERROR -
++ }
++ };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed overloading
++class Foo
++{
++public:
++ int operator << (const signed char&);
++ int operator << (const unsigned char&);
++ int operator << (const short&);
++ int operator << (const unsigned short&);
++ int operator << (const long&);
++ int operator << (const unsigned long&);
++};
++
++int main ()
++{
++ Foo fd;
++
++ // We fixed convert_harshness_ansi so it considers the call to
++ // <<(const signed char&) to be a trivial conversion. It used
++ // to always make it a standard conversion, which made it conflict
++ // with <<(const unsigned char &), which is really a std conv.
++ fd << (signed char) 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed overloading
++struct temp_string {
++ temp_string (const unsigned char);
++};
++
++class String {
++ public:
++ String& operator = (temp_string);
++ String& operator = (const String&);
++};
++class S {
++ public:
++ operator temp_string & () const;
++};
++
++S lbuf;
++
++static void e_r ()
++{
++ String a;
++ a = lbuf;
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// GROUPS passed overloading
++extern "C" void printf (char *, ...);
++
++struct NoName {
++
++ int first;
++ int second;
++};
++
++class Casted {
++
++ public:
++
++ NoName x;
++ double y;
++
++ Casted ( int _x , double _y ): y(_y)
++ {
++ x.first = _x;
++ x.second = _x*2;
++ }
++
++ operator NoName() const { return x; }
++ operator double() const { return y; }
++};
++
++int main()
++{
++ Casted c(10,12.34);
++
++ NoName x;
++ double y;
++
++ x = c;
++ y = c;
++
++ if (x.first == 10 && x.second == 20 && y == 12.34)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed overloading
++typedef struct{double re,im;} complex;
++class Complex{public:double re,im;
++ inline void operator=(Complex&X){re=X.re; im=X.im;};};
++void zxcvbnm(int n,...){n=1;}
++int main(){complex c; Complex C;
++zxcvbnm(1,c);
++zxcvbnm(1,C);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/overload9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/overload9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed overloading
++class CLogger
++{
++public:
++ void operator() (int,const char *) {}; // ERROR - candidates
++ void operator() (int,const char *, ...) {}; // ERROR - candidates
++} Log;
++
++class CGLogger : public CLogger
++{
++} GLog;
++
++int main()
++{
++ Log(1,"Test");// ERROR - call of.*
++ Log(1,"Test %d",3);
++ GLog(1,"Test");// ERROR - call of.*
++ GLog(1,"Test %d",3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed parsing
++class Try {
++private:
++ char s;
++public:
++ // an escaped double-quote should not call consume_string inside
++ // reinit_parse_for_block
++ void mf() { s='\"'; }
++};
++
++int main()
++{
++ Try x;
++ x.mf();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed parsing
++class BitString {
++public:
++ int i;
++};
++
++
++typedef BitString BS;
++typedef ::BitString cBS;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++// these are marked as expected errors because they evidence an
++// ambiguity in the grammar between expressions and declarations.
++// when the parser's been cleaned up or rewritten, these two error
++// markers can go away, since they'll no longer occur.
++
++class A
++{
++ public:
++ int high;
++ unsigned int low;
++ A operator+(const A in);
++};
++
++A A::operator+(const A in)
++{
++ if (high==0)
++ return A(); // this works
++ else
++ return (A()); // this works not // gets bogus error - XFAIL *-*-*
++} // gets bogus error - XFAIL *-*-*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++// this is marked as an expected error because it evidences an
++// ambiguity in the grammar between expressions and declarations.
++// when the parser's been cleaned up or rewritten, the error
++// marker can go away, since it'll no longer occur.
++
++class B
++{
++public:
++ B( int t ) {}
++ void f() {}
++};
++
++int g() { return 0; } // gets bogus error - referenced below XFAIL *-*-*
++
++int main()
++{
++ int try1;
++ B( try1 ).f(); // no syntax error
++ B b( g() ); // no syntax error
++ B( ::g() ).f(); // no syntax error
++ B( g() ).f(); // gets bogus error - treated as decl XFAIL *-*-*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++// this is marked as an expected error because it evidences an
++// ambiguity in the grammar between expressions and declarations.
++// when the parser's been cleaned up or rewritten, the error
++// marker can go away, since it'll no longer occur.
++
++class ptr8
++ {
++public:
++ ptr8(unsigned char *string,int len);
++ };
++
++template <unsigned int S>
++class buf
++ {
++public:
++ buf(const ptr8& aRef);
++ };
++
++int main()
++ {
++ unsigned char b[3];
++ buf<3> b2(ptr8(&b[0],3)); // gets bogus error - XFAIL *-*-*
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/parse6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/parse6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++// this is marked as an expected error because it evidences an
++// ambiguity in the grammar between expressions and declarations.
++// when the parser's been cleaned up or rewritten, the error
++// marker can go away, since it'll no longer occur.
++
++class A { };
++
++int main() {
++ A a = a;
++ A b(b); // gets bogus error - XFAIL *-*-*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed prefix-postfix
++class foo {
++public:
++ operator ++ (); // ERROR - no type or storage class
++};
++
++int main()
++{
++ foo x;
++
++ // This should fall back to calling operator++(), and be an error with
++ // the -pedantic flag.
++ x++;// ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed initialization
++class foo {
++public:
++ operator ++ (); // ERROR - no type or storage class
++ operator ++ (int); // ERROR - no type or storage class
++ operator ++ (char); // illegal// ERROR - .*
++ operator ++ (short); // illegal// ERROR - .*
++ operator ++ (long); // illegal// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed prefix-postfix
++class Y {
++public:
++ friend Y operator++ (Y&);
++ friend Y operator++ (Y&, char); // illegal// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed prefix-postfix
++class Y {
++public:
++ friend Y operator++ (Y&);
++
++ // This is legal---it's a good test to make sure that grokfndecl's
++ // checking of the arguments is sane.
++ friend Y operator++ (Y&, int);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed ptolemy-bugs
++class Tcl_Interp;
++
++class PTcl {
++public:
++ PTcl(Tcl_Interp* interp = 0);
++ ~PTcl();
++ int alias(int argc,char** argv);
++};
++
++typedef int (PTcl::*InterpFuncP)(int,char**);
++
++struct InterpTableEntry {
++ char* name;
++ InterpFuncP func;
++};
++
++
++static InterpTableEntry funcTable[] = {
++ { "alias" , &PTcl::alias } ,
++ 0, 0
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++// GROUPS passed ptolemy-bugs
++#include <iostream.h>
++
++class PTcl {
++public:
++ int dispatcher(int which,int argc,char** argv);
++ // fns in the table
++ int one(int argc, char** argv);
++ int two(int argc, char** argv);
++ int three(int argc, char** argv);
++};
++
++// An InterpFuncP is a pointer to an PTcl function that takes an argc-argv
++// argument list and returns TCL_OK or TCL_ERROR.
++
++typedef int (PTcl::*InterpFuncP)(int,char**);
++
++struct InterpTableEntry {
++ char* name;
++ InterpFuncP func;
++};
++
++// Here is the function table and dispatcher function.
++// These macros define entries for the table
++
++#define quote(x) #x
++#define ENTRY(verb) { quote(verb), &PTcl::verb }
++
++static InterpTableEntry funcTable[] = {
++ ENTRY(one),
++ ENTRY(two),
++ ENTRY(three),
++ {0, 0}
++};
++
++int PTcl::dispatcher(int which, int argc, char** argv) {
++ return (this->*(funcTable[which].func))(argc, argv);
++}
++
++void printargs(char** argv) {
++// while (*argv) {
++// cout << " " << *argv++;
++// }
++// cout << "\n";
++}
++
++int PTcl::one(int, char** argv) {
++ cout << "FAIL\n";
++ printargs(argv);
++ return 0;
++}
++
++int PTcl::two(int, char** argv) {
++ cout << "PASS\n";
++ printargs(argv);
++ return 0;
++}
++
++int PTcl::three(int, char** argv) {
++ cout << "FAIL\n";
++ printargs(argv);
++ return 0;
++}
++
++int main (int argc, char** argv) {
++ PTcl obj;
++ obj.dispatcher(1,argc,argv);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed pointers-to-members
++class my_class
++{
++public:
++ typedef void func_type (int num);
++ my_class (int num, func_type* proc);
++ void dispatch (void);
++private:
++ int _num;
++ func_type *_proc;
++};
++
++my_class::my_class (int num, func_type* proc) : _num(num), _proc(proc)
++{
++}
++
++void my_class::dispatch (void)
++{
++ _proc(_num);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed pointers-to-members
++struct C {
++ struct N {
++ int g1(int);
++ int g2(int);
++ };
++
++ typedef int (N::*pmfn)(int);
++
++ int f1(int);
++ int f2(int);
++};
++
++int (C::*f)(int) = &C::f1;
++
++/*
++ The compiler should not crash on the line below; this change fixes it:
++ * cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't
++ have TYPE_PTRMEMFUNC_P set before we try to build its
++ CLASSTYPE_ID_AS_LIST.
++*/
++
++C::pmfn h = &C::N::g1;
++
++int (C::N::*g)(int) = &C::N::g2;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++// GROUPS passed pointers-to-members
++template<class T> class TemplA {
++ T t;
++};
++
++
++template<class T> class TemplB {
++public:
++ typedef void (T::*TClassMethod)();
++
++private:
++/*
++ This line should not crash cuz of the get_decl_list change in this:
++ * cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't
++ have TYPE_PTRMEMFUNC_P set before we try to build its
++ CLASSTYPE_ID_AS_LIST.
++ (get_decl_list): Likewise, when trying to read it.
++*/
++ TemplA<TClassMethod> Tmethod;
++};
++
++
++class C {
++ int a;
++};
++
++int main(int, char**) {
++
++ TemplB<C> test;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed pointers-to-members
++class X {
++ private:
++ int i;
++ public:
++ X(int k) { i=k; }
++ int operator=(X &a) { return i = a.i; }
++ int operator=(int ii) { return i = ii; }
++};
++int main(void)
++{
++ int (X::*op1_ptr)(X&);
++ op1_ptr = &X::operator=; // g++ gives error
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/README gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/README
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/README 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/README 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++
++abstract - abstract functions
++alignof - gcc alignof builtin
++ambiguity - diagnosing ambiguities
++arm - ARM cases
++array-refs - arrays of references
++bit-fields - bit fields
++chainon - deaths cuz we call chainon() incorrectly
++copy - copy constructors
++crash - old compiler crashes/aborts
++cvt - user-defined conversions
++def-fns - default function generation (in add'n to copy)
++enum-clash - int vs enum
++enum - enumerated types
++err-msg - error messages
++friend - dealing with friend functions and classes
++groff - crashes derived from groff code
++init - initialization bugs
++label - handling labels
++line - line numbers in error messages
++misc - miscellaneous tests that didn't fit another category
++nest - nested types
++new-array - doing new of an array
++new - generic operator new bugs
++operators - tests for various overloaded operators
++parse - parser bugs
++prepost - prefix/postfix operator ++/--
++ptolemy - bugs derived from ptolemy
++recurse - infinite recursion in the compiler
++redecl - handling redeclarations
++scope - managing scopes
++shadow - shadowing of params, etc
++sizeof - ARM compliance w/ sizeof operator
++sorry - old "sorry, not implemented" messages
++static - handling static data
++template - template bugs
++union - handling unions
++visibility - access control and visibility checking
++warnings - warning messages
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/recurse.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/recurse.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/recurse.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/recurse.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,80 @@
++// Build don't link:
++// GROUPS passed recursive-aborts
++// types
++typedef unsigned int DBflag; // for storing user flag value
++typedef unsigned long DBoffset; // 32-bit unsigned integer
++typedef DBoffset DBsize; // type for storing sizes of objects
++typedef unsigned char DBbyte; // 8-bit unsigned char
++
++class DBlink
++{
++protected:
++ DBbyte link[4]; // hold link in portable MSB first format
++public:
++ DBlink(DBoffset = 0, DBflag = 0);
++ DBlink &operator=(const DBlink &);
++ DBlink &operator=(DBoffset);
++ operator DBoffset();
++ operator const DBbyte *() { return link; }
++ void set_flag() { link[0] |= 0x80; }
++ void reset_flag() { link[0] &= 0x7f; }
++ int test_flag() const { return (link[0] & 0x80) != 0; }
++};
++
++typedef DBlink DBsizerec; // hold data record size in portable format
++
++// constants
++const DBoffset DB_NULL = 0;
++
++class DBlinkrec
++{
++protected:
++ // offsets are stored with MSB in link[0]
++ DBlink l; // offset into link file of right child - MSB = red bit
++ DBlink r; // offset into link file of left child - MSB = delete
++ DBlink d; // offset into parallel data file - MSB = user flag
++public:
++ DBlinkrec():l(DB_NULL), r(DB_NULL), d(DB_NULL) {}
++ void make_red() // set link to red
++ { l.set_flag(); }
++ void make_black() // set link to black
++ { l.reset_flag(); }
++ int is_red() const // indicates whether this is a red link
++ { return l.test_flag(); }
++ void set_discard() // set discard flag
++ { r.set_flag(); }
++ void reset_discard() // reset discard flag
++ { r.reset_flag(); }
++ int is_discarded() const // check discard flag
++ { return r.test_flag(); }
++ void set_flag() // set user flag
++ { d.set_flag(); }
++ void reset_flag() // reset user flag
++ { d.reset_flag(); }
++ int is_flag() const // check user flag
++ { return d.test_flag(); }
++
++ friend class DataBase;
++};
++
++class DBpathrec : public DBlinkrec
++{
++ DBoffset offset; // offset of link record in LNK file
++public:
++ DBpathrec():offset(DB_NULL) { }
++ DBpathrec(DBoffset off, const DBlinkrec &lr):offset(off), DBlinkrec(lr) {}
++ operator DBoffset() { return offset; }
++ DBpathrec &operator=(DBoffset off) { offset = off; return *this; }
++ DBpathrec &operator=(const DBpathrec &pr)
++ { offset = pr.offset; (DBlinkrec)*this = (DBlinkrec)pr; return *this; }
++
++ friend class DataBase;
++};
++
++int main()
++{
++ DBpathrec a(), b();
++
++ a = b;// ERROR - non-lvalue in assignment.*
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed redeclaration
++inline int min(int x, int y) {return x < y ? x : y;} /* 235 */// ERROR - .*
++int min(int a, int b);
++inline int min(int a, int b) {return (a < b)?a:b;}// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++// GROUPS passed redeclaration
++// Check that if multiple declarations of the same single
++// function are present in different places in the same file,
++// and if these declarations differ (as allowed) in the number
++// of argument defaults provided, that correct values are
++// passed at all call points anyway.
++
++extern "C" void printf (char *, ...);
++
++void receiver (int ii, int jj);
++
++void sender_1 ()
++{
++ receiver (3,7);
++}
++
++void receiver (int ii, int jj = 9);
++
++void sender_2 ()
++{
++ receiver (5);
++}
++
++int ii_sum = 0;
++int jj_sum = 0;
++
++void sender_3 ();
++
++int main ()
++{
++ sender_1 ();
++ sender_2 ();
++ sender_3 ();
++ if (ii_sum != 13 || jj_sum != 25)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++ return 0;
++}
++
++void receiver (int ii, int jj)
++{
++ ii_sum += ii;
++ jj_sum += jj;
++}
++
++void sender_3 ()
++{
++ receiver (5);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed redeclaration
++class foo
++{
++public:
++ int bar(int a);
++};
++
++
++void bar(int &a);
++
++int foo::bar(int a) {
++ int a = 0; // Should this be an error ?// ERROR - declaration.*
++
++ bar(a);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/reference1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/reference1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/reference1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/reference1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// Special g++ Options: -w
++// GROUPS passed references
++// Check that if a reference is initialized to refer to a value
++// which is returned from a function call, the actual call to
++// the function is only invoked for the original initialization
++// of the reference, and not for each subsequent use of the
++// reference.
++//
++// This test fails with G++ 1.35.0- (pre-release).
++// Reported 4/4/89 by Kim Smith
++
++extern "C" void printf (char *, ...);
++
++struct base {
++ mutable int data_member;
++
++ base () {}
++ void function_member () const;
++};
++
++base base_object;
++
++base base_returning_function ();
++
++int call_count = 0;
++
++int main ()
++{
++ const base& base_ref = base_returning_function ();
++
++ base_ref.function_member ();
++ base_ref.function_member ();
++ base_ref.data_member = 99;
++
++ if (call_count == 1)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++
++ return 0;
++}
++
++base base_returning_function ()
++{
++ base local_base_object;
++
++ call_count++;
++ return local_base_object;
++}
++
++void base::function_member () const
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed RTTI
++#include <typeinfo>
++
++struct B { virtual ~B(){} };
++struct D0 : public virtual B { virtual ~D0(){} };
++struct D1 : public virtual D0 { virtual ~D1(){} };
++struct C : public virtual B, public D1 { virtual ~C() { } };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed scoping
++int f (int i) {
++ if (i)
++ for (int j = i; j; j--)
++ ;
++ return j; // error: j should only be in scope inside the body of `for'// ERROR - .*
++} // ERROR - non-void
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// GROUPS passed scoping
++class A
++{
++ public:
++ A() {}
++ ~A() {}
++ virtual void f() {}
++};
++
++class B : public A
++{
++ public:
++ B() {}
++ ~B() {}
++ virtual void f() {}
++};
++
++
++B GLOBAL_B;
++
++B& foo() {return GLOBAL_B;}
++
++int main()
++{
++ // build_scoped_method_call and build_scoped_ref should know how
++ // to deal with a reference for this
++ foo().A::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed scoping
++// This is fixed when NEW_CLASS_SCOPING is on.
++
++template<class T>
++class ArrayG {
++public:
++ ArrayG();
++protected:
++ const unsigned INITIAL;
++ T* array;
++};
++
++template<class T>
++ArrayG<T>::ArrayG():
++array(new T[INITIAL])
++{ }
++
++struct X {
++ struct Correspondence {
++ int i;
++ };
++
++ void fill(ArrayG<Correspondence>& a);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++// GROUPS passed scoping
++class BitString {
++public:
++ int i;
++ int length() const;
++};
++
++typedef BitString BS;
++
++class V {
++public:
++ class BitString {
++ public:
++ static int x(const ::BitString& value);
++ static int y(const class ::BitString& value); // should be parsed ok
++ static int z(const BS& value);
++ };
++};
++
++int
++V::BitString::x(const ::BitString& value)
++{ return value.length(); }
++
++int
++V::BitString::y(const class ::BitString& value) // should be parsed ok
++{ return value.length(); }
++
++int
++V::BitString::z(const BS& value)
++{ return value.length(); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/scope5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/scope5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed scoping
++class Integer {
++public:
++ int i;
++};
++
++class Type {
++ enum Class { ENUM, INTEGER };
++
++ class Description {
++ public:
++
++ };
++
++ class Integer: public Description {
++ public:
++ ::Integer low;
++ ::Integer high;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed errors
++void f( int a) {
++ int a; // this should be an error now// ERROR - .*
++ {
++ int a;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed sizeof
++// ARM $5.3.2
++
++void f() { }
++
++int
++main()
++{
++ // sizeof may not be applied to a function
++ int i = sizeof( f);// ERROR - .*
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed sizeof
++// ARM $5.3.2
++
++void f() { }
++
++struct foo { int bit : 1; };
++
++int
++main()
++{
++ // sizeof may not be applied to a bit-field
++ foo f;
++ int i = sizeof (f.bit);// ERROR - .*
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed sizeof
++// ARM $5.3.2
++
++class bar;
++
++int
++main()
++{
++ // sizeof may not be applied to an undefined class
++ int k = sizeof (bar);// ERROR - .*
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed sizeof
++// ARM $5.3.2
++
++int
++main()
++{
++ // sizeof may not be applied to the type void
++ int l = sizeof (void);// ERROR - .*
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// GROUPS passed sizeof
++// ARM $5.3.2
++
++extern "C" void printf (char *, ...);
++
++class foo {};
++
++int
++main ()
++{
++ // The size of any class or class object is larger than zero.
++ int i = sizeof (foo);
++ if (i > 0)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++// GROUPS passed old-sorry
++class a {
++public:
++ int* foo();
++};
++
++a aa;
++a* ap;
++
++class b {
++public:
++ int ok(int* p =aa.foo());
++
++ // dump_init should know what to do with this NON_LVALUE_EXPR
++ int f(int* p =ap->foo());
++};
++
++ int
++b::ok(int *p)
++{
++ return 0;
++}
++
++ int
++b::f(int *p)
++{
++ return 0;
++}
++ void
++bar()
++{
++ b b;
++ b.ok();
++ b.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/static1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/static1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/static1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/static1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed static
++class A { public: int a; };// ERROR - .*
++void foo7 () { A::a = 3; }// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/static2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/static2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/static2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/static2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed static
++class A
++{
++ public:
++ void member(void)
++ {
++ }
++
++ static void staticMember()
++ {
++ member (); // illegal, no object for calling non-static method// ERROR - .*
++ }
++};
++
++int main()
++{
++ A::staticMember();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/static3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/static3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/static3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/static3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed static
++class foo{
++public:
++ static void bar( int i ){ value = i; }
++ static int value;// ERROR - .*
++};
++
++const int foo::value = 0; // should be an error.// ERROR - .*
++
++int main(){
++ foo::bar( 1 );
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/synth1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/synth1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/synth1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/synth1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors -g -Wall
++// GROUPS passed synthetics
++// excess errors test - XFAIL sparc64-*-elf
++// Check to make sure that g++ doesn't get freaked out about the use
++// of generated methods that it supposedly "can't see".
++
++class Char {
++public:
++ Char();
++ Char(char v);
++
++ // synthetic copy-constructor and operator=
++private:
++ char value;
++};
++
++class XChar: public Char {
++public:
++ XChar();
++ XChar(char v, int serial);
++
++ void operator=(const XChar& other);
++private:
++ int serial;
++};
++
++void
++XChar::operator=(const XChar& other)
++{
++ Char::operator=(other);
++ // serial stays the same
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// Build don't link:
++// GROUPS passed templates
++template <class Called>
++class aCallback
++{
++public:
++ aCallback(Called& obj, int (Called::*met)());
++
++ int callback();
++
++protected:
++
++private:
++ // the object to call
++ Called& object;
++
++ // the method to apply
++ int (Called::*method)();
++
++};
++
++template <class Called>
++aCallback<Called>::aCallback(Called& obj,
++ int (Called::*met)()) :
++object(obj),
++method(met)
++{};
++
++template <class Called>
++int aCallback<Called>::callback()
++{
++ return (object.*method)();
++}
++
++struct myStruct
++{
++ int action() {return 24;};
++};
++
++int main()
++{
++ myStruct toto;
++
++ aCallback<myStruct> cb(toto, &myStruct::action);
++
++ return cb.callback();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed templates
++inline void foo (const int &x) {}
++
++template <class type>
++inline void foo (const type &x) {x.eat_this_and_die();}
++
++int main (int argc, char **argv) {foo (argc);}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed templates
++template<class T>
++class ListS {
++public:
++ class Vix {
++ public:
++ Vix();
++ };
++};
++
++template<class T>
++ListS<T>::Vix::Vix()
++{ }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed templates
++template<class T> class Stack {
++ public:
++ Stack (int s = 10); //Comment out "= 10" and it will compile
++ ~Stack(void); //Omitting "void" doesn't help
++};
++
++template<class T> Stack<T>::~Stack(void)
++{ }
++
++//If this definition comes before the one for ~Stack, the error message
++//about redeclaration of `void Stack<int>::~Stack()' will not occur.
++template<class T> Stack<T>::Stack(int s)
++{ }
++
++int main () {
++ Stack<int> stk(10);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed templates
++template<class T> class TList {
++ typedef void (T::*TVOIDFUNT)();
++ typedef T* (T::*TTPFUNT)(T*);
++};
++
++class A;
++class B : TList<A> { };
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed templates
++struct Regex { int i; Regex(char *, int); };
++template<class KEY>
++class NDAMName {
++public:
++ static const Regex pattern;
++ static unsigned sequence_number;
++};
++
++const Regex NDAMName<'L'>::pattern("^[Ll](.*)$", 1);// ERROR - type/value.*
++unsigned NDAMName<'L'>::sequence_number = 0;// ERROR - type/value
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed templates
++template<class T> class X;
++typedef X<int> IX;
++
++template<class T>
++class X {
++public:
++ T x;
++};
++
++struct A {
++ IX c;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++class Base
++{
++public:
++ Base() { }
++};
++
++template <class memberType, class keyType>
++class Middle : public Base<memberType>
++{
++public:
++ Middle (keyType const & (*ko) (memberType const &))
++ {
++ }
++};
++
++// EXCHANGE the following lines for this code to work.
++//template <class memberType, class keyType> class Middle;
++template <class T, class keyType> class Middle;
++
++struct Test : public Middle <int, int>
++{
++ Test();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed templates
++// g++-2.2.1: member functions returning a template type
++
++
++template <class T> struct list { };
++
++struct A
++{
++ list<int> L;
++
++ list<int> get_list();
++
++};
++
++
++list<int> A::get_list() { return L; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed templates
++template <class A, class B> class Map;
++
++class Foo
++{
++public:
++ static Map<int,int> bar;
++};
++
++template <class A, class B>
++class Map
++{
++public :
++ int find();
++};
++
++int main()
++{
++ int z = Foo::bar.find();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Build don't link:
++// GROUPS passed templates
++template<class T>
++class L {
++public:
++ L();
++
++ T x[30];
++ int doit(int i) const;
++};
++
++#ifdef BUG
++template<class T>
++int
++L<T>::doit(int i) const
++{
++ return x[i].z;
++}
++#endif
++
++class X {
++public:
++ class Y {
++ public:
++ Y();
++ Y(int);
++
++ int z;
++ };
++
++ L<Y> ly;
++};
++
++#ifndef BUG
++template<class T>
++int
++L<T>::doit(int i) const
++{
++ return x[i].z;
++}
++#endif
++
++static X x;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// GROUPS passed templates
++extern "C" int printf (const char *, ...);
++
++template <class T>
++class Foo
++{
++public:
++ void func (int const& i);
++};
++
++template <class T>
++void Foo<T>::
++func (int const& i)
++{}
++
++
++int main ()
++{
++ Foo<int const> foo;
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++class T_Base
++{};
++
++template <class T>
++class T_Derived
++: public T_Base<T>
++{};
++
++
++class Base
++{
++public:
++ Base (float name);
++};
++
++class Derived
++: public Base
++{
++private:
++ T_Base<int>* data_; // Fix (1): Change date_ from T_Base<int>* to T_Derived<int>*
++
++public:
++ Derived (float name);
++};
++
++
++Derived::
++Derived (float name)
++: Base(name),
++ data_(new T_Derived<int>())
++{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// GROUPS passed templates
++extern "C" void printf (char *, ...);
++
++template <class F>
++class Temp
++{
++ F func_;
++public:
++ Temp (F f) :func_(f) {}
++};
++
++int func (int h = 1, int z = 2) { return h+z; }
++
++int main ()
++{
++ Temp<int(*)(int, int)> temp (func);
++
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++class Temp_Base
++{};
++
++template <class T>
++class Temp_Derived
++: public Temp_Base<T>
++{
++public:
++ Temp_Derived (int i = 10) {}
++};
++
++
++class Base
++{
++ float r_;
++public:
++ Base (float r) : r_(r) {}
++};
++
++class Derived
++: public Base
++{
++private:
++ Temp_Base<int>* boo_;
++public:
++ Derived (float);
++};
++
++Derived::
++Derived (float form)
++: Base(form),
++ boo_(new Temp_Derived<int>)
++{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++// GROUPS passed templates
++class V {
++ public:
++ V();
++ V(int);
++ };
++
++template <int I> class AA: public virtual V {
++ public:
++ AA();
++ AA(int);
++ };
++
++template <int I> class BB : public virtual V {
++ public:
++ BB();
++ BB(int);
++ };
++
++template <int I> AA<I>::AA() {};
++template <int I> AA<I>::AA(int i): V(i) {};
++template <int I> BB<I>::BB() {};
++template <int I> BB<I>::BB(int i) {};
++
++class CC : public AA<1>, public BB<2> {
++ public:
++ CC();
++ CC(int);
++ };
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed templates
++ template<class K, class V> class MapLS { };
++ class String {};
++ class X1 { };
++ class RefProto { };
++ template<class REP> class Ref { };
++
++ class MapLS<String, Ref<X1> >: public MapLS<String, RefProto> {
++ public:
++ ~MapLS();
++ };
++
++ MapLS<String, Ref<X1> >::~MapLS() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed templates
++class X {
++ const char *fptr;
++public:
++ X(const char *ptr) { fptr = ptr; }
++ operator const char*() { return fptr; }
++};
++
++int main(){
++ X x1("1234");
++ X x2(x1+1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed templates
++ template <class ElementType> class A
++ { public:
++ A(ElementType) {}
++ ElementType get() const ;
++ };
++
++ template <class ElementType> ElementType A<ElementType>::get() const
++ { return ElementType(0); }
++
++int main() { const A<short> a(3); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed templates
++template <class Q>
++class Conc {
++public:
++ static int body();
++};
++
++template <class Q>
++int Conc<Q>::body() {return 0;}
++
++int main () {
++ Conc<int> s2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed templates
++
++ template<class K, class V> class MapLS { };
++ class String {};
++ class X1 { };
++ class RefProto { };
++ template<class REP> class Ref { };
++
++ class MapLS<String, Ref<X1> >: public MapLS<String, RefProto> {
++ public:
++ ~MapLS();
++ };
++
++ MapLS<String, Ref<X1> >::~MapLS() { }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Build don't link:
++// GROUPS passed templates
++// PRMS Id: 13218
++
++struct C {
++ int x;
++ char y;
++ double z;
++};
++C c02;
++
++template <int* ip> struct A {
++ int* p;
++ A() : p(ip) {}
++};
++
++template <C* cp> struct B {
++ C* p;
++ B() : p(cp) {}
++};
++
++int i00;
++
++int main(void)
++{
++ A<&i00> a00;
++
++ extern int i01;
++ A<&i01> a01;
++
++ B<&c02> b02;
++
++ extern C c03;
++ B<&c03> b03;
++}
++
++int i01;
++C c03;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// GROUPS passed templates
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++int count = 0;
++
++void
++die (int x)
++{
++ if (x != ++count)
++ {
++ printf ("FAIL\n");
++ exit (1);
++ }
++}
++
++class A {
++ public:
++ void f() const { die (-1); }
++};
++
++
++template <class Item>
++class B : public A {
++ public:
++ void f() const;
++};
++
++template <class Item>
++inline void B<Item>::f() const { die (1); }
++
++template <class Item>
++class C : public A {
++ public:
++ void f() const { die (2); }
++};
++
++
++int main()
++{
++ B<int> b;
++ C<int> c;
++
++ b.f(); //- bugged, (A::f() called instead of B::f())
++ c.f(); //- works fine (C::f() called)
++
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed templates
++// This used to be a circularity in chainon.
++template <class ARG> struct TMPL {
++ typedef int ARG::*ARG_data_member_ptr;
++ typedef void (ARG::*ARG_func_member_ptr) ();
++};
++
++struct S { };
++
++TMPL<S> object;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// Build don't link:
++// GROUPS passed templates
++template<class T>
++class Vector
++{
++public:
++ Vector(int x);
++ ~Vector();
++ T& operator [] (int i);
++
++private:
++ T* v;
++ int sz;
++} ;
++
++template<class T>
++Vector<T>::Vector(int x)
++{
++ sz = x;
++ v = new T (sz);
++} ;
++
++template<class T>
++Vector<T>::~Vector()
++ { delete [] v; } ;
++
++template<class T>
++T &
++Vector<T>::operator [] (int i)
++ { return v[i]; } ;
++
++int
++main(int, char **)
++{
++ Vector<int> intvec(3);
++
++ intvec[0] = 1;
++ intvec[1] = 2;
++ intvec[2] = 3;
++
++ for (int i = 0; i < 3; i++)
++ intvec[i];
++
++ return 0;
++}
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed templates
++struct B {
++};
++
++struct X : B {
++ ~X ();
++};
++
++struct Request {
++ X s;
++};
++
++template <class ET> class TC {
++ ET data;
++};
++
++struct TMem {
++
++ ~TMem() {}
++
++ TC<Request> *req;
++};
++
++struct FIO {
++
++ void init ();
++
++ FIO () { init(); }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// Build don't link:
++// GROUPS passed templates
++template <class ET>
++class ChainElem {
++public:
++
++ ET data;
++};
++
++template <class ET>
++class Chain {
++public:
++
++ ChainElem<ET> *first;
++
++ virtual ~Chain() {}
++
++};
++
++struct B {
++};
++
++struct X : B {
++ ~X ();
++};
++
++struct TBNFexpression {
++};
++
++struct TCaseLabelPair {
++};
++
++struct TVariant {
++ Chain<TCaseLabelPair> CaseLabelList;
++};
++
++struct TCaseConstruct {
++ Chain<TBNFexpression> TagFieldPrefixes;
++ Chain<TVariant> Variants;
++};
++
++struct Production {
++ X TypeName;
++};
++
++struct SimpleSyntax {
++ Chain<Production> Productions;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed templates
++#include <stdio.h>
++
++// make sure we accept unions for templates
++template<int n>
++union Double_alignt{
++ double for_alignt;
++ char array[n];
++
++};
++
++int main(){
++
++
++ Double_alignt<20000> heap;
++
++ printf(" &heap.array[0] = %d, &heap.for_alignt = %d\n", &heap.array[0], &heap.for_alignt);
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/template9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/template9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// GROUPS passed templates
++// Test that the compiler will emit the definition of min given just
++// the declaration. At one point in the past, it did not.
++// Special g++ Options: -fguiding-decls
++#include <iostream.h>
++
++template <class T> inline T min(T a, T b) { return (a < b) ? a : b;};
++
++double min(double,double); // this should expand the template
++
++main () {
++ int a = 1, b = 2;
++ double aa = 2.0, bb = 1.2;
++ cout << min(a,b) << ", " << min(aa,bb) << "\n";
++ if (min (a, aa) == a)
++ cout << "PASS" << endl;
++ else
++ cout << "FAIL" << endl;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed temporaries
++#include <stdio.h>
++
++int main ()
++{
++ int a = 2;
++
++ if (----a == 0)
++ printf ("a = 0\n");
++
++ printf ("a = %d\n", a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++
++class baseClassA
++{
++public:
++private:
++ class internalClassA
++ {
++ public:
++ private:
++ typedef int privateType;
++
++ privateType memberA;
++ };
++};
++
++class baseClassB
++{
++public:
++private:
++ class internalClassA
++ {
++ public:
++ private:
++ typedef unsigned int privateType;
++
++ privateType memberB;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/union1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/union1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/union1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/union1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed unions
++// This is fixed by finish_anon_union doing a string_cst_equal check on
++// the DECL_SIZE of the decls, instead of comparing the DECL_SIZE nodes.
++ unsigned
++ hash(const double d)
++ {
++ static union {
++ unsigned asint[2];
++ double asdouble;
++ };
++ asdouble = d;
++ return asint[0] ^ asint[1];
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/union2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/union2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/union2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/union2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed unions
++class B;
++
++struct A {
++ A(B* x) : i(x) {}
++ A() : i(0) {}
++
++ union {
++ B* i;
++ B* c;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/union3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/union3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/union3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/union3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed unions
++union alan {
++int a;
++char *b;
++alan();
++};
++
++alan mary;
++
++alan::alan()
++{
++ a=0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed visibility
++struct base
++{
++ protected:
++ void base_func() {}// ERROR - .*is protected.*
++};
++
++struct derived : public base
++{
++ protected:
++ void derived_func(base *ptr) { ptr->base_func(); }// ERROR - within this context
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed visibility
++class foo {
++protected:
++ int i; // ERROR - protected
++};
++
++class bar : public foo {
++public:
++ friend void baz (foo *);
++};
++
++void baz (foo *f)
++{
++ f->i = 1; // error: i is protected// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed visibility
++class X {
++ void g (int); // ERROR - private
++public:
++ void g (double);
++};
++
++class Y : public X { void f() { g (1); } }; // ERROR - private
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Build don't link:
++// GROUPS passed visibility
++// Used to say:
++// manip.cc:17: member `_f' is a private member of class `B<int>'
++// manip.cc:17: member `_a' is a private member of class `B<int>'
++
++class A {};
++
++template <class TP>
++class B
++{
++ A &(*_f) (A &, TP);
++ TP _a;
++public:
++ B (A &(*f) (A &, TP), TP a) : _f (f), _a (a) {}
++ friend A &operator<< <>(A &o, const B<TP> &m);
++};
++
++template <class TP>
++inline A &
++operator<< (A &o, const B<TP> &m)
++{
++ (*m._f) (o, m._a);
++ return o;
++}
++
++A &setw (A &, int);
++B<int> setw (int n)
++{
++ return B<int> (setw, n);
++}
++
++A x;
++
++void f ()
++{
++ x << setw (2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed visibility
++template <class T>
++class Feld {
++public:
++ Feld(const Feld&) {}
++};
++
++class Polynom : private Feld<double> {
++ Polynom();
++ friend Polynom f(const Polynom&);
++};
++
++Polynom f(const Polynom& p) { return p; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed visibility
++template<int K> class B;
++template<int K> class A {int n; friend class B<K>;};
++template<int K> class B {public: void method(A<K>) const;};
++template<int K> void B<K>::method(A<K> X) const {X.n=0;}
++typedef B<2> B2;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed visibility
++class bottom
++{
++public:
++ int b; // ERROR - private
++};
++class middle : private bottom
++{
++public:
++ void foo () { b; }
++};
++class top : public middle
++{
++public:
++ void bar () { b; }// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed visibility
++class X
++{
++public:
++ void fn ();// ERROR - .*
++};
++class Y : private X
++{};
++
++class Unrelated
++{
++public:
++ void foo () { Y y; y.fn (); }// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed visibility
++// Make sure private inheritance affects the visibility of
++// static members used in an inherited context.
++class foo
++{
++public:
++ static int y; // ERROR - private
++};
++class foo1 : private foo
++{ };
++class foo2 : public foo1
++{ public:
++ void bar () { y; }// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed visibility
++class A {
++public:
++ void aMethod(void) {};// ERROR - .*
++};
++
++class AA : A { };
++
++class B {
++public:
++ void thisMethod() {
++ AA ana;
++ ana.aMethod();// ERROR - .*
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// GROUPS passed virtual-tables
++// Check that virtual function tables are generated and used
++// even for struct's/classes which have no explicit constructors.
++
++extern "C" void printf (char *, ...);
++
++int base_func_member_1_called = 0;
++int derived_func_member_1_called = 0;
++
++struct base {
++ virtual void func_member_1 ()
++ {
++ base_func_member_1_called++;
++ }
++};
++
++struct derived : public base {
++ virtual void func_member_1 ()
++ {
++ derived_func_member_1_called++;
++ }
++
++ virtual void func_member_2 ()
++ {
++ }
++};
++
++base* bp1;
++base* bp2;
++
++int main ()
++{
++ bp1 = new base;
++ bp2 = new derived;
++
++ bp1->func_member_1 ();
++ bp2->func_member_1 ();
++
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed warnings
++void foo()
++{
++ int i;
++ if (1) {
++ for (int i = 0; i < 10; i++)
++ ;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed warnings
++// there should be a warning about foo only defining private methods
++class foo {
++ int bar();
++};// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed warnings
++class K {
++public:
++ void f() {
++ }; // there should be no warning about this semicolon
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Special g++ Options: -O2 -Wall
++// GROUPS passed warnings
++class A {
++int i;
++public:
++ void funcA(void) {
++ funcB();
++ }
++
++ // The compiler should not emit a warning about not being
++ // able to inline this function.
++ void funcB(void) {
++ i++;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed warnings
++int
++main ()
++{
++ register int x;
++ int * foo = &x; // in C++ it's perfectly legal to do this
++
++ return 0;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed warnings
++enum TypeKind { ATK, BTK } ;
++
++struct Type {
++ enum TypeKind kind : 8;
++ void setBTK();
++};
++
++void Type::setBTK() { kind = BTK; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// Special g++ Options: -O2 -Wall -ansi -pedantic
++// GROUPS passed warnings
++// should not emit this warning about func:
++// x.C:2: warning: invalid storage class for function `func'
++//
++template <class T> inline void func(T)
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Special g++ Options: -O2 -Wall
++// GROUPS passed warnings
++template<class T>
++class X {
++public:
++ void kill(unsigned i)
++ { vec[i].~T(); }
++ T *vec;
++};
++
++class Y { };
++
++void
++x()
++{
++ X<int> x;
++ x.kill(0);
++ X<Y> y;
++ y.kill(0);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Special g++ Options: -Wall
++// GROUPS passed warnings
++bool foo(unsigned char c)
++{
++ return (c & 17) != 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Special g++ Options: -Wall
++// GROUPS passed warnings
++inline int foo()
++{
++ return 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// g++ 1.36.1 bug 891229_02
++
++// g++ limits the scope of names which are declared as typedef names within
++// another type to that other type.
++
++// This conflicts with the (global) scope given to such names by cfront 2.0.
++
++// Cfront 2.0 passes this test.
++
++// Note 2/15/94: The standard has changed; this limiting of scope is correct
++// behavior. See 9.9. --jason
++
++// keywords: typedef, nested types, scope
++
++struct foo {
++ foo ();
++ typedef void (*function_p) (void);
++};
++
++function_p fp; // ERROR - no such type in scope
++
++foo::foo () {}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// g++ 1.36.1 bug 891230_01
++
++// g++ gives typedefs which are nested within class declarations a scope
++// which is local to the class declaration itself. This causes examples
++// like the following to get compile-time errors.
++
++// Cfront 2.0 passes this test.
++
++// keywords: typedef, nested types, scope
++
++struct foo {
++
++ typedef foo* foo_p;
++ void member (foo_p);
++};
++
++void foo::member (foo_p p) { // gets bogus errors
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// g++ 1.36.1 bug 900107_01
++
++// Unlike GCC and Cfront 2.0, the g++ 1.36.1 compiler gives struct, union,
++// and class declarations which are nested within blocks file scope.
++
++// Cfront 2.0 passes this test.
++
++// keywords: block scope, file scope, nested types, tagged types
++
++class c1 { int c1_member1; };
++struct s1 { int s1_member1; };
++union u1 { int u1_member1; };
++enum e1 { e1_val1 };
++typedef int t1;
++
++void foo ()
++{
++ class c1 { // gets bogus error
++ int c1_member1;
++ } c1_local_object_0;
++
++ struct s1 { // gets bogus error
++ int s1_member1;
++ } s1_local_object_0;
++
++ union u1 { // gets bogus error
++ int u1_member1;
++ } u1_local_object_0;
++
++ enum e1 { // OK using g++ or GCC, but mishandled by Cfront 2.0.
++ e1_value1
++ } e1_local_object_0;
++
++ typedef int t1; // OK
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// g++ 1.36.1 bug 900119_01
++
++// g++ allows initializers to be included in the declaration of members
++// of classes, structs, unions (even when -pedantic is used).
++
++// This is not allowed by the C++ 2.0 Reference Manual or by Cfront 2.0.
++
++// keywords: member declaration, member initialization
++
++int global_int;
++
++class class0 {
++public:
++ int class0_member_0 = 99; /* ERROR - */
++ static int class0_member_1 = 99; /* ERROR - */
++ int &class0_member_2 = global_int; /* ERROR - */
++
++ class0 () : class0_member_2 (global_int) { } /* ERROR - */
++};
++
++
++struct struct0 {
++ int struct0_member_0 = 99; /* ERROR - */
++ static int struct0_member_1 = 99; /* ERROR - */
++ int &struct0_member_2 = global_int; /* ERROR - */
++
++ struct0 () : struct0_member_2 (global_int) { } /* ERROR - */
++};
++
++// g++ does not allow unions to have more than one member with an initializer
++
++union union0 {
++ int union0_member_0 = 99; /* ERROR - */
++};
++
++union union1 {
++ //static int union1_member_0 = 99; /* definitely illegal (9.5) */
++};
++
++union union2 {
++ int &union2_member_0 = global_int; /* ERROR - */
++
++ union2 () : union2_member_0 (global_int) { } /* ERROR - */
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// g++ 1.36.1 bug 900121_01
++
++// The following file causes g++ 1.36.1 (and 1.36.2) to abort.
++
++// Cfront 2.0 passes this test.
++
++// keywords: abort, incomplete types, reference types, formal parameters
++
++struct s0; // ERROR - forward declaration
++
++void function (struct s0 &arg1, struct s0 &arg2)
++{
++ arg1 = arg2; // ERROR - causes abort
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// g++ 1.36.1 bug 900121_02
++
++// Assignment of structs is defined as memberwise assignment,
++// however g++ (1.36.2) and Cfront 2.0 differ on the definition
++// of assignment for unions.
++
++// (NOTE: Stroustrup now says that assignment of unions which contain either
++// members or sub-members (base classes are not allowed for unions) which
++// have non-default assignment operators defined for them will be illegal
++// in future.)
++
++// g++ (1.36.2) on the other hand, accepts this program without errors.
++
++// keywords: unions, operator=, inheritance, members
++
++struct s0 {
++
++ int i;
++
++ void operator= (s0 & arg)
++ {
++ this->i = arg.i;
++ }
++};
++
++struct s1 {
++
++ double d;
++
++ void operator= (s1 & arg)
++ {
++ this->d = arg.d;
++ }
++};
++
++union u0 {
++ s0 u0_member_0; // ERROR -
++ s1 u0_member_1; // ERROR -
++};
++
++void function ()
++{
++ u0 u0_object_0;
++ u0 u0_object_1;
++
++ u0_object_0 = u0_object_1;
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// g++ 1.36.1 bug 900121_05
++
++// g++ allows unions to have base types (i.e. to be "derived") and it allows
++// other types to have unions as base types. Both cases are illegal.
++
++// g++ curently does not detect such errors.
++
++// Cfront 2.0 passes this test.
++
++// keywords: unions, inheritance
++
++struct s0 {
++ int s0_member;
++};
++
++union u0 : public s0 { /* ERROR - union has base class */
++ int u0_member_0;
++ int u0_member_1;
++};
++
++union u1 {
++ int u1_member_0;
++ int u1_member_1;
++};
++
++struct s1 : public u1 { /* ERROR - base class is a union */
++ int s1_member_0;
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// g++ 1.36.1 bug 900127_01
++
++// g++ often fails to detect (and issue errors for) ambiguous overload
++// situations. In such cases, one of the possibilities is chosen
++// (apparently arbitrarily). Errors should be issued instead.
++
++// Cfront 2.0 passes this test.
++
++// keywords: function overloading, ambiguity
++
++void foo (int);
++int foo (void);
++
++typedef int (*f_ptr_t1) (void);
++typedef void (*f_ptr_t2) (int);
++
++void bar (f_ptr_t1); // ERROR -
++void bar (f_ptr_t2); // ERROR -
++
++void function ()
++{
++ bar (foo); // ERROR - ambiguous
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// g++ 1.36.1 bug 900127_02
++
++// g++ (mostly) keeps separate name spaces for the declarations of data
++// objects and functions.
++
++// This means that a single name may be declared as both a data object and
++// a function within a given scope.
++
++// This fact allows programmers to write code which is not portable to the
++// Cfront translator (which keeps a single namespace for these entities).
++
++// This can also lead to ambiguity when the & (address-of) operator is used.
++
++// Cfront 2.0 passes this test.
++
++// keywords: name spaces, overloading
++
++int global0; // ERROR -
++int global0 (); // ERROR -
++
++int global1 (); // ERROR - xref for below
++int global1; // ERROR - caught
++
++struct struct_0 {
++ int class_local (); // ERROR -
++ int class_local; // ERROR -
++};
++
++struct struct_1 {
++ int class_local; // ERROR -
++ int class_local (); // ERROR -
++};
++
++void function_0 ()
++{
++ int function_0_local; // ERROR -
++ extern int function_0_local (); // ERROR -
++}
++
++void function_1 ()
++{
++ int function_1_local (); // ERROR -
++ extern int function_1_local; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// g++ 1.36.1 bug 900205_02
++
++// g++ allows constructors to be defined which do not include
++// initializations for reference members of their associated classes.
++
++// Cfront 2.0 does not allow this.
++
++// keywords: reference members, constructors, member initialization
++
++int i;
++
++class c0 {
++ int &int_ref;
++public:
++ c0 () /* : int_ref(i) */ { // ERROR - reference needs initializer
++ }
++};
++
++class c1 {
++ int &int_ref;
++public:
++ c1 ();
++};
++
++c1::c1() /* : int_ref(i) */ { // ERROR - reference needs initializer
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// g++ 1.36.1 bug 900205_03
++
++// Section 6.6.3 of the cfront 2.0 Reference Manual says "A return statement
++// without an expression can be used only in functions that do not return
++// a value, that is, a function with the return value type void..."
++
++// Also in 6.6.3: "Flowing off the end of a function is equivalent to a
++// return with no value; this is illegal in a value returning function."
++
++// In contrast to the manual, g++ does not generate ERRORs for cases of
++// "flowing off the end" of non-void functions.
++
++// keywords: return statements, return type, void return, implicit return
++
++// Special g++ Options: -Wreturn-type -pedantic-errors
++
++struct struct00 { };
++
++int global_function_0 () {
++} // ERROR -
++
++struct00 global_function_1 () {
++} // ERROR -
++
++struct struct0 {
++
++ int struct0_member_function_0 () {
++ } // ERROR -
++
++ struct0 struct0_member_function_1 () {
++ } // ERROR -
++};
++
++struct struct1 {
++
++ int struct1_member_function_0 ();
++
++ struct1 struct1_member_function_1 ();
++
++};
++
++int struct1_member_function_0 () {
++} // ERROR -
++
++struct1 struct1::struct1_member_function_1 () {
++} // ERROR -
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// g++ 1.36.1 bug 900205_04
++
++// g++ allows a class for which an implicit default X::X() constructor must
++// be created (implicitly by the compiler) to be derived from another class
++// which does not have its own default X::X() constructor. This is illegal.
++
++// Cfront 2.0 passes this test.
++
++// keywords: default constructor, inheritance
++
++struct struct0 {
++ int data_member;
++
++ struct0 (int, void *); // suppresses implicit default constructor
++};
++
++struct0::struct0 (int, void *)
++{
++}
++
++struct struct0_derived_struct_0 : public struct0 {
++}; // ERROR -
++
++// struct0_derived_struct_0 object; // would give g++ error if compiled
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// g++ 1.36.1 bug 900207_03
++
++// g++ fails to allow objects of class or struct types to be initialized
++// using "constructor syntax" in cases where an implicitly generated copy
++// constructor would be invoked for the initialization, and where there is
++// no explicitly specified constructor associated with the type of the
++// object being initialized.
++
++// Note that the type of the error changes depending upon whether or not the
++// type being initialized has any virtual functions associated with it.
++
++// Cfront 2.0 passes this test.
++
++// keywords: implicit copy constructor, initialization
++
++
++// Check construction for a type without virtual function members.
++
++struct struct0 {
++ int data_member;
++};
++
++struct0 struct0_gbl_object0;
++struct0 struct0_gbl_object1 (struct0_gbl_object0); // gets bogus error
++
++void struct0_test ()
++{
++ struct0 struct0_lcl_object1 (struct0_gbl_object0); // gets bogus error
++}
++
++// Check construction for a type with virtual function members.
++
++struct struct1 {
++ int data_member;
++
++ virtual void function_member ();
++};
++
++void struct1::function_member () { }
++
++struct1 struct1_gbl_object0;
++struct1 struct1_gbl_object1 (struct1_gbl_object0); // gets bogus error
++
++void struct1_test ()
++{
++ struct1 struct1_lcl_object1 (struct1_gbl_object0); // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// g++ 1.36.1 bug 900208_02
++
++// g++ does not allow a static member of a class/struct/union to be
++// declared as an array without an explicit upper bound.
++
++// Cfront 2.0 passes this test.
++
++// keywords: static data members, arrays, dimension, array bound
++
++class class0 {
++public:
++ static int class0_data_member_0[]; // gets bogus error
++};
++
++int class0::class0_data_member_0[3] = { 1, 2, 3 }; // gets bogus error
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// g++ 1.36.1 bug 900208_03
++
++// The Cfront 2.0 reference manual (5.3.3) says "This type must be an
++// object type; functions cannot be allocated this way...".
++
++// g++ fails to detect (at compile time) cases where an attempt is made to
++// allocate a function using new.
++
++// keywords: operator new, function types
++
++typedef void (func_type) ();
++
++void global_function_0 ()
++{
++ new func_type; // ERROR - missed by both cfront 2.0 and g++ 1.36.1
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// g++ 1.36.1 bug 900208_04
++
++// The Cfront 2.0 reference manual (5.3.3) says "This type must be an
++// object type; functions cannot be allocated this way...".
++
++// g++ fails to detect (at compile time) cases where an attempt is made to
++// deallocate a function using delete.
++
++// Cfront 2.0 passes this test.
++
++// keywords: operator delete, function types
++
++typedef void (func_type) ();
++
++void global_function_1 (func_type *p)
++{
++ delete p; // ERROR - caught by Cfront 2.0 but not by g++ 1.36.1
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// g++ 1.36.1 bug 900209_01
++
++// g++ implicitly casts values whose types are "void*" to other pointer
++// types (just as the language rules for C permit). Such implicit
++// conversions are not allowed by the Cfront 2.0 Reference Manual
++// however.
++
++// Cfront 2.0 passes this test.
++
++// keywords: void pointers, type conversions, pointer type conversions
++
++void * void_pointer_object;
++char * char_pointer_object;
++
++void global_function_0 ()
++{
++ char_pointer_object = void_pointer_object; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,112 @@
++// g++ 1.36.1 bug 900210_01
++
++// g++ allows pointer type values to be assigned to variables of integal
++// types. According to the C++ Reference Manual, this is illegal.
++
++// Cfront 2.0 passes this test.
++
++// keywords: pointer types, integral types, implicit type conversions
++
++int i;
++long l;
++short s;
++char c;
++float f;
++double d;
++long double ld;
++enum {enum_value_0} e;
++
++signed int si;
++signed long sl;
++signed short ss;
++signed char sc;
++
++unsigned int ui;
++unsigned long ul;
++unsigned short us;
++unsigned char uc;
++
++void* vp;
++char* cp;
++int* ip;
++enum {enum_value_1} * ep;
++struct { int member; } * sp;
++void (*fp) (void);
++
++void global_function ()
++{
++ i = vp; /* ERROR - */
++ i = cp; /* ERROR - */
++ i = ip; /* ERROR - */
++ i = ep; /* ERROR - */
++ i = sp; /* ERROR - */
++ i = fp; /* ERROR - */
++ l = vp; /* ERROR - */
++ l = cp; /* ERROR - */
++ l = ip; /* ERROR - */
++ l = ep; /* ERROR - */
++ l = sp; /* ERROR - */
++ l = fp; /* ERROR - */
++ s = vp; /* ERROR - */
++ s = cp; /* ERROR - */
++ s = ip; /* ERROR - */
++ s = ep; /* ERROR - */
++ s = sp; /* ERROR - */
++ s = fp; /* ERROR - */
++ c = vp; /* ERROR - */
++ c = cp; /* ERROR - */
++ c = ip; /* ERROR - */
++ c = ep; /* ERROR - */
++ c = sp; /* ERROR - */
++ c = fp; /* ERROR - */
++ si = vp; /* ERROR - */
++ si = cp; /* ERROR - */
++ si = ip; /* ERROR - */
++ si = ep; /* ERROR - */
++ si = sp; /* ERROR - */
++ si = fp; /* ERROR - */
++ sl = vp; /* ERROR - */
++ sl = cp; /* ERROR - */
++ sl = ip; /* ERROR - */
++ sl = ep; /* ERROR - */
++ sl = sp; /* ERROR - */
++ sl = fp; /* ERROR - */
++ ss = vp; /* ERROR - */
++ ss = cp; /* ERROR - */
++ ss = ip; /* ERROR - */
++ ss = ep; /* ERROR - */
++ ss = sp; /* ERROR - */
++ ss = fp; /* ERROR - */
++ sc = vp; /* ERROR - */
++ sc = cp; /* ERROR - */
++ sc = ip; /* ERROR - */
++ sc = ep; /* ERROR - */
++ sc = sp; /* ERROR - */
++ sc = fp; /* ERROR - */
++ ui = vp; /* ERROR - */
++ ui = cp; /* ERROR - */
++ ui = ip; /* ERROR - */
++ ui = ep; /* ERROR - */
++ ui = sp; /* ERROR - */
++ ui = fp; /* ERROR - */
++ ul = vp; /* ERROR - */
++ ul = cp; /* ERROR - */
++ ul = ip; /* ERROR - */
++ ul = ep; /* ERROR - */
++ ul = sp; /* ERROR - */
++ ul = fp; /* ERROR - */
++ us = vp; /* ERROR - */
++ us = cp; /* ERROR - */
++ us = ip; /* ERROR - */
++ us = ep; /* ERROR - */
++ us = sp; /* ERROR - */
++ us = fp; /* ERROR - */
++ uc = vp; /* ERROR - */
++ uc = cp; /* ERROR - */
++ uc = ip; /* ERROR - */
++ uc = ep; /* ERROR - */
++ uc = sp; /* ERROR - */
++ uc = fp; /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,112 @@
++// g++ 1.36.1 bug 900210_02
++
++// g++ allows integral type values to be assigned to variables of pointer
++// types. According to the C++ Reference Manual, this is illegal.
++
++// Cfront 2.0 passes this test.
++
++// keywords: integral types, pointer types, implicit type conversions
++// Special Options: -ansi -pedantic-errors
++int i;
++long l;
++short s;
++char c;
++float f;
++double d;
++long double ld;
++enum {enum_value_0} e;
++
++signed int si;
++signed long sl;
++signed short ss;
++signed char sc;
++
++unsigned int ui;
++unsigned long ul;
++unsigned short us;
++unsigned char uc;
++
++void* vp;
++char* cp;
++int* ip;
++enum {enum_value_1} * ep;
++struct { int member; } * sp;
++void (*fp) (void);
++
++void global_function ()
++{
++ vp = i; /* ERROR - */
++ vp = l; /* ERROR - */
++ vp = s; /* ERROR - */
++ vp = c; /* ERROR - */
++ vp = si; /* ERROR - */
++ vp = sl; /* ERROR - */
++ vp = ss; /* ERROR - */
++ vp = sc; /* ERROR - */
++ vp = ui; /* ERROR - */
++ vp = ul; /* ERROR - */
++ vp = us; /* ERROR - */
++ vp = uc; /* ERROR - */
++ cp = i; /* ERROR - */
++ cp = l; /* ERROR - */
++ cp = s; /* ERROR - */
++ cp = c; /* ERROR - */
++ cp = si; /* ERROR - */
++ cp = sl; /* ERROR - */
++ cp = ss; /* ERROR - */
++ cp = sc; /* ERROR - */
++ cp = ui; /* ERROR - */
++ cp = ul; /* ERROR - */
++ cp = us; /* ERROR - */
++ cp = uc; /* ERROR - */
++ ip = i; /* ERROR - */
++ ip = l; /* ERROR - */
++ ip = s; /* ERROR - */
++ ip = c; /* ERROR - */
++ ip = si; /* ERROR - */
++ ip = sl; /* ERROR - */
++ ip = ss; /* ERROR - */
++ ip = sc; /* ERROR - */
++ ip = ui; /* ERROR - */
++ ip = ul; /* ERROR - */
++ ip = us; /* ERROR - */
++ ip = uc; /* ERROR - */
++ ep = i; /* ERROR - */
++ ep = l; /* ERROR - */
++ ep = s; /* ERROR - */
++ ep = c; /* ERROR - */
++ ep = si; /* ERROR - */
++ ep = sl; /* ERROR - */
++ ep = ss; /* ERROR - */
++ ep = sc; /* ERROR - */
++ ep = ui; /* ERROR - */
++ ep = ul; /* ERROR - */
++ ep = us; /* ERROR - */
++ ep = uc; /* ERROR - */
++ sp = i; /* ERROR - */
++ sp = l; /* ERROR - */
++ sp = s; /* ERROR - */
++ sp = c; /* ERROR - */
++ sp = si; /* ERROR - */
++ sp = sl; /* ERROR - */
++ sp = ss; /* ERROR - */
++ sp = sc; /* ERROR - */
++ sp = ui; /* ERROR - */
++ sp = ul; /* ERROR - */
++ sp = us; /* ERROR - */
++ sp = uc; /* ERROR - */
++ fp = i; /* ERROR - */
++ fp = l; /* ERROR - */
++ fp = s; /* ERROR - */
++ fp = c; /* ERROR - */
++ fp = si; /* ERROR - */
++ fp = sl; /* ERROR - */
++ fp = ss; /* ERROR - */
++ fp = sc; /* ERROR - */
++ fp = ui; /* ERROR - */
++ fp = ul; /* ERROR - */
++ fp = us; /* ERROR - */
++ fp = uc; /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// g++ 1.36.1 bug 900210_03
++
++// g++ allows void* type values to be assigned to variables of other
++// pointer types. According to the C++ Reference Manual, this is illegal.
++
++// Cfront 2.0 passes this test.
++
++// keywords: void pointers, pointer type conversions, implicit type conversions
++
++void* vp;
++char* cp;
++int* ip;
++enum {enum_value_1} * ep;
++struct { int member; } * sp;
++void (*fp) (void);
++
++void global_function ()
++{
++ cp = vp; /* ERROR - */
++ ip = vp; /* ERROR - */
++ ep = vp; /* ERROR - */
++ sp = vp; /* ERROR - */
++ fp = vp; /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// g++ 1.36.1 bug 900210_05
++
++// Section 18.3 of the 2.0 Reference Manual says "An implementation
++// providing { anachronistic features } should also provide a way for
++// the user to ensure that they do not occur in a source file."
++
++// The *only* proper way to "ensure" an absence of anachronstic features
++// is for C++ language processors to generate errors (rather than just
++// warnings) when such features are used. These errors could perhaps be
++// triggered by some set of command line options, or by the absence of
++// certain command line options. (For g++, the -pedantic and -traditional
++// options come to mind.)
++
++// The use of errors rather than warnings is important because errors
++// usually result in non-zero exit status codes for language processors
++// and these non-zero exit stati can be automatically checked during
++// normal execution of a Makefile.
++
++// cfront 2.0 provides the +p option which causes errors to be generated for
++// all cases of anachronistic usage.
++
++// g++ generates neither errors nor warnings for such usage, even when the
++// -ansi and -pedantic options are used.
++
++// Cfront 2.0 passes this test.
++
++// keywords: anachronism, enum types, integral types, implicit type conversions
++
++enum enum0 { enum_value_0 } enum0_object;
++int int0_object;
++
++void function ()
++{
++ enum0_object = int0_object; /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// g++ 1.36.1 bug 900210_06
++
++// g++ allows values of pointer-to-const types to be assigned to variables
++// of pointer-to-non-const types.
++
++// Cfront 2.0 disallows such assignments.
++
++// g++ also allows values of pointer-to-volatile types to be assigned to
++// variables of pointer-to-non-volatile types.
++
++// Cfront 2.0 *would* disallow this (if it only supported "volatile").
++
++// keywords: pointer types, implicit type conversions
++
++const char *ccp;
++volatile char *vcp;
++char *cp;
++
++void function ()
++{
++ cp = ccp; /* ERROR - */
++ cp = vcp; /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// g++ 1.36.1 bug 900210_07
++
++// g++ allows values of pointer-to-signed types to be assigned to variables
++// of pointer-to-unsigned types, and vise versa.
++
++// Cfront 2.0 passes this test.
++
++// keyowrds: pointer types, implicit type conversions
++// Special Options: -ansi -pedantic-errors
++signed int *sip;
++unsigned int *uip;
++
++void function ()
++{
++ sip = uip; // ERROR -
++ uip = sip; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// g++ 1.36.1 bug 900210_08
++
++// g++ allows pointer-to-const values to be implicitly converted to
++// void* values. This causes a silent loss of the const qualifier.
++
++// Cfront 2.0 passes this test.
++
++// keywords: pointer types, implicit type conversions
++
++const char *ccp;
++void *vp;
++
++void function ()
++{
++ vp = ccp; /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// g++ 1.36.1 bug 900210_09
++
++// g++ allows pointer to members (both data members and function members)
++// to be implicitly converted to void*.
++
++// Section 4.8 of the Cfront 2.0 Reference Manual disallows such implicit
++// conversions.
++
++// Cfront 2.0 passes this test.
++
++// keywords: member pointers, void pointers, implicit type conversions
++
++class class0 {
++public:
++ int class0_data_member_0;
++ void class0_function_member_0 ();
++};
++
++int class0::*class0_data_member_pointer;
++int (class0::*class0_function_member_pointer) ();
++
++void *vp;
++
++void global_function_0 ()
++{
++ vp = class0_data_member_pointer; // ERROR -
++ vp = class0_function_member_pointer; // ERROR -
++}
++
++int main () { return 0; }
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// g++ 1.36.1 bug 900210_10
++
++// g++ allows operator[] to be declared as a static member function.
++// This is illegal.
++
++// Cfront 2.0 passes this test.
++
++// keywords: operator[], static function members
++
++struct struct0 {
++ static int operator[] (); /* ERROR - */
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// g++ 1.36.1 bug 900211_01
++
++// g++ issues only warnings for calls to previously undeclared functions,
++// however such calls are actually errors.
++
++// Cfront 2.0 passes this test.
++
++// keywords: undeclared, functions
++// Build don't link:
++
++void global_function_0 ()
++{
++ global_function_1 (); /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// g++ 1.36.1 bug 900211_02
++
++// g++ allows you to explicitly specify the return type for a type conversion
++// operator.
++
++// The Cfront 2.0 Reference Manual (12.3.2) says that this in not allowed.
++
++// Cfront 2.0 passes this test.
++
++// keywords: type conversion operators, return type
++
++struct struct0 { int member_0; };
++
++struct0 struct0_object_0;
++
++struct struct1 {
++ struct0 operator struct0 (); /* ERROR - */
++};
++
++struct0 struct1::operator struct0 () { // ERROR -
++ return struct0_object_0;
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// g++ 1.36.1 bug 900211_03
++
++// The following erroneous code causes g++ to segfault.
++
++// Cfront 2.0 passes this test.
++
++// keywords: segfault, operator new, arrays, undeclared, array bound
++
++void function ()
++{
++ char* new_base = new char[x]; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// g++ 1.36.1 bug 900211_04
++
++// g++ fails to flag as errors attempts to compare pointer values against
++// (non-zero) integer values;
++
++// Since implicit conversions of pointer to integers (or vise versa) are
++// illegal, these comparisons are also illegal.
++
++// Cfront 2.0 passes this test.
++
++// keywords: comparison operators, pointer types, integral types
++
++int result;
++int i;
++char *p;
++
++void function ()
++{
++ result = i == p; /* ERROR - caught by g++ */
++ result = i != p; /* ERROR - caught by g++ */
++ result = i > p; /* ERROR - missed */
++ result = i < p; /* ERROR - missed */
++ result = i >= p; /* ERROR - missed */
++ result = i <= p; /* ERROR - missed */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// g++ 1.36.1 bug 900212_01
++
++// g++ fails to flag as errors all attempts to add or subtract integer values
++// from pointers-to-member values.
++
++// Some cases are detected however.
++
++// Cfront 2.0 passes this test.
++
++// keywords: pointer arithmetic, member pointers
++
++struct struct0 {
++};
++
++int struct0::*p0;
++int struct0::*p1;
++
++int (struct0::*fp0) ();
++int (struct0::*fp1) ();
++
++void global_function_0 ()
++{
++ p0 = p1 + 3; // ERROR -
++ p0 = p1 - 3; // ERROR -
++ p1++; /* ERROR - caught by g++ */
++ ++p1; /* ERROR - caught by g++ */
++ p1--; /* ERROR - caught by g++ */
++ --p1; /* ERROR - caught by g++ */
++
++ fp0 = fp1 + 3; // ERROR -
++ fp0 = fp1 - 3; // ERROR -
++ fp1++; /* ERROR - */
++ ++fp1; /* ERROR - */
++ fp1--; /* ERROR - */
++ --fp1; /* ERROR - */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// g++ 1.36.1 bug 900212_02
++
++// g++ fails to flag as errors attempts to take the difference of two values
++// of some compatible pointer-to-member type.
++
++// Cfront 2.0 passes this test.
++
++// keywords: pointer arithmetic, subtraction, member pointers
++
++struct struct0 {
++};
++
++int struct0::*p0;
++int struct0::*p1;
++
++int (struct0::*fp0) ();
++int (struct0::*fp1) ();
++
++int result;
++
++void global_function_0 ()
++{
++ result = (p0 - p1); // ERROR -
++ result = (fp0 - fp1); // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// g++ 1.36.1 bug 900212_03
++
++// g++ segfaults on any attempt to use the ->* operator.
++
++// Cfront 2.0 passes this test.
++
++// keywords: member pointers, operator->*
++
++struct struct0 {
++ int data_member;
++ void function_member ();
++};
++
++void struct0::function_member ()
++{
++}
++
++int i;
++
++int struct0::*dmp;
++void (struct0::*fmp) ();
++
++struct0 *ptr;
++
++void global_function_0 ()
++{
++ i = ptr->*dmp; // causes segfault
++ (ptr->*fmp) (); // causes segfault
++ // i = ptr->*(&struct0::data_member); // too complicated for cfront
++ // (ptr->*(&struct0::function_member)) (); // too complicated for cfront
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// g++ 1.36.1 bug 900213_01
++
++// g++ incorrectly diagnoses the error when an attempt is made to reference
++// a non-static data-member without an object indication.
++
++// Similar attempts to reference non-static function-members are correctly
++// diagnosed by g++.
++
++// Cfront 2.0 passes this test.
++
++// keywords: non-static members, member pointers, scope resolution
++
++struct struct0 {
++ int struct0_data_member_0; /* ERROR - gets error from below */
++ int struct0_function_member_0 ();
++};
++
++int i;
++
++void global_function_0 ()
++{
++ i = struct0::struct0_data_member_0; /* ERROR - mishandled by g++ */
++ //i = struct0::struct0_function_member_0 (); /* gets caught by g++ */
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// g++ 1.36.1 bug 900213_02
++
++// The following erroneous code causes g++ to abort.
++
++// Cfront 2.0 passes this test.
++
++// keywords: abort, member pointers, operator*
++
++struct struct0 {
++ int data_member;
++};
++
++int i;
++int struct0::*dmp;
++
++void global_function_0 ()
++{
++ i = *dmp; // ERROR - causes abort
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// g++ 1.36.1 bug 900213_03
++
++// g++ fails to detect an error when the address of a "bound" function is
++// assigned to a pointer-to-member-function variable.
++
++// It does however correctly detect a similar errors for data-members.
++
++// keywords: bound function, operator&, member pointers
++// Build don't link:
++
++struct struct0 {
++ int data_member;
++ int function_member ();
++};
++
++int i;
++int struct0::*dmp;
++int (struct0::*fmp) ();
++
++struct0 *ptr;
++
++void global_function_0 ()
++{
++ fmp = &ptr->function_member; // ERROR -
++ //dmp = &ptr->data_member; // caught by g++, missed by cfront
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// g++ 1.36.1 bug 900214_01
++
++// g++ allows function members of incomplete types to be declared to be
++// friends of other types.
++
++// Cfront 2.0 passes this test.
++
++// keywords: friends, incomplete types, function members
++
++struct A; // ERROR - forward declaration
++
++struct B {
++ friend void A::foo(); // ERROR - type A is incomplete
++};
++
++void A::foo(); /* ERROR - also illegal */
++
++struct A {
++ void foo() {}
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// g++ 1.36.1 bug 900215_01
++
++// g++ allows the definition of a type conversion operator `operator void'
++// for class types, but subsequently fails to generate calls (where needed)
++// for such type conversion operators.
++
++// Cfront 2.0 does generate such calls.
++
++// The following program exits with status 0 when compiled with Cfront 2.0
++// but exits with status 1 when compiled with g++.
++
++// Cfront 2.0 passes this test.
++
++// 4/27/94 (jason): The pre-San Diego working paper prohibits operator
++// void, so we can go back to just ignoring void values.
++
++// keywords: user-defined type conversion operators, void type, explicit casts
++
++struct struct0 {
++
++ operator void (); // ERROR - operator void
++};
++
++int exit_status = 1;
++
++struct0::operator void ()
++{ // ERROR - operator void
++ exit_status = 0;
++}
++
++struct struct0 s0_object;
++
++int test ()
++{
++ (void) s0_object;
++ return exit_status;
++}
++
++int main () { return test (); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// g++ 1.36.1 bug 900215_02
++
++// g++ allows global objects (which happen to be pointers to members of some
++// class X) to be dereferenced without prefix object specifications within
++// member functions of class X.
++
++// In effect, g++ treats any dereference of a pointer-to-member which appears
++// within the context of a member function (and which is not preceeded by
++// either ->* or .*) as if it had been implicitly prefixed with this->*.
++
++// The 2.0 Reference Manual only provides that such implicit prefixing
++// takes place for *members* of the containing class, and *not* for
++// global objects that happen to have certain types (i.e. pointer-to-member
++// of the containing class).
++
++// Also, cfront 2.0 provides implicit this-> prefixes *only* for *members*
++// of the containing class.
++
++// Cfront 2.0 passes this test.
++
++// keywords: member pointers, this, dereference, members
++
++struct struct0 {
++ int data_member;
++ void function_member ();
++};
++
++int struct0::*dmp;
++int (struct0::*fmp) ();
++int i;
++
++struct struct1 {
++ int data_member;
++
++ void function_member ();
++};
++
++void struct0::function_member ()
++{
++ i = (this->*fmp) (); // perfectly legal - for both cfront and g++
++ i = this->*dmp; // perfectly legal - for both cfront and g++
++
++ i = (*fmp) (); // ERROR -
++ i = *dmp; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// g++ 1.36.1 bug 900220_01
++
++// Ref: 12.8
++
++// Section 12.8 says:
++
++// "That is, X::operator=() will be generated only if no assignment
++// operation is explicitly declared and an object of class X is actually
++// assigned an object of class X (or an object of a class derived from X)
++// or if the address of X::operator= is taken.
++
++// g++ does not allow you to take the address of an implicitly generated
++// operator=
++
++// keywords: operator=, implicit copy operator, operator&
++
++struct struct0 {
++ int data_member;
++};
++
++typedef struct0& (struct0::*member_func_t) (const struct0&);
++
++member_func_t member_func;
++
++void global_function_0 (member_func_t member_f)
++{ // gets bogus error - ref from below
++}
++
++void global_function_1 ()
++{
++ member_func = &struct0::operator=; // gets bogus error
++
++ global_function_0 (&struct0::operator=); // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// g++ 1.36.1 bug 900220_02
++
++// g++ treats plain `char' and `unsigned char' as different types, however
++// it fails to treat `signed char' as being a different type from plain
++// `char' as called for by both the ANSI C standard and the C++ reference
++// manual.
++
++// keywords: plain char type, signed char type, unsigned char type, overloading
++
++void overloaded (char) {
++}
++
++void overloaded (signed char) { // gets bogus error
++}
++
++void overloaded (unsigned char) {
++}
++
++void global_function ()
++{
++ char c = 0;
++ signed char sc = 0;
++ unsigned char uc = 0;
++
++ overloaded (c);
++ overloaded (sc);
++ overloaded (uc);
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++// g++ 1.36.1 bug 900220_03
++
++// g++ does not properly disambiguate calls to overloaded functions
++// which are nearly identical except that one take a reference to a
++// type `T' object and another takes a reference to a type `const T'
++// object.
++
++// (Note that the volatile stuff is commented out here because cfront
++// does not yet grok volatile.)
++
++// Cfront 2.0 passes this test.
++
++// keywords: references, overloading, type qualifiers, pointers
++
++int c_call_count = 0;
++int cc_call_count = 0;
++//int vc_call_count = 0;
++
++void overloaded (char&)
++{
++ c_call_count++;
++}
++
++void overloaded (const char&)
++{
++ cc_call_count++;
++}
++
++//void overloaded (volatile char&)
++//{
++// vc_call_count++;
++//}
++
++int test ()
++{
++ char c = 0;
++ const char cc = 0;
++ //volatile char vc = 0;
++
++ char& cr = c;
++ const char& ccr = cc;
++ //volatile char& vcr = vc;
++
++ overloaded (c); // OK
++ overloaded (cc); // gets bogus error
++ //overloaded (vc); // OK
++
++ return (c_call_count != 1 || cc_call_count != 1 /* || vc_call_count != 1 */);
++}
++
++int main () { return test (); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// g++ 1.36.1 bug 900221_01
++
++// Ref: 3.2
++//
++// Section 3.2 of the C++ 2.0 Reference Manual says:
++//
++// "Names of formal arguments for a function are treated as if they
++// were declared in the outermost block of that function"
++//
++// g++ does not enforce this treatment.
++
++// Cfront 2.0 passes this test.
++
++// keywords: scope, formal parameters
++
++void function (int arg1)
++{
++ int arg1; // ERROR - redeclaration of arg1
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// g++ 1.37.1 bug 900227_01
++
++// g++ allows pointer type values to be converted to integral types which are
++// not actually large enough to hold the converted values.
++
++// Section 3.3.4 of the ANSI C standard says:
++
++// A pointer may be converted to an integral type. The size of the
++// integer required and the results are implementation defined. If
++// the space provided is not long enough, the behavior is undefined.
++
++// I believe that the only proper thing to do in such cases is to generate
++// errors. After all, if the converted value gets truncated, it is not
++// likely to be useful after that.
++
++// Furthermore, as the following example demonstrates, allowing pointers
++// to be converted to integral types which are not of sufficient size to
++// completely hold the converted values may cause additional troubles.
++
++// I tried the following code on 5 different machines and it failed on
++// all five (unless I also use the GNU assembler and the GNU linker). Three
++// of the five (Sun3, Sun4, and Symmetry) got link-time errors about byte
++// offset overflows. The other two (368/SystemV and AViiON) got assembly
++// time errors about relocatable names used in "constant" expressions.
++
++// keywords: casts, pointer types, integral types
++
++// Update 2/10/95: The compiler will now compute these expressions at
++// runtime. I think this is in the spirit of the GNU compilers (jason).
++
++// Special g++ Options:
++
++int main ();
++
++short s = (short) &main;
++char c = (char) &main;
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// g++ 1.37.1 bug 900321_01
++
++// cfront flags ERRORs on each of the lines indicated below. g++ does not
++// flag either ERRORs or warnings.
++
++// Although I cannot find where in the current C++ Reference Manual this
++// topic is covered, I am sure that these statements should get ERRORs in
++// a "strongly typed" language.
++
++// Cfront 2.0 passes this test.
++
++// keywords: array types, array bound, pointers
++
++int (*ptr_to_array_of_ints)[];
++int (*ptr_to_array_of_3_ints) [3];
++int (*ptr_to_array_of_5_ints) [5];
++
++void function_0 ()
++{
++ // we miss the first two because typeck.c (comp_array_types) deems
++ // it okay if one of the sizes is null
++ ptr_to_array_of_ints = ptr_to_array_of_3_ints; // ERROR -
++ ptr_to_array_of_3_ints = ptr_to_array_of_ints; // ERROR -
++
++ ptr_to_array_of_3_ints = ptr_to_array_of_5_ints; // ERROR -
++ ptr_to_array_of_5_ints = ptr_to_array_of_3_ints; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// g++ 1.37.1 bug 900321_02
++
++// The following program exits with a non-zero status because the constructor
++// is not called 3 times as it should be. This program exits with a zero
++// status when compiled with cfront 2.0.
++
++// Cfront 2.0 passes this test.
++
++// keywords: arrays, initialization, default constructor, operator new
++
++int call_count = 0;
++
++struct struct0 {
++ struct0 ();
++};
++
++struct0::struct0 () { call_count++; }
++
++typedef struct0 array[3]; // known dimension
++
++int test ()
++{
++ new array;
++ return (call_count != 3);
++}
++
++int main () { return test (); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// g++ 1.37.1 bug 900321_04
++
++// The following code causes g++ to segfault.
++
++// Cfront 2.0 passes this test.
++
++// keywords: segfault, object declaration, pointer, array, incomplete type
++
++struct incomplete;
++
++void function ()
++{
++ struct incomplete (*ptr)[]; // causes segfault
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// g++ 1.37.1 bug 900321_05
++
++// The following code is legal as far as the ANSI C standard, GCC, and
++// cfront are concerned, however g++ issues errors for the lines indicated.
++
++// Cfront 2.0 passes this test.
++
++// keywords: operator[], pointers, index
++
++char c;
++char *cp;
++int i;
++
++void function ()
++{
++ c = 3["abcdef"]; // gets bogus error
++ c = i[cp]; // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,61 @@
++// g++ 1.37.1 bug 900322_01
++
++// ** Old, obsolete commentary:
++// **************************************************************************
++// The ANSI C standard, in section 3.1.2.5 (first paragraph) differentiates
++// types into three disjoint sets, i.e object types, function types, and
++// incomplete types.
++
++// Also in 3.1.2.5 (page 24) the standard says that the element type of
++// an array type is an object type.
++
++// Later in that same section the standard also notes that array types with
++// unknown size are considered incomplete types (page 25). (Struct & union
++// types which have only been "forward declared" are also incomplete types.)
++
++// Some experts infer this to mean that it is not legal to specify or to
++// construct an array *type* whose element type is an incomplete type.
++
++// This interpretation suggests that the statements indicated below contain
++// errors.
++
++// g++ fails to flag all of the indicated statements with errors (even when
++// the -pedantic option is used).
++// **************************************************************************
++
++// The above commentary is wrong. (jason 1998/11/13)
++// In fact, the lines marked OK are well-formed; the prohibition is only
++// against forming array types with multiple unknown bounds. This prohibition
++// is found in 8.3.4 [dcl.array].
++
++// It is also ill-formed to create an object of incomplete type.
++
++// keywords: incomplete types, arrays, element types
++
++extern int extern_two_d [] []; // ERROR - invalid declaration
++int tenative_two_d [] []; // ERROR - caught by g++
++static int static_two_d [] []; // ERROR - caught by g++
++
++int (*pointer_to_two_d)[][]; // ERROR - invalid declaration
++
++void function_0 (int arg [] []) { // ERROR - invalid declaration
++}
++
++typedef int int_one_d_type [];
++typedef int_one_d_type int_two_d_type[];// ERROR - invalid declaration
++
++struct s;
++
++extern struct s extern_s_array [10]; // OK
++struct s tenative_s_array [10]; // ERROR - object with incomplete type
++static struct s static_s_array [10]; // ERROR - object with incomplete type
++
++struct s (*pointer_to_s_array) []; // OK
++
++void function_1 (struct s arg []) { // OK
++}
++
++typedef struct s s_type;
++typedef s_type s_one_d_type [10]; // OK
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// g++ 1.37.1 bug 900324_02
++
++// The following erroreous code causes g++ to segfault.
++
++// Cfront 2.0 passes this test.
++
++// keywords: segfault, function pointer, conditional operator ?:
++
++void function_0 (int i) { }
++
++void (*fp)(void);
++
++void function_1 ()
++{
++ fp = 1 ? function_0 : fp; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// g++ 1.37.1 bug 900324_03
++
++// g++ is unable to correctly parse declarations of non-global function-pointer
++// variables and/or function-pointer formal parameters.
++
++// Cfront 2.0 passes this test.
++
++// keywords: syntax, function pointers, block local, formal
++
++void (*p0)(); // OK
++
++void function_0 ()
++{
++ void (*p1)(); // gets bogus errors
++}
++
++void function_1 (void (*p2)()); // gets bogus errors
++
++void (*function_2 ()) (); // OK
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// g++ 1.37.1 bug 900324_04
++
++// g++ implements an extension which supports the copying of array objects.
++
++// This extension is not described in the current C++ Reference Manual, and
++// it is not implemented by cfront (2.0).
++
++// g++ should generate errors for the use of this extension when -pedantic
++// is used, however it does not.
++
++// Cfront 2.0 passes this test.
++
++// keywords: extension, pedantic, arrays, copy
++
++typedef int int_array[20];
++
++int_array ia1;
++int_array ia2;
++
++void function_0 ()
++{
++ ia1 = ia2; // ERROR - gnu extension
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// g++ 1.37.1 bug 900324_05
++
++// The following erroneous code causes g++ to segfault.
++
++// Cfront 2.0 passes this test.
++
++// keywords: segfault, arrays, references, assignment operator=
++
++typedef int int_array[];
++
++extern int_array int_array_object;
++
++int_array &left = int_array_object;
++int_array &right = int_array_object;
++
++void function ()
++{
++ left = right; // ERROR - causes segfault
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// g++ 1.37.1 bug 900324_06
++
++// g++ is unable to use context information (i.e. the required type of the
++// expression) to disambiguate a possibly overloaded function name when that
++// name is used as either the second or the third operand of a ?: operator.
++
++// It is also unable to use the fact that the given name is not in fact
++// overloaded (and has only one possible interpretation).
++
++// This results in improper errors being generated.
++
++// keywords: overloading, function pointers, disambiguation, operator?:
++
++int i;
++void (*p)();
++
++void function_0 ()
++{
++}
++
++void function_1 ()
++{
++ p = i ? function_0 : 0; // gets bogus error
++ p = i ? 0 : function_0; // gets bogus error
++ p = i ? function_1 : function_0; // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// g++ 1.37.1 bug 900325_01
++
++// g++ fails to generate errors for attempts to declare a formal argument to
++// be of a void type.
++
++// keywords: formal parameter, void type
++
++typedef void __void;
++typedef __void Void;
++
++void function0 (void arg1) { // ERROR - missed
++}
++
++void function1 (Void arg1) { // ERROR - missed
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++// g++ 1.37.1 bug 900330_01
++//
++// As indicated by the example at the end of the section 3.5.3 of the ANSI
++// C standard, when a type qualifier (i.e. "const" or "volatile") is applied
++// to an array type, the effect should be as if the element type had been
++// qualified with the given qualifier.
++//
++// This rule applies to C++ also.
++//
++// In section 7.1.6 of the C++ Reference Manual it says "Each element of a
++// const array is const..."
++//
++// It appears however that when a name already exists for a given array type
++// (i.e. a typedef name) and when that name is qualified by a type qualifier,
++// (i.e. "const" or "volatile"), gcc & g++ may act as if the qualifier applied
++// to the named (array) type rather that to the elements of that type.
++//
++// The result is that (even with the -ansi and -pedantic options) g++
++// generates no errors or warnings for the lines indicated (even though it
++// should).
++//
++// Due to the incorrect associations, gcc & g++ will also issue inappropriate
++// warnings in some cases (as illustrated below).
++
++// keywords: type qualifiers, arrays
++
++typedef const int const_int;
++typedef const_int array_of_const_int[3];
++array_of_const_int *ptr_to_array_of_consts;
++
++typedef int array_of_int[3];
++typedef const array_of_int const_array_of_int;
++const_array_of_int *ptr_to_const_array;
++
++void function_0 ()
++{
++ ptr_to_array_of_consts = ptr_to_const_array; /* gets bogus warning */
++ ptr_to_const_array = ptr_to_array_of_consts; /* gets bogus warning */
++}
++
++/* The following example is taken from ANSI 3.5.3 */
++
++typedef int A[2][3];
++const A a = {{4, 5, 6}, {7, 8, 9}};
++int *pi;
++
++void function_1 ()
++{
++ pi = a[0]; // ERROR - a[0] has type "const int *"
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// g++ 1.37.1 bug 900330_02
++
++// The C++ Reference Manual says in section 13.1:
++
++// "Two function declarations of the same name refer to the same function
++// if they are in the same scope and have identical argument types. A
++// function member of a derived class is *not* in the same scope as a function
++// member of the same name in a base class."
++
++// g++ fails to correctly detect the error indicated.
++
++// Cfront 2.0 passes this test.
++
++// keywords: function, member, overloading, hiding
++
++struct B {
++ int f(int);
++};
++
++struct D : public B {
++ int f(struct B); // ERROR - referred to below
++};
++
++void h(D* pd)
++{
++ pd->f(1); // ERROR - D::f(struct B) hides B::f(int)
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// g++ 1.37.1 bug 900331_02
++
++// g++ fails to treat conditional expressions which yield composite type
++// (i.e. struct type, union type, or class type) lvalues as if they did
++// in fact yield lvalues in all cases.
++
++// Cfront 2.0 passes this test.
++
++// keywords: conditional operator?:, lvalues, composite types
++
++struct struct0 {
++ int data_member;
++};
++
++struct0 object0;
++struct0 object1;
++struct0 object2;
++
++int i;
++
++void function0 ()
++{
++ (i ? object0 : object1).data_member = 99; // gets bogus error
++ (i ? object0 : object1) = object2; // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// g++ 1.37.1 bug 900331_03
++
++// Special Options: -ansi
++
++// The following code causes g++ to abort.
++
++// Curiously, the abort does not occur if the -pedantic option is used.
++
++// Cfront 2.0 passes this test.
++
++// Keywords: abort, conditional operator?:, lvalues, composite types
++
++struct struct0 {
++ int data_member;
++
++ virtual void function_member () {} // contributes to the abort
++};
++
++struct0 object0;
++struct0 object1;
++struct0 object2;
++
++int i;
++
++void function0 ()
++{
++ object2 = (i ? object0 : object1); // OK
++ (i ? object0 : object1) = object2; // causes abort
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// g++ 1.37.1 bug 900331_04
++
++// g++ is unable to correctly parse declarations of formal parameters and
++// local objects which have pointer-to-array types or reference-to-array
++// types.
++
++// Cfront 2.0 passes this test.
++
++// keywords: syntax, arrays, pointers, references, local, formal
++
++int array[10];
++
++int (*global_array_ptr)[10] = &array;
++int (&global_array_ref)[10] = array;
++
++void function0 (int (*formal_array_ptr)[10]) { // gets bogus errors
++}
++
++void function1 (int (&formal_array_ref)[10]) { // gets bogus errors
++}
++
++void function2 ()
++{
++ int (*local_array_ptr)[10] = &array; // gets bogus errors
++}
++
++void function3 ()
++{
++ int (&local_array_ref)[10] = array; // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// g++ 1.37.1 bug 900401_01
++
++// The following erroneous code causes g++ to abort.
++
++// Cfront 2.0 passes this test.
++
++// keywords: abort, bit-fields, arrays
++
++typedef unsigned nibble_array[4];
++
++struct whole {
++ nibble_array nibbles:16; // ERROR -
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// g++ 1.37.1 bug 900402_01
++
++// The following erroneous code causes g++ to abort.
++
++// Cfront 2.0 passes this test.
++
++// keywords: abort, bit-fields, function types
++
++typedef void (func_type) ();
++
++struct s {
++ func_type f:32; // ERROR - bitified with function type
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// g++ 1.37.1 bug 900402_02
++
++// g++ fails to correctly flag all attempts to construct an array type
++// of zero length as errors.
++
++// keywords: arrays, array bound, zero length
++
++typedef int array_type[0]; // ERROR - gets warning only
++
++int array_object_1[0]; // ERROR - gets warning only
++
++void function_0 (int formal_array[0])
++{ // ERROR - gets warning only
++}
++
++void function_2 ()
++{
++ int local_object_array_0[0]; // ERROR - gets warning only
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// g++ 1.37.1 bug 900403_01
++
++// g++ allows casts to be treated as lvalues (even when the -pedantic
++// option is used). Neither the C++ Reference Manual nor cfront 2.0
++// allow this. (gcc gives warnings for such usage with -pedantic).
++
++// Cfront 2.0 passes this test.
++
++// keywords: lvalues, casts
++
++int i, j;
++
++void f ()
++{
++ (int) i = j; // ERROR -
++ ((int) i) = j; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// g++ 1.37.1 bug 900403_04
++
++// The following erroneous code causes g++ to abort.
++
++// keywords: abort, bit-fields, zero length
++
++struct s {
++ unsigned int foo:0; // ERROR - This is the real line
++ unsigned int field;
++};
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// g++ 1.37.1 bug 900404_01
++
++// g++ allows string initializers for known-length character arrays to be
++// one character longer (counting the terminating null) than the actual
++// length of the array to be initialized.
++
++// The C++ Reference Manual (section 8.4.2) expressly prohibits this.
++
++// Cfront 2.0 passes this test.
++
++// keywords: arrays, initialization, array bounds
++
++char cv[4] = "asdf"; // ERROR - missed
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// g++ 1.37.1 bug 900404_02
++
++// g++ fails to treat multicharacter literals as type "int" as required by
++// section 2.5.2 of the C++ Reference Manual.
++
++// The result is that the following program will exit with a non-zero
++// exit status.
++
++// keywords: character literals, multi-character literals, int type
++
++int exit_status = 0;
++
++void function0 (int i) // function that should be called
++{
++ i = i;
++}
++
++void function0 (char c) // function that is actually called
++{
++ c = c;
++ exit_status++;
++}
++
++int main () { function0 ('abcd'); return exit_status; } // WARNING -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// g++ 1.37.1 bug 900404_03
++
++// g++ fails to be able to properly flag errors for even simple cases of
++// ambiguous overload resolution (such as the one shown below).
++
++// Cfront 2.0 passes this test.
++
++// keywords: overloading, ambiguity, resolution
++
++void function0 (int i, char c)
++{ // ERROR -
++ i = c;
++}
++
++void function0 (char c, int i)
++{ // ERROR -
++ i = c;
++}
++
++char c;
++
++void test ()
++{
++ function0 (c,c); // ERROR - missed
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// g++ 1.37.1 bug 900404_04
++
++// [dcl.dcl] explains that simple-declarations may omit the
++// init-declarator-list only if the decl-specifier-seq declares a
++// class, i.e. if it contains a class-specifier, an
++// elaborated-type-specifier with class key, or an enum-specifier. The
++// declaration below contains neither.
++
++// g++ fails to flag errors for such usage.
++
++// keywords: semicolon, vacuous, file scope, declaration
++
++int i;
++
++; // ERROR - , XFAIL *-*-*
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// g++ 1.37.1 bug 900404_07
++
++// It is illegal to use a cast to attempt to convert an object type
++// to a non-scalar type (e.g. an array type).
++
++// g++ fails to properly flag as errors such illegal uses of array types.
++
++// keywords: array types, casts, type conversion
++
++typedef int array_type[10];
++
++array_type *ap;
++
++void foo ()
++{
++ int i = *((array_type) *ap); /* ERROR - missed */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// g++ 1.37.1 bug 900405_01
++
++// The C++ Reference Manual says (in section 5.4) "Types may not be defined
++// in casts."
++
++// g++ fails to flag errors for cases where an attempt is made to define
++// a struct, class, union, or enum type within a cast.
++
++// keywords: casts, type definitions, tagged types
++
++void f ()
++{
++ (enum e { red, green } *) 0; // ERROR - type defined in cast
++ (struct s { int member; } *) 0; // ERROR - type defined in cast
++ (union u { int member; } * ) 0; // ERROR - type defined in cast
++ (class c { int member; } *) 0; // ERROR - type defined in cast
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// g++ 1.37.1 bug 900406_01
++
++// The following code causes g++ to segfault.
++
++// cfront 2.0 passes this test.
++
++// keywords: segfault, operator new, array types, array bounds
++
++void function0 ()
++{
++ new int[]; // ERROR - causes segfault
++}
++
++void function1 ()
++{
++ new int (*)[]; // ERROR - no size specified
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// g++ bug 900406_02
++
++// g++ fails to correctly parse some type specifications within casts.
++
++// This results in incorrect errors being issued.
++
++// These errors are not issued for identical code by either cfront or
++// by gcc.
++
++// cfront 2.0 passes this test.
++
++// keywords: syntax, array types, casts
++
++int (*ipp)[];
++int (**ippp)[];
++
++int function ()
++{
++ ipp = (int (*)[]) 0; // OK
++ ippp = (int (**)[]) 0; // gets bogus error (syntax)
++ return 0;
++}
++
++int main () { return 0; }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// g++ 1.37.1 bug 900407_01
++
++// g++ fails to flag errors for uses of anachronistic features such as the
++// invocation of a base class constructor in a ctor-initializer list without
++// explicitly giving its name.
++
++// Errors should probably be issued for such usage unless the -traditional
++// option is used.
++
++// Warnings are however issued.
++
++// Cfront 2.0 flags such usage as an error when the +p (pure-language) option
++// is used.
++
++// Cfront 2.0 passes this test.
++
++// keywords: anachronism, inheritance, initialization, mem-initializer
++
++struct s0 {
++ int member;
++
++ s0 ();
++};
++
++s0::s0() { }
++
++struct s1 : public s0 {
++ int member;
++
++ s1 ();
++};
++
++s1::s1() : () { // ERROR - anachronism used
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// g++ 1.37.1 bug 900407_02
++
++// g++ flags errors for attempts to assign to the "this" parameter within
++// class constructors (regardless of whether or not the -traditional)
++// option is used).
++
++// Such errors should probably not be issued when the -traditional option is
++// used.
++
++// Special g++ Options: -Wno-deprecated -fthis-is-variable
++// Special CC Options:
++
++// Cfront only flags errors for such usage whin the +p (pure language)
++// option is used.
++
++// cfront 2.0 passes this test.
++
++// keywords: anachronism, this, assignment
++
++struct s0 {
++
++ int member;
++
++ s0 ();
++};
++
++s0::s0 ()
++{
++ this = this; // OK - anachronism allowed with -traditional
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++// g++ 1.37.1 bug 900428_01
++
++// g++ fails to issue error messages for cases where an incomplete type
++// object must be evaluated if the value of such an evaluation is not
++// actually used in the given context.
++
++// In the case where such an object is volatile, it is obvious that this
++// could be a problem, however I believe that errors should be issued
++// for such cases regardless of whether or not such values are volatile
++// because the abstract semantics seem to require the evaluation of such
++// values whether they are volatile or not.
++
++// keywords: incomplete types, evaluation, volatile qualifier
++// Build don't link:
++
++int i;
++
++void *pv;
++volatile void *pvv;
++struct s; // ERROR - forward declaration
++extern struct s es, *ps; // ERROR - defined here
++extern volatile struct s evs, *pvs; // ERROR - defined here
++
++void pv_test ()
++{
++ *pv; // ERROR - invalid void
++ (i ? *pv : *pv); // ERROR - invalid void
++ *pv, *pv; // ERROR - invalid void
++
++ *pvv; // ERROR - invalid void
++ (i ? *pvv : *pvv); // ERROR - invalid void
++ *pvv, *pvv; // ERROR - invalid void
++
++ es; // ERROR - incomplete
++ (i ? es : es); // ERROR - undefined type
++ es, es; // ERROR - incomplete
++
++ evs; // ERROR - incomplete
++ (i ? evs : evs); // ERROR - undefined type
++ evs, evs; // ERROR - incomplete
++
++ *ps; // ERROR - undefined type
++ (i ? *ps : *ps); // ERROR - undefined type
++ *ps, *ps; // ERROR - undefined type
++
++ *pvs; // ERROR - undefined type
++ (i ? *pvs : *pvs); // ERROR - undefined type
++ *pvs, *pvs; // ERROR - undefined type
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// g++ 1.37.1 bug 900428_02
++
++// g++ fails to issue either errors or warnings (even with -pedantic) for
++// attempts to perform either pre or post increment or decrement operations
++// on variables which have either pointer-to-void types or pointer-to-function
++// types.
++
++// cfront 2.0 passes this test.
++
++// keywords: pointer arithmetic, increment, decrement
++// Build don't link:
++
++void *vp;
++void (*fp) ();
++
++void test ()
++{
++ vp++; /* ERROR - */
++ ++vp; /* ERROR - */
++ vp--; /* ERROR - */
++ --vp; /* ERROR - */
++
++ fp++; /* ERROR - */
++ ++fp; /* ERROR - */
++ fp--; /* ERROR - */
++ --fp; /* ERROR - */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// g++ 1.37.1 bug 900428_03
++
++// g++ fails to detect cases where a constructor for a derived class invokes
++// (either explicitly or implicitly) a private constructor for a base class.
++
++// cfront 2.0 passes this test.
++
++// keywords: inheritance, private, accessability, constructors
++
++struct struct_0 {
++ int struct_0_data_member;
++
++private:
++ struct_0 (int, int);
++public:
++ struct_0 (int);
++};
++
++struct_0::struct_0 (int i) { }
++struct_0::struct_0 (int, int) { } // ERROR - xref from below
++
++struct struct_1 : public struct_0 {
++
++ struct_1 ();
++};
++
++struct_1::struct_1 () : struct_0 (8,9)
++{ // ERROR -
++}
++
++struct struct_2 {
++ struct_0 struct_2_data_member;
++
++ struct_2 ();
++};
++
++// g++ catches the following error (but does so only at the line with the
++// closing curly brace).
++
++struct_2::struct_2 () : struct_2_data_member (8,9)
++{ // ERROR - should be up one line
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// g++ 1.37.1 bug 900511_01
++
++// g++ fails to properly apply user-defined type conversion operators
++// in cases where is it not obvious that the given conversion is
++// appropriate for the context (i.e. operator and other operands)
++// where the conversion should take place.
++
++// cfront 2.0 passes this test.
++
++struct struct_1 {
++ int member;
++
++ operator int ();
++};
++
++struct_1::operator int ()
++{
++ return 0;
++}
++
++struct struct_2 {
++ int member;
++
++ operator float ();
++};
++
++struct_2::operator float ()
++{
++ return 0.0;
++}
++
++struct_1 struct_1_object;
++struct_2 struct_2_object;
++double d;
++
++void test ()
++{
++ d = struct_2_object + struct_1_object; // OK
++ d = struct_1_object + struct_2_object; // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// g++ 1.37.1 bug 900511_02
++
++// g++ does not properly shadow names of types with names of data members
++// in cases where the type names in question are used in the context of
++// formal parameters lists for member functions.
++
++// keywords: typedef names, shadowing, scope, formal parameter list
++
++// cfront 2.0 passes this test.
++
++enum enum0 { enum0_value_0 };
++
++struct struct0 {
++ int enum0;
++ void member_function (enum0 e); // ERROR - invalid use of struct-local member
++};
++
++void class0::member_function (enum0 e) { // ERROR - syntax error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// g++ 1.37.1 bug 900511_03
++
++// g++ does not properly shadow names of types with names of data members
++// in cases where the type names in question are used in the context of
++// formal parameters lists for member functions.
++
++// keywords: typedef names, shadowing, scope, formal parameter list
++
++class class0;
++
++struct struct1 {
++ int class0;
++ void member_function (class0 *); // ERROR - invalid use of struct-local member
++};
++
++void class1::member_function (class0 *p) { // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,112 @@
++// g++ 1.37.1 bug 900514_03
++
++// g++ fails to flag ERRORs on the following erroneous code.
++
++// In Section 12.3.2 it says "Defining conversion by both a constructor and
++// a conversion function can lead to ambiguities." However in the case below,
++// the explicit cast syntax disambiguates the constructor as one which
++// invokes the type conversion operator rather than the conversion.
++
++// cfront 2.0 passes this test.
++
++// keywords: user-defined type conversion operator, constructor
++
++struct t_0_st_0;
++
++struct t_0_st_1 {
++ int member;
++
++ t_0_st_1 (t_0_st_0&);// ERROR -
++ t_0_st_1 ();
++};// ERROR -
++
++struct t_0_st_0 {
++ int member;
++
++ operator t_0_st_1 ();// ERROR -
++};
++
++t_0_st_0 t_0_st_0_obj0;
++
++void t_0_assignment ()
++{
++ t_0_st_1 t_0_st_1_obj0;
++ t_0_st_1 t_0_st_1_obj1;
++ t_0_st_1 t_0_st_1_obj2;
++
++ t_0_st_1_obj0 = t_0_st_0_obj0; // ERROR - caught
++ t_0_st_1_obj1 = t_0_st_1 (t_0_st_0_obj0);
++}
++
++void t_0_local_init ()
++{
++ t_0_st_1 t_0_st_1_obj0 = t_0_st_0_obj0; // ERROR -
++ t_0_st_1 t_0_st_1_obj1 = t_0_st_1 (t_0_st_0_obj0);
++}
++
++struct t_1_st_0;
++
++struct t_1_st_1 {
++ int member;
++
++ t_1_st_1 (t_1_st_0&); // ERROR -
++ t_1_st_1 ();
++ void operator= (t_1_st_1&); // ERROR -
++};
++
++struct t_1_st_0 {
++ int member;
++
++ operator t_1_st_1 (); // ERROR -
++};
++
++t_1_st_0 t_1_st_0_obj0;
++
++void t_1_assignment ()
++{
++ t_1_st_1 t_1_st_1_obj0;
++ t_1_st_1 t_1_st_1_obj1;
++ t_1_st_1 t_1_st_1_obj2;
++
++ t_1_st_1_obj0 = t_1_st_0_obj0; // ERROR -
++ t_1_st_1_obj1 = t_1_st_1 (t_1_st_0_obj0); // ERROR -
++}
++
++void t_1_local_init ()
++{
++ t_1_st_1 t_1_st_1_obj0 = t_1_st_0_obj0; // ERROR -
++ t_1_st_1 t_1_st_1_obj1 = t_1_st_1 (t_1_st_0_obj0);
++}
++
++struct t_2_st_0;
++
++struct t_2_st_1 {
++ int member;
++
++ t_2_st_1 (t_2_st_0); // ERROR - candidate
++ t_2_st_1 ();
++}; // ERROR - candidate
++
++struct t_2_st_0 {
++ int member;
++
++ operator t_2_st_1 (); // ERROR - candidate
++};
++
++t_2_st_0 t_2_st_0_obj0;
++
++void t_2_assignment ()
++{
++ t_2_st_1 t_2_st_1_obj0;
++ t_2_st_1 t_2_st_1_obj1;
++ t_2_st_1 t_2_st_1_obj2;
++
++ t_2_st_1_obj0 = t_2_st_0_obj0; // ERROR - caught
++ t_2_st_1_obj1 = t_2_st_1 (t_2_st_0_obj0);
++}
++
++void t_2_local_init ()
++{
++ t_2_st_1 t_2_st_1_obj0 = t_2_st_0_obj0; // ERROR -
++ t_2_st_1 t_2_st_1_obj1 = t_2_st_1 (t_2_st_0_obj0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// g++ 1.37.1 bug 900519_01
++
++// g++ fails to flag errors for some attempts to declare or define non-member
++// type conversion operators.
++
++// cfront 2.0 passes this test.
++
++// keywords: user-defined type conversion operator, non-member
++
++extern operator int (); // ERROR -
++
++extern operator int () { // ERROR -
++ return 0;
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// g++ 1.37.1 bug 900519_02
++
++// The C++ Reference Manual says (in section 8.4.3) "A reference to a plain
++// T can only be initialized with a plain T" however g++ allows the
++// initialization of plain references with qualified objects in many cases.
++
++// keywords: references, initialization, type qualifiers
++
++extern const int cint_obj = 9;
++volatile int vint_obj = 9;
++
++void take_int_ref (int& arg) { } // ERROR - referenced by errors below
++
++int& global_int_ref0 = cint_obj; // ERROR -
++int& global_int_ref1 = vint_obj; // ERROR -
++
++extern const int& cint_ref;
++extern volatile int& vint_ref;
++
++void test_0 ()
++{
++ int& local_int_ref0 = cint_obj; // ERROR -
++ int& local_int_ref1 = vint_obj; // ERROR -
++
++ take_int_ref (cint_obj); // ERROR - caught
++ take_int_ref (vint_obj); // ERROR -
++
++ take_int_ref (cint_ref); // ERROR -
++ take_int_ref (vint_ref); // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// g++ 1.37.1 bug 900519_03
++
++// The C++ Reference Manual says (in section 8.4.3) "A reference to a
++// volatile T can be initialized with a volatile T or a plain T but not a
++// const T. A reference to a const T can be initialized with a const T or
++// a plain T or something that can be converted into a plain T, but not a
++// volatile T."
++
++// g++ fails to disgnose such errors in most cases.
++
++// keywords: references, initialization, type qualifiers
++
++extern const int cint_obj;
++extern volatile int vint_obj;
++
++void take_cint_ref (const int& arg) { } // ERROR -
++void take_vint_ref (volatile int& arg) { } // ERROR -
++
++const int& global_cint_ref2 = vint_obj; // ERROR -
++
++volatile int& global_vint_ref1 = cint_obj; // ERROR -
++
++extern const int& extern_cint_ref;
++extern volatile int& extern_vint_ref;
++
++void test_0 ()
++{
++ const int& local_cint_ref2 = vint_obj; // ERROR -
++
++ volatile int& local_vint_ref1 = cint_obj; // ERROR -
++}
++
++void test_1 ()
++{
++ take_cint_ref (vint_obj); // ERROR -
++
++ take_vint_ref (cint_obj); // ERROR - caught
++}
++
++void test_2 ()
++{
++ take_cint_ref (extern_vint_ref); // ERROR -
++
++ take_vint_ref (extern_cint_ref); // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// g++ 1.37.1 bug 900519_04
++
++// The following legal code causes g++ to segfault.
++
++// cfront 2.0 passes this test.
++
++// keywords: segfault, references, initialization
++
++int cint_obj = 9;
++
++void take_cint_ref (int& arg) { }
++
++int& cint_ref_0 = cint_obj;
++int& cint_ref_1 = cint_obj;
++
++void test_0 ()
++{
++ take_cint_ref (cint_ref_1); // causes segfault
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// g++ 1.37.1 bug 900519_05
++
++// g++ fails to allow the use of function-reference types.
++
++// cfront 2.0 passes this test.
++
++// keywords: function types, reference types
++
++typedef void (func_type) (int, int);
++typedef func_type& func_ref_type;
++
++void function (int arg1, int arg2)
++{
++}
++
++func_type& global_func_ref1 = function;
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// g++ 1.37.1 bug 900519_06
++
++// g++ allows the type given in an invocation of operator new to be a
++// reference type.
++
++// Since pointers to reference types are illegal, the required return type
++// from such an invocation (of operator new) is illegal, and thus (it seems)
++// the entire call to new should be treated as being illegal.
++
++typedef int& int_ref;
++
++void test (int n)
++{
++ new int&; // ERROR - missed
++ new int_ref; // ERROR - missed
++ new int&[n]; // ERROR - missed
++ new int_ref[n]; // ERROR - missed
++ new int&[3]; // ERROR - missed
++ new int_ref[3]; // ERROR - missed
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// g++ 1.37.1 bug 900519_07
++
++// It is illegal to specify or to use array-of-reference types, yet g++
++// allows them to be specified (in typedef statements and in declarations)
++// and to be used (in declarations).
++
++// keywords: reference types, array types
++
++int i;
++int j;
++
++typedef int& int_ref;
++typedef int_ref int_ref_array_type[2]; // ERROR - missed
++
++int& int_ref_array_obj0[2] = { i, j }; // ERROR - missed
++int_ref int_ref_array_obj1[2] = { i, j }; // ERROR - missed
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// g++ 1.37.1 bug 900519_09
++
++// g++ allows the allocation of const objects via operator new even when
++// these uses of operator new do not include initializations.
++
++// This is inconsistant within the restrictions placed on the construction
++// of class, struct, and union types which have constant members.
++
++// Since there is no completely valid way of initializing such objects
++// after the invocation of new, these cases should all be illegal.
++
++// keywords: operator new, initialization, const qualifier
++
++struct struct_0 {
++ int member;
++};
++
++typedef const int const_int;
++typedef const struct struct_0 const_struct_0;
++
++void test ()
++{
++ new const int; // ERROR -
++ new const_int; // ERROR -
++ new const struct_0; // ERROR -
++ new const_struct_0; // ERROR -
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// g++ 1.37.1 bug 900519_12
++
++// The following erroneous code causes g++ to segfault.
++
++// cfront 2.0 passes this test.
++
++// keywords: segfault, typedef, pointer type, function type
++
++typedef eek void (*)(); // ERROR -
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// g++ 1.37.1 bug 900519_13
++
++// If multiple inheritance creates a situation in which a given name is
++// inherited from more than one base class, and if the inherited declarations
++// for the name are for different categories of members (e.g. object members,
++// function members, enumeral members), then g++ will (in some cases) fail
++// to flag errors when the ambiguous name is used.
++
++// cfront 2.0 passes this test.
++
++// keywords: inheritance, ambiguity resolution, members
++
++struct base_0 {
++ enum { base_member }; // ERROR - candidate (26, 30)
++};
++
++struct base_1 {
++ int base_member; // ERROR - candidate (26, 34)
++};
++
++struct base_2 {
++ int base_member (); // ERROR - candidate (30, 34)
++};
++
++struct derived_0 : public base_0, public base_1 {
++ void member () { base_member; } // ERROR -
++};
++
++struct derived_1 : public base_0, public base_2 {
++ void member () { base_member; } // ERROR - missed
++};
++
++struct derived_2 : public base_1, public base_2 {
++ void member () { base_member; } // ERROR - missed
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// g++ 1.37.1 bug 900520_02
++
++// keywords: reference types, initialization, parameter passing
++
++typedef int b_array[3];
++typedef int u_array[];
++
++typedef b_array &b_array_ref;
++typedef u_array &u_array_ref;
++
++void take_b_array_ref (b_array_ref arg) { } // ERROR - passed to here
++
++extern u_array u_array_gbl_obj;
++
++u_array_ref u_array_ref_gbl_obj0 = u_array_gbl_obj;
++
++b_array_ref b_array_ref_gbl_obj0 = u_array_ref_gbl_obj0; // ERROR - invalid declaration
++
++void test_passing ()
++{
++ take_b_array_ref (u_array_ref_gbl_obj0); // ERROR - invalid call
++}
++
++b_array u_array_gbl_obj;
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// g++ 1.37.1 bug 900520_03
++
++// The C++ Reference Manual says (in section 8.2.4):
++
++// When an identifier of array type appears in an expression, except
++// as the operand of sizeof or & or used to initialize a reference,
++// it is converted into a pointer to the first member of the array.
++
++// One must assume from the verbage, that when the name of a non-const array
++// object appears in one of the exempted contexts mentioned in this passage,
++// that it is *not* automatically converted into a pointer value, but rather
++// that it remains as an array type value, and that it may therefore also
++// still be an lvalue, and may be used to initialize references.
++
++// As the following code demonstrates, g++ does in fact treat the names
++// of non-const array objects as valid initializers for reference-to-array
++// type object in some (but not all) contexts.
++
++// The exception is that g++ does not allow names which designate objects
++// on incomplete array types to be used as actual parameters in function
++// calls where the corresponding formal parameter is of a reference-to-array
++// type.
++
++// g++ does however allow other similar sorts of initializations of non-formal
++// reference objects.
++
++// 5/16/94 (jason): The 1/25/94 WP explicitly states in section 8.3.5 that
++// parameter types may not contain pointers or references to arrays of unknown
++// bound. g++ is correct.
++
++// keywords: reference types, array types, initialization, parameter passing
++
++typedef int u_array[];
++typedef u_array &u_array_ref;
++
++void take_u_array_ref (u_array_ref arg) { } // ERROR - reference to array of unknown bound in parmtype
++
++extern u_array u_array_gbl_obj;
++u_array_ref u_array_ref_gbl_obj0 = u_array_gbl_obj; // OK
++
++void test_local_initialization ()
++{
++ u_array_ref u_array_ref_lcl_obj0 = u_array_gbl_obj; // OK
++}
++
++void test_passing ()
++{
++ take_u_array_ref (u_array_gbl_obj);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// g++ 1.37.1 bug 900520_04
++
++// g++ does not yet support the initialization of scalar type objects
++// (including built-in arithmetic types, enum types, and pointer types)
++// via constructor initialization syntax except within a call to operator
++// new.
++
++// keywords: unimplemented, syntax, initialization, scalar types
++
++enum e_type { e_value };
++
++typedef char *charp;
++
++charp cp;
++
++int global_i (1); // gets bogus error
++double global_d (9.9); // gets bogus error
++charp global_cp0 (cp); // gets bogus error
++charp global_cp1 (0); // gets bogus error
++enum e_type global_e (e_value); // gets bogus error
++
++void func0 ()
++{
++ int local_i (1); // gets bogus error
++ double local_d (9.9); // gets bogus error
++ charp local_cp0 (cp); // gets bogus error
++ charp local_cp1 (0); // gets bogus error
++ enum e_type local_e (e_value); // gets bogus error
++}
++
++void func1 ()
++{
++ int* ip = new int (1); // gets bogus error
++ double* dp = new double (9.9); // gets bogus error
++ charp* cpp0 = new charp (cp); // gets bogus error
++ charp* cpp1 = new charp (0); // gets bogus error
++ enum e_type* ep = new e_type (e_value); // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// g++ 1.37.1 bug 900520_05
++
++// The following legal code gets syntax errors from g++.
++
++// keywords: syntax, unimplemented, operator new, initialization, pointer types
++
++struct struct_0 {
++};
++
++char *cp;
++static struct_0 *sp;
++
++void test0 ()
++{
++ new char * (cp); // gets bogus error
++}
++
++void test1 ()
++{
++ new struct_0 * (sp); // gets bogus error
++}
++
++int main () { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,78 @@
++// g++ 1.37.1 bug 900520_06
++
++// When an object of a class type is passed into a formal parameter of the
++// same class type (in a function call) the language definition calls for
++// this action to be treated like any other form of an initialization of
++// an object of the given class type.
++
++// g++ fails however to invoke the (compiler-supplied) copy constructor for
++// the class type when a parameter of the class type is passed as an
++// actual parameter.
++
++// This causes the following program to exit with a non-zero exit status.
++
++// cfront 2.0 passes this test.
++
++int base_copy_ctor_called = 0;
++int member_copy_ctor_called = 0;
++
++struct struct_0 {
++ struct_0 ();
++ struct_0 (const struct_0&);
++};
++
++struct_0::struct_0 ()
++{
++}
++
++struct_0::struct_0 (const struct_0&)
++{
++ base_copy_ctor_called++;
++}
++
++struct struct_1 {
++ struct_1 ();
++ struct_1 (const struct_1&);
++};
++
++struct_1::struct_1 ()
++{
++}
++
++struct_1::struct_1 (const struct_1&)
++{
++ member_copy_ctor_called++;
++}
++
++struct struct_2 : public struct_0 {
++ struct_2 ();
++ struct_1 struct_1_member;
++#ifdef MAKE_COPY_CONSTRUCTOR_EXPLICIT
++ struct_2 (const struct_2&);
++#endif
++};
++
++struct_2::struct_2 ()
++{
++}
++
++#ifdef MAKE_COPY_CONSTRUCTOR_EXPLICIT
++struct_2::struct_2 (const struct_2& arg) :
++ struct_0 ((struct_0&)arg),
++ struct_1_member (arg.struct_1_member)
++{
++}
++#endif
++
++void take_struct_2 (struct_2 arg)
++{
++}
++
++int test ()
++{
++ struct_2 struct_2_object0;
++ take_struct_2 (struct_2_object0);
++ return (base_copy_ctor_called != 1 || member_copy_ctor_called != 1);
++}
++
++int main () { return test (); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Bug: obj gets destroyed twice because the fixups for the return are
++// inside its cleanup region.
++
++extern "C" int printf (const char *, ...);
++
++int d;
++
++struct myExc { };
++
++struct myExcRaiser {
++ ~myExcRaiser() { throw myExc(); }
++};
++
++struct stackObj {
++ ~stackObj() { ++d; printf ("stackObj::~stackObj()\n"); };
++};
++
++int test()
++{
++ myExcRaiser rais;
++ stackObj obj;
++ return 0;
++}
++
++int main()
++{
++ try {
++ test();
++ }
++ catch (myExc &) {
++ return d != 1;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/ctor1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/ctor1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/ctor1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/ctor1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct A
++{
++ A();
++ A(A&); // ERROR - referenced below
++};
++
++int
++main ()
++{
++ try
++ {
++ throw A(); // ERROR - can't copy
++ }
++ catch (...) { }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/flow1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/flow1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/flow1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/flow1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++#include <stdio.h>
++
++int bar ()
++{
++ throw 100;
++}
++
++int main ()
++{
++ int i = 0; // this gets deleted after flow analysis
++ try
++ {
++ i = bar ();
++ }
++ catch (...)
++ {
++ }
++
++ printf ("i = %d\n", i);
++ return i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/new1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/new1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/new1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/new1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Test that a throw in foo destroys the A, but does not free the memory.
++
++#include <stddef.h>
++#include <stdlib.h>
++#include <new.h>
++
++struct A {
++ A();
++ ~A();
++};
++
++struct B {
++ B (A);
++};
++
++void foo (B*);
++
++int newed, created;
++
++int main ()
++{
++ try {
++ foo (new B (A ()));
++ } catch (...) { }
++
++ return !(newed && !created);
++}
++
++A::A() { created = 1; }
++A::~A() { created = 0; }
++B::B(A) { }
++void foo (B*) { throw 1; }
++
++void* operator new (size_t size) throw (std::bad_alloc)
++{
++ ++newed;
++ return (void *) malloc (size);
++}
++
++void operator delete (void *p) throw ()
++{
++ --newed;
++ free (p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/new2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/new2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/new2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/new2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// Test that a throw in B's constructor destroys the A and frees the memory.
++
++#include <stddef.h>
++#include <stdlib.h>
++#include <new.h>
++
++struct A {
++ A();
++ ~A();
++};
++
++struct B {
++ B (A);
++};
++
++void foo (B*);
++
++int newed, created;
++
++int main ()
++{
++ newed = 0; // The libraries might call new before main starts.
++ try {
++ foo (new B (A ()));
++ } catch (...) { }
++
++ return !(!newed && !created);
++}
++
++A::A() { created = 1; }
++A::~A() { created = 0; }
++B::B(A) { throw 1; }
++void foo (B*) { }
++
++void* operator new (size_t size) throw (std::bad_alloc)
++{
++ ++newed;
++ return (void *) malloc (size);
++}
++
++void operator delete (void *p) throw ()
++{
++ --newed;
++ free (p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/pdel1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/pdel1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/pdel1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/pdel1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Test for calling placement delete.
++
++#include <new>
++#include <stddef.h>
++
++int r = 1;
++
++struct A {
++ A() { throw 1; }
++ void operator delete (void *p, int, int) { r = 0; ::operator delete (p); }
++};
++
++void * operator new (size_t size, int, int) { return operator new (size); }
++
++int main ()
++{
++ try {
++ A* ap = new (1, 5) A;
++ } catch (...) { }
++
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/pdel2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/pdel2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/pdel2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/pdel2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Test for not calling mismatched placement delete.
++
++#include <new>
++#include <stddef.h>
++
++int r = 0;
++
++struct A {
++ A() { throw 1; }
++ void operator delete (void *p, int, long) { r = 1; ::operator delete (p); }
++};
++
++void * operator new (size_t size, int, int) { return operator new (size); }
++
++int main ()
++{
++ try {
++ A* ap = new (1, 5) A;
++ } catch (...) { }
++
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Bug: catching pointers by reference doesn't work right.
++
++extern "C" int printf (const char *, ...);
++
++struct E {
++ int x;
++ E(int i) { x = i; };
++};
++
++int main()
++{
++ try {
++ E *p = new E(5);
++ throw p;
++ }
++
++ catch (E *&e) {
++ printf ("address of e is 0x%lx\n", (long)e);
++ return !(long(e) != 5 && e->x == 5);
++ }
++ return 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// Testcase for proper handling of rethrow.
++
++#include <stdio.h>
++
++int c, d;
++
++struct A
++{
++ int i;
++ A () { i = ++c; printf ("A() %d\n", i); }
++ A (const A&) { i = ++c; printf ("A(const A&) %d\n", i); }
++ ~A() { printf ("~A() %d\n", i); ++d; }
++};
++
++int
++main ()
++{
++ try
++ {
++ try
++ {
++ printf ("Throwing 1...\n");
++ throw A();
++ }
++ catch (A)
++ {
++ try
++ {
++ printf ("Throwing 2...\n");
++ throw A();
++ }
++ catch (A)
++ {
++ printf ("Throwing 3...\n");
++ throw;
++ }
++ }
++ }
++ catch (A)
++ {
++ printf ("Caught.\n");
++ }
++ printf ("c == %d, d == %d\n", c, d);
++ return c != d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// Testcase for proper handling of rethrow.
++
++#include <stdio.h>
++
++int c, d;
++
++struct A
++{
++ int i;
++ A () { i = ++c; printf ("A() %d\n", i); }
++ A (const A&) { i = ++c; printf ("A(const A&) %d\n", i); }
++ ~A() { printf ("~A() %d\n", i); ++d; }
++};
++
++int
++main ()
++{
++ try
++ {
++ try
++ {
++ printf ("Throwing 1...\n");
++ throw A();
++ }
++ catch (A)
++ {
++ try
++ {
++ printf ("Throwing 2...\n");
++ throw;
++ }
++ catch (A)
++ {
++ printf ("Throwing 3...\n");
++ throw;
++ }
++ }
++ }
++ catch (A)
++ {
++ printf ("Caught.\n");
++ }
++ printf ("c == %d, d == %d\n", c, d);
++ return c != d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#include <stdio.h>
++#include <exception>
++
++static void
++eh_terminate ()
++{
++ printf ("CALLING TERMINATE\n");
++ exit (1);
++}
++
++void
++eh_test (int level)
++{
++ try
++ {
++ if (level < 2)
++ eh_test (level + 1);
++ else
++ {
++ printf ("%d: Throwing\n", level);
++ throw (level);
++ }
++ }
++ catch (int &x)
++ {
++ printf ("%d: Got level %d\n",
++ level, x);
++
++ if (level > 0)
++ throw;
++ }
++}
++
++int main ()
++{
++ std::set_terminate (&eh_terminate);
++ eh_test (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// Testcase for proper handling of rethrow.
++
++#include <stdio.h>
++
++int c, d;
++
++struct A
++{
++ int i;
++ A () { i = ++c; printf ("A() %d\n", i); }
++ A (const A&) { i = ++c; printf ("A(const A&) %d\n", i); }
++ ~A() { printf ("~A() %d\n", i); ++d; }
++};
++
++int
++main ()
++{
++ try
++ {
++ try
++ {
++ printf ("Throwing 1...\n");
++ throw A();
++ }
++ catch (A)
++ {
++ try
++ {
++ printf ("Throwing 2...\n");
++ throw;
++ }
++ catch (A)
++ {
++ printf ("Throwing 3...\n");
++ throw A();
++ }
++ }
++ }
++ catch (A)
++ {
++ printf ("Caught.\n");
++ }
++ printf ("c == %d, d == %d\n", c, d);
++ return c != d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/rethrow5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/rethrow5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Testcase for proper handling of rethrow.
++
++#include <stdio.h>
++
++int c, d;
++
++struct A
++{
++ int i;
++ A () { i = ++c; printf ("A() %d\n", i); }
++ A (const A&) { i = ++c; printf ("A(const A&) %d\n", i); }
++ ~A() { printf ("~A() %d\n", i); ++d; }
++};
++
++int
++main ()
++{
++ try
++ {
++ try
++ {
++ printf ("Throwing 1...\n");
++ throw A();
++ }
++ catch (A)
++ {
++ try
++ {
++ printf ("Throwing 2...\n");
++ throw;
++ }
++ catch (A)
++ {
++ printf ("Falling out...\n");
++ }
++ }
++ }
++ catch (A)
++ {
++ printf ("Caught.\n");
++ }
++ printf ("c == %d, d == %d\n", c, d);
++ return c != d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Testing exception specifications.
++// Test 1: the original exception succeeds.
++
++#include <stdlib.h>
++#include <exception>
++
++void my_term () { exit (1); }
++void my_unexp () { throw 42; }
++
++void
++f () throw (char, int, std::bad_exception)
++{
++ throw 'a';
++}
++
++int main ()
++{
++ std::set_terminate (my_term);
++ std::set_unexpected (my_unexp);
++
++ try
++ {
++ f ();
++ }
++ catch (char)
++ {
++ return 0;
++ }
++ catch (int)
++ {
++ return 3;
++ }
++ catch (std::bad_exception)
++ {
++ return 4;
++ }
++ return 5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Testing exception specifications.
++// Test 2: the second throw succeeds.
++
++#include <stdlib.h>
++#include <exception>
++
++void my_term () { exit (1); }
++void my_unexp () { throw 42; }
++
++void
++f () throw (int, std::bad_exception)
++{
++ throw 'a';
++}
++
++int main ()
++{
++ std::set_terminate (my_term);
++ std::set_unexpected (my_unexp);
++
++ try
++ {
++ f ();
++ }
++ catch (char)
++ {
++ return 2;
++ }
++ catch (int)
++ {
++ return 0;
++ }
++ catch (std::bad_exception)
++ {
++ return 4;
++ }
++ return 5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Testing exception specifications.
++// Test 3: the bad_exception throw succeeds.
++
++#include <stdlib.h>
++#include <exception>
++
++void my_term () { exit (1); }
++void my_unexp () { throw 42; }
++
++void
++f () throw (std::bad_exception)
++{
++ throw 'a';
++}
++
++int main ()
++{
++ std::set_terminate (my_term);
++ std::set_unexpected (my_unexp);
++
++ try
++ {
++ f ();
++ }
++ catch (char)
++ {
++ return 2;
++ }
++ catch (int)
++ {
++ return 3;
++ }
++ catch (std::bad_exception)
++ {
++ return 0;
++ }
++ return 5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Testing exception specifications.
++// Test 4: all throws fail, call terminate.
++
++#include <stdlib.h>
++#include <exception>
++
++void my_term () { exit (0); }
++void my_unexp () { throw 42; }
++
++void
++f () throw (short)
++{
++ throw 'a';
++}
++
++int main ()
++{
++ std::set_terminate (my_term);
++ std::set_unexpected (my_unexp);
++
++ try
++ {
++ f ();
++ }
++ catch (char)
++ {
++ return 2;
++ }
++ catch (int)
++ {
++ return 3;
++ }
++ catch (std::bad_exception)
++ {
++ return 4;
++ }
++ return 5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++
++extern void *f(unsigned int k) throw();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/spec6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/spec6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// Build don't link:
++
++// Copyright (C) 1999 Free Software Foundation, Inc.
++// Contributed by Nathan Sidwell 19 Jan 1999 <nathan@acm.org>
++
++// Determine that throw specifiers are checked correctly.
++
++// [except.spec] 1, a type in an exception specifier shall not be incomplete,
++// or pointer or ref to incomplete
++struct X; // ERROR - forward declaration - XFAIL
++void fn1() throw(X); // ERROR - incomplete type - XFAIL
++void fn2() throw(X *); // ERROR - incomplete type - XFAIL
++void fn3() throw(X &); // ERROR - incomplete type - XFAIL
++void fn4() throw(void); // ERROR - incomplete type - XFAIL
++// except for cv pointer to void
++void fn5() throw(void *);
++
++// [except.spec] 2, exception specifiers must be the same set of types (but
++// can be reordered)
++void fn() throw(int, char); // gets bogus error - XFAIL
++void fn() throw(char, int){} // gets bogus error - ordering is irrelevant - XFAIL
++
++// [except.spec] 3, virtual function overriders shall throw a subset of the
++// overridden function
++struct E {};
++struct F : public E {};
++struct A
++{
++ virtual void foo() throw();
++ virtual void baz() throw(double, int);
++ virtual void bar();
++ virtual void qux() throw(E);
++ virtual void quux() throw(F);
++};
++
++struct B : A
++{
++ virtual void foo() throw(int); // ERROR - not in base function - XFAIL
++ virtual void baz() throw(double);
++ virtual void bar(int) throw(int);
++ virtual void qux() throw(F);
++ virtual void quux() throw(E); // ERROR - not in base function - XFAIL
++};
++
++// [except.spec] 5, types shall not be defined in exception specifiers
++void fn6() throw(struct Z {}); // ERROR - types shall not be defined - XFAIL
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/throw1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/throw1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/throw1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/throw1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++void athrow(const int & e) throw(int)
++{
++ throw e;
++}
++
++int main(void)
++{
++ athrow(int());
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/throw2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/throw2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/throw2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/throw2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++// Submitted by Sebastian Ritterbusch <uabp@rz.uni-karlsruhe.de>
++
++#define ANY int // a class with a public constructor
++
++void athrow(const ANY & e) throw(ANY)
++{
++ throw e; // gets bogus error - discarding const
++}
++
++int main(void)
++{
++ athrow(ANY());
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/tmpl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/tmpl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/tmpl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/tmpl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++template <class T>
++void f() throw (T)
++{
++ throw 7;
++}
++
++
++int main()
++{
++ try {
++ f<int>();
++ } catch (...) {
++ return 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/tmpl2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/tmpl2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/tmpl2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/tmpl2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++// Special g++ flags: -O
++// crash test - XFAIL i*86-*-linux*
++
++// Posted by H. J. Lu <hjl@lucon.org>
++
++template<class T>
++class FixSeq
++{
++public:
++ void append(const T&);
++};
++class foo
++{
++public:
++ void setupIR();
++};
++typedef FixSeq<foo *> bar;
++extern void dummy (foo *);
++void *
++foobar (bar &x, foo *p)
++{
++ try
++ {
++ p -> setupIR();
++ }
++ catch(...)
++ {
++ dummy (p);
++ }
++ x.append(p);
++ return p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/tmpl3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/tmpl3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/tmpl3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/tmpl3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++// Posted by Trevor Taylor <ttaylor@powerup.com.au>
++
++template<class T> struct A {
++ void X() throw(T);
++};
++
++template<class T>
++inline void A<T>::X()
++throw(T) { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/unwind1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/unwind1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.eh/unwind1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.eh/unwind1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Test that unwinding properly restores SP.
++// Contributed by Jason Merrill <jason@cygnus.com>
++
++int f (int i)
++{
++ throw i;
++}
++
++int main ()
++{
++ void *sp1 = __builtin_alloca (0);
++
++ try
++ {
++ f (0);
++ }
++ catch (int)
++ {
++ }
++
++ void *sp2 = __builtin_alloca (0);
++
++ return (sp1 != sp2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/addrfunc1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/addrfunc1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/addrfunc1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/addrfunc1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Test that taking the address of a member function name produces
++// a pointer to member function.
++// Contributed by Jason Merrill <jason@cygnus.com>
++// Special g++ Options: -fpermissive -w
++// Build don't link:
++
++struct A { };
++int (A::*p)();
++
++struct B {
++ int f () { return 0; }
++ void g ();
++};
++
++void B::g ()
++{
++ p = (int (A::*)())&f;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/addrfunc2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/addrfunc2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/addrfunc2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/addrfunc2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Test for implicit & on methods.
++// Contributed by Jason Merrill <jason@cygnus.com>.
++// Special g++ Options: -fpermissive -w
++
++struct A {
++ void f (int = 0) { }
++};
++
++int
++main ()
++{
++ void (A::*p)(int) = 0;
++ p = A::f;
++ if (p != A::f)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/addrfunc3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/addrfunc3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/addrfunc3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/addrfunc3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Test for overload resolution in comparison expressions.
++// Contributed by Jason Merrill <jason@cygnus.com>.
++// Special g++ Options: -fpermissive -w
++
++void f (int) { }
++void f ();
++
++int main () {
++ void (*p)(int);
++ p = f;
++ if (p != f)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/array1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/array1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/array1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/array1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Testcase for assignment of non-array to array (assigns the same value to
++// each member)
++// Build don't link:
++// Special Options:
++
++typedef struct {} ct2d_rigid, ct2d_rigid_a[1];
++class ccInspection
++{
++protected:
++ ct2d_rigid_a _dev2phys;
++};
++class ccBgaInspection : public ccInspection
++{
++public:
++ int reinspect (unsigned long diagFlags);
++};
++int
++ccBgaInspection::reinspect (unsigned long diag_flags)
++{
++ ct2d_rigid physTdev;
++ _dev2phys = physTdev; // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/array2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/array2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/array2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/array2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// This testcase used to cause a crash on the Alpha.
++// Special g++ Options:
++// Build don't link:
++
++struct A {
++ int i;
++ ~A() { }
++};
++
++A f (int n)
++{
++ A a[n];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// Special g++ Options:
++
++int *foo = new int[1](0); // gets bogus error -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// PRMS Id: 4992
++// Build don't link:
++// Special g++ Options:
++
++ int *f(){ return new int[1] = { 1 }; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Test for using prefix attributes in a parameter decl.
++// Contributed by Jason Merrill <jason@cygnus.com>
++// Skip if not target: i?86-*-*
++// Build don't link:
++
++#define _stdcall __attribute__ ((__stdcall__))
++
++typedef void (_stdcall* pfn)();
++
++void f (void (_stdcall*) ());
++void f (void (_stdcall* pfn)());
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Test that stdcall doesn't prevent us from using op delete.
++// Contributed by Jason Merrill <jason@cygnus.com>
++// Skip if not target: i?86-*-*
++
++struct A {
++ void operator delete (void *) __attribute__ ((stdcall));
++};
++
++void A::operator delete (void *) { }
++
++int main()
++{
++ A* ap = new A;
++ delete ap;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Test for proper handling of attributes in template instantiation.
++// Contributed by Jason Merrill <jason@cygnus.com>
++// Skip if not target: i?86-*-*
++
++template <class T>
++struct A {
++ static void f () __attribute__ ((stdcall));
++};
++
++template <class T> void
++A<T>::f () { }
++
++void g (void (__attribute__ ((stdcall)) *p)()) { }
++void g (int);
++
++int
++main ()
++{
++ g (&A<int>::f);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Test that attributes are really applied to function declarations under
++// various conditions.
++// Contributed by Jason Merrill (jason@cygnus.com)
++// Special g++ Options: -Wformat
++// Build don't link:
++
++#define PF __attribute__ ((format (printf, 1, 2)))
++
++struct A {
++ static PF void f (char *, ...);
++ friend PF void g (char *, ...);
++ static void test ();
++};
++
++void PF h (char *, ...);
++void PF k (char *, ...) { }
++
++void A::test ()
++{
++ f ("%f", 42); // WARNING -
++ g ("%f", 42); // WARNING -
++ h ("%f", 42); // WARNING -
++ k ("%f", 42); // WARNING -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/attrib5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/attrib5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Test that attributes weak and alias coexist.
++
++extern "C" {
++ void f () __attribute__((weak, alias ("_f")));
++ void _f () { }
++}
++
++int main ()
++{
++ f ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/bound1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/bound1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/bound1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/bound1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Testcase for cast of bound pointer to member function.
++// Special g++ Options: -Wno-pmf-conversions
++// Build don't link:
++
++struct A {
++ int f ();
++};
++
++typedef int (*fptr)(A *);
++typedef void* vptr;
++typedef int (A::*pmf)();
++
++int foo (A* ap, pmf fp, int A::* ip)
++{
++ fptr p;
++ vptr q;
++ A a;
++
++ p = (fptr)(ap->*fp);
++ p = (fptr)(ap->*fp);
++ p = (fptr)(ap->*(&A::f));
++ p = (fptr)(a.*fp);
++ p = (fptr)(a.*(&A::f));
++
++ q = (vptr)(ap->*fp);
++ q = (vptr)(ap->*(&A::f));
++ q = (vptr)(a.*fp);
++ q = (vptr)(a.*(&A::f));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/constructor.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/constructor.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/constructor.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/constructor.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Testcase for constructor expressions (GNU extension)
++// Special g++ Options:
++
++struct Any {
++ int *type;
++ int *addr;
++};
++
++int i, j;
++
++main () {
++ struct Any *ap = (struct Any *)
++ __builtin_alloca (sizeof(struct Any));
++ *ap = ((struct Any){ &i, &j }) ;
++
++ if (ap->type != &i || ap->addr != &j)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/default.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/default.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/default.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/default.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// PRMS Id: 5353
++// This may be an extension, but it's a very common one...
++
++extern "C" int printf (const char *, ...);
++
++class A {
++public:
++ static A*func (int = 3);
++ static A*(*ptr)(int = 4);
++};
++
++A*(*A::ptr)(int) = &A::func;
++
++int main()
++{
++ A foo;
++
++ A::ptr();
++ A::ptr(47);
++}
++
++A*A::func(int i)
++{
++ printf("I = %d\n",i);
++ return (A*)0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/implicit1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/implicit1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/implicit1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/implicit1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// test for implicit declaration
++// Special g++ Options: -w -fpermissive
++
++int
++main ()
++{
++ return blarg ();
++}
++
++extern "C" int
++blarg (...)
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/jump1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/jump1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/jump1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/jump1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Test that we can jump over the declaration of a non-POD object.
++// Contributed by Jason Merrill <jason@cygnus.com>
++// Special g++ Options: -fpermissive -w
++
++struct A { };
++union U {
++ void (A::*p)();
++};
++
++int main()
++{
++ goto foo;
++ U u;
++ foo:
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/memconst.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/memconst.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/memconst.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/memconst.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// From: Ove.Ewerlid@syscon.uu.se (Ove Ewerlid)
++// Subject: ss-940630:cc1plus: internal error
++// Date: Sat, 2 Jul 1994 05:07:20 +0200
++// Special g++ Options:
++// Build don't link:
++
++class qwerty {
++public:
++ qwerty (const unsigned short userkey[8]);
++ ~qwerty ();
++};
++
++class foo {
++private:
++ static const unsigned char * const dummy_key = (unsigned char*)"ThisIs a dummy!";
++
++public:
++ void bar ();
++};
++
++void
++foo::bar ()
++{
++ qwerty QWERTY ((unsigned short*)dummy_key);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/null1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/null1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/null1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/null1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Test for overloading with g++ NULL.
++
++void f (int *) { }
++void f (char, char);
++int main ()
++{
++ f (__null);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/pretty.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/pretty.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/pretty.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/pretty.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Test for PRETTY_FUNCTION
++// Build don't link:
++
++class SV;
++
++class SVTable // : public Debug
++{
++ // It is an array to pointer to a SV.
++ SV ** array;
++
++ // This is the size of array.
++ int maxCount;
++
++ // This is the current element count.
++ int count;
++
++ void fatal_error (const char *f, ...);
++
++public:
++ SVTable (int size, const char *d);
++ SVTable ();
++ SVTable (const SVTable &);
++ ~SVTable () {}
++
++};
++
++
++SVTable::SVTable (int size, const char *d)
++ : maxCount (size), count (0)// , Debug (d)
++{
++ if (size < 0)
++ {
++ fatal_error ("%s: Invalid size: %d\n", __PRETTY_FUNCTION__, size);
++ }
++
++ array = (SV **) new SV * [size];
++
++ if (array == 0)
++ {
++ fatal_error ("%s: Failed to allocate array\n", __PRETTY_FUNCTION__);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/typeof1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/typeof1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ext/typeof1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ext/typeof1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++struct inttest {
++ int elem[1];
++};
++
++template <class T>
++void F(T x)
++{
++ typedef __typeof (x.elem[0]) dummy;
++ dummy i = 1;
++}
++
++int main() {
++ inttest x;
++ F(x);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/README gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/README
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/README 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/README 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++These are my C++ signature and class-scoping tests.
++
++In changing my signature tests to DejaGnu style, I reduced the number
++of tests from 40 to 25. They should still test the same features,
++though. All of these tests are run. I don't have any tests yet to
++check correct reporting of errors/warnings.
++
++The class scoping tests were in part derived from Vince Russo's
++Renaissance operating system and in part written by myself in helping
++Niklas Hallqvist test his rewrite of the scoping code. I had shared
++some of these tests with Niklas, others were included in bug reports I
++had sent to {g++,gcc}@cygnus.com. It is, therefore, possible that
++these tests duplicate tests in other directories.
++
++All files in this directory, including this file, are Copyright FSF 1995
++and fall under the GPL version 2.0 or later.
++
++Gerald Baumgartner
++gb@cs.purdue.edu
++March 1, 1995
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed gb scope
++struct c { typedef int t; };
++struct d { typedef char t; };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed gb scope
++struct c {
++ typedef int t;
++ struct d {
++ void foo (t &);
++ };
++};
++
++void c::d::foo (t & x) { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed gb scope
++struct c {
++ class t { };
++ struct d {
++ void foo (t &);
++ };
++};
++
++void c::d::foo (t & x) { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed gb scope
++struct a {
++ struct c {
++ struct d {
++ static int foo (int);
++ };
++ };
++
++ struct b {
++ int foo (int x) { return c::d::foo (x); }
++ };
++};
++
++int a::c::d::foo (int) { return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed gb scope
++struct C {
++ void foo (int);
++ void foo (char);
++
++ struct D {
++ void foo ();
++ };
++};
++
++void C::D::foo () { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed gb scope
++struct C {
++ struct D {
++ int x;
++ void foo ();
++ };
++ const int Ok = 0; // ERROR - initialization forbidden
++};
++
++void C::D::foo ()
++{
++ x = Ok;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope07.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope07.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope07.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope07.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed gb scope
++struct D {
++ friend class A;
++ friend class B;
++ friend class C;
++
++ void foo ();
++};
++
++void D::foo () { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope08.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope08.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope08.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope08.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed gb scope
++template <class X> class C {
++public:
++ int f (X ob) { return 0; }
++ int g (X ob) { return f (ob); }
++};
++
++class D {
++public:
++ class E { public: E (); };
++
++ C <E> x;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope09.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope09.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope09.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope09.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed gb scope
++class enclose {
++ int e;
++protected:
++ class nested {
++ int n;
++ };
++};
++
++class derived : public enclose {
++protected:
++ class nested_derived : public nested {
++ int nd;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed gb scope
++void Foo (void)
++{
++ class C {
++ public:
++ virtual int foo (void) { return 0; };
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed gb scope
++template<class T, int N> class fixed_array {
++public:
++ T _array[N];
++};
++
++class Hash {
++public:
++ Hash (int);
++};
++
++typedef fixed_array<char, 4> ipAddress_t;
++
++class IPAddress {
++protected:
++ long _i;
++public:
++ IPAddress (ipAddress_t ip) { }
++ IPAddress () { }
++ IPAddress netMask () { return *this; }
++ operator Hash ();
++};
++
++IPAddress::operator Hash ()
++{
++ return Hash (_i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed gb scope
++template<class T, int N> class FixedArray_t {
++public:
++ T _array[N];
++
++ FixedArray_t () { }
++};
++
++typedef FixedArray_t<unsigned char, 4> IPAddress_t;
++
++class IPAddress {
++public:
++ IPAddress (IPAddress_t ip) { }
++
++ operator IPAddress_t ()
++ {
++ IPAddress_t rv;
++ return rv;
++ }
++
++ IPAddress () { }
++};
++
++class DatagramHeader {
++public:
++ IPAddress _src;
++
++ void setHeader (IPAddress);
++};
++
++void
++DatagramHeader::setHeader (IPAddress)
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/scope13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/scope13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed gb scope
++class X {
++public:
++};
++
++class Y {
++public:
++ void X();
++ ::X X(int);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment
++// Test assignment to local signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++int main (void)
++{
++ C a;
++ S * p;
++
++ p = &a;
++
++ printf ("%s%s\n", p->f (), p->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment
++// Test assigning objects of different classes to local signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++};
++
++class D
++{
++public:
++ char * f (void) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++};
++
++int main (void)
++{
++ C a;
++ D b;
++ S * p;
++ int i;
++
++ for (i = 0; i < 2; i++)
++ {
++ if (i == 0)
++ p = &a;
++ else
++ p = &b;
++ printf ("%s", p->f ());
++ }
++ printf ("\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr overloading
++// Test overloading of signature member functions.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * f (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * f (int);
++};
++
++int main (void)
++{
++ C a;
++ S * p;
++
++ p = &a;
++
++ printf ("%s%s\n", p->f (), p->f (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr this
++// Test passing of 'this' pointer through signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C;
++int inc_mod_4 (C *);
++
++class C
++{
++public:
++ char * text[4];
++ int i;
++ int get_i (void) { return i; }
++ char * msg (void) { i = inc_mod_4 (this); return text[i]; }
++};
++
++signature S
++{
++ char * msg (void);
++};
++
++int inc_mod_4 (C * p)
++{
++ return (p->get_i () + 1) % 4;
++}
++
++int main (void)
++{
++ C o = { "P", "A", "S", "S", -1 };
++ S * p;
++ int i;
++
++ p = &o;
++
++ for (i = 0; i < 4; i++)
++ printf ("%s", p->msg ());
++
++ printf ("\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr initialization
++// Test initialization of a local signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++int main (void)
++{
++ C a;
++ S * p = &a;
++
++ printf ("%s%s\n", p->f (), p->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr initialization
++// Test initialization of a local signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++C a;
++S * p = &a;
++
++int main (void)
++{
++ printf ("%s%s\n", p->f (), p->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig07.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig07.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig07.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig07.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr default-argument
++// Test calling a signature member function with default argument.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (char * text) { return text; }
++};
++
++signature S
++{
++ char * f (char * text = "PA");
++};
++
++C a;
++S * p = &a;
++
++int main (void)
++{
++ printf ("%s%s\n", p->f (), p->f ("SS"));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig08.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig08.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig08.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig08.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr argument return-value
++// Test passing a signature pointer to a function and returning it from one.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * text;
++ char * get_msg (void) const { return text; }
++};
++
++const C a = { "PA" };
++const C b = { "SS" };
++
++signature S
++{
++ char * get_msg (void) const;
++};
++
++char * f (const S * p)
++{
++ return p->get_msg ();
++}
++
++const S * g (const C * p)
++{
++ return p;
++}
++
++int main (void)
++{
++ printf ("%s%s\n", f(&a), g(&b)->get_msg ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig09.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig09.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig09.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig09.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment initialization new
++// Test assignment to/initialization of signature pointer with run-time value.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ int f (void) { return 1; }
++};
++
++signature S
++{
++ int f (void);
++};
++
++S * p1 = new C;
++
++int main (void)
++{
++ S * p2 = new C;
++ S * p3;
++
++ p3 = new C;
++
++ if (p1->f () + p2->f () + p3->f () == 3)
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr argument return-value new
++// Test passing a signature pointer to a function and returning it from one.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++ char * text;
++public:
++ C (char * s) { text = s; }
++ char * get_msg (void) const { return text; }
++};
++
++signature S
++{
++ char * get_msg (void) const;
++};
++
++char * f (const S * p)
++{
++ return p->get_msg ();
++}
++
++const S * g (const C * p)
++{
++ return p;
++}
++
++int main (void)
++{
++ printf ("%s%s\n", f(new C ("PA")), g(new C ("SS"))->get_msg ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr array
++// Test a signature pointer array.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++};
++
++class D
++{
++public:
++ char * f (void) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++};
++
++int main (void)
++{
++ S * p[2] = { new C, new D };
++
++ printf ("%s%s\n", p[0]->f (), p[1]->f ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr structure
++// Test a signature pointer structure.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++};
++
++class D
++{
++public:
++ char * f (void) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++};
++
++struct SP
++{
++ S * p;
++ S * q;
++};
++
++int main (void)
++{
++ SP o = { new C, new D };
++
++ printf ("%s%s\n", o.p->f (), o.q->f ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment initialization
++// Test assignment of/initialization with same type signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ int f (void) { return 1; }
++};
++
++signature S
++{
++ int f (void);
++};
++
++C a;
++S * p1 = &a;
++S * q1 = p1;
++
++int main (void)
++{
++ C a;
++ S * p2 = &a;
++ S * q2 = p2;
++ S * q3;
++
++ q3 = p2;
++
++ if (q1->f () + q2->f () + q3->f () == 3)
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment initialization
++// Test assignment of/initialization with different type signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ int f (void) { return 1; }
++ int g (int) { return 2; }
++};
++
++signature S
++{
++ int f (void);
++ int g (int);
++};
++
++signature T
++{
++ int f (void);
++};
++
++signature U
++{
++ int g (int);
++};
++
++C a;
++S * p1 = &a;
++T * q1 = p1;
++U * r1 = p1;
++
++int main (void)
++{
++ C a;
++ S * p2 = &a;
++ T * q2 = p2;
++ U * r2 = p2;
++ T * q3;
++ U * r3;
++
++ q3 = p2;
++ r3 = p2;
++
++ if (q1->f () + q2->f () + q3->f () == 3
++ && r1->g (0) + r2->g (0) + r3->g (0) == 6)
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr cast
++// Test casting a signature pointer to a class pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++int main (void)
++{
++ C a;
++ S * p;
++ C * q;
++
++ p = &a;
++ q = (C *) p;
++
++ printf ("%s%s\n", q->f (), q->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr cast
++// Test casting a class pointer to an anonymous signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "S"; }
++ char * h (void) { return "FAIL"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++signature T
++{
++ char * f (void);
++};
++
++C a;
++signature { char * g (int); } * r1 =
++ (signature { char * h (void); char * g (int); } *) &a;
++
++int main (void)
++{
++ C a;
++ S * p = &a;
++ T * q = p;
++ signature { char * g (int); } * r2 =
++ (signature { char * h (void); char * g (int); } *) &a;
++
++ printf ("%s%s%s\n", q->f (), r1->g (0), r2->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr cast
++// Test casting a class pointer through a chain of signature pointers.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "SS"; }
++};
++
++class D : public C
++{
++public:
++ char * h (void) { return "FAIL"; }
++};
++
++class E : public C
++{
++public:
++ int foo (int) { return 0; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++signature T
++{
++ char * f (void);
++};
++
++int main (void)
++{
++ D a;
++ S * p;
++ T * q;
++ signature { char * g (int); } * r;
++
++ p = &a;
++ q = (T*) (signature { char * f (void); int foo (int); } *) (E*) (S*) (C*) p;
++ r = (signature { char * h (void); char * g (int); } *) &a;
++
++ printf ("%s%s\n", q->f (), r->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment virtual
++// Test assignment of object from virtual class to signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ virtual char * f (void) { return "PA"; }
++ virtual char * g (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++int main (void)
++{
++ C a;
++ S * p;
++
++ p = &a;
++
++ printf ("%s%s\n", p->f (), p->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr initialization virtual
++// Test initialization of signature pointer with object from abstract class.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ virtual char * f (void) = 0;
++ virtual char * g (int) = 0;
++};
++
++class D : public C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++int main (void)
++{
++ C * p = new D;
++ S * q = p;
++
++ printf ("%s%s\n", q->f (), q->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr initialization virtual
++// Test initialization of signature pointer with object from virtual class.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ virtual char * f (void) { return "FA"; }
++ virtual char * g (int) { return "IL"; }
++};
++
++class D : public C
++{
++public:
++ char * f (void) { return "PA"; }
++ char * g (int) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (int);
++};
++
++int main (void)
++{
++ C * p = new D;
++ S * q = p;
++
++ printf ("%s%s\n", q->f (), q->g (0));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment virtual
++// Test assignment of objects of different types to same signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ virtual char * f (void) = 0;
++};
++
++class D : public C
++{
++public:
++ char * f (void) { return "P"; }
++};
++
++class E
++{
++public:
++ char * f (void) { return "AS"; }
++};
++
++class F : public C
++{
++public:
++ char * f (void) { return "S"; }
++};
++
++signature S
++{
++ char * f (void);
++};
++
++int main (void)
++{
++ E a;
++ C * p = new D;
++ S * q;
++
++ q = p;
++ printf ("%s", q->f ());
++
++ q = &a;
++ printf ("%s", q->f ());
++
++ p = new F;
++ q = p;
++ printf ("%s\n", q->f ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,59 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment initialization
++// Test assignment to/init of sigptr that requires copying sigtable slots.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ int f (void) { return 1; }
++ int g (int) { return 2; }
++ int h (void) { return 666; }
++};
++
++signature S
++{
++ int f (void);
++ int g (int);
++ int h (void);
++};
++
++signature T
++{
++ int f (void);
++ int h (void);
++};
++
++signature U
++{
++ int h (void);
++ int g (int);
++};
++
++C a;
++S * p = &a;
++T * q1 = p;
++U * r1 = p;
++
++int main (void)
++{
++ C a;
++ S * p = &a;
++ T * q2 = p;
++ U * r2 = p;;
++ T * q3;
++ U * r3;
++
++ q3 = p;
++ r3 = p;
++
++ if (q1->f () + q2->f () + q3->f () == 3
++ && r1->g (0) + r2->g (0) + r3->g (0) == 6)
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment local-signature
++// Test assignment to signature pointer of local signature.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++char * PA (void)
++{
++ class C
++ {
++ public:
++ char * f (void) { return "PA"; }
++ };
++
++ signature S
++ {
++ char * f (void);
++ };
++
++ C a;
++ S * p = &a;
++
++ return p->f ();
++}
++
++char * SS (void)
++{
++ class C
++ {
++ public:
++ char * f (void) { return "SS"; }
++ };
++
++ signature S
++ {
++ char * f (void);
++ };
++
++ C a;
++ S * p = &a;
++
++ return p->f ();
++}
++
++int main (void)
++{
++ printf ("%s%s\n", PA (), SS ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr opaque-type
++// Test calling member functions taking/returning opaque type through sigptr.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++signature S
++{
++ typedef t;
++ char * f (t);
++ t g (void);
++ t h (void);
++};
++
++class C
++{
++public:
++ typedef char * t;
++ char * f (t text) { return text; }
++ t g (void) { return "PA"; }
++ t h (void) { return "SS"; }
++};
++
++int main (void)
++{
++ C a;
++ S * p = &a;
++ S::t w = p->h ();
++
++ printf ("%s%s\n", p->f (p->g ()), p->f (w));
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr default-implementation
++// Test calling default implementation through signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C { };
++
++class D
++{
++public:
++ char * f (void) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void) { return "PA"; }
++};
++
++int main (void)
++{
++ C a;
++ D b;
++ S * p = &a;
++ S * q = &b;
++
++ printf ("%s%s\n", p->f (), q->f ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr default-implementation
++// Test calling default implementation through signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C { };
++
++class D
++{
++public:
++ char * f (void) { return "SS"; }
++};
++
++signature S
++{
++ char * f (void) { return "PA"; }
++ char * g (void) { return f (); }
++};
++
++int main (void)
++{
++ C a;
++ D b;
++ S * p = &a;
++ S * q = &b;
++
++ printf ("%s%s\n", p->g (), q->g ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr multiple-inheritance
++// Test class defined by multiple inheritance as implementation of signature.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * f (void) { return "PA"; }
++};
++
++class D
++{
++public:
++ char * g (void) { return "SS"; }
++};
++
++class E : public C, public D { };
++
++signature S
++{
++ char * f (void);
++ char * g (void);
++};
++
++int main (void)
++{
++ E a;
++ S * p = &a;
++
++ printf ("%s%s\n", p->f (), p->g ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr multiple-inheritance
++// Test correct adjustment of `this' pointer in case of multiple inheritance.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++ char * text;
++public:
++ C () { text = "PA"; }
++ char * f (void) { return text; }
++};
++
++class D
++{
++ char * text;
++public:
++ D () { text = "SS"; }
++ char * g (void) { return text; }
++};
++
++class E : public C, public D
++{
++public:
++ E () : C (), D () { }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (void);
++};
++
++int main (void)
++{
++ E a;
++ S * p = &a;
++
++ printf ("%s%s\n", p->f (), p->g ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr multiple-inheritance
++// Test calling virtual function from MI class through signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++ char * text;
++public:
++ C () { text = "PA"; }
++ virtual char * f (void) { return text; }
++};
++
++class D
++{
++ char * text;
++public:
++ D () { text = "SS"; }
++ virtual char * g (void) { return text; }
++};
++
++class E : public C, public D
++{
++public:
++ E () : C (), D () { }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (void);
++};
++
++int main (void)
++{
++ E a;
++ S * p = &a;
++
++ printf ("%s%s\n", p->f (), p->g ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr multiple-inheritance
++// Test calling overwritten virtual functions through signature pointer.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ char * text1;
++ C () { text1 = "PA"; }
++ virtual char * f (void) = 0;
++};
++
++class D
++{
++public:
++ char * text2;
++ D () { text2 = "SS"; }
++ virtual char * g (void) = 0;
++};
++
++class E : public C, public D
++{
++public:
++ E () : C (), D () { };
++ char * f (void) { return text1; }
++ char * g (void) { return text2; }
++};
++
++signature S
++{
++ char * f (void);
++ char * g (void);
++};
++
++int main (void)
++{
++ E a;
++ S * p = &a;
++
++ printf ("%s%s\n", p->f (), p->g ());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.gb/sig31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.gb/sig31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++// Special g++ Options: -fhandle-signatures
++// GROUPS passed gb sigptr assignment sigsigtable
++// Test use of multiple signature-signature tables for same signature pair.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++class C
++{
++public:
++ virtual int f (void) { return 1; }
++ int g (int) { return 2; }
++};
++
++class D : public C
++{
++public:
++ int f (void) { return 3; }
++ int g (int) { return 4; }
++};
++
++signature S
++{
++ int f (void);
++ int g (int);
++};
++
++signature T
++{
++ int g (int);
++ int f (void);
++};
++
++int main (void)
++{
++ S * p = new C;
++ T * q = p;
++ T * r;
++
++ p = new D;
++ r = p;
++
++ if (q->f () == 1 && q->g (0) == 2
++ && r->f () == 3 && r->g (0) == 4)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/2371.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/2371.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/2371.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/2371.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,571 @@
++// GROUPS passed templates nested-classes
++// Special g++ Options:
++//
++// The SetLS template test
++//
++// Wendell Baker, Berkeley CAD Group, 1993 (wbaker@ic.Berkeley.EDU)
++//
++
++
++#pragma implementation "ListS.h"
++#pragma implementation "SetLS.h"
++
++#include <stdlib.h>
++#include <iostream.h>
++# 1 "../../templates/SetLS.h" 1
++// -*- C++ -*-
++
++
++
++//
++// A Set Template - implemented with an ListS
++//
++// Wendell Baker, Berkeley CAD Group, 1993 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++#pragma interface
++
++
++
++
++
++#define XTRUE true
++#define XFALSE false
++
++# 37 "../../templates/SetLS.h"
++
++
++# 1 "../../templates/ListS.h" 1
++// -*- C++ -*-
++
++
++
++//
++// A List Template - providing a singly linked capability
++//
++// Wendell Baker, Berkeley CAD Group, 1993 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++#pragma interface
++
++
++
++
++
++
++# 1 "/projects/gnu-cygnus/gnu-cygnus-14/mips/lib/gcc-lib/decstation/cygnus-reno-1/g++-include/bool.h" 1 3
++// Defining XTRUE and XFALSE is usually a Bad Idea,
++// because you will probably be inconsistent with anyone
++// else who had the same clever idea.
++// Therefore: DON'T USE THIS FILE.
++
++
++
++
++
++
++
++
++
++# 26 "../../templates/ListS.h" 2
++
++# 37 "../../templates/ListS.h"
++
++
++
++// g++ reno-1 is not yet capable of creating templates with nested
++// classes which instantiate the template arguments.
++template<class T>
++struct ListS_link {
++ T item;
++ ListS_link<T> *next;
++
++ ListS_link(const T& i, ListS_link<T> *n = 0): item(i), next(n)
++ { }
++};
++
++
++//
++// For now, errors are raised by ::abort() because exceptions
++// are not well implemented in cxx or at all in CC 3.0.1
++//
++template<class T>
++class ListS {
++public:
++ ListS();
++ ListS(const ListS<T>&);
++ ~ListS();
++
++ void operator=(const ListS<T>&);
++
++ unsigned length() const
++ { return count; }
++
++ void prepend(const T& item);
++ void append(const T& item);
++ void clear();
++
++ const T& head() const
++ { ensure_1();
++ return head_link->item; }
++ T& head()
++ { ensure_1();
++ return head_link->item; }
++ void head(T& fill) const
++ { ensure_1();
++ fill = head_link->item; }
++ void remove_head()
++ { remove_head_filling(0); }
++ void remove_head(T& fill)
++ { remove_head_filling(&fill); }
++
++ const T& tail() const
++ { ensure_1();
++ return tail_link->item; }
++ T& tail()
++ { ensure_1();
++ return tail_link->item; }
++ void tail(T& fill) const
++ { ensure_1();
++ fill = tail_link->item; }
++
++ class Vix {
++ public:
++ Vix(): owner(0), index(0)
++ { }
++
++ // These are friend functions so that v == x is the same as x == v
++ friend int operator==(void *v, const Vix& x)
++ { return v == x.index; }
++ friend int operator==(const Vix& x, void *v)
++ { return v == x.index; }
++ friend int operator!=(void *v, const Vix& x)
++ { return v != x.index; }
++ friend int operator!=(const Vix& x, void *v)
++ { return v != x.index; }
++ friend int operator==(const Vix& x1, const Vix& x2)
++ { return x1.owner == x2.owner && x1.index == x2.index; }
++ friend int operator!=(const Vix& x1, const Vix& x2)
++ { return x1.owner != x2.owner || x1.index != x2.index; }
++ private:
++ friend class ListS<T>;
++
++
++ Vix(const ListS<T> *o, ListS_link<T> *i): owner(o), index(i)
++ { }
++
++
++
++
++
++ const ListS<T> *owner;
++
++ ListS_link<T> *index;
++
++
++
++ };
++
++ Vix first() const
++ { return Vix(this, head_link); }
++ void next(Vix& x) const
++ { check(x);
++ if (x.index != 0)
++ x.index = x.index->next; }
++ T& operator()(const Vix& x)
++ { check(x);
++ return x.index->item; }
++ const T& operator()(const Vix& x) const
++ { check(x);
++ return x.index->item; }
++protected:
++# 154 "../../templates/ListS.h"
++
++
++ unsigned count;
++
++ ListS_link<T> *head_link; // 0 for a zero-length list
++ ListS_link<T> *tail_link; // 0 for a zero-length list
++
++
++
++
++
++private:
++ // fill may be 0 (then don't fill)
++ void remove_head_filling(T *fill);
++
++ void ensure_1() const
++ { if (0 == head_link)
++ ::abort(); }
++ void check(const Vix& x) const
++ { if (this != x.owner)
++ ::abort();
++ if (0 == x.index)
++ ::abort(); }
++};
++
++template<class T>
++ListS<T>::ListS():
++count(0),
++head_link(0),
++tail_link(0)
++{ }
++
++template<class T>
++ListS<T>::ListS(const ListS<T>& other):
++count(0),
++head_link(0),
++tail_link(0)
++{
++ for (Vix x=other.first(); 0 != x; other.next(x))
++ append(other(x));
++}
++
++template<class T>
++ListS<T>::~ListS()
++{
++ clear();
++}
++
++template<class T>
++void
++ListS<T>::operator=(const ListS<T>& other)
++{
++ clear();
++ for (Vix x=other.first(); 0 != x; other.next(x))
++ append(other(x));
++}
++
++template<class T>
++void
++ListS<T>::prepend(const T& item)
++{
++
++ head_link = new ListS_link<T>(item, head_link);
++
++
++
++ if (0 == tail_link)
++ tail_link = head_link;
++ count++;
++}
++
++template<class T>
++void
++ListS<T>::append(const T& item)
++{
++
++ ListS_link<T> *new_link = new ListS_link<T>(item);
++
++
++
++ if (0 == tail_link) {
++ head_link = new_link;
++ tail_link = new_link;
++ } else {
++ tail_link->next = new_link;
++ tail_link = tail_link->next;
++ }
++ count++;
++}
++
++template<class T>
++void
++ListS<T>::clear()
++{
++
++ ListS_link<T> *next, *l;
++
++
++
++ for (l=head_link; 0 != l; l=next) {
++ next = l->next;
++ delete l;
++ }
++
++ count = 0;
++ head_link = 0;
++ tail_link = 0;
++}
++
++template<class T>
++void
++ListS<T>::remove_head_filling(T* fill)
++// fill may be 0 in which case don't assign into it
++{
++ ensure_1();
++
++ ListS_link<T> *ohead = head_link;
++
++
++
++ if (0 != fill)
++ *fill = ohead->item;
++ head_link = ohead->next;
++ if (0 == head_link)
++ tail_link = 0;
++ count--;
++ delete ohead;
++}
++
++
++# 39 "../../templates/SetLS.h" 2
++
++
++# 62 "../../templates/SetLS.h"
++
++template<class T>
++class SetLS {
++public:
++ SetLS();
++
++ void add(const T& item);
++ // There is no remove(const T& item) for this set
++ bool contains(const T& item) const;
++
++ unsigned length() const
++ { return list.length(); }
++
++ void clear()
++ { list.clear(); }
++
++ class Vix {
++ public:
++ Vix(): owner(0), vix()
++ { }
++
++ // These are friend functions so that v == x is the same as x == v
++ friend int operator==(void *v, const Vix& x)
++ { return v == x.vix; }
++ friend int operator==(const Vix& x, void *v)
++ { return v == x.vix; }
++ friend int operator!=(void *v, const Vix& x)
++ { return v != x.vix; }
++ friend int operator!=(const Vix& x, void *v)
++ { return v != x.vix; }
++ friend int operator==(const Vix& x1, const Vix& x2)
++ { return x1.owner == x2.owner && x1.vix == x2.vix; }
++ friend int operator!=(const Vix& x1, const Vix& x2)
++ { return x1.owner != x2.owner || x1.vix != x2.vix; }
++ private:
++ friend class SetLS<T>;
++
++ Vix(const SetLS<T> *o, const ListS<T>::Vix& x): owner(o), vix(x)
++ { }
++
++ const SetLS<T> *owner;
++ ListS<T>::Vix vix;
++ };
++ friend class Vix;
++
++ Vix first() const
++ { return Vix(this, list.first()); }
++ void next(Vix& x) const
++ { check(x);
++ list.next(x.vix); }
++ const T& operator()(const Vix& x) const
++ { check(x);
++ return list(x.vix); }
++ // There is item no remove(const Vix&) for this set
++protected:
++ ListS<T> list;
++
++private:
++ void check(const Vix& x) const
++ { if (this != x.owner)
++ ::abort(); }
++};
++
++
++template<class T>
++SetLS<T>::SetLS():
++
++
++
++list()
++
++{ }
++
++template<class T>
++void
++SetLS<T>::add(const T& item)
++{
++ if ( ! contains(item) ) {
++
++
++
++ list.append(item);
++
++ }
++}
++
++template<class T>
++bool
++SetLS<T>::contains(const T& item) const
++{
++ for (Vix x=first(); 0 != x; next(x)) {
++ if (operator()(x) == item)
++ return XTRUE;
++ }
++ return XFALSE;
++}
++
++
++# 14 "SetLS.cc" 2
++
++
++
++# 1 "/projects/gnu-cygnus/gnu-cygnus-14/mips/lib/gcc-lib/decstation/cygnus-reno-1/g++-include/iostream.h" 1 3
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# 211 "/projects/gnu-cygnus/gnu-cygnus-14/mips/lib/gcc-lib/decstation/cygnus-reno-1/g++-include/iostream.h" 3
++
++# 21 "SetLS.cc" 2
++
++
++// In (most versions of) g++ 2.X, this use of typedefs has the effect
++// of causing the instantiation of the templates, thereby testing the
++// templates
++
++class test {
++public:
++ test(): value(0)
++ { }
++ test(int v): value(v)
++ { }
++
++ void print(ostream& out) const
++ { out << value; }
++
++ friend int operator==(const test& a, const test& b);
++private:
++ int value;
++};
++
++int
++operator==(const test& a, const test& b)
++{
++ return a.value == b.value;
++}
++
++ostream&
++operator<<(ostream& o, const test& t)
++{
++ t.print(o);
++ return o;
++}
++
++typedef SetLS<test> SLS;
++
++static ostream&
++operator<<(ostream& o, const SLS& s)
++{
++ o << "set of " << s.length() << " = {";
++
++ bool first;
++ SetLS<test>::Vix x;
++ for (first=XTRUE, x=s.first(); 0 != x; s.next(x), first=XFALSE) {
++ if ( ! first )
++ o << ',';
++ o << ' ';
++ s(x).print(o);
++ }
++ o << '}';
++
++ return o;
++}
++
++SLS gsls;
++const SLS gcsls;
++
++int foo()
++{
++ const unsigned SIZE = 20;
++
++ //
++ // SetLS()
++ // SetLS(const SetLS<T>&)
++ //
++ SLS sls;
++ {
++ // Fill sls with some interesting values
++ for (unsigned i=0; i<SIZE; i++) {
++ test t = i;
++ sls.add(t);
++ }
++ }
++
++ const SLS csls(sls);
++
++ //
++ // void operator=(const SetLS<T>&);
++ //
++ sls = csls;
++
++ //
++ // bool contains(const T& item) const
++ //
++ for (unsigned i=0; i<SIZE; i++) {
++ test t = i;
++
++ int contains = sls.contains(t);
++ }
++
++ //
++ // void clear()
++ //
++ sls.clear();
++ if (sls.length() != 0)
++ ::abort();
++
++ sls = csls;
++
++ //
++ // Vix first() const
++ // void next(Vix& x) const
++ // T& operator()(const Vix& x)
++ // const T& operator()(const Vix& x) const
++ //
++ SetLS<test>::Vix cx;
++ for (cx=csls.first(); 0 != cx; sls.next(cx)) {
++ if ( ! sls.contains(csls(cx)) )
++ ::abort();
++ }
++
++ cout << "gsls:\t" << gsls << '\n';
++ cout << "gcsls:\t" << gcsls << '\n';
++ cout << "sls:\t" << sls << '\n';
++ cout << "csls:\t" << csls << '\n';
++}
++
++// Dummy function so it'll run
++int main()
++{
++ cout << "PASS" << endl;
++}
++
++template class ListS<test>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/3523.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/3523.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/3523.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/3523.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Build don't link:
++// GROUPS passed assignment
++class ccUnwind
++{
++public:
++ virtual ~ccUnwind (); // comment out virtual, and void diag changes
++};
++
++template<class T>
++class ccHandle : public ccUnwind // similarly comment out inheritance
++{
++public:
++ ccHandle& operator = (const ccHandle& h);
++};
++
++class cc_Image;
++
++class ccImage : public ccHandle<cc_Image>
++{
++public:
++// reversing the order of the next two lines changes the diagnostic
++// printed about the def of ccDisplay::image
++ ccImage (const ccImage &);
++ ccImage (const cc_Image &);
++};
++
++class ccDisplay
++{
++public:
++ ccImage img;
++//ccImage image ( ccImage i) {img = i; return img;}
++// above line compiles
++ ccImage image ( ccImage i) { return img = i;} /* this gets void* error */
++};
++
++
++
++// vd.C: In method `class ccImage ccDisplay::image (class ccImage)':
++// vd.C:31: bad argument 1 for function `ccImage::ccImage (const class cc_Image&)' (type was void *)
++// vd.C:31: in base initialization for class `ccImage'
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// PRMS Id: 4839
++// Bug: The initializer of a static member of a class has the same acess
++// rights as a member function. g++ doesn't realize that.
++// Build don't link:
++
++class X
++{
++ X (int);
++ static X foo;
++public:
++ void dummy();
++};
++
++X X::foo = 9;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// PRMS Id: 4900
++// Bug: g++ doesn't apply access control uniformly to type conversion operators
++// Build don't link:
++
++struct A {
++protected:
++ operator int * () const;
++};
++
++struct B : public A {
++ int * foo () { return A::operator int *(); }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 4694
++// Bug: g++ doesn't realize that A::i refers to a member of `this' in B().
++// Build don't link:
++
++class A {
++protected:
++ int i;
++};
++
++struct B : public A {
++ B () { A::i = 0; }
++};
++
++struct C : public B {
++ C () { B::i = 0; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// PRMS Id: 4955
++// Build don't link:
++
++struct A {
++ protected:
++ int i;
++ void f ();
++};
++
++struct B: public A {
++ void g () {
++ this->A::i = 1; // gets bogus error - access control failure
++ this->A::f(); // gets bogus error - access control failure
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T> struct A { T t; };
++
++template <class T> class B: private T {
++ public:
++ T::t; // gets bogus error - doesn't recognize access decl
++};
++
++template class B<A<int> >;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Bug: g++ complains about Z being a private base when trying to
++// initialize B::foo.
++// Build don't link:
++
++struct Z {
++ Z();
++ Z(int);
++};
++
++struct A : private Z { };
++struct B : public A
++{
++ Z foo;
++ B();
++ B(const B&);
++};
++
++B::B() : foo(1) { } // gets bogus error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: g++ uses the same binfo for the a subobject of c and the a subobject
++// of b, so basetype_paths get bashed improperly.
++// Build don't link:
++
++class a {
++protected:
++ virtual void foo() { } // gets bogus error
++};
++
++class b : public virtual a {};
++
++class c : public b {
++public:
++ void bar() { b::foo(); } // gets bogus error
++};
++
++int main() {
++ c test;
++ test.bar();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Make sure definitions of static members have the right access.
++// Build don't link:
++
++struct A {
++protected:
++ int i; // ERROR - private
++ int f (); // ERROR -
++};
++
++struct B: public A {
++ static int A::*p;
++ static int (A::*fp)();
++};
++
++int A::* B::p = &A::i;
++int (A::* B::fp)() = &A::f;
++
++struct C {
++ static int A::*p;
++ static int (A::*fp)();
++};
++
++int A::* C::p = &A::i; // ERROR -
++int (A::* C::fp)() = &A::f; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// PRMS Id: 5073
++// Bug: g++ doesn't catch access violations in base initializers.
++// Special g++ Options: -w
++
++int r = 0;
++class A {
++ private:
++ A() { r = 1; } // ERROR -
++ ~A() {} // ERROR -
++};
++
++class B : public A {
++ public:
++ B(): A() {} // ERROR -
++ B(const B&) {} // ERROR -
++ ~B() { } // ERROR - private dtor
++};
++
++main()
++{
++ B b;
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Bug: access declarations are broken.
++// Build don't link:
++
++class A {
++public:
++ void foo ();
++};
++
++class B: private A {
++public:
++ A::foo;
++};
++
++void foo() {
++ B b;
++ b.foo (); // gets bogus error -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// PRMS Id: 6662
++// Bug: we crash trying to check the access on anglesSinesCosines.
++// Build don't link:
++
++#define Double double
++
++class GCTransform
++{
++ protected:
++ struct angle
++ {
++ Double phi1 ;
++ Double phi2 ;
++ } ;
++
++ struct sineAndCosine
++ {
++ Double cosine1 ;
++ Double cosine2 ;
++ Double sine1 ;
++ Double sine2 ;
++ } ;
++
++ union anglesSinesCosines
++ {
++ struct angle a ;
++ struct sineAndCosine siCo ;
++ } ;
++};
++
++class GCTransTransmit : public GCTransform
++{
++ protected:
++
++ struct GCTransTransmitDataTemp
++ {
++ union anglesSinesCosines t ; // causes abort
++ } ;
++} ;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// PRMS Id: 6877
++// Build don't link:
++
++typedef __SIZE_TYPE__ size_t;
++class aa {
++public:
++ aa();
++ ~aa();
++private:
++ int iaa;
++ void operator delete(void*, size_t);
++};
++
++class bb {
++public:
++ aa caa;
++}; // gets bogus error - calling private delete
++
++void
++f(){
++ bb abb;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// PRMS Id: 8518
++// Bug: Call to foo is not checked for accessibility
++
++class A
++{
++ private:
++ static void foo() {} // ERROR -
++ public:
++ void goo() {}
++};
++
++struct B : public A
++{
++ void func() { foo(); } // ERROR -
++};
++
++int main()
++{
++ B b;
++ b.func();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,79 @@
++// PRMS Id: 9127
++// Bug: members of anonymous unions are not access-controlled.
++
++#include <stdio.h>
++
++struct Foo {
++public:
++ union {
++ long A;
++ void *pX;
++ };
++ union X {
++ long A;
++ void *pX;
++ } PUB ;
++ int PUB_A;
++protected:
++ union {
++ long B; // ERROR - protected
++ void *pY; // ERROR - protected
++ } ;
++ union Y {
++ long B;
++ void *pY;
++ } PRT; // ERROR - protected
++ int PRT_A; // ERROR - protected
++private:
++ union {
++ long C; // ERROR - private
++ void *pZ; // ERROR - private
++ };
++ union Z {
++ long C;
++ void *pZ;
++ } PRV; // ERROR - private
++ int PRV_A; // ERROR - private
++};
++
++struct Bar : public Foo {
++public:
++ void DoSomething() {
++ PUB_A = 0;
++ Foo::A = 0;
++ printf("%x\n",pX);
++ Foo::PUB.A = 0;
++ printf("%x\n",PUB.pX);
++ B = 0;
++ printf("%x\n",Foo::pY);
++ PRT_A = 0;
++ PRT.B = 0;
++ printf("%x\n",Foo::PRT.pY);
++ PRV_A = 0; // ERROR -
++ Foo::C = 0; // ERROR -
++ printf("%x\n",pZ); // ERROR -
++ Foo::PRV.C = 0; // ERROR -
++ printf("%x\n",PRV.pZ); // ERROR -
++ }
++};
++
++int main()
++{
++ Foo a;
++
++ a.PUB_A = 0;
++ a.A = 0;
++ printf("%x\n",a.pX);
++ a.PRT_A = 0; // ERROR -
++ a.B = 0; // ERROR -
++ printf("%x\n",a.pY); // ERROR -
++ a.PRV_A = 0; // ERROR -
++ a.C = 0; // ERROR -
++ printf("%x\n",a.pZ); // ERROR -
++ a.PUB.A = 0;
++ printf("%x\n",a.PUB.pX);
++ a.PRT.B = 0; // ERROR -
++ printf("%x\n",a.PRT.pY); // ERROR -
++ a.PRV.C = 0; // ERROR -
++ printf("%x\n",a.PRV.pZ); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: forward reference to friend doesn't work in template.
++// Build don't link:
++
++template <class T> class A {
++ static int i;
++ friend struct B;
++};
++
++struct B {
++ void f () { A<int>::i = 0; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: g++ doesn't deal with friends also being derived classes.
++// Build don't link:
++
++class A {
++ int i;
++ friend class B;
++};
++
++class B : public A {
++ void f () { i = 1; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Simple testcase for access control.
++// Build don't link:
++
++class A {
++ protected:
++ void f ();
++};
++
++class B : public A {
++ public:
++ void f () { A::f(); }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Simple testcase for access control.
++// Build don't link:
++
++class A {
++protected:
++ static int i;
++};
++
++class B: public A { };
++
++class C: public B {
++public:
++ void g () { B b; b.i; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Simple testcase for access control.
++// Build don't link:
++
++class A {
++ protected:
++ void f ();
++};
++
++class B : public A { };
++class C : public B {
++ void f () { B::f(); }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Simple testcase for access control.
++// Build don't link:
++
++class A {
++ public:
++ void f ();
++};
++
++class B: protected A { };
++class C: protected B {
++ void g() { f (); }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Simple testcase for access control.
++// Build don't link:
++
++class A {
++ protected:
++ static void f ();
++};
++
++class B: public A {};
++class C: public A {};
++class D: public C, public B {
++ void g () { A::f(); } // gets bogus error - wrongly ambiguous static member call
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// From: smidt@dd.chalmers.se (Peter Smidt)
++// Date: 25 Jan 1994 23:41:33 -0500
++// Bug: g++ forgets access decls after the definition.
++// Build don't link:
++
++class inh {
++ int a;
++protected:
++ void myf(int);
++};
++
++class mel : private inh {
++protected:
++ int t;
++ inh::myf;
++};
++
++class top_t : protected mel {
++public:
++ void myf(int);
++};
++
++void inh::myf(int i) {
++ a = i;
++}
++
++void top_t::myf(int i) {
++ inh::myf(i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/access9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/access9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Bug: g++ doesn't allow const objects to be constructed.
++// Build don't link:
++
++struct B { B(); };
++
++const B foo()
++{
++ return B(); // gets bogus error - constructing const
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/aggregate.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/aggregate.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/aggregate.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/aggregate.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++struct A { int i; };
++
++int main()
++{
++ A a1 = { 42 };
++ A a2 (a1);
++ A a3 = { 137 };
++ a1 = a3;
++
++ if (a1.i == 137 && a2.i == 42 && a3.i == 137)
++ return 0;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ambig1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ambig1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ambig1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ambig1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Testcase for ambiguity between functional cast and abstract declarator.
++// This ambiguity accounts for 6 of the r/r conflicts.
++// Special g++ Options: -pedantic-errors
++
++int i = sizeof (int ()); // ERROR - sizeof applied to fn type
++int j = sizeof (int () + 1);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ambig2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ambig2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ambig2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ambig2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Testcase for ambiguity between cast and parmlist.
++// This ambiguity accounts for 1 of the r/r conflicts.
++// Do not compile with -pedantic so that the compiler will accept taking
++// the sizeof a function type.
++// Special g++ Options: -Wno-pointer-arith
++// Build don't link:
++
++void f(){
++ (void)sizeof(int((int)1.2));
++ (void)sizeof(int((int))); // gets bogus error -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ambig3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ambig3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ambig3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ambig3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Testcase for ambiguity between function and variable declaration (8.2).
++// Build don't link:
++
++struct A {
++ A (int, int);
++ int k;
++};
++
++void f ()
++{
++ int i[2], j;
++ A a (int (i[1]), j); // gets bogus error - late parsing XFAIL *-*-*
++ A b (int (i[1]), int j); // function
++ a.k = 0; // gets bogus error - late parsing XFAIL *-*-*
++ b (i, j);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// g++ should not complain about anonymous bitfields.
++// Build don't link:
++
++struct A
++{
++ int : 2;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Bug: g++ dies.
++// Build don't link:
++
++class cl {
++public:
++ cl();
++ void set(void *, char *, int);
++private:
++ union {
++ float vf;
++ struct ff {
++ void *ptr;
++ char *name;
++ int sz;
++ } *vff;
++ };
++};
++
++void cl::set(void *p, char *n, int sz)
++{
++ vff = new ff; // This procude an internal compiler error.
++ vff->ptr = p;
++ vff->name = n;
++ vff->sz = sz;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// PRMS Id: 5371
++// Bug: g++ screws up the alignment of buff and dies.
++// Build don't link:
++// Special g++ Options: -O
++
++main()
++{
++ union {
++ double a;
++ char buff[sizeof(double)];
++ };
++
++ void *p = buff;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/anon.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/anon.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Bug: g++ has trouble copying anonymous structs.
++
++typedef struct { int i; } foo;
++struct A : public foo {
++ struct { int i; } x;
++};
++
++int main ()
++{
++ A a;
++ a.i = 5;
++ a.x.i = 42;
++ A b (a);
++ a = b;
++ if (a.i != 5 || a.x.i != 42)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/binding2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/binding2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/binding2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/binding2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ screws up binding levels in a switch statement with cleanups.
++// Build don't link:
++
++struct A {
++ ~A() { }
++};
++
++int f (int i)
++{
++ switch (i) {
++ default:
++ A a;
++ }
++ return 1;
++} // causes compiler segfault
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/binding3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/binding3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/binding3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/binding3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: g++ fails to clear out the IDENTIFIER_CLASS_VALUEs of various names
++// after a class definition.
++// Build don't link:
++
++struct A {
++ typedef double T;
++ virtual T f () = 0;
++};
++
++class B {
++ B (const B&);
++ void operator=(const B&);
++public:
++ B ();
++ typedef void * T;
++};
++
++struct C : public A {
++ T f (); // gets bogus error
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/binding.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/binding.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/binding.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/binding.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: g++ only looks in the current temporary binding level for a name.
++
++struct T { ~T(); };
++
++int main()
++{
++ foo:
++ T t; // ERROR - redeclared
++ bar:
++ T t; // ERROR - redeclaration
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Make sure that bool bitfields promote to int properly.
++
++struct F {
++ bool b1 : 1;
++ bool b2 : 7;
++};
++
++int main()
++{
++ F f = { true, true };
++
++ if (int (f.b1) != 1)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// From: panisset@cae.ca (Jean-Francois Panisset)
++// Subject: Problem with constant expressions for bitfields
++// Date: Mon, 6 Jun 94 14:00:01 EDT
++
++// Bug: g++ doesn't treat boolean true and false as constant values.
++// Build don't link:
++
++enum E { e1,e2,e3,e4,e5 };
++
++struct X
++{
++ unsigned int bits : ((e5 > 4) ? 8 : 4); // gets bogus error - constant expression
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Test for allowing conversion to bool.
++
++struct A { };
++
++int main ()
++{
++ bool b = (void*)0;
++ b = (int A::*)0;
++ b = (int (A::*)())0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++int main ()
++{
++ bool b = false;
++ int i = b++;
++ if (i != false || b != true)
++ return 1;
++ i = b++;
++ if (i != true || b != true)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Bug: The conversion from bool to int gets stripped.
++// Build don't link:
++
++bool b;
++
++int main ()
++{
++ return ((!b) != 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++
++struct A
++{
++ operator bool () const;
++ operator const void * () const;
++};
++
++struct B
++{
++ A a;
++ int foo1 ();
++ int foo2 ();
++};
++
++int
++B::foo1 ()
++{
++ return a ? 0 : 1; // ambiguous default type conversion for `operator !='
++}
++
++int
++B::foo2 ()
++{
++ if (a)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/bool.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/bool.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// Testcase for uses of bool.
++// Build don't link:
++
++int i,j,k;
++
++/* Check that types of certain expressions are bool. */
++void f ()
++{
++ i ? j == k : true;
++ i ? j < k : true;
++ i ? j && k : true;
++}
++
++/* Check that g++ can find a conversion to bool when one exists. */
++struct A { operator char * (); } a;
++struct B { operator int (); } b;
++struct C { operator float (); } c;
++struct D { operator bool (); } d;
++struct E { operator int E::* (); } e;
++
++void g ()
++{
++ a || true;
++ b || true;
++ c || true; // gets bogus error
++ d || true;
++ e || true;
++}
++
++/* Check for support in templates. */
++template <class T> struct F { };
++template class F<bool>;
++
++template <class T> void f (T, bool) { };
++template void f (bool, bool);
++
++/* Special cases. */
++void h ()
++{
++ /* Used to cause infinite recursion. */
++ i&1 || true;
++ /* Should find conversion path to int. */
++ d == true;
++}
++
++bool boo = -1;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/builtin2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/builtin2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/builtin2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/builtin2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++inline void strlen (const char *) { }
++
++void f ()
++{
++ strlen("Hi"); // gets bogus error - wrongful overload
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/builtin.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/builtin.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/builtin.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/builtin.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: g++ overloads strlen instead of bashing the builtin version.
++// Special g++ Options: -w
++// Build don't link:
++
++extern "C" void strlen (const char *);
++
++void f ()
++{
++ strlen("Hi");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/byval2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/byval2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/byval2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/byval2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// From: panisset@cae.ca (Jean-Francois Panisset)
++// Subject: 2.6.0 pre-rel, internal error, regression, mips-sgi-irix4
++// Date: Thu, 14 Jul 94 23:34:21 EDT
++// Build don't link:
++
++class Char
++{
++protected:
++ char rep;
++public:
++ Char (const char ) {};
++ operator char() const;
++ void operator -= (const Char );
++};
++
++inline Char operator - (const Char a, const Char b) {}
++inline char operator == (const Char a, const char b) {}
++
++char mystrcmp(Char s[31], Char t[31])
++{
++ for (; *s == *t; ++s, ++t) if (*s == '\0') return 0;
++ return char(*s - *t);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/byval3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/byval3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/byval3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/byval3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Test to make sure that value return of classes with cleanups works; it
++// has been broken at various times on PCC_STATIC_STRUCT_RETURN targets.
++// Build don't link:
++
++struct A {};
++
++struct R : virtual A { virtual ~R(); };
++
++R g();
++
++void encode()
++{
++ g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/byval.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/byval.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/byval.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/byval.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Bug: a is destroyed in both foo() and main()
++
++int count;
++
++struct A {
++ double a,b;
++ A(int) { count++; }
++ A(const A&) { count++; }
++ ~A() { count--; }
++};
++
++void foo (A a)
++{ }
++
++int main()
++{
++ foo (1);
++ return count;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/c2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/c2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/c2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/c2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// PRMS Id: 3134
++// g++ understands C redeclaration semantics. Sun CC 2.0.1 doesn't.
++// Special g++ Options:
++// Build don't link:
++
++extern "C" {
++ int foo();
++ int foo(int);
++
++ int bar(int);
++ int bar();
++}
++
++main()
++{
++ foo (1);
++ bar (1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Bug: g++ fails to grok functional casts in all situations.
++// Build don't link:
++
++class A {
++public:
++ typedef int B;
++ static B foo() { return B(1); } // gets bogus error -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cast2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cast2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cast2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cast2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// The compiler tried to build up a double with a NOP_EXPR from
++// integer_zero_node, which fails.
++
++template <class T>
++class vector {
++public:
++ vector (int n, const T& value = T()) {}
++};
++
++void
++foo (void)
++{
++ vector<double> v (10);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cast3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cast3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cast3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cast3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 7088
++// Build don't link:
++
++struct string
++{
++ int length () const;
++ string (string &);
++ string (char * = 0);
++ int operator [] (int);
++ ~string ();
++};
++
++string _cook(const string raw, bool for_postscript)
++{
++ unsigned char c = (unsigned) ((string &)raw)[1];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/c-inline.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/c-inline.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/c-inline.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/c-inline.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: the compiler gets hopelessly confused.
++// Build don't link:
++
++#line 1 "c-inline.h"
++#pragma interface
++inline double abs (double) { return 0.0; }
++inline short abs (short) { return 0; }
++#line 2 "c-inline.C"
++extern "C" {
++ inline int abs (int) { return 0; } // causes segfault -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// PRMS Id: 6303
++// Bug: compiler crashes processing the cleanup for arrayOfClass.
++// Build don't link:
++
++class Class {
++public:
++ ~Class(); // This dtor MUST be declared to generate the error...
++};
++
++Class varOfClass;
++
++int main() {
++ // This MUST be 'const' to generate the error...
++ const Class arrayOfClass[1] = { varOfClass }; // causes abort
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cleanup.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cleanup.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cleanup.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cleanup.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Bug: continue over object decl calls destructor but not constructor.
++
++int c = 0;
++int d = 0;
++extern "C" int printf(const char *,...);
++
++class Foo {
++public:
++ Foo(){ c++; }
++ ~Foo(){ d++; }
++};
++
++int main()
++{
++ for(int i=0;i<2;i++){
++ continue;
++ Foo bar;
++ }
++ printf ("%d %d\n", c, d);
++ if (c == d && d == 0)
++ return 0;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/complete1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/complete1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/complete1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/complete1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// PRMS Id: 4695
++// Bug: g++ wrongly requires A to be complete here.
++// Build don't link:
++
++struct A;
++
++void foo(const A &);
++
++void bar(A *p)
++{
++ foo(*p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cond2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cond2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cond2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cond2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,65 @@
++// Positive testcase for decls in conditions.
++
++extern "C" int printf(const char *, ...);
++
++int up = 0;
++int down = 0;
++
++struct T
++{
++ int i;
++ T(int j) { i = j; printf("UP\n"); up++; }
++ T(const T& t) { i = t.i; printf("unwanted copy\n"); }
++ ~T() { printf ("DOWN\n"); down++; }
++ operator int () { return i; }
++};
++
++int main ()
++{
++ int t;
++
++ if (T t = 1)
++ ;
++
++ printf ("\n");
++
++ int j = 3;
++ while (T t = j--)
++ ;
++
++ printf ("\n");
++
++ j = 3;
++ while (1)
++ {
++ T t = j--;
++ if (t) continue;
++ break;
++ }
++
++ printf ("\n");
++
++ j = 3;
++ for (;T t = j--;)
++ ;
++
++ printf ("\n");
++
++ for (int k = 3; T t = k--;)
++ ;
++
++ printf ("\n");
++
++ switch (T t = 34)
++ {
++ case 34:
++ ;
++ }
++
++ printf ("\n");
++
++ if (up == down && up == 18)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cond.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cond.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/cond.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/cond.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// Build don't link:
++// GROUPS passed rtti
++// Negative testcase for decls in conditions.
++
++int main()
++{
++ float i;
++
++ if (int i = 1) // ERROR - , XFAIL *-*-*
++ {
++ char i; // ERROR - , XFAIL *-*-*
++ char j;
++ }
++ else
++ {
++ short i; // ERROR - , XFAIL *-*-*
++ char j;
++ }
++
++ if (struct A { operator int () { return 1; } } *foo = new A) // ERROR -
++ ;
++
++ A bar; // ERROR -
++
++ if (enum A { one, two, three } foo = one) // ERROR -
++ ;
++
++ struct B { operator int () { return 2; } };
++
++ if (struct B * foo = new B)
++ ;
++
++ if (int f () = 1) // ERROR -
++ ;
++
++ if (int a[2] = {1, 2}) // ERROR -
++ ;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/condexp.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/condexp.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/condexp.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/condexp.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// PRMS id: 5629
++// Build don't link:
++
++struct String { const char *x; };
++class Pathname: public String { };
++
++String
++f(int i)
++{
++ Pathname p;
++ String s;
++
++ return i ? p: s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Example of static member constants
++
++extern "C" int printf (const char *, ...);
++
++struct T {
++ static const char letter = 'a'; // this is the new stuff!
++ char x[letter];
++ void f();
++};
++
++void T::f() { printf ("%p", &letter); }
++const char T::letter; // still need def after class
++
++int main() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: bar isn't emitted, which causes havoc.
++
++extern int i;
++const int bar = i;
++int i = 5;
++
++int main()
++{
++ return bar != 5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// PRMS Id: 8927
++// Bug: complex inheritance interferes with const checking
++
++class GrandParent {
++public:
++ virtual void DoIt();
++protected:
++ int A;
++};
++
++class Parent : virtual public GrandParent {
++public:
++ virtual void DoX() const;
++};
++
++class Child : public Parent {
++public:
++ void DoX() const;
++};
++
++void Child::DoX() const
++{
++ A = 10; // ERROR - assignment to const
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/const.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/const.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Bug: a ends up in the text segment, so trying to initialize it causes
++// a seg fault.
++
++struct A {
++ int i;
++ A(): i(0) {}
++ A(int j): i(j) {}
++};
++
++const A a;
++const A b(1);
++
++int main ()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/context.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/context.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/context.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/context.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 3988
++// Bug: DECL_CONTEXT of A::B gets clobbered in pushdecl when defining A::foo().
++// Build don't link:
++
++#pragma implementation "context.h"
++#line 1 "context.h"
++#pragma interface
++
++template <class T>
++struct A {
++ inline void foo () { }
++ class B { };
++};
++
++struct C : public A<int> {
++ void bar (C::B&);
++};
++#line 2 "context.C"
++
++void C::bar (C::B& b) { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// PRMS Id: 9019
++// Bug: g++ doesn't find conversion to const char *.
++// Build don't link:
++
++struct String {
++ String ();
++ explicit String (const char *);
++ operator const char * ();
++};
++
++int main(int argc, char **argv)
++{
++ String deflt("no args");
++ String useme;
++
++ const char *p = (argv[1]) ? argv[1] : deflt;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// PRMS Id: 8805
++// Bug: The two-level conversion is not found when calling a global fn.
++
++class Int {
++public:
++ Int(int A);
++};
++
++class Ding {
++public:
++ Ding(Int A);
++};
++
++class Something {
++public:
++ void DoSomething(Ding A); // ERROR - referred to
++};
++
++void DoSomething(Ding A);
++
++void foo(Something* pX)
++{
++ DoSomething(1); // ERROR -
++ pX->DoSomething(1); // ERROR -
++ (*pX).DoSomething(1); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// PRMS Id: 3069
++
++void f(int&); // ERROR - referenced by error below
++void g(const int& i) {
++ f(i); // ERROR - discarding const
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++void qsort (void *, int, int, int (*)(const void *, const void *));
++int f (char *, char *);
++void g ()
++{
++ typedef int (*pf)(void *, void *);
++ qsort(0, 0, 0, pf(f)); // ERROR - adding const to function parms
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++struct A {
++ A (int);
++};
++struct B {
++ operator int () { return 1; }
++};
++void f (const A&);
++void g()
++{
++ B b;
++ f ((A) b);
++ f (A (b)); // gets bogus error - functional cast treated differently from C style
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++struct A { };
++struct B: public A {
++ A a;
++ operator A () { return a; } // WARNING - never used implicitly
++};
++void f (const A&);
++void g()
++{
++ B b;
++ (A) b; // gets bogus error - trying both constructor and type conversion operator
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// PRMS Id: g++/6034
++
++extern "C" int printf (const char *, ...);
++
++class Base
++{
++ char x;
++};
++
++template <class T>
++// remove the public Base inheritance and the problem goes away...
++class Container : public Base
++{
++public:
++
++ Container(const T& aValue): myValue(aValue) { }
++
++ operator const T&(void) const
++ {
++ printf("Container::const T& called\n");
++ return myValue;
++ }
++
++protected:
++
++ T myValue;
++};
++
++typedef unsigned short Type;
++
++typedef Container<Type> TypeContainer;
++
++int main(void)
++{
++ TypeContainer myTypeContainer(2);
++ Type t = myTypeContainer;
++
++ printf ("myType = %d\n", t);
++ return t != 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Bug: g++ tries to look inside (B*)0 for a virtual base pointer.
++
++struct A
++{
++};
++
++struct B : virtual A
++{
++};
++
++A* a;
++
++int main()
++{
++ a = (B*)0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// PRMS id: 8279
++
++int main ()
++{
++ char *const *p = 0;
++ char **q = 0;
++
++ (void)(p - q);
++ (void)(q - p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// PRMS Id: 8475
++
++class SomeClass {
++public:
++ operator int & () {
++ static int x;
++ return x;
++ }
++} a;
++
++int main (int, char**) {
++ return a + 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/conversion.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/conversion.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Bug: g++ doesn't find the conversion path from DPtr& to B*.
++// Build don't link:
++
++class B {};
++class D : public B {};
++class DPtr
++{
++public:
++ operator D*() const;
++};
++
++void foo (B* bp);
++void bar (DPtr& dp)
++{
++ foo (dp);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// PRMS Id: 5155
++
++struct A {
++ enum foo { bar };
++};
++
++typedef A::foo A::foo; // ERROR - causes compiler segfault
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Bug: g++ crashes on this input.
++// Build don't link:
++
++struct A {
++ const char *p;
++};
++const char foo[] = "bar";
++const A a = { foo };
++extern const A* ap = &a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: g++ dies instead of flagging this invalid.
++// Build don't link:
++
++inline float max(float x, float y) { return (x>y)?x:y; }
++
++float b(float x, float y, float z)
++{
++ float f = (y<x)?x:(max<y)?z:y; // ERROR -
++ return f;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Bug: g++ dies on this input.
++// Build don't link:
++
++class Sample
++ {
++ public:
++ int operator <<(const char *c);
++ };
++
++extern Sample sample;
++
++struct Simple
++ {
++ int a;
++ };
++
++extern "C" void get_it();
++
++class Test
++ {
++ private:
++ void test();
++ friend void get_it();
++ };
++
++void Test::test()
++ {
++ sample << "hello";
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Bug: g++ tries to generate initialization semantics for a Node from an int,
++// and fails.
++// Build don't link:
++
++struct Node
++{
++ Node* child[2];
++}; // ERROR -
++
++void bug(int i)
++{
++ Node* q = new Node(i); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// PRMS Id: 4346
++// Bug: g++ dies on redefinition of cc_Array::repInvariant.
++// Build don't link:
++
++class ccObjectInfo
++{
++public:
++ virtual const ccObjectInfo& repInvariant (int =0) const;
++};
++
++template <class T>
++class cc_Array : public ccObjectInfo
++{
++public:
++ virtual const ccObjectInfo& repInvariant (int =0) const ;
++};
++
++template <class T>
++const ccObjectInfo& cc_Array<T>::repInvariant(int) const
++{ return *this /* *this is required here */; } // ERROR - redefined
++
++template <class T>
++class ccArray :public ccObjectInfo
++{
++ ccArray (cc_Array<T>*);
++};
++
++template <class T>
++class ccObjArray : public ccArray<T>
++{
++ ccObjArray();
++};
++
++template <class T>
++const ccObjectInfo& cc_Array<T>::repInvariant(int) const
++{ return 0; } // ERROR - causes compiler segfault
++
++typedef ccObjArray< double> ccROIRuns;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Bug: g++ doesn't deal well with abstract declarators used inappropriately.
++// Build don't link:
++
++void (*)(); // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Bug: g++ dies on the below.
++// Build don't link:
++
++class A { };
++void f ()
++{
++ A a;
++ a.~a(); // ERROR - causes segfault
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Bug: g++ can't deal.
++
++typedef unsigned size_t; // ERROR - previous declaration
++typedef unsigned long size_t; // ERROR - redefining size_t
++void f (size_t); // causes compiler segfault -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++struct A {
++ A();
++ A(A); // ERROR - copy ctor must take reference
++};
++int main()
++{
++ A a;
++ A b(a); // causes compiler segfault
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/crash9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/crash9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// PRMS Id: 5085
++// Bug: TYPE_POINTER_TO wasn't set.
++// Build don't link:
++
++class A {
++ A(const A &);
++ void operator=(const A &);
++public:
++ inline A();
++};
++
++class B {
++ A a;
++public:
++ B();
++ virtual void f() const;
++};
++
++class C : public B { };
++
++class D : C {
++public:
++ void f() const;
++};
++
++void D::f() const
++{
++ C::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ctor1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ctor1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ctor1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ctor1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// PRMS Id: 5584
++
++extern "C"
++{
++ struct xx {
++ void (*xx)(void); // ERROR - field with name of class
++ int x,y;
++ };
++}
++
++int r = 1;
++
++void f(void)
++{
++ r = 0;
++}
++
++int main()
++{
++ struct xx p;
++
++ p.xx = f;
++ p.xx();
++
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ctor2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ctor2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ctor2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ctor2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Bug: the reference to c in the initializer list doesn't get fixed up.
++// Build don't link:
++
++struct AP {
++ AP(unsigned char);
++};
++
++struct AI : AP {
++ AI(unsigned char);
++};
++
++AI::AI(unsigned char c)
++: AP(c)
++{
++ &c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dcast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dcast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dcast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dcast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 7162
++// Build don't link:
++
++struct B {
++ int i;
++ B() : i(1) {}
++};
++
++struct D : B {
++ int i;
++ D() : i(2) {}
++};
++
++void ch()
++{
++ D od2;
++ D &rd2 = od2;
++
++ B &rd1 = dynamic_cast<B&>(rd2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dcast2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dcast2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dcast2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dcast2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++struct A { virtual void f() { } };
++struct B { virtual void g() { } };
++struct C : public A, public B { };
++
++int main ()
++{
++ C* cp = 0;
++ B* bp = 0;
++
++ if (dynamic_cast <B*> (cp) != 0)
++ return 1;
++
++ if (dynamic_cast <void *> (bp) != 0)
++ return 1;
++
++ if (dynamic_cast <C*> (bp) != 0)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dcast3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dcast3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dcast3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dcast3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Testcase for tricky dynamic cast situations.
++
++struct A {
++ virtual void f () { }
++};
++
++struct B : public A { };
++struct C : public B { };
++struct D : public B { };
++struct E : public C, public D { };
++
++struct B2 : public virtual A { };
++struct C2 : public B2 { };
++struct D2 : public B2 { };
++struct E2 : public C2, public D2 { };
++
++int main ()
++{
++ E e;
++ E2 e2;
++
++ A* ap = (C*)&e;
++
++ // ap points to base subobject of unique B; succeeds
++ if (dynamic_cast <B*> (ap) == 0)
++ return 1;
++
++ ap = (C2*)&e2;
++ // ap points to base subobject shared by two Bs; fails
++ if (dynamic_cast <B2*> (ap) != 0)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/default1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/default1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/default1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/default1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 5204
++// Bug: g++ bashes the type of add_sym with the type of add, so calling it
++// with one parameter generates an error.
++// Build don't link:
++
++int add(int const &symbol,
++ const unsigned char flags=(void*)0); // ERROR - invalid default arg
++
++int add_sym(int const &symbol,
++ const unsigned char flags=0);
++
++int main()
++{
++ int fname;
++ add_sym(fname); // Guarantee a symbol exists
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/default2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/default2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/default2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/default2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// PRMS Id: 5921
++// Build don't link:
++// Bug: default arguments containing constructor calls persist incorrectly.
++
++class foo
++{
++ public:
++ foo();
++ foo(int x);
++ public:
++ int iamamember;
++};
++
++class bar
++{
++ public:
++ bar();
++ int memberfunction(int i, char *j, double k, foo foo1 = foo(0));
++};
++
++int
++pain(bar *bar1)
++{
++ return bar1->memberfunction(1, "x", 0.0);
++}
++
++int
++pain2(bar *bar1)
++{
++ return bar1->memberfunction(1, "x", 0.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/default3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/default3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/default3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/default3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug: type_list_equal aborts when it sees lang-specific tree nodes.
++// Build don't link:
++
++struct A { };
++void f (A a = A());
++void g (A a = A());
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/defctor.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/defctor.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/defctor.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/defctor.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ doesn't generate default constructor.
++
++class A {
++public:
++ int i;
++};
++
++extern "C" int printf(const char *, ...);
++
++int main () {
++ A a;
++ a.i = 1;
++ A b (a);
++ printf("%d\n",b.i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/delete1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/delete1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/delete1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/delete1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++#include <stddef.h>
++struct A {
++ virtual void operator delete (void *); // ERROR - virtual delete
++ virtual void * operator new (size_t); // ERROR - virtual new
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/delete2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/delete2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/delete2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/delete2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 5003
++// Bug: g++ complains about calling the destructor for a const object.
++// Build don't link:
++
++struct A {
++public:
++ ~A();
++};
++
++const A foo ();
++
++void bar()
++{
++ A n;
++ n = foo(); // gets bogus error - deleting const
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/delete3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/delete3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/delete3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/delete3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// PRMS Id: 6093
++
++class A {
++public:
++ A();
++ ~A();
++protected:
++ void operator delete(void *); // ERROR - protected
++};
++
++A::~A()
++{
++}
++
++void foo(A *p)
++{
++ delete p; // ERROR - in this context
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 4342
++// Bug: g++ does not massage things enough to allow calling ~X().
++// Build don't link:
++
++struct X
++{
++ virtual ~X ();
++};
++
++struct Y : public X
++{};
++
++struct Z : public Y, public X
++{}; // WARNING -
++
++void foo ()
++{
++ Z* f = new Z;
++ delete f; // gets bogus error -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// Special g++ Options: -w
++// PRMS Id: 4342 (second testcase)
++// Bug: g++ still can't deal with ambiguous inheritance in destructor calls.
++// Build don't link:
++
++struct ccUnwind
++{
++ ccUnwind ();
++ virtual ~ccUnwind ();
++};
++
++struct ccPersistent
++{
++ virtual void bar();
++};
++
++struct ccImpExp : public ccPersistent, public ccUnwind
++{};
++
++struct ccTool : public ccImpExp
++{};
++
++struct ccScreenTool : public ccTool
++{};
++
++struct ccVTool : public ccScreenTool
++{};
++
++struct ccScreenObjRep : public ccUnwind
++{};
++
++struct ccScreenObj : public ccScreenObjRep
++{};
++
++struct ccVSTool : public ccImpExp, public ccUnwind
++{};
++
++struct ccSCCP : public ccVSTool
++{};
++
++void foo ()
++{
++ ccSCCP* foo = new ccSCCP;
++ delete foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// PRMS Id: 4342
++// Bug: g++ fails to massage ambiguity in calling virtual destructor.
++// Build don't link:
++
++class A { public: virtual ~A();};
++class B: public A { };
++class C: public A { };
++class D: public B, public C { };
++
++void foo ()
++{
++ D* p = new D;
++ delete p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/destruct.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/destruct.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Exhaustive test for destructors of simple types.
++// PRMS Id: 2744, 3308
++// Build don't link:
++
++template <class T> class A {
++ T q;
++public:
++ ~A() {
++ q.T::~T();
++ q.~T();
++ (&q)->T::~T();
++ (&q)->~T();
++ }
++};
++
++typedef char * cp;
++
++int main ()
++{
++ A<int> a;
++ A<cp> b;
++ int i;
++ cp c;
++
++ i.~int();
++ i.int::~int();
++ (&i)->~int();
++ (&i)->int::~int();
++ c.~cp();
++ c.cp::~cp();
++ (&c)->~cp();
++ (&c)->cp::~cp();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dot.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dot.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dot.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dot.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 4143
++// Bug: Pointer is silently dereferenced in method call.
++// Build don't link:
++
++extern "C" int printf (const char *, ...);
++
++class Test
++{
++ char ch;
++ public:
++ Test(char c) : ch(c) {}
++ void Print() { printf("%c", ch); }
++};
++
++int main()
++{
++ Test *p = new Test('x');
++
++ p.Print(); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// PRMS Id: 5163
++// Bug: g++ doesn't accept the explicit destructor call syntax for templates.
++
++template <class T> struct A { };
++A<int> a;
++
++int main()
++{
++ a.~A(); // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// PRMS Id: 5341
++// Bug: g++ complains about the explicit destructor notation.
++// Build don't link:
++
++#include <stddef.h>
++
++void *operator new(size_t Size, void* pThing) { return pThing; };
++
++template <class T> class Stack {
++public:
++ Stack() { new (Data) T(); }
++ ~Stack() { ((T*)Data)->~T(); }
++private:
++ char Data[sizeof(T)];
++};
++
++Stack<int> a;
++Stack<Stack<int> > c;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// PRMS Id: 5420
++// Bug: g++ gets mixed up calling destructors for references.
++// Build don't link:
++
++template<class X>
++class Z {
++public:
++ char space[100];
++ void kill()
++ { X& x = (X&) space[0];
++ x.~X(); }
++};
++
++class C { int i; };
++
++void
++f()
++{
++ Z<int> r;
++ r.kill();
++ Z<C> s;
++ s.kill();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// PRMS Id: 5286
++// Bug: g++ forgets side-effects of object in call to nonexistent destructor.
++
++#include <new>
++
++int r;
++
++template <class T> struct A {
++ T *p;
++ int i;
++ A() { i = 0; p = (T*) new char[sizeof (T)]; new (p + i++) T; }
++ ~A() { p[--i].~T(); r = i; }
++};
++
++int main()
++{
++ { A<int> a; }
++
++ int* p = (int*) new char[sizeof (int)];
++ new (p + r++) int;
++ p[--r].~int();
++
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/dtor.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/dtor.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++struct A {
++ ~A();
++};
++
++struct B {
++ ~B();
++};
++
++int main()
++{
++ A a;
++ a.~B(); // ERROR - wrong name
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++enum tristate { no = -1, maybe, yes };
++
++void foobar ()
++{
++ tristate var = no; // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options: -Wall
++
++enum tristate { no = -1, maybe, yes };
++
++tristate
++tristate_satisfies (register tristate const t1, register tristate const t2)
++{
++ switch (t1)
++ {
++ case no:
++ return (tristate) -t2;
++ case maybe:
++ return yes;
++ case yes:
++ return t2;
++ }
++ return maybe;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Special g++ Options: -Wall
++
++enum tristate { no = -1, maybe, yes };
++
++tristate
++definite_tristate (int truth)
++{
++ return (truth) ? yes : no;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++enum { a = 1 };
++
++int main(void)
++{
++ int l = -1;
++
++ return ! (l < a); // testcase fails if a is unsigned
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Special g++ Options: -fshort-enums
++
++#include <limits.h>
++
++enum A { a1 = 0x7fffffff };
++enum B { b1 = 0x80000000 };
++enum C { c1 = -1, c2 = 0x80000000 };
++enum D { d1 = CHAR_MIN, d2 = CHAR_MAX };
++enum E { e1 = CHAR_MIN, e2 = CHAR_MIN };
++
++main()
++{
++ return (sizeof (A) != 4 || sizeof (B) != 4 || sizeof (C) != 8
++ || sizeof (D) != 1 || sizeof (E) != 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Yet Another testcase for signed/unsigned enums.
++// Build don't link:
++
++enum A { AA = 0, AB = 1};
++enum B { BA = -1, BB = 1};
++
++void set(int a);
++void set(long a);
++
++void
++foo()
++{
++ set(AA); // gets bogus error - why is this ambiguous
++ set(BA); // when this is not amibguous
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: the switch fails on the Alpha because folding ef - 1 fails.
++
++enum foo { one=1, thirty=30 };
++
++int f (enum foo ef)
++{
++ switch (ef)
++ {
++ case one:
++ case thirty:
++ return 0;
++ default:
++ return 1;
++ }
++}
++
++int main ()
++{
++ return f (one);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/enum.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/enum.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// PRMS Id: 4337
++// Bug: Enums are not looked up to arbitrary depth.
++// Build don't link:
++
++struct W {
++ enum A { B };
++};
++
++struct X : public W
++{};
++
++struct Y : public X
++{};
++
++struct S
++{
++ X::A a1;
++ Y::A a2; // gets bogus error -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/explicit.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/explicit.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/explicit.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/explicit.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Testcase for explicit instantiation of templates.
++// Build don't link:
++
++template <class T>
++class A {
++ T t;
++public:
++ void f () { }
++};
++
++template class A<int>;
++
++template <class T> T min (T a, T b) { return (a < b ? a : b); }
++
++template int min (int, int);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/expr1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/expr1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/expr1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/expr1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: g++ doesn't figure out what to do.
++// Build don't link:
++
++struct A {
++ operator char *();
++};
++
++char foo(A a)
++{
++ char c = a[0]; // gets bogus error
++ return c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/friend2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/friend2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/friend2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/friend2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// PRMS Id: 5189
++// Bug: g++ fails to collapse the several declarations of freefoo, so it isn't
++// recognized as a friend.
++// Build don't link:
++
++extern "C"
++void freefoo(void);
++
++class foo {
++ friend void freefoo(void);
++ protected:
++ static void foomem();
++ public:
++ foo();
++ ~foo();
++};
++
++void freefoo(void)
++{
++ foo::foomem();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/friend.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/friend.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/friend.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/friend.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Bug: g++ doesn't keep track of the lexical context of friends properly.
++
++extern "C" void exit(int);
++
++struct B;
++struct A {
++ static void f () { exit (1); }
++};
++
++struct B {
++ static void f () { exit (0); }
++ friend void g () { f (); }
++};
++
++int main ()
++{
++ g ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/groff1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/groff1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/groff1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/groff1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// PRMS Id: 3744
++// Bug: unswitching a COND_EXPR initializer fails to set SIDE_EFFECTS on the
++// result, so expand_expr ignores it.
++
++extern "C" {
++ int printf(const char *,...);
++ void exit(int);
++}
++
++struct A {
++ int x;
++ int y;
++
++ A() : x(0), y(0) { }
++};
++
++struct S {
++ S() : flags(0) { }
++ unsigned flags;
++ A from;
++ void foo(const A &pos);
++};
++
++void S::foo(const A &pos)
++{
++ A a = flags ? from : pos;
++ printf("%d %d\n", a.x, a.y);
++ if (a.x != 17 || a.y != 12)
++ exit (1);
++}
++
++int main()
++{
++ A pos;
++ pos.x = 17;
++ pos.y = 12;
++ S s;
++ s.foo(pos);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/hmc1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/hmc1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/hmc1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/hmc1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed templates default-arguments
++template <class I>
++class Class {
++public:
++ void func1(int n=1);
++ void func2(int d) {}
++};
++template <class I>
++void Class<I>::func1(int n) {}
++
++//if this is replaced by:
++//void Class<I>::func1(int n=1) {}
++//the code compiles.
++
++int main() {
++ Class<int> C;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// The reference parameter to fred isn't dereferenced properly.
++// Build don't link:
++
++class Gump {};
++Gump operator & (const Gump x){return x;}
++
++class B;
++
++void *sam(int &x)
++{return &x;}
++
++const void *fred(const B& x)
++{return &x;} // "&x" causes the compilation error.
++
++class B {};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++struct A {
++ int foo(A a) { return a.bar(); }
++ int bar();
++ int n;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// PRMS Id: 5126
++
++extern int i, j;
++static const int foo [] = { i, j };
++int i = 5, j = 42;
++int main()
++{
++ return foo[1] != 42;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// PRMS Id: 5652
++// Bug: strings does not get initialized.
++
++extern "C" void * memcpy (void *, const void *, __SIZE_TYPE__);
++extern "C" int strcmp (const char *, const char *);
++
++class My_string {
++ char *str;
++ int len;
++public:
++ My_string(const char* string);
++ My_string(const My_string &);
++ ~My_string() { delete str; }
++ char* char_p() { return str; }
++};
++
++const My_string strings[4] = {
++ "first string",
++ "second string",
++ "third string",
++ "fourth string"
++};
++
++My_string::My_string(const char* string)
++{
++ len = strlen(string) + 1;
++ str = new char[len];
++ memcpy(str, string, len);
++}
++
++My_string::My_string(const My_string &string)
++{
++ len = string.len;
++ str = new char[len];
++ memcpy(str, string.str, len);
++}
++
++int main()
++{
++ My_string str1 = strings[0];
++ return strcmp ("first string", str1.char_p ()) != 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++struct A { int i; };
++
++A a = {{{1}}}; // ERROR - causes abort
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/init.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/init.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Bug: g++ uses an empty initializer list for its own devious purpose
++// internally, and gets confused if it shows up in the input.
++// Build don't link:
++
++struct A { int i; };
++
++A a = { };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/inline2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/inline2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/inline2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/inline2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: the lang-specific bits of the decl for g aren't being copied when
++// inlining.
++// Special g++ Options: -O
++// Build don't link:
++
++inline void f () {
++ void g ();
++}
++
++void h() {
++ f(); // causes compiler segfault -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/inline3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/inline3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/inline3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/inline3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Testcase for order of destruction.
++// Special g++ Options: -O2
++
++extern "C" int printf( char const*, ... );
++int c;
++int r;
++
++struct B {
++ B();
++ B( B const& );
++ ~B();
++};
++
++struct A {
++ A();
++ A( A const& );
++ ~A();
++ operator B ();
++};
++
++inline A::operator B () { printf( "operator B ()\n"); return B(); }
++
++A f();
++void g( B const& );
++
++int
++main()
++{
++ g( f() );
++ return r;
++}
++
++B::B() { printf( "B::B()\n" ); if (++c != 2) r = 1; }
++B::B( B const& ) { printf( "B::B( B const& )\n" ); r = 1; }
++B::~B() { printf( "B::~B()\n" ); if (--c != 1) r = 1; }
++
++A::A() { printf( "A::A()\n" ); if (++c != 1) r = 1; }
++A::A( A const& ) { printf( "A::A( A const& )\n" ); r = 1; }
++A::~A() { printf( "A::~A()\n" ); if (--c != 0) r = 1; }
++
++A f() { printf( "f()\n"); return A(); }
++void g( B const& ) { printf( "g()\n"); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/inline.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/inline.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/inline.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/inline.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// PRMS Id: 4341
++// Bug: Instantiating a template in the middle of processing the functions
++// from another template screws up lineno/input_filename.
++
++#pragma implementation "C.h"
++#line 1 "A.h"
++#pragma interface
++template <class T> class A {};
++#line 1 "C.h"
++#pragma interface
++template <class T> class C
++{
++public:
++ C() { A<T> *ap; }
++ ~C() { }
++};
++#line 18 "inline.C"
++int main()
++{
++ C<int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/jump.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/jump.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/jump.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/jump.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// PRMS Id: 6036
++
++extern int a;
++
++int main() {
++ switch (a) {
++ case 1:
++ int v2 = 3; // ERROR - referenced below
++ case 2: // ERROR - jumping past initializer
++ if (v2 == 7)
++ ;
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lex1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lex1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lex1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lex1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++int main()
++{
++ char c = '\351';
++ if (c != '\351')
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed error-reporting
++// Special g++ Options:
++// Bug: # line directive gets ignored immediately after text.
++template <class T> class A
++{
++public:
++# 200 "lineno2.C"
++};
++
++main()
++{
++ undef1(); // ERROR - , LINE 204
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options:
++// GROUPS passed error-reporting
++// potential bug: # line directive does not get reproduced in template
++// expansion
++template <class T> class A
++{
++public:
++# 200 "lineno3.C"
++ int foo () { undef1(); } // ERROR - , LINE 200
++};
++
++template class A<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options:
++// GROUPS passed error-reporting
++// Bug: # line directive in template definition interferes with growing obstack
++template <class T> class A
++{
++public:
++
++# 200 "lineno4.C"
++ int foo () { undef1(); } // ERROR - , LINE 200
++};
++
++template class A<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed error-reporting
++// Bug: incomplete instantiation messes with lineno
++template <class T> class A;
++
++int main()
++{
++ A<int> *p;
++ undef1();// ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lineno.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lineno.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug; g++ binds a function definition to the line number of a later decl.
++// Build don't link:
++
++void foo () { } // ERROR - redeclared
++void foo (); // gets bogus error - invalid binding
++void foo () { } // ERROR - redeclared
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/local.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/local.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/local.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/local.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// General testcase for local classes.
++
++int x;
++void f ()
++{
++ static int s;
++ int x; // ERROR - referenced below
++ extern int q();
++
++ struct local {
++ int g() { return x; } // ERROR - automatic variable
++ int h() { return s; } // gets bogus error - local class
++ int k() { return ::x; } // OK
++ int l() { return q(); } // OK
++ int m(); // OK - not defined
++ static int foo; // ERROR - static data member of local class
++ };
++}
++
++local* p = 0; // ERROR - no such type in scope
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lookup2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lookup2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lookup2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lookup2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++struct A {
++ struct B {
++ B ();
++ };
++};
++void f (A::B);
++void g ()
++{
++ A::B b;
++ f (b); // gets bogus error - can't find nested constructor
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lookup3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lookup3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lookup3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lookup3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// [class.ambig]: A single function, object, type, or enumerator may be
++// reached through more than one path through the DAG of base classes. This
++// is not an ambiguity.
++// Build don't link:
++
++struct A {
++ typedef long T;
++};
++
++struct B : public A { };
++struct C : public A { };
++
++struct D : public C , public B {
++ void f (T&); // gets bogus error - ambiguous lookup
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lookup.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lookup.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lookup.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lookup.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// PRMS Id: 4357
++// Bug: g++ forgets to clear out push/popclass cache stuff when instantiating
++// templates.
++// Build don't link:
++
++template <class T> class ccHandle { };
++
++class cc_GStack
++{
++ static cc_GStack* freeList;
++};
++
++// OK if ccGStack is not derived from ccHandle<something>
++class ccGStack : public ccHandle<int> { };
++
++struct S { };
++
++S* freeList;
++
++class X
++{
++public:
++ void foo();
++};
++
++void X::foo()
++{
++ S m;
++ freeList = &m;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/loverload3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/loverload3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/loverload3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/loverload3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// PRMS Id: 2010
++// Bug: g++ doesn't deal with overloads involving C-language fns properly.
++// Build don't link:
++
++extern "C" double pow (double, double);
++inline double pow (double d, int e) { return pow (d, (double) e); }
++
++void foo ()
++{
++ pow (1.0, 1);
++ pow (1.0, 1.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/loverload4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/loverload4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/loverload4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/loverload4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Bug: g++ dies on this input.
++// Build don't link:
++
++inline char abs (char x) { return 0; }
++
++extern "C" {
++ inline int abs (int x) { return 1; }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/loverload.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/loverload.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/loverload.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/loverload.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: g++ can't deal with multi-language overloading.
++// Build don't link:
++
++extern void foo (int, int);
++extern "C" void foo (int);
++
++void bar ()
++{
++ foo (1);
++ foo (1, 2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 4892
++// Bug: COND_EXPRs, MODIFY_EXPRs and COMPOUND_EXPRs aren't properly recognized
++// as lvalues.
++// Build don't link:
++
++extern int foo;
++int& f (int& a, int& b)
++{
++ return (foo ? a : b); // gets bogus error -
++}
++
++int& g (int& a)
++{
++ return (a = 0); // gets bogus error -
++}
++
++int& h (int& a, int& b)
++{
++ return (a = 1, b); // gets bogus error -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Bug: C++ semantics for assignment don't match the backend semantics for
++// MODIFY_EXPR.
++// Build don't link:
++
++void
++foo (int j)
++{
++ (j = 1)++; // causes compiler segfault
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++int main() {
++ int i = 2;
++ int *pi = &(++i);
++
++ return i != 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/lvalue.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/lvalue.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Bug: Scoped method calls don't propagate the constness of `this'.
++// PRMS Id: 4181 (second testcase)
++// Build don't link:
++
++class D;
++
++class Bptr
++{
++public:
++ Bptr& operator=(D*);
++ const Bptr& operator=(const D*) const;
++};
++
++class Dptr : public Bptr
++{
++public:
++ const Dptr& operator=(const D* rep) const
++ {
++ Bptr::operator=(rep);
++ return *this;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mangle1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mangle1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mangle1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mangle1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Bug: numeric_outputed_need_bar is not cleared properly, adding random '_'s
++// to mangled names.
++
++// Build don't link:
++
++template <int seed_length>
++class rand1
++{
++public:
++ rand1 ();
++};
++
++class codes
++{
++public:
++ rand1<32> * randgen;
++ codes (int ptr);
++
++};
++
++codes::codes (int ptr)
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mangle2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mangle2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mangle2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mangle2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// I guess this was broken once.
++// Build don't link:
++
++template <class C, int D> class X { };
++typedef X<int, 0> T;
++
++class Y
++{
++ public:
++ ~Y();
++};
++
++class Z
++{
++ public:
++ void f(T**);
++};
++
++void Z::f(T** t)
++{ }
++
++Y::~Y()
++{ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mangle3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mangle3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mangle3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mangle3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// PRMS Id: 7563
++// Bug: declaration at function scope causes mismangling.
++
++int main()
++{
++ char ArrA[10][10][20][30],
++ ArrB[10][10][20][30];
++
++ void HitMe(char [10][10][20][30], char [10][10][20][30]);
++
++ HitMe(ArrA, ArrB);
++
++ return 0;
++}
++
++void HitMe(char A[10][10][20][30], char B[10][10][20][30])
++{
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/member.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/member.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/member.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/member.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed member-pointers error-reporting
++struct Y
++{
++ struct X
++ {
++ int A;
++ int Y::X::* foo () { undef1(1); return &Y::X::A; }// ERROR - foo().*
++ int bar () { return A; }
++ };
++};
++
++int Y::X::* foo ()
++{
++ undef2(1);// ERROR - foo().*
++ return &Y::X::A;
++}
++
++int Y::X::* (* foo2 ())()
++{
++ undef3(1);// ERROR - foo().*
++ return foo;
++}
++
++int (Y::X::* bar2 ()) ()
++{
++ undef4(1);// ERROR - foo\(\).*
++ return Y::X::bar;// ERROR - foo\(\).*
++}
++
++int Y::X::* (Y::X::* foo3 ())()
++{
++ undef5(1);// ERROR - foo().*
++ return Y::X::foo;// ERROR - foo().*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/method.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/method.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/method.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/method.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: pointer to pointer is treated as plain pointer.
++// PRMS Id: 1767
++// Build don't link:
++
++class Foo {
++public:
++ void method();
++};
++
++void func(Foo ** ppFoo) {
++ ppFoo->method(); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mi.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mi.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mi.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mi.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++int status;
++
++struct A { virtual void foo () { status = 1; } };
++struct B { };
++struct C : public A, public B { };
++struct D { virtual void baz () { } };
++struct E : public D, public C { void foo () { status = 0; } };
++
++int main ()
++{
++ E* ep = new E;
++
++ ep->foo();
++
++ return status;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mutable1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mutable1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/mutable1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/mutable1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++struct X
++{
++ X () { }
++ mutable int x;
++};
++
++int main ()
++{
++ const X x;
++ x.x = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: g++ can't deal with function-local classes that talk about themselves.
++// Build don't link:
++
++void foo() {
++ class Wrapper {
++ public:
++ void F (void * Wrapperptr)
++ {
++ Wrapper * wrapptr = ( Wrapper *) Wrapperptr; // gets bogus error
++ }
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// PRMS Id: 3764 (c/h)
++// Bug: g++ gets into an infinite loop trying to find the top-level context
++// Build don't link:
++
++class Menu;
++class MenuItem;
++
++class MenuAction {
++public:
++ virtual void execute (Menu& menu, MenuItem& menuItem) = 0;
++protected:
++ MenuAction () {}
++};
++
++class Test {
++ class MenuCBA : public MenuAction {
++ public:
++ typedef void (Test::* MenuCBA_Member) (Menu& menu, MenuItem& menuItem);
++ MenuCBA (Test& instance, MenuCBA_Member member)
++ : _instance(&instance), _member(member) { }
++ void execute (Menu& menu, MenuItem& menuItem);
++ private:
++ MenuCBA_Member _member;
++ Test* _instance;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// From: quipu@ulrik.uio.no
++// Subject: extern "C" nested class
++// Date: Fri, 13 Aug 1993 15:33:53 +0200
++// Build don't link:
++
++extern "C" {
++ struct A {
++ struct B { int j; } *x;
++ };
++}
++
++void
++foo () {
++ A a;
++ struct A::B *b;
++ b = a.x; // gets bogus error - type `B' is not a base type for type `B'
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++struct A {
++ struct B { };
++};
++
++struct C : public A {
++ struct D
++ : public B // gets bogus error - can't find B
++ { };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++union A {
++ struct B { };
++ A::B b; // gets bogus error
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Testcase for defining nested types separately.
++// Build don't link:
++
++class remote
++{
++ class remote_file;
++};
++
++class remote::remote_file
++{
++public:
++ ~remote_file();
++};
++
++remote::remote_file::~remote_file()
++{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/nested8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/nested8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++struct A { };
++struct B: public A {
++ struct C {
++friend struct B; // gets bogus error - base clause w/o members
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/net2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/net2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/net2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/net2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Test of various ?: problems.
++
++class D
++{
++public:
++ void a();
++ void b();
++ D(int i):x(i) {}
++private:
++ int x;
++};
++
++void D::a() {++x;}
++void D::b() {--x;}
++
++
++int aa=1, bb=0;
++
++int fa() {return 0;}
++int fb() {return 2;}
++
++int main(int argc, char* argv[])
++{
++ typedef int* pi;
++ int* p = (argc == 1)? &aa: &bb;
++ *p = 0;
++
++ typedef int (*ifptr)();
++ ifptr fp = (argc == 1)? fa: fb;
++ aa = fp();
++
++ D d(0);
++ typedef void (D::*dmem)();
++ dmem mfp = (argc == 1)? &D::a: &D::b;
++ (d.*mfp)();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/net.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/net.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/net.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/net.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: g++ doesn't instantiate function templates in instantiate_type.
++// Build don't link:
++
++template <class T> void fn (T t) { }
++template <class T> struct A {
++ void (*p)(T);
++ A() { p = fn; }
++};
++
++A<int> a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// PRMS Id: 6267
++// Special g++ Options: -Wno-deprecated -fthis-is-variable -fno-exceptions
++
++struct A {
++ int i;
++ A() { i = 2; }
++};
++
++main()
++{
++ A *p = new A ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// PRMS Id: 6037
++// Special g++ Options: -fcheck-new -pedantic
++
++extern "C" void * malloc (__SIZE_TYPE__);
++
++int ena = 0;
++
++struct A {
++ int i;
++ A () { i = 2; }
++ void * operator new (__SIZE_TYPE__ s)
++ {
++ if (ena)
++ return 0; // WARNING - returning NULL
++ return malloc (s);
++ }
++};
++
++struct B {
++ int i;
++ B () { i = 2; }
++ void * operator new (__SIZE_TYPE__ s) throw()
++ {
++ if (ena)
++ return 0;
++ return malloc (s);
++ }
++};
++
++int main ()
++{
++ ena = 1;
++ A *ap = new A;
++ B *bp = new B;
++
++ return ap || bp ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Special g++ Options: -fcheck-new
++
++struct A {
++ A(): i(42) { }
++ A(int j): i(j) { }
++ int i;
++};
++
++A* ap = new A (1);
++A* ap2 = new A[3];
++
++main ()
++{
++ if (ap->i != 1 || ap2[0].i != 42 || ap2[1].i != 42 || ap2[2].i != 42)
++ return 1;
++
++ A* ap = new A (1);
++ A* ap2 = new A[3];
++
++ if (ap->i != 1 || ap2[0].i != 42 || ap2[1].i != 42 || ap2[2].i != 42)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int main ()
++{
++ const int *p = new const int (0);
++ delete p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/new.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/new.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Bug: new doesn't make sure that the count is an integral value.
++
++#include <new>
++extern "C" int printf (const char *, ...);
++extern "C" void *malloc (size_t);
++size_t s;
++
++void * operator new (size_t siz) throw (std::bad_alloc) {
++ if (s == 0)
++ s = siz;
++ else
++ s = (s != siz);
++ return malloc (siz);
++}
++
++int main()
++{
++ s = 0;
++
++ float f = 3;
++ int* b1 = new int[(int)f];
++ int* b2 = new int[f]; // ERROR - new requires integral size
++
++ return s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// PRMS Id: 5070 (testcase 1)
++// Build don't link:
++
++struct foo {
++ foo(int x = 0) {};
++ int IsAlive(void) { return 1; }
++};
++
++struct xx {
++ int IsOk(int X);
++ foo a;
++};
++
++int xx::IsOk(int X)
++{
++ return ((xx::a).IsAlive()); // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// PRMS Id: 5070 (testcase 2)
++
++int status = 1;
++
++struct foo {
++ foo& operator= (const foo&) { status = 0; }
++};
++
++struct xx {
++ foo a;
++};
++
++struct yy : public xx {
++ yy(foo& a) { xx::a = a; }
++};
++
++int main()
++{
++ foo f;
++ yy y (f);
++
++ return status;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// PRMS Id: 5070 (bug 2)
++// Build don't link:
++
++struct A {
++ void f ();
++};
++
++struct Ptr {
++ A* operator->();
++};
++
++struct B {
++ Ptr p;
++};
++
++struct C: public B {
++ void g ();
++};
++
++void C::g() {
++ B::p->f(); // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/offset4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/offset4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ complains about the use of A::p below.
++// Build don't link:
++
++struct A {
++ void *p;
++};
++
++struct B: public A {
++ int f ()
++ {
++ if (A::p)
++ return 1;
++ return 0;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Bug: default operator= is not being generated properly.
++// PRMS Id: 3525
++// Build don't link:
++
++struct ccUnwind
++{
++ ccUnwind& operator = (const ccUnwind&);
++};
++
++struct ccEllipseUnit
++{
++ ccEllipseUnit () {}
++};
++
++struct ccEllipse : ccUnwind
++{
++ ccEllipse ();
++ ccEllipse (const ccEllipseUnit&);
++
++};
++
++void foo ()
++{
++ ccEllipse e;
++ e = ccEllipseUnit(); // gets bogus error - assignment not defined
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ generates code for assignment in invalid situations.
++// Build don't link:
++
++class X {
++ int& a;
++public:
++ X(int& i): a(i) { };
++};
++
++void foo ()
++{
++ int one=1, two=2;
++ X a(one), b(two);
++ a = b; // ERROR - no assignment semantics defined
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// PRMS Id: 4329
++// Bug: default op= gives an warning about casting away volatile.
++// Build don't link:
++
++struct foo
++{
++ volatile int bar[2];
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Testcase for tricky synthesized op= in complex inheritance situation.
++// This used to test whether the virtual base was copy-assigned only once.
++// That feature is not required by ISO C++, so the test now only checks
++// whether the vbase is assigned at all.
++
++int count = 0;
++extern "C" int printf (const char *, ...);
++
++class A {
++ public:
++ A& operator = (const A&) { count++; return *this; }
++};
++
++class B: virtual private A { };
++class C: virtual public A { };
++class D: public B, public C { };
++
++int main()
++{
++ D a, b;
++ a = b;
++ printf ("%d\n",count);
++ if (count == 0)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Testcase for wrongful generation of operator =.
++// Build don't link:
++
++class ivResource {
++public:
++ ivResource ();
++private:
++ ivResource & operator =(const ivResource &);
++};
++
++class ivButtonState : virtual public ivResource {
++public:
++ void operator=(ivButtonState &);
++};
++
++class ivPrintBS : public ivButtonState {
++};
++
++void f ()
++{
++ ivPrintBS a, b;
++ a = b;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opeq.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opeq.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// PRMS Id: 4297 (related to 3525)
++// Bug: Generating default op= didn't set TYPE_HAS_ASSIGNMENT, so it wasn't
++// found.
++
++extern "C" int printf (char *, ...);
++
++class Y
++{
++public:
++ Y(char*) {}
++ Y& operator = (const Y&) {}
++};
++
++
++class X
++{
++public:
++ X(int v, char* m) : _v(v), _m (m) {}
++ X () : _v(0), _m("Unknown") {}
++ // Defining our own op= here makes things work correctly.
++
++private:
++ int _v;
++ int _m4;
++ // Adding more members here increases the count on u.
++ Y _m;
++};
++
++const X sPassed (1, "Passed"), sFailed (-1, "Failed");
++
++int main (int, char**)
++{
++ X result;
++ int u = 0;
++ result = (u++ ? sPassed : sFailed);
++ if (u == 1)
++ return 0;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/operator2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/operator2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/operator2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/operator2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// PRMS Id: 6018
++// Build don't link:
++
++class string {
++ char *p;
++public:
++ string(const char* s) ;// { p == s; }
++ operator const char*() ;// { return s; }
++};
++
++void f4(string& s)
++{
++ *s; // implies "s.operator const char*()"
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/operator.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/operator.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/operator.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/operator.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// General test for operator overloading permissiveness.
++// Build don't link:
++// Special g++ Options:
++
++typedef __SIZE_TYPE__ size_t;
++
++struct A {
++ int operator?:(int a, int b); // WARNING -
++ static int operator()(int a); // ERROR - must be nonstatic
++ static int operator+(A,A); // ERROR - must be nonstatic
++ int operator+(int a, int b = 1); // ERROR - two errors on this line
++ int operator++(char); // ERROR - must take 'int'
++ void operator delete (void *);
++ void operator delete (void *, unsigned long);
++};
++
++struct B {
++ void * operator new (size_t, void *);
++ int operator++(int = 0);
++ int operator+ (int);
++ void operator()();
++ char * operator[](int);
++ B * operator->();
++};
++
++int operator-(int a, int b); // ERROR - no class argument
++
++void * operator new (A a); // ERROR - invalid first argument
++void operator delete (A a); // ERROR - ditto
++
++char * operator char * (int); // ERROR - return value, nonmember
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opover.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opover.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/opover.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/opover.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ prefers a non-matching operator== over user-defined conversions
++// and a default operator==.
++// Build don't link:
++
++struct A {
++ operator int ();
++};
++
++struct B {
++ friend int operator== (B, int);
++};
++
++int foo (A& a) {
++ return a == 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/optimize2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/optimize2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/optimize2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/optimize2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Used to crash on the alpha with optimization.
++// Special g++ Options: -w
++
++struct Fix {
++ unsigned short l;
++};
++
++static inline void f (int len)
++{
++ if (len > 65535)
++ abort ();
++}
++
++struct Fix a = { 33 };
++
++main()
++{
++ f (a.l);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/optimize.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/optimize.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/optimize.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/optimize.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Bug: g++ claims that control can fall off the end of these functions.
++// PRMS Id: 4943
++// Special g++ Options: -O -pedantic-errors
++// Build don't link:
++
++struct A {
++ A();
++ A(const A&);
++ A& operator= (const A&);
++ ~A();
++};
++
++int f ()
++{
++ A a[2];
++ return 1;
++} // gets bogus error - jump_optimize
++
++int g ()
++{
++ A a;
++ return 1;
++} // gets bogus error - jump_optimize
++
++struct B {
++ B();
++ B(const B&);
++ B& operator= (const B&);
++ ~B();
++};
++
++inline B::~B()
++{
++ int i = 2;
++ while (i--) ;
++}
++
++int h ()
++{
++ B b;
++ return 1;
++} // gets bogus error - jump_optimize
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// PRMS Id: 4257 (second bug)
++// Bug: g++ fails to recognize multiple previous instantiations of a function
++// template.
++// Build don't link:
++// Special g++ Options: -fguiding-decls
++
++template <class T>
++class A {
++ int i;
++
++ friend int foo (A<T>&);
++};
++
++template <class T> int foo (A<T>& a) { return a.i; }
++
++A<int> a;
++A<char> dummy;
++
++void bar ()
++{
++ foo (a); // gets bogus error - two foo(A<int>&)'s
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// PRMS Id: 4697
++// Bug: g++ calls the non-const method for a const object.
++
++class A {
++public:
++ void foo(int &i) const { i = 0; }
++ void foo(int &i) { i = 1; }
++};
++
++int main()
++{
++ A a;
++ const A& b = a;
++ int i = 2;
++ b.foo (i);
++ return i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// PRMS Id: 4066
++// Bug: g++ doesn't notice the const on reference returns.
++
++struct B {
++ int foo() { return 1; }
++ int foo() const { return 0; }
++};
++
++B b_;
++const B &b () { return b_; }
++
++int main()
++{
++ return b().foo();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Bug: g++ screws up derived->base conversions when calling a global function
++// in the presence of matching members in the base. Whew.
++
++struct xios {
++ virtual ~xios() { }
++};
++
++struct xistream: virtual public xios {
++ int j;
++ void operator>>(char&);
++};
++
++struct xfstreambase: virtual public xios { };
++
++struct xifstream: public xfstreambase, public xistream { };
++
++void operator>>(xistream& i, int j)
++{
++ i.j = 0;
++}
++
++int main() {
++ int i;
++ xifstream ifs;
++
++ ifs >> i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: g++ fails to recognize that the template matches the target type.
++// Build don't link:
++
++template <class T> void foo (T *, int);
++
++struct A;
++void bar ()
++{
++ void (*p)(A *, int) = &foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: g++ thinks that int->long is a promotion.
++// Build don't link:
++
++long f (long, long);
++double f (double, double);
++
++void g (double d)
++{
++ f (d, 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++void f (int); // ERROR -
++void f (long); // ERROR -
++int main()
++{
++ f (1 & 0xffffff00UL); // ERROR - ambiguous
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: g++ fails to prefer UDC's alone to UDC's plus standard conversions.
++// Build don't link:
++
++struct B { };
++struct D: public B { };
++struct DP {
++ operator D * () const;
++ operator double () const;
++};
++
++void f (B *);
++void f (D *);
++void g (double);
++void g (float);
++
++void h (DP p)
++{
++ f (p);
++ g (p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// pushdecl gets confused by this.
++// Build don't link:
++
++void f ();
++void f (int, int);
++template <class T> T f (T) { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// PRMS Id: 4689
++// Bug: g++ doesn't notice operators overloaded on enumeral types.
++
++enum E { A=5, B=32, C=100 };
++
++E operator|(E a, E b) { return C; };
++
++int main()
++{
++ return (A|B) != C;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: g++ thinks there is a conversion from void * to B *.
++// Build don't link:
++
++struct A {
++ operator void* ();
++};
++
++struct B: public A { };
++
++void bar (A& a) {
++ B* bp = (B*)a; // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: this code causes an internal compiler error 4.
++
++void f (char *);
++void f (int);
++struct A {
++ void f (); // ERROR - candidate
++ void f (int); // ERROR - candidate
++ void g () {
++ void (*p)(char *) = f; // ERROR - no matching function in scope
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++struct X {
++ void f (int = 4, char = 'r'); // ERROR -
++ void g (int = 4, char = 'r'); // ERROR -
++};
++
++void
++X::f (int i = 4, char x = 'r')
++{ } // ERROR - duplicate default args
++
++void
++X::g (int i = 9, char x = 's')
++{ } // ERROR - duplicate default args
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// PRMS Id: 4574
++// Bug: g++ prefers int to double for float& argument
++// Build don't link:
++
++inline double abs (double x) { return x;}
++inline int abs (int i) { return i; }
++
++float& fn(float& f)
++{
++ return f;
++}
++
++void foo()
++{
++ float f = 23.45;
++ abs(fn(f)); // gets bogus warning
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// From: panisset@cae.ca (Jean-Francois Panisset)
++// Date: Mon, 6 Jun 94 13:39:25 EDT
++// Subject: Problem with operator overloading
++
++// Build don't link:
++
++class ostream {
++public:
++ ostream& operator<<(double n);
++ ostream& operator<<(float n);
++};
++
++class X
++{
++public:
++ operator long() const;
++ operator double() const;
++};
++ostream& operator<< (ostream& os, const X& x);
++
++
++int main()
++{
++ X x;
++ ostream os;
++ os << x; // gets bogus error - converting to float
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// PRMS Id: 5124
++// Bug: g++ promotes bar to int* too soon and the call to f fails.
++// Build don't link:
++
++typedef int arr[1];
++
++struct A {
++ void f(void);
++ void f(arr &);
++
++ void g(void);
++ void g(int *);
++
++ void h(void);
++};
++
++
++void A::h(void)
++{
++ arr bar;
++ f(bar);
++ g(bar);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Bug: g++ tries to build up a mangled name for its ideal match, which
++// fails for one call below.
++// Build don't link:
++
++extern const char foo[];
++extern const char baz[10];
++extern const char *fred;
++
++struct A {
++ void f(const char *);
++} *a;
++
++void bing(const char *);
++int main ()
++{
++ a->f(foo); // gets bogus error because foo's size unknown.
++ a->f(baz);
++ a->f(fred);
++ bing(fred);
++ bing(foo);
++ bing(baz);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++void f(const int &) { }
++void f(const float &);
++
++int main()
++{
++ f(false); // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// PRMS Id: 6056
++
++struct Foo {
++ Foo() { } // ERROR - candidate
++ Foo(int i = 25) { } // ERROR - candidate
++};
++
++int main()
++{
++ Foo* f1 = new Foo(); // ERROR - ambiguous
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Bug: we get an error trying to build up our ideal candidate.
++// Build don't link:
++
++class C {
++ public:
++ C( const char * );
++};
++
++ extern const char c1[];
++
++void f2( const char * );
++
++void f1() {
++ C *fntp = new C(c1); // Line 10
++ f2( c1 );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: foo and bar are considered to be overloaded (i.e. their
++// IDENTIFIER_GLOBAL_VALUES are TREE_LISTs) even though they aren't,
++// so ?: thinks it can't resolve the names.
++// Build don't link:
++
++void foo ();
++void bar ();
++
++void baz ()
++{
++ void (*p)() = 1 ? foo : bar; // gets bogus error - wrongful overloading
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// PRMS Id: 6412
++// Build don't link:
++
++class Foo;
++
++template <class F>
++class Temp
++{
++ F func_;
++public:
++ Temp (F f) : func_(f) {}
++};
++
++template <class T>
++T* func1 (T* t) { return t; }
++
++Temp<Foo*(*)(Foo*)> temp2(func1);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// PRMS Id: 6568
++// Bug: g++ complains about the ambiguous conversion to bool even though
++// we wouldn't end up using it anyway.
++// Build don't link:
++
++class AString
++{
++public:
++ AString (unsigned len);
++ operator char *() const;
++ operator char const *() const;
++};
++
++void
++foo(unsigned t, AString const & handle)
++{
++}
++
++void
++foo(AString const & handle, bool includeSpecials)
++{
++ unsigned t;
++ foo(t, handle);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// PRMS Id: 7128
++// Build don't link:
++
++class B {};
++
++class D : public B {};
++
++class X {
++ public:
++ operator const B & () const;
++ operator const D & () const;
++};
++
++void f( const D & );
++
++void g( const X & x )
++{
++ f( x );
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,78 @@
++// PRMS ID: 7507
++// Build don't link:
++
++/* ------------------------------------------------------------ */
++
++class Base0
++{
++public:
++ Base0() {}
++ virtual ~Base0() {}
++};
++
++class Base1
++{
++public:
++ Base1() {}
++ virtual ~Base1() {}
++};
++
++class Derived : public Base0, public Base1
++{
++public:
++ Derived() {}
++ virtual ~Derived() {}
++};
++
++/* ------------------------------------------------------------ */
++
++class Dummy
++{
++ public:
++ Dummy(Base0 * theBase) {}
++ ~Dummy() {}
++};
++
++/* ------------------------------------------------------------ */
++
++template<class T>
++class ConstSmartPtr
++{
++ T* myItem; // private
++
++ public:
++ ConstSmartPtr(T const* theItem);
++
++ operator T const*() const
++ { return myItem; }
++ protected:
++ T* _item() const
++ { return myItem; }
++};
++
++template<class T>
++class SmartPtr : public ConstSmartPtr<T>
++{
++ public:
++ SmartPtr(T* theItem)
++ : ConstSmartPtr<T>(theItem) {}
++
++ T* item() const
++ { return _item(); }
++
++ operator T*() const
++ { return _item(); }
++};
++
++/* ------------------------------------------------------------ */
++
++void
++function()
++{
++ SmartPtr<Derived> myObj = new Derived();
++
++ Dummy th1(myObj); // Doesn't work under Cygnus
++ Dummy th2((Base0 *) myObj); // Doesn't work either
++}
++
++/* ------------------------------------------------------------ */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// PRMS ID: 8010
++// Build don't link:
++
++class X {
++ int & flag;
++public:
++ void f(){ flag++ ; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// PRMS Id: 9647
++// Build don't link:
++
++class castBug
++{
++public:
++ operator int *();
++ operator const int *() const;
++};
++
++class castBug2
++{
++public:
++ operator const int *() const;
++};
++
++void voidfn(void *);
++
++void test()
++{
++ castBug b;
++ castBug2 b2;
++ voidfn(b); // gets bogus error
++ voidfn(b2); // ERROR - discarding const
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Test for subsequence checking in overload resolution.
++
++class foo {
++public:
++ void operator <<(char *) { }
++ void operator <<(const char * const &);
++};
++
++int
++main()
++{
++ char s[20];
++ foo f;
++ f << s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: bar is considered to be overloaded (i.e. its
++// IDENTIFIER_GLOBAL_VALUES are TREE_LISTs) even though it isn't,
++// so default_conversion thinks it can't resolve the name.
++// Build don't link:
++
++void foo ();
++void bar ();
++
++void baz ()
++{
++ void (*p)() = 1 ? (void (*)()) &foo : bar;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Testcase for simple overloading resolution.
++// Build don't link:
++
++void foo (int);
++void foo (int, int);
++
++void bar ()
++{
++ foo (1);
++ foo (1, 2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Testcase for simple overloading resolution.
++
++int foo (); // ERROR -
++void foo (); // ERROR - disallowed overload
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ thinks there is a default conversion from void* to B*.
++// There isn't.
++// Build don't link:
++
++struct A {
++ operator void* ();
++};
++
++struct B { };
++
++void foo (B* bp);
++
++void bar (A& a) {
++ foo (a); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ thinks there is a default conversion from A& to B*.
++// There isn't.
++// Build don't link:
++
++struct A {
++ operator A* ();
++};
++
++struct B: public A { };
++
++void foo (B* bp);
++
++void bar (A& a) {
++ foo (a); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Bug: g++ fails to catch the ambiguity below.
++// Build don't link:
++
++struct A {
++ operator int () { return 1; };
++ operator int &() { return 1; }; // ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// PRMS Id: 4257
++// Bug: g++ ignores non-member possibilities (ideal_candidate_ansi bug)
++// Build don't link:
++
++class ostream
++{
++public:
++#ifdef EITHER_ONE_A
++ ostream& operator<<(unsigned long n);
++ ostream& operator<<(long n);
++#else
++ ostream& operator<<(short n);
++ ostream& operator<<(unsigned short n);
++#endif
++};
++
++class ccObjectInfo {};
++
++ostream& operator << (ostream& out, const ccObjectInfo& obj);
++
++class ccString : public ccObjectInfo
++{
++#ifdef EITHER_ONE_B
++ operator int () const;
++#else
++ operator long () const;
++#endif
++};
++
++// Should pick this one!!
++ostream& operator << (ostream& o, const ccString & s);
++
++extern ostream cout;
++
++void f ()
++{
++ ccString foo;
++ cout << foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/overload.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/overload.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed overloading
++enum bar {};
++
++void operator+ (int, int);// ERROR - .*
++void operator+ (bar&, int);
++
++template <class T> void operator+ (int b, T& t) { return b; }
++void operator+ (int, bar&);
++
++template <class T> class foo
++{
++public:
++ friend void operator+ <> (int, T&);
++};
++
++class baz;
++
++class foo<int>;
++class foo<baz>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Testcase for precedence of ?: wrt =
++
++extern "C" int printf (const char *, ...);
++
++int main()
++{
++ int j = 0, k = 0;
++ 1 ? j : k = 5; // should be parsed 1 ? j : (k = 5)
++ (void) (1 ? k = 5 : 0);
++ k = 5 ? 1 : 0; // should be parsed k = (5 ? 1 : 0)
++
++ printf ("%d %d\n", j, k);
++
++ return j == 5 || k == 5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// PRMS Id: 6825
++// Build don't link:
++
++class aClass
++{
++ ;
++private:
++ ; // This line causes problems
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// PRMS Id: 6821
++
++struct A {
++ int operator()(int i) { return i; }
++};
++
++struct B {
++ A* p;
++ int f () { return (*p)(42); } // gets bogus error
++};
++
++int main ()
++{
++ B b = { new A };
++
++ return b.f () != 42;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++struct A {
++ struct B {};
++ struct C;
++};
++
++struct A :: C : A :: B {}; // gets bogus error - parse error before `:'
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: g++ decides that A::foo is introducing a constructor declarator.
++// Build don't link:
++
++struct A {
++ typedef bool foo;
++};
++
++A::foo (*bar) ();
++
++struct B {
++ A::foo (*bar) ();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Bug: g++ parses the declaration of r as a function declaration.
++// Build don't link:
++
++void foo (int i)
++{
++ int &r (i);
++ r = 1; // gets bogus error -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug: g++ doesn't understand constructor syntax for pointers.
++// Build don't link:
++
++void f () {
++ char * p (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// PRMS Id: 4484 (bug 2)
++// Bug: g++ does not grok abstract declarator syntax for method pointers.
++// Build don't link:
++
++template <class T> class A { };
++void (A<int>::*p)() = (void (A<int>::*)())0; // gets bogus error - abstract declarator failure
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Bug: g++ doesn't handle superfluous parentheses when redeclaring a TYPENAME.
++// Build don't link:
++
++typedef int foo;
++class A {
++ typedef int ((foo)); // gets bogus error -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: foo (bar) should be a declaration of a static data member, not a
++// function; it's getting caught by the rules for constructors.
++// Build don't link:
++
++typedef int foo;
++typedef int bar;
++struct A {
++ static foo (bar); // gets bogus error
++};
++
++int i = A::bar; // gets bogus error
++int (*fp)(bar) = A::foo; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// PRMS id: 4653
++// Bug: g++ tries to resolve declarator/expression ambiguities too soon.
++// Build don't link:
++
++template<class T> struct A { };
++
++void f () {
++ void (A<int>::*pmf) (); // gets bogus error - late binding
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Bug: g++ tries to parse this as a constructor.
++// Build don't link:
++
++typedef int foo;
++struct A {
++ foo (*bar)();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++// Build don't link:
++void foo(const int* const); // gets bogus error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/parse9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/parse9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// PRMS Id: 5720
++// Bug: the extra set of parens confuses the expr/declarator disambiguation.
++
++class Fu
++{
++ int val;
++public:
++ Fu(int i) : val(i) { };
++ void print() { }
++};
++
++int main(int argc, char * argv[])
++{
++ int * i = &argc;
++
++ Fu((*i)).print(); // gets bogus error
++ Fu((*j));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++template <class Called>
++class aCallback
++{
++public:
++ aCallback(Called& obj, int (Called::*met)());
++
++ int callback();
++
++protected:
++
++private:
++ Called& object;
++
++ int (Called::*method)();
++
++};
++
++template <class Called>
++aCallback<Called>::aCallback(Called& obj,
++ int (Called::*met)()) :
++object(obj),
++method(met)
++{};
++
++template <class Called>
++int aCallback<Called>::callback()
++{
++ return (object.*method)();
++}
++
++struct myStruct
++{
++ int action() {return 0;};
++};
++
++int main()
++{
++ myStruct toto;
++
++ aCallback<myStruct> cb(toto, &myStruct::action);
++
++ return cb.callback();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Test that comparison of pointers to members does not complain about
++// contravariance violation.
++
++struct A { int i; };
++struct B : public A { int j; int f (); };
++int main ()
++{
++ int A::*apm = &A::i;
++ int B::*bpm = apm;
++ return apm != bpm;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++struct X {};
++X& X::*PTM_1; // ERROR - pointer to reference member
++void X::*PTM_2; // ERROR - pointer to void member
++
++struct A {
++ static int& ir;
++};
++
++int i;
++int& A::ir = i; // not an error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmem.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmem.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: g++ parses the declaration of 'char A::* foo' below as a
++// declaration of 'char A'.
++// Build don't link:
++
++class A { };
++typedef int foo;
++void f ()
++{
++ char A::* foo;
++ foo = 0; // gets bogus error - parsing blunder
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// PRMS Id: 4484 (bug 3)
++// Bug: g++ does implicitly take the address of methods passed to fns.
++// Build don't link:
++
++struct A {
++ void f ();
++};
++
++void g (void (A::*)());
++
++void h () {
++ g (A::f); // ERROR - failed conversion to method pointer
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// From: enewton@uunet.uu.NET
++// Subject: g++ 2.5.8: cannot cast member function pointers
++// Date: 27 Jan 1994 01:22:56 -0500
++// Build don't link:
++
++struct A {
++ void f(char);
++ void g(int);
++};
++
++typedef void (A::*Ptr)(char);
++
++void q() {
++ Ptr p;
++
++ p = (Ptr) &A::f;
++ p = (Ptr) &A::g;
++ p = &A::f;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// PRMS Id: 4484 (bug 5)
++// Bug: g++ can't convert between pmf types.
++// Build don't link:
++
++class A;
++typedef void (A::*pmf)();
++typedef void (A::*pmfc)() const;
++
++pmfc p = (pmfc)(pmf)0; // gets bogus error - pmf conversion
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// PRMS Id: 4985
++// Build don't link:
++// Special g++ Options:
++
++struct Thing {
++ int OverloadFn() const;
++ void FunctionA(char* restOfLine);
++ void OverloadFn(char* restOfLine);
++};
++
++struct ThingEntry {
++ void (Thing::*_handler)(char* restOfLine);
++};
++
++static ThingEntry KeyWordTable[] = {
++ &Thing::FunctionA,
++ Thing::OverloadFn,
++}; // WARNING - implicit &
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// PRMS Id: 5656
++// Bug: g++ tries (which is a bug) and fails (which is a bug) to initialize
++// var at runtime.
++// Build don't link:
++
++struct A
++{
++ int func(int);
++ int func() const;
++};
++int (A::* var) () const = & A::func;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// PRMS Id: 6486
++// Make sure that no confused handling of COND_EXPRs and SAVE_EXPRs messes
++// with the number of calls to foo.
++
++int c;
++
++struct A {
++ void f () {}
++ virtual void g () {}
++};
++
++A& foo ()
++{
++ static A a;
++ ++c;
++ return a;
++}
++
++int main ()
++{
++ void (A::*p)() = &A::f;
++ (foo ().*p)();
++ p = &A::g;
++ (foo ().*p)();
++
++ return 2 - c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// PRMS Id: 6905
++
++class Parent {
++public:
++ void DoSomething() { return; };
++ int i;
++};
++
++class Child : public Parent {
++public:
++};
++
++class User {
++public:
++ void DoAnyThing(void (Parent::*)(void)) { return; }
++ void DoAThing(void (Child::*)(void)) { return; }
++ void DoAThing(int Child::*) { return; }
++};
++
++
++int main()
++{
++ User a;
++
++ a.DoAnyThing(&Child::DoSomething);
++ a.DoAThing(&Child::DoSomething);
++ a.DoAThing(&Parent::DoSomething);
++ a.DoAThing(&Parent::i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++// PRMS id: g++/13340
++// Build don't link:
++
++class rectangle {
++
++public:
++ rectangle();
++ int overlaps() const;
++
++};
++
++class region
++{
++ friend class region_impl;
++
++public:
++ region();
++ typedef int (region::* region_func)() const;
++
++};
++
++class region_impl {
++ friend class region;
++
++private:
++ rectangle content, mbb;
++ region_impl *link_p;
++ region_impl(const rectangle &content);
++
++public:
++ int iterate(region *region_p, region::region_func what,
++ const rectangle &clip_rect) const;
++ int iterate(region *region_p, region::region_func what,
++ const region_impl &clip_rgn) const;
++};
++
++
++int
++region_impl::iterate (region *region_p, region::region_func what,
++ const rectangle &clip_rect) const
++{
++ for (const region_impl *p = this; p != 0 && p->mbb.overlaps();
++ p = p->link_p)
++ if (p->content.overlaps())
++ if (!(region_p->*what)()) return 0;
++ return 1;
++}
++
++int
++region_impl::iterate (region *region_p, region::region_func what,
++ const region_impl &clip_rgn) const
++{
++ for (const region_impl *p = this; p != 0 && p->mbb.overlaps();
++ p = p->link_p)
++ if (!clip_rgn.iterate(region_p, what, p->content)) return 0;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmf.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmf.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// PRMS Id: 4333
++// Bug: g++ can't deal with casts to pointer to member function.
++// Build don't link:
++
++class A { };
++typedef void (A::* pmf)();
++void foo () { (pmf) 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 4484 (bug 1)
++// Bug: g++ does not support templates involving method pointers.
++// Build don't link:
++
++struct A {
++ void f ();
++};
++
++template <class T> void
++f (void (T::*p)()) // gets bogus error - use of template parm as aggregate
++{ }
++
++void g ()
++{
++ f (&A::f); // gets bogus error - templates and method pointers
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/precedence.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/precedence.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/precedence.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/precedence.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Bug: g++ groups ->* before casts.
++// PRMS Id: 4484 (bug 4)
++// Build don't link:
++
++struct A { };
++struct B : public A { void f (); };
++
++void g ()
++{
++ A* ap = new B;
++ void (B::*p)() = &B::f;
++
++ ((B*)ap->*p)(); // gets bogus error - incorrect precedence
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/redecl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/redecl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/redecl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/redecl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++class A
++{
++public:
++ A (const A& ccref);
++ friend A const re (const A& v1); // ERROR -
++};
++
++A // const
++re (const A& ref)
++{ // ERROR - mismatched decls
++ return A (ref);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Test that conversion from D* to B*& works properly.
++
++extern "C" int printf (const char *, ...);
++
++struct V {
++ int a;
++};
++
++struct B: virtual V {
++ int b;
++};
++
++struct D: B {
++ int c;
++};
++
++V* gp = 0;
++
++void foo(V * const &r) {
++ gp = r;
++}
++
++int bar(V *r) {
++ return (r != gp);
++}
++
++int main() {
++ D *p = new D;
++ foo(p);
++ return bar(p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++int main(int argc, char ** argv) {
++
++ int (&var_field_ref)[] = * (int (*)[]) new int [42];
++ int (&fix_field_ref)[1] = * (int (*)[1]) new int [42];
++
++ int static_field[42];
++
++ int *const &var_field_ptr_ref = var_field_ref; // gets bogus error
++ int *const &fix_field_ptr_ref = fix_field_ref;
++ int *const &static_field_ptr_ref = static_field;
++
++ int * var_field_ptr = var_field_ref; // gets bogus error
++ int * fix_field_ptr = fix_field_ref;
++ int * static_field_ptr = static_field;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++void f (char *const &) { }
++int main ()
++{
++ f ("hi");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Bug: g++ tries to call a constructor for a reference. Doh!
++// Build don't link:
++
++class B;
++struct A {
++ B & b;
++ A (B & x) : b (x) { } // gets bogus error -
++}; // gets bogus error -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug: g++ can't deal with references to arrays.
++// Build don't link:
++
++typedef float Matrix[4][4];
++Matrix m;
++Matrix& f () { return m; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// PRMS Id: ????
++// Build don't link:
++
++void f (const int& i)
++{
++ &(int&)i; // gets bogus error - references ARE lvalues
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++
++void f ();
++void (&fr)() = f;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++int i;
++int &const j = i; // ERROR - invalid const
++int &const f(); // ERROR - invalid const
++void g ()
++{
++ j = 1;
++ f() = 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++const int &f();
++int &a = f(); // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Testcase for the lifetime of a temporary object which is used to
++// initialize a reference.
++
++int destroyed = 0;
++
++struct A {
++ A() { }
++ A(int) { }
++ ~A() { destroyed++; }
++};
++
++A a;
++A foo () { return a; }
++
++int main()
++{
++ const A& ar = foo();
++ const A& ar2 = A();
++ const A& ar3 = (A)1;
++ return destroyed;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// PRMS Id: 5184
++// Bug: cast to C& below does not adjust address
++
++struct A {};
++struct B {
++ virtual void foo () {};
++};
++struct C : public B, public A {};
++
++int main() {
++ C c;
++
++ A& ar = c;
++ C& cr = (C&)ar;
++
++ cr.foo(); // this line causes core dump
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/ref9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/ref9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Bug: g++ re-evaluates the initializer for r before calling f(); since i has
++// changed to an invalid index, this breaks.
++
++class C
++{
++public:
++ void f () { }
++};
++
++void foo (C * objs[])
++{
++ int i = 0;
++ C & r = * objs[i]; /* make reference to element */
++
++ i = 666;
++ r.f (); /* core dumps here */
++}
++
++int
++main ()
++{
++ C * objs[1] = { new C };
++
++ foo (objs);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/report.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/report.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/report.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/report.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,68 @@
++// Build don't link:
++// GROUPS passed error-reporting
++template <char C>
++class badoo
++{
++};
++
++template <int (*F) (int)>
++class doowop
++{
++};
++
++struct A
++{
++ int a;
++ ~A () { a = 0; }
++ operator int () { return a; }
++};
++
++extern "C" int atoi (char *);
++
++int (*fee)(char *) = atoi;
++int (**bar)(char *) = &fee;
++
++char *s = "4";
++char **sp = &s;
++char ***spp = &sp;
++
++int foo (int a = (**bar) (s))
++{
++ return doowop<foo>::bar; // ERROR - not a member
++} // ERROR - non-void
++
++int foo2 (int (*a)(int) = &foo)
++{
++ undef4 (1); // ERROR - implicit declaration
++ return 1;
++}
++
++class X{
++ class Y{};
++};
++
++typedef int const * bart ();
++typedef bart const * const * bar2;
++
++bar2 baz (X::Y y)
++{
++ X::Y f;
++ bar2 wa [5];
++ wa[0] = baz(f);
++ undef2 (1); // ERROR - implicit declaration
++} // ERROR - non-void
++
++int ninny ()
++{
++ struct A
++ {
++ static int ninny2 () { return badoo<'\001'>::foo; } // ERROR - not a member
++ };
++
++ return A::ninny2();
++}
++
++int darg (char X::*p)
++{
++ undef3 (1); // ERROR - implicit declaration
++} // ERROR - non-void
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/return2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/return2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/return2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/return2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// PRMS Id: 5368
++// Bug: the X temporary in foo() is not destroyed.
++
++int c = 0;
++
++struct X {
++ X (int) { c++; }
++ ~X() { c--; }
++};
++
++struct Y {
++ Y(const X &) { }
++};
++
++Y foo() {
++ return X(3);
++};
++
++int main()
++{
++ foo();
++ return c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/return3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/return3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/return3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/return3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// PRMS id: 10912
++
++struct A {
++ A() { i=10; };
++ int i;
++};
++struct B : public A {};
++B b;
++
++A f()
++{
++ return b;
++}
++
++int main ()
++{
++ A a = f ();
++ return a.i != 10;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/return.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/return.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/return.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/return.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// PRMS Id: 5331
++// Bug: the return value of foo is constructed in a temporary and then
++// copied into the return slot. This is not necessary.
++
++int c = 0;
++
++struct X {
++ X(int i) { }
++ X(X const &XX) { c = 1; }
++ ~X() { }
++};
++
++const X foo() {
++ return X(3);
++};
++
++int main()
++{
++ foo();
++ return c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Bug: g++ doesn't notice the overflow in the enum values.
++
++#include <limits.h>
++
++enum COLOR
++{
++ red,
++ green = ULONG_MAX, blue
++}; // ERROR - enum overflow
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++typedef int int; /* ERROR - trying to redefine int */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++int array[3] = { 1, 2, 3, 4 }; /* ERROR - excess initializer elements */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: g++ does overloading on a function-by-function basis.
++
++void
++f ()
++{
++ void (*fp)(void);
++ {
++ extern void g ();
++ }
++ fp = g; /* ERROR - no 'g' in scope */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++void *vp;
++int (*ap)[];
++struct S *sp;
++union U *up;
++int (*fp)();
++
++void
++test ()
++{
++ vp++; /* ERROR - incrementing void * */
++ ap++; /* ERROR - incrementing ptr to incomplete type */
++ sp++; /* ERROR - incrementing ptr to incomplete type */
++ up++; /* ERROR - incrementing ptr to incomplete type */
++ fp++; /* ERROR - incrementing ptr to function */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Bug: g++ doesn't push parameter decls as they are parsed.
++// Build don't link:
++
++void (*ptr) (int foo, int array[sizeof(foo)]); // gets bogus error XFAIL *-*-*
++void test2 (int bar, int array[sizeof(bar)]) { } // gets bogus error XFAIL *-*-*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// The default assignment operator for B uses array assignment, so we can't
++// just disallow it...
++
++struct A { A& operator=(const A&); };
++struct B { A f[20]; };
++
++int a1[20], a2[20];
++B b1, b2;
++
++void
++test ()
++{
++ b1 = b2; /* OK */
++ a1 = a2; /* ERROR - array assignment */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Any expression may be explicitly converted to type void.
++// Build don't link:
++
++struct S { int m[10]; } object;
++struct S f () { return object; }
++
++void
++test ()
++{
++ (void) f().m; /* OK - cast to void; see constraints in 3.8.1 */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Bug: g++ parses the declaration of i as a functional cast.
++// Build don't link:
++
++void take_int (int arg) { }
++
++void
++test ()
++{
++ int (i);
++
++ i = 0;
++ take_int (i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++typedef void func_type ();
++func_type *fp;
++void *vp;
++
++void example ()
++{
++ vp != fp; // gets bogus error - nuttin' wrong wit dat
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++char array0[4] = "abcde"; /* ERROR - initializer too long */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++static void f (); // ERROR - used but not defined
++
++void g ()
++{
++ f ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++ signed char *ptr2 = "hello"; /* ERROR - changing sign */
++unsigned char *ptr3 = "hello"; /* ERROR - changing sign */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++typedef int Int;
++
++Int Int_object_1;
++
++void test ()
++{
++ ((Int) Int_object_1) = Int_object_1; /* ERROR - not an lvalue*/
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++struct { int :0; }; /* ERROR - anon struct not used to declare objects */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++typedef void (FTYPE) ();
++
++FTYPE f; /* ok */
++
++void
++test_0 ()
++{
++ (FTYPE) f; /* ERROR - casting to function type */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++short volatile short var_0_2; /* ERROR - duplicate short */
++long volatile long var_0_3; /* ERROR - duplicate long */
++signed volatile signed var_0_7; /* ERROR - duplicate signed */
++unsigned volatile unsigned var_0_8; /* ERROR - duplicate unsigned */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/* From 01/25/94 working paper (7.1.3):
++
++ If, in a decl-specifier-seq containing the decl-specifier typedef,
++ there is no type-specifier, or the only type-specifiers are cv-
++ qualifiers, the typedef declaration is ill-formed.
++*/
++
++typedef foo; // ERROR - invalid typedef
++typedef const bar; // ERROR - invalid typedef
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug: g++ complains about a class definition containing a const member
++// but no constructor; it shouldn't complain at that point, since this is
++// valid use.
++// Build don't link:
++
++struct S { const int member; } object = { 0 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ remembers the members of OUTER and complains about the second
++// definition.
++// Build don't link:
++
++void
++test ()
++{
++ {
++ struct OUTER { struct INNER { int mbr; } member; };
++ }
++
++ {
++ struct OUTER { struct INNER { int mbr; } member; };
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: f1 and f2 are treated as overloaded when they aren't.
++// Build don't link:
++
++int i;
++void f1(double) { }
++void f2(double) { }
++
++void
++test ()
++{
++ i ? f1 : f2; // gets bogus error - improper overloading
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: func is treated as an overloaded function when it isn't.
++// Build don't link:
++
++int *func () { return 0; }
++
++void
++test ()
++{
++ *func; // gets bogus error - improper overloading
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++
++wchar_t *single = L"xyz" ;
++wchar_t *(array[]) = { L"xyz" };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug: fixincludes and/or cpp mangle the definition of wchar_t so that this
++// doesn't work.
++// Build don't link:
++
++#include <stdlib.h>
++wchar_t array[] = L"xxx"; // gets bogus error - wchar_t
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Bug: g++ is wrongfully pedantic about union initializers.
++// Build don't link:
++
++union U { int mbr; } array[1] = { 0 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rfg9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rfg9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++int cond;
++int i;
++int *ip;
++
++void
++test ()
++{
++ cond ? i : ip; /* ERROR - pointer/integer mismatch */
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++// PRMS Id: 6000
++// Bug: g++ gets confused trying to build up a reference to a cast.
++
++class String {
++protected:
++ char *cp;
++public:
++ String(char *incp);
++ String(const String &constStringRef);
++ virtual void virtualFn1(void) const {;}
++};
++
++String::String(char *incp)
++{
++ cp = incp;
++}
++
++String::String(const String &constStringRef)
++{
++// Right here, do an 'info args', and look at the virtual function table
++// pointer: typically junk! Calling the function through that table could
++// do anything, since we're really leaping off into the void. This example
++// goes down with 'SIGBUS', but I've seen 'SIGSEGV' too, and 'SIGILL' is
++// possible.
++
++ cp = constStringRef.cp;
++ constStringRef.virtualFn1();
++}
++
++void foofun(String string)
++{
++ ;
++}
++
++class Class1 {
++public:
++ Class1(const String & constStringRef);
++};
++
++Class1 :: Class1 (const String & constStringRef)
++{
++// If instead of calling the function 'foofun()' here, we just assign
++// 'constStringRef' to a local variable, then the vptr is typically == 0!
++
++ foofun(String(constStringRef));
++}
++
++int main(void)
++{
++ Class1 *class1 = new Class1("Hi!");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Test for undesired aliasing.
++
++struct A {
++ const A * get_this () const { return this; }
++};
++
++int main ()
++{
++ A a;
++ int r = 0;
++ const A& ar1 = (A)a;
++ if (&ar1 == &a)
++ r |= 1;
++ if (A(a).get_this () == &a)
++ r |= 2;
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++int main ()
++{
++ int i;
++ int &ir = (int&)(int)i; // ERROR - casting rvalue to reference type
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Test for scope-based hiding of functions.
++
++void f (char *);
++struct A {
++ void f (); // ERROR - referred to
++};
++struct B : public A {
++ void g (char *);
++ void h () {
++ extern void g (); // ERROR -
++ f("foo"); // ERROR - hidden
++ g("foo"); // ERROR - hidden
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++void f ();
++void g ()
++{
++ int f;
++ {
++ void f ();
++ f (); // gets bogus error - trying to call integer
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++void f ()
++{
++ struct A {
++ friend void g ();
++ };
++}
++void h () {
++ g (); // ERROR - no g in scope
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++struct A { typedef int foo; };
++struct B: public A {
++ typedef int bar;
++ struct C {
++ void g (B::bar); // gets bogus error - nested type failure
++ void f (B::foo);
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// [class.scope0]: The scope of a name declared in a class consists
++// ... also of all ... default arguments ... in that class ....
++// Build don't link:
++
++struct A {
++ void f (int A::* = &A::i);
++ int i;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: g++ ignores the :: qualification and dies trying to treat an integer
++// variable as a list of functions.
++// Build don't link:
++
++class DComplex {
++public:
++ friend double imag(const DComplex& a);
++};
++
++class FComplex {
++public:
++ friend float imag(const FComplex& a);
++};
++
++void
++scnrm2(FComplex cx[])
++{
++ int imag;
++ ::imag( cx[0] );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++struct A {
++ int a(); // ERROR -
++ int a; // ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Test that the integer hides the struct in block scope.
++
++int main ()
++{
++ int A;
++ struct A { };
++ A = 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: A function is not hidden properly by a use of its name in an
++// inner scope.
++// Build don't link:
++
++struct A
++{
++ struct B
++ {
++ int f;
++ B() : f(0) {};
++ void g() { f = 0; };
++ };
++ void f();
++ void f(int);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Bug: g++ does not grok nested types very well.
++// Build don't link:
++
++class A {
++ class B;
++ friend class B;
++ class B { }; // gets bogus error -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// PRMS Id: 4375
++// Bug: g++ fails to keep track of nested typedefs properly.
++// Build don't link:
++
++class A {
++public:
++ typedef char * Ptr;
++ Ptr s;
++ Ptr get_string();
++ A(Ptr string); // { s = string; };
++};
++
++class B {
++public:
++ typedef A * Ptr;
++ Ptr a;
++ Ptr get_A();
++ B(Ptr a_ptr);
++};
++
++A::A(Ptr string) { // gets bogus error -
++ s = string; // gets bogus error -
++}
++
++int main() {
++ A a("testing");
++ A *a_ptr;
++ B b(&a);
++ a_ptr = b.get_A();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug: g++ thinks that A defines operator delete, and tries to call it.
++// Build don't link:
++
++struct A {
++ ~A () { ::operator delete (0); }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Testcase for all uses of explicit global scope.
++// Build don't link:
++
++int a, B;
++
++struct A { };
++int operator+(A&, int);
++
++struct B {
++ struct C {
++ static int a;
++ static int f () { A a; return ::operator+ (a, ::a); } // gets bogus error
++ };
++};
++
++int B::C::a = 0;
++
++struct D : public ::B::C { }; // gets bogus error
++
++void f ()
++{
++ int B;
++ ::B::C b;
++
++ B = ::B::C::a; // gets bogus error
++ B = ::B::C::f(); // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Bug: g++ doesn't flag name collisions between types and non-types as
++// errors. It shouldn't for class names, but it should for typedefs.
++// Build don't link:
++
++int bar; // ERROR -
++typedef int bar; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Bug: g++ allows two different meanings of a name in the same scope.
++
++typedef int foo; // ERROR -
++struct A {
++ A (foo);
++ int foo (); // ERROR - foo already used in scope
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: g++ silently mangles the second 'B' to 'A::B', so the definition is
++// lost.
++// Build don't link:
++
++struct A {
++ enum B { };
++};
++
++struct C: public A {
++ enum B { };
++ void foo (C::B);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/scoping.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/scoping.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// PRMS Id: 3977
++// Bug: A member function is not hidden properly by a later use of its name.
++// Build don't link:
++
++struct A {
++ void index ();
++};
++
++struct B: A {
++ int index;
++ B(): index(4) {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/shadow1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/shadow1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/shadow1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/shadow1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Special g++ Options: -Wshadow
++// Build don't link:
++
++class x {
++public:
++ void fun();
++private:
++ int foo;
++};
++
++void x::fun() { };
++
++main ()
++{
++ float foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/soverload.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/soverload.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/soverload.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/soverload.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: dfs_pushdecls doesn't create an overload list for member functions,
++// like it claims to.
++// Build don't link:
++
++struct A
++{
++ static int foo (int);
++ static int foo (int, int);
++ void bar () { foo (1, 2); } // gets bogus error - broken overloading
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/special.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/special.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/special.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/special.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Make sure that forward declarations of specializations work...
++
++template <class T> class A { };
++class A<int>;
++A<int> a; // ERROR - incomplete type
++class A<int> { };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/static1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/static1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/static1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/static1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// PRMS id: 6863
++
++extern "C" int printf(const char *, ...);
++extern "C" void abort();
++
++enum ENUM {E1=0, E2 };
++int d;
++
++class AAA{
++public:
++ AAA() {a = new char[10];printf("constructor AAA() called\n");}
++ AAA(int) {printf("constructor AAA(int) called\n");}
++ ~AAA(){ printf("destructor ~AAA() called\n"); d = 1; }
++ operator int () { return 1;}
++ char *a;
++ int i;
++};
++
++struct sentinel {
++ ~sentinel () { if (d == 0) abort (); }
++} s;
++
++/* forward decl here causes gcc not to execute ct and dt for arr1 */
++extern AAA arr1[];
++
++AAA arr1[] = {(int)E1 };
++
++int main()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++// Special g++ Options: -O
++// Build don't link:
++// Bug: Synthesizing methods for the nested class screwed up current_class_decl
++// for the outer class.
++
++class A;
++class AH
++{
++ public:
++ inline AH ( A * p = 0 );
++ AH ( const AH & from )
++ : pointer( from.pointer ) { inc(); }
++ ~ AH () { dec(); }
++ private:
++ A * pointer;
++ inline void inc() const;
++ inline void dec() const;
++};
++
++class A
++{
++ protected:
++ struct AttrTable
++ {
++ struct Row
++ {
++ };
++ };
++
++ public:
++
++ class Attributes
++ {
++ public:
++ class iterator
++ {
++ public:
++ iterator() : mo(0), attr(0) {}
++ iterator& operator++() { ++attr; return *this; }
++ iterator operator++(int)
++ { iterator tmp = *this; ++*this; return tmp; }
++
++ private:
++ AH mo;
++ const AttrTable::Row* attr;
++ };
++
++ Attributes(AH mo)
++ : mo(mo) {}
++ AH mo;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// PRMS Id: 4623
++// Bug: g++ tries and fails to synthesize a copy constructor for D.
++// Build don't link:
++
++class A { };
++class B: public virtual A { };
++class C: public A { };
++class D: public B, public C { }; // gets bogus error - bad synthesis
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Testcase for wrongful generation of copy constructor.
++// Build don't link:
++
++class A { };
++class B: virtual private A { };
++class D: public B { }; // gets bogus error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++struct X {
++ X();
++};
++typedef void (X::*mfp)();
++struct Y {
++ Y();
++ mfp memfp;
++};
++void f()
++{
++ Y *y1, *y2 ;
++ *y1 = *y2; // gets bogus error - failed to synthesize op=
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Bug: generated B::operator= tries to call A::operator=
++
++#pragma implementation
++#line 1 "synth5.h"
++#pragma interface
++
++struct A {
++ virtual A& operator= (const A&) = 0;
++};
++
++struct B: public A {
++};
++#line 5 "synth5.C"
++int main() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: g++ tries to generate an op= for DbmItem and fails.
++// Build don't link:
++
++class RefCount{
++public:
++ RefCount();
++
++private:
++ RefCount& operator=(const RefCount);
++};
++
++class DbmItem: public RefCount{
++public:
++ DbmItem(): RefCount() {};
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Testcase to make sure that synthesized methods are found when needed.
++
++struct B { ~B() { } };
++struct A { B b; };
++
++int main()
++{
++ A a, b (a), c = A();
++ A& (A::*afp)(const A&) = &A::operator=;
++ (a.*afp) (b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: the synthesized constructor for A tries to use the mem-initializer
++// list for the B constructor.
++// Build don't link:
++
++struct A
++{
++ virtual ~A();
++};
++
++struct B
++{
++ B();
++ char* x;
++ A* a;
++};
++
++B::B()
++: x(0), a(new A())
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 6837
++// Bug: anonymous union confuses g++.
++// Build don't link:
++
++struct my_key {
++ my_key(const my_key&);
++ my_key(const char* n);
++};
++
++struct my_node {
++ my_node(my_key&);
++ union {
++ long cnt;
++ my_node* next;
++ };
++ my_key a;
++};
++
++extern my_node n;
++my_node a(n);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/synth.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/synth.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Bug: the synthesized copy constructor for A is not found.
++// Build don't link:
++
++struct A {
++ // A (const A& a): i(a.i) {}
++ int i;
++};
++
++struct B {
++ A a;
++ B (const B& b): a(b.a), j(b.j) { } // gets bogus error -
++ int j;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempargs.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempargs.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempargs.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempargs.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed templates overloading
++template<class T> class Vector { };
++template<class T> struct Sort { static void sort (Vector<typename T::foo> &); };
++template<class T> void Sort<T>::sort (Vector<typename T::foo> &) { }
++struct whee { typedef int foo; };
++
++void f (Vector<int> &vi) { Sort<whee>::sort (vi); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempcons.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempcons.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempcons.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempcons.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Bug: member initializers are allowed where they shouldn't be.
++// Build don't link:
++
++template <class T>
++struct A {
++ int i;
++ Blarg () : i(0) { } // ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempdest.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempdest.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempdest.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempdest.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed templates destructors
++// Example of PR 3308 workaround
++
++template <class T>
++class A
++{
++ T q;
++public:
++ ~A() { (&q)->T::~T(); }
++};
++
++typedef unsigned int ui;
++
++int main()
++{
++ A<ui> *ap = new A<ui>;
++
++ delete ap;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Bug: g++ fails to instantiate operator<<.
++// Build don't run:
++// Special g++ Options: -g
++
++struct ostream {
++ ostream& operator<< (const char *) { return *this; };
++};
++
++template <class T> class foo;
++
++template <class T> ostream& operator<< (ostream& ios, foo<T>&obj) { };
++
++template <class T> class foo {
++ friend ostream& operator<<<>(ostream&, foo<T>&);
++};
++
++int main()
++{
++ ostream cout;
++ foo<int> foo_obj;
++ cout << foo_obj; // causes linker error
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Bug: member operator shadows global template in tsubst.
++// Build don't link:
++
++class ostream;
++
++template <class TP> class smanip {
++public:
++ friend ostream& operator<< <>(ostream &o, const smanip<TP>&m);
++};
++
++template<class TP>
++ostream& operator<<(ostream& o, const smanip<TP>& m)
++{ return o;}
++
++class X
++{
++public:
++ X operator<<(int); // commenting out this line makes it work!
++ void print(ostream& os);
++};
++
++void X::print(ostream& os)
++{
++ smanip<double> smd;
++ os << smd; // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Bug: initializers for static data members of templates don't get run.
++
++template <class T> struct A {
++ static T t;
++};
++
++int foo () { return 1; }
++
++int A<int>::t = foo ();
++
++int main ()
++{
++ return (A<int>::t != 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Testcase for 'this is a type' syntax.
++// Build don't link:
++
++struct B {
++ typedef int A;
++};
++
++template <class T> struct Y {
++ void f() {
++ typename T::A *d;
++ }
++};
++
++template class Y<B>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: g++ fails to actually instantiate templates to the specifications of
++// guiding decls.
++// Special g++ Options: -g -ansi -pedantic-errors -fguiding-decls
++
++template <class T> inline T min (T a, T b) { return a<b?a:b; }
++double min (double, double);
++
++int main () {
++ return (int) min (0, 1.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 4745
++// Bug: g++ gets the constructor and destructor confused because the default
++// parm prevents the two constructor types from satisfying ==.
++
++template <class T> struct A {
++ A(int = 1);
++ ~A();
++};
++
++template <class T> A<T>::A(int) { } // causes compiler abort
++template <class T> A<T>::~A() { }
++
++int main()
++{
++ A<int> a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// PRMS Id: 2139
++// Bug: g++ tries to instantiate the template with types on the function
++// obstack and fails.
++
++template<class T>
++class X {
++public:
++ X(int) { }
++
++ T x;
++};
++
++class A { };
++
++int main()
++{
++ int i;
++ X<int> xi(i);
++ X<double> xd(i);
++
++ X<int (*)(int, void *)> fp0(i);
++ X<int (*)(int, char, double)> fp1(i);
++ X<int (*)(int, double**, void *)> fp2(i);
++
++ X<int (A::*)()> mp0 (i);
++ X<int A::*> mp1 (i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// PRMS Id: 1502
++// Bug: g++ fails to resolve 'gnc' in the call to 'grid'.
++
++template<class T> class foo {
++public:
++ foo() { }
++};
++
++template<class T> class bar : public foo<T> {
++public:
++ bar() : foo<T>() {}
++};
++
++template<class T> class ben : public foo<T> {
++public:
++ ben() : foo<T>() {}
++ void grid(T (*f)(bar<T>&),bar<T>& x,bar<T>& y,bar<T>& param);
++};
++
++template<class T> void ben<T>::grid(T (*f)(bar<T>&),bar<T>& x,bar<T>& y,bar<T>& param) { }
++
++template<class T> T gnc(bar<T>& a)
++{
++ return 0;
++}
++
++int main()
++{
++ ben<double> a;
++ bar<double> x,y,p;
++ a.grid(gnc,x,y,p);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Caught by Booch Components.
++// Bug: g++ tries to instantiate nested enums.
++// Build don't link:
++
++template <class T> struct A
++{
++ struct B { };
++ enum C { c };
++};
++
++template struct A<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// GROUPS passed templates
++// Bug: g++ emits template instances when it shouldn't.
++// Special g++ Options: -g -Wno-deprecated -fexternal-templates
++
++// We mark this XFAIL because we can't test for expected linker errors.
++// If we get an XPASS for this testcase, that's a bug.
++// (OK) excess errors test - XFAIL *-*-*
++
++#pragma implementation "irrelevant_file"
++#line 1 "template18.h"
++#pragma interface
++template <class T> inline T min (T a, T b) { return a<b?a:b; }
++#line 13 "template18.C"
++
++main()
++{
++ min (1, 1); // should produce an undefined symbol error.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Make sure type deduction isn't confused by top-level cv-quals.
++template <class T> T max (const T a, const T b) { return a>b?a:b; }
++
++int main()
++{
++ int a = 0, b = 1;
++ int c = max (a, b);
++ int d = max ((const int)a, (const int)b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 4688
++// Bug: g++ can't deal with templates instantiated within extern "C".
++// Build don't link:
++
++class Gnaf {
++public:
++ virtual int invariant ();
++};
++
++template <class T> class Array : public Gnaf {
++public:
++ virtual int invariant();
++};
++
++extern "C"
++int foo()
++{
++ Array<int> toConv;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Make sure type deduction works for both types of array parameters.
++template <class T> void f (T (&a)[2]) { }
++template <class T> void g (T a[2]) { }
++int main()
++{
++ int a[2] = { 0, 0 };
++ f (a);
++ g (a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Gosh, this works!
++// Build don't link:
++
++template<class T>
++struct A
++{
++ struct B
++ {
++ void bar();
++ };
++ struct C { };
++};
++
++template<class T> void A<T>::B::bar() { }
++
++template class A<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Testcase for proper unification of code involving references.
++// Build don't link:
++
++template<class T>
++struct A
++{
++ void foo();
++};
++
++template<class T> void A<T>::foo() { }
++
++template class A<int&>;
++
++const int& f1 ();
++int& f2 ();
++int f3 ();
++
++template <class T> void g1 (const T&);
++template <class T> void g2 (T&);
++template <class T> void g3 (T);
++
++int main()
++{
++ g1 (f1 ());
++ g1 (f2 ());
++ g1 (f3 ());
++ g2 (f2 ());
++ g3 (f1 ());
++ g3 (f2 ());
++ g3 (f3 ());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Testcase for instantiation with cv-qualified type
++// Build don't link:
++
++template<class T>
++struct A
++{
++ void foo();
++};
++
++template<class T> void A<T>::foo() { }
++
++template class A<const int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Bug: g++ doesn't find the conversion from ostream_withassign to ostream.
++
++#include <iostream.h>
++
++template <class T>
++struct A {
++ T t;
++};
++
++template <class T>
++ostream & operator<< (ostream & os, A<T> & a)
++{
++ os << a.t;
++ return os;
++}
++
++int main ()
++{
++ A<int> a = { 1 };
++ cout << a << endl;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// PRMS Id: 6393
++// Bug: g++ is too lax in considering UPTs to be the same.
++
++template <class R, class T>
++class Bar
++{
++public:
++ R do_bar (T arg);
++};
++
++
++template <class T>
++class Foo
++{
++ T i;
++
++public:
++ void do_foo () {}
++ void do_foo (T const & t) {}
++ void do_foo (Bar<char, T> const & bar); // {} Put the body here and it works
++ void do_foo (Bar<T, T> const & bar); // {} Put the body here and it works
++};
++
++// These definitions don't work
++
++template <class T>
++inline void Foo<T>::
++do_foo (Bar<char, T> const & bar)
++{}
++
++template <class T>
++inline void Foo<T>::
++do_foo (Bar<T, T> const & bar)
++{}
++
++
++int main ()
++{ int i;
++ Bar<char, int> bar1;
++ Bar<int, int> bar2;
++ Foo<int> foo;
++ foo.do_foo();
++ foo.do_foo(i);
++ foo.do_foo(bar1);
++ foo.do_foo(bar2);
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,114 @@
++// PRMS Id: 6275
++// Bug: unification fails for call to find_parameter_in_stack.
++
++#include <stdio.h>
++#include <stdlib.h>
++
++const int max_stack_size = 20;
++
++template <class T>
++class Stack {
++ private:
++ T objects[max_stack_size];
++ int nobjects;
++ public:
++ Stack(): nobjects(0) {}
++ void push(const T&a) {
++ if (nobjects >= max_stack_size) {
++ fprintf(stderr,"Stack: overflow\n");
++ abort();
++ }
++ objects[nobjects++] = a;
++ }
++ T pop() {
++ if (!nobjects) {
++ fprintf(stderr,"Stack: underflow\n");
++ abort();
++ }
++ nobjects -= 1;
++ T result = objects[nobjects];
++ return result;
++ }
++ T top() const {
++ if (!nobjects) {
++ fprintf(stderr,"Stack: underflow\n");
++ abort();
++ }
++ return objects[nobjects - 1];
++ }
++ int n() const { return nobjects; }
++ T operator[](int i) { return objects[i]; }
++};
++
++template <class T>
++class Parameter {
++ T parameter_;
++ int is_set_;
++ int overrides_;
++ public:
++ Parameter(): is_set_(0), overrides_(0) {}
++ void set(const T& a) { parameter_ = a; is_set_ = 1; }
++ void override(int overrides = 1) { overrides_ = overrides; }
++ const T& value() const { return parameter_; }
++ int overrides() const { return overrides_; }
++ int is_set() const { return is_set_; }
++};
++
++template <class T1, class T2>
++T2
++find_parameter_in_stack(Stack<T1>& stack, Parameter<T2>& (T1::*access)())
++{
++ T2 result;
++ int have_result = 0;
++ for (int i=stack.n()-1; i>=0; i--) {
++ if ((stack[i].*access)().is_set()) {
++ if (!have_result || (stack[i].*access)().overrides()) {
++ result = (stack[i].*access)().value();
++ have_result = 1;
++ }
++ }
++ }
++ return result;
++}
++
++class A {
++ private:
++ Parameter<int> a_;
++ public:
++ A() { }
++ Parameter<int>& a() { return a_; }
++};
++
++int
++main(int, char**)
++{
++ Stack<A> A_stack;
++ A a1;
++ A a2;
++ a1.a().set(1);
++ a2.a().set(2);
++ A_stack.push(a1);
++ A_stack.push(a2);
++
++ int val = find_parameter_in_stack(A_stack, &A::a);
++
++ printf("val = %d\n", val);
++ if (val != 2)
++ return 1;
++
++ A_stack.pop();
++ A_stack.pop();
++
++ a1.a().override();
++
++ A_stack.push(a1);
++ A_stack.push(a2);
++
++ val = find_parameter_in_stack(A_stack, &A::a);
++
++ printf("val = %d\n", val);
++ if (val != 1)
++ return 1;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// PRMS Id: 6826
++// Check that unnecessary templates are not instantiated.
++
++template <class T>
++class Test
++{
++ public:
++ void doThiss();
++ void doThat();
++};
++
++template <class T>
++void Test<T>::doThiss()
++{
++ T x;
++
++ x.thiss();
++}
++
++template <class T>
++void Test<T>::doThat()
++{
++ T x;
++
++ x.that();
++}
++
++class A
++{
++ public:
++ void thiss() {};
++};
++
++class B
++{
++ public:
++ void that() {};
++};
++
++int main()
++{
++ Test<A> a;
++ a.doThiss(); // a.doThat() is not well formed, but then
++ // it's not used so needn't be instantiated.
++
++ Test<B> b;
++ b.doThat(); // simillarly b.doThiss();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// PRMS Id: 7179
++
++template <class T>
++class Car{
++public:
++ Car();
++} ;
++
++class Wheels{
++public:
++ Wheels();
++} ;
++
++class Shop
++{
++public:
++ Shop();
++private:
++ Car<Wheels> car ;
++} ;
++
++Wheels::Wheels() {}
++
++Shop::Shop() {}
++
++int main()
++{
++ Shop shop ;
++ return 0 ;
++}
++
++template <class T>
++Car<T>::Car() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// PRMS Id: 9500
++// Build don't link:
++
++template <int S>
++class base
++ {
++public:
++ inline base();
++ };
++
++template <class T>
++class derived : public base<sizeof(T)>
++ {
++public:
++ inline derived();
++ };
++
++template <class T>
++inline derived<T>::derived() : base<sizeof(T)>(){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: instantiation of member templates breaks.
++// Build don't link:
++
++template <class T> struct A {
++ static void f ();
++ void g ();
++};
++
++template <class T> void A<T>::f () { }
++template <class T> void A<T>::g () { }
++
++A<int> a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++template <class T, class U>
++int func(U, T); // ERROR - ref below
++
++template <class T, class U>
++int func(T, U)
++{ // ERROR - ref below
++ return 2;
++}
++
++int main ()
++{
++ func (0, 1); // ERROR - ambiguous
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// PRMS Id: 8569
++
++#include <iostream.h>
++#include <vector>
++
++using std::vector;
++
++class Component {
++ int george;
++ char mabel[128];
++};
++class CopyMe {
++public:
++ CopyMe(){;}
++private:
++ vector<Component> strvec;
++};
++
++class IncludeIt {
++public:
++ IncludeIt() {}
++ ~IncludeIt() {}
++ IncludeIt(const IncludeIt& i) {
++ myStrvec = i.myStrvec;
++ }
++ IncludeIt& operator=(const IncludeIt& i) {
++ myStrvec = i.myStrvec;
++ }
++private:
++ CopyMe myStrvec;
++};
++
++int main(int argc, char**argv) {
++ IncludeIt foo;
++ IncludeIt* bar;
++ exit(0);
++}
++
++template class std::__malloc_alloc_template<0>;
++template class std::__default_alloc_template<false, 0>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Bug: Instantiating A<int> screws with class bindings for B
++// Build don't link:
++
++template <class T> struct A { };
++struct B {
++ typedef int foo;
++ void f ();
++};
++
++void B::f () { A<int> a; foo i; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Test nested enums in templates.
++// Build don't link:
++
++template <class T>
++class A
++{
++public:
++ enum muni {X, Y};
++
++ muni e() { return X; };
++ muni f();
++};
++
++template <class T>
++A<T>::muni A<T>::f() { return X; }
++
++template class A<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++template<class T>
++class Set {
++ public:
++ typedef int (*Compare)(const T&, const T&);
++ static Compare cmp1;
++ static int (*cmp2)(const T&, const T&);
++};
++
++template<class T>
++int gen_cmp(const T& a, const T& b) {
++ if (a<b) return -1;
++ else if (a==b) return 0;
++ else return 1;
++}
++
++template<class T>
++Set<T>::Compare Set<T>::cmp1 = &gen_cmp;
++
++template<class T>
++int (*Set<T>::cmp2)(const T&, const T&) = &gen_cmp;
++
++int main() {
++ Set<int> s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Bug: instantiation of D() corrupts declaration of basis[].
++// Build don't link:
++
++struct B { };
++template <int t>
++struct D : public B
++{
++ D() : B () { }
++};
++
++B const * basis[] =
++{
++ new D<0>,
++ new D<1>,
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++// Testcase for implicit 'typename' and resolution of 'typename's in the
++// current scope.
++
++class base1 {
++public:
++ int bar() const
++ { return 1; }
++};
++
++class base2 {
++public:
++ int bar() const
++ { return 0; }
++};
++
++template<class X>
++struct base_trait {
++ typedef base1 base;
++};
++
++struct base_trait<float> {
++ typedef base2 base;
++};
++
++template<class T>
++class weird : public base_trait<T>::base {
++public:
++ typedef base_trait<T>::base base;
++
++ base f ();
++ int base::* g ();
++
++ int zowee() const
++ { return bar(); }
++};
++
++template <class T>
++weird<T>::base weird<T>::f ()
++{
++ return base();
++}
++
++template <class T>
++int weird<T>::base::* weird<T>::g ()
++{ return 0; }
++
++int main()
++{
++ weird<float> z;
++ return z.zowee() || z.f().bar();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// PRMS Id: 9930
++// Test of -fexternal-templates hackery in new template code
++// Special g++ options: -Wno-deprecated -fexternal-templates
++
++ #pragma implementation "foo.hh"
++ #pragma interface "foo.hh"
++
++ template<class T>
++ class ONE
++ {
++ public:
++ static void func();
++ };
++
++ template<class T>
++ void ONE<T>::func()
++ {
++ }
++
++ class ONE<int>
++ {
++ public:
++ static void func();
++ };
++
++ void ONE<int>::func()
++ {
++ }
++
++int main()
++ {
++ ONE<char>::func();
++ ONE<int>::func();
++
++ return 0;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Special g++ Options: -fguiding-decls
++
++struct A {
++ friend int operator== (const A&, const A&);
++ A (int) { }
++};
++
++template <class T> int
++operator== (const T&, const T&)
++{
++ return 0;
++}
++
++main ()
++{
++ A a (1);
++ return a == 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// PRMS Id: 10283
++// Build don't link:
++
++template <class T> struct B {
++ static void (*p)();
++ static void f ();
++};
++
++template <class T>
++void (*B<T>::p)() = &B<T>::f;
++
++B<int> b;
++
++template <int i> struct A {
++ static const int j = i;
++ int k[j];
++};
++
++A<1> a;
++
++template <int i>
++const int A<i>::j;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// PRMS Id: 4679
++// Bug: g++ doesn't re-instantiate templates after definition is seen.
++
++template <class T> struct A;
++
++A<int> *a;
++
++template <class T> struct A { T t; };
++
++int main()
++{
++ if (a)
++ a->t = 1; // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// PRMS id: 11315
++// Bug: g++ doesn't recognize the copy ctor for Array<long>.
++
++template <class Type>
++class Array {
++public:
++ Array(int sz=12)
++ : ia (new Type[sz]), size(sz) {}
++ ~Array() { delete[] ia;}
++ Array(const Array<long>& r) : size(0) {} // just for testing
++private:
++ Type *ia;
++ int size;
++};
++
++int main(int argc, char *argv[])
++{
++ Array<long> ia; // looping occurs on this line
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// PRMS Id: 11420
++// Bug: Can't handle indirect virtual template base init.
++
++extern "C" int printf (const char *, ...);
++
++template<class T>
++class Vbase {
++ public:
++ Vbase(T i) { printf ("%d\n", i); }
++};
++
++template<class T>
++class D1 : virtual public Vbase<T> {
++ public:
++ D1(T i) : Vbase<T>(i) {}
++};
++
++template<class T>
++class D2 : virtual public Vbase<T> {
++ public:
++ D2(T i) : Vbase<T>(i) {}
++};
++
++template<class T>
++class Most : public D1<T>, public D2<T> {
++ public:
++ Most(T i) : D1<T>(i), D2<T>(i), Vbase<T>(i) {}
++};
++
++int main () {
++ Most<int> x(2);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Testcase for not evaluating template default args if they are
++// never used.
++
++struct X {
++ X(int) { }
++};
++
++template <class T>
++struct A {
++ void f (T t = T()) { }
++};
++
++int main ()
++{
++ A<X> a;
++ X x (1);
++ a.f (x);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template43.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template43.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template43.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template43.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Test matching of partial specializations.
++
++template <int* x, int* y>
++class EQUAL {
++public:
++ enum { value = 0 };
++};
++template <int* x>
++class EQUAL<x,x> {
++public:
++ enum { value = 1 };
++};
++
++int x;
++int y;
++
++int equals_x_x = EQUAL<&x,&x>::value; // expected value: 1
++int equals_x_y = EQUAL<&x,&y>::value; // expected value: 0
++int equals_y_x = EQUAL<&y,&x>::value; // expected value: 0
++int equals_y_y = EQUAL<&y,&y>::value; // expected value: 1
++
++int main ()
++{
++ if (equals_x_x == 1
++ && equals_x_y == 0
++ && equals_y_x == 0
++ && equals_y_y == 1)
++ return 0;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template44.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template44.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template44.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template44.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,61 @@
++#include <stdlib.h>
++#include <string.h>
++
++template <class T>
++class List {
++public:
++ int len;
++ T *array;
++
++ int length() const { return( len ); }
++
++ List() : len( 0 ), array( 0 ) {}
++};
++
++template <class T>
++int AlgoStdCompare(const T* a, const T* b) {
++ if (*a < *b)
++ return -1;
++ else
++ return (*a > *b); // 0 if equal, 1 if greater
++}
++
++int AlgoStdCompare(const char* const* a, const char * const*b)
++{
++ return strcmp(*a,*b);
++}
++
++template <class T>
++void AlgoFixupSort(List< T >* , int, int ) {
++}
++
++template <class T>
++void AlgoSort(int (*compare)(const T *, const T *),
++ void (*fixup)( List<T> *, int first, int last),
++ List< T >* theList, int first, int last) {
++ if (last < 0)
++ last = theList->length()-1;
++
++ qsort(theList->array+first, last-first+1, sizeof(T),
++ (int (*)(const void *, const void *))compare);
++ if (fixup)
++ fixup(theList, first, last);
++}
++
++template <class T>
++void AlgoSort(List< T >* theList, int first = 0, int last = -1) {
++ int (*compare)(const T*, const T*) = AlgoStdCompare;
++ void (*fixup)( List<T> *, int first, int last) = AlgoFixupSort;
++
++ AlgoSort(compare, fixup, theList, first, last);
++}
++
++int
++main()
++{
++ List<const char *> slist;
++ AlgoSort( &slist );
++
++ List<int> ilist;
++ AlgoSort( &ilist );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Bug: g++ tries to instantiate ccList twice, and fails.
++// Build don't link:
++
++template<class T> class ccHandle{ };
++template <class T> class ccList;
++template <class T> class cc_List {
++public:
++ ccList <T> copy ();
++};
++
++template <class T> class ccList : public ccHandle < cc_List <T> > {
++public:
++ ccList (int);
++};
++
++template <class T>
++ccList <T> cc_List<T>::copy (){}
++
++int main (int, char **) {
++ ccList <int> size1();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Bug: g++ fails to compare integer constants properly.
++// Build don't link:
++
++template <int X, int Y>
++struct Matrix {
++ int base [X] [Y];
++};
++
++template <int M,int H,int N>
++Matrix<M,N>& Mul(Matrix<M,N>& Q,Matrix<M,H>& A,Matrix<H,N>& B) {
++ for(int i=0;i<M;i++) {
++ for(int j=0;j<N;j++) {
++ Q.base[i][j]=0;
++ for(int k=0;k<H;k++) {
++ Q.base[i][j]+=A.base[i][k]*B.base[k][j];
++ }
++ }
++ }
++ return Q;
++}
++
++void f ()
++{
++ Matrix<2, 3> q;
++ Matrix<2, 4> a;
++ Matrix<4, 3> b;
++ q = Mul (q, a, b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// PRMS Id: 4656
++// Testcase for use of member pointers in template resolution
++
++template <class T> class A {
++ public:
++ A() : a(1) {}
++ T a;
++};
++
++template <class T>
++int foo (T A<int>::*p)
++{
++ return 0;
++}
++int main()
++{
++ int A<int>::*pm = &A<int>::a; // gets bogus error - failed temp resolution
++ foo (pm);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// PRMS Id: 4826
++// Build don't link:
++
++class A;
++template <class T> void f(const T&, const T&);
++
++void g (const A& a, A& b) {
++ f (a, b); // gets bogus error - failed unification
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// PRMS Id: 4827
++// Build don't link:
++
++class A;
++template <class T> int f (const T&, const A *);
++
++int g (const int& a)
++{
++ return f (a, (A *)0); // gets bogus error - failed unification
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/template9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/template9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// PRMS Id: 4864
++// Bug: g++ can't deal with a guiding declaration which comes before the
++// template.
++// Build don't link:
++
++void f (const int&, const int&);
++template <class T> void f (const T&, const T&) { }
++
++void g (int a)
++{
++ f (a,a); // gets bogus error - two identical candidates
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++class X // Indentation has been done so to see the similarities.
++{
++public:
++ X() {} // ERROR - referenced below
++ X(X& x) {x.i=7;} // ERROR - Both functions modify the
++ void bar(X& x) {x.i=7;} // ERROR - reference parameter x.
++ int i;
++};
++
++X foo() { X x; return x; }
++
++int main()
++{
++ X x(foo()); // ERROR - Compiler doesn't warn about temporary reference.
++ x.bar(foo()); // ERROR - The same mistake is warned about in this case.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Bug: the temporary returned from f is elided, causing a to be constructed
++// twice but only destroyed once.
++
++extern "C" int printf (const char *, ...);
++
++int c,d;
++
++struct A {
++ A (int) { c++; }
++ ~A () { d++; }
++ A (const A&) { c++; }
++ int i;
++};
++
++A f ()
++{ return 1; }
++
++int main ()
++{
++ {
++ A a (1);
++ a = f ();
++ }
++ printf ("%d %d\n", c, d);
++ return c != d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Bug: g++ initializes both B::i and B::j before destroying any temps.
++
++extern "C" int printf (const char *, ...);
++
++int c = 0;
++int d = 0;
++int r = 0;
++
++struct A {
++ A() { if (c != d) r = 1; ++c; }
++ A(const A&); // declare so g++ returns A on the stack
++ ~A() { ++d; }
++ operator int () { return 0; }
++};
++
++A foo ()
++{
++ return A();
++}
++
++struct B {
++ int i;
++ int j;
++ B(): i(foo()), j(foo()) { }
++};
++
++int main()
++{
++ B b;
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 6604
++// Bug: Scoped constructor call is not properly recognized as a functional cast
++
++int c;
++
++struct A {
++ A() { ++c; }
++ ~A() { --c; }
++ operator int () { return 1; }
++};
++
++int main ()
++{
++ A::A();
++ return c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Bug: the temporary from the default parameter to f2 is reused.
++// Build don't link:
++
++struct A {};
++int f2 (int i, const A& ar = A());
++void f (int i, int j = f2(1));
++void g () { f (1); }
++void h () { f (1); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// PRMS ID: 7304
++
++struct V {
++ int n;
++ V() : n(0) { }
++ V(int x) : n(x) { }
++};
++
++V baz(const V &x)
++{
++ return x;
++}
++
++int bar(V v1, V v2, V v3)
++{
++ return v1.n;
++}
++
++struct A {
++ A(): n(7) { }
++ int foo();
++ V n;
++};
++
++int A::foo()
++{
++ V v1, v2;
++ return bar(n, baz(v1), v2);
++}
++
++int main()
++{
++ A a;
++ return (a.foo() != 7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Test for proper handling of temporaries in ?: exprs.
++
++extern "C" int printf (const char *, ...);
++int c = 0, d = 0;
++
++class A {
++public:
++ A() { ++c; }
++ A(const A&) { ++c; }
++ ~A() { ++d; }
++};
++
++A f (const A& a)
++{
++ return (c ? A() : A());
++}
++
++int main()
++{
++ {
++ f (c ? A() : A());
++ }
++ printf ("%d %d\n", c, d);
++ return c != d || c != 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/temporary.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/temporary.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// From: bruno@isoft.com.ar (Bruno R. Depascale)
++// Subject: No destructor bug
++// Date: Mon, 14 Feb 1994 12:49:45 -0300 (Arg)
++
++// Bug: temporaries created with constructor notation aren't destroyed.
++
++int count = 0;
++
++class A {
++public:
++ A() { ++count; }
++ ~A() { --count; }
++};
++
++int main()
++{
++ A();
++ return count;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempover.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempover.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempover.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempover.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed templates overloading
++#define TEMPL template <class T>
++
++class B {};
++
++TEMPL class A : virtual public B {
++ public:
++ A(int);
++};
++
++TEMPL A<T>::A(int){}
++
++A<double> a(1);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempparse.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempparse.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempparse.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempparse.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++/*
++ PRMS Id: 3631
++ Bug is: g++ mangles template class names in a way that it won't accept,
++ and then tries to feed them to itself.
++*/
++// Build don't link:
++
++template<class T>
++struct A {
++ A();
++};
++
++template<class T>
++struct B : A<T> {
++ B();
++}; // gets bogus error - B<C<char>>
++
++template<class T>
++struct C {
++ C();
++};
++
++template<class T>
++struct D {
++ D();
++ B<C<T> > p_f;
++};
++
++typedef D<char> Dummy;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempsub.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempsub.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tempsub.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tempsub.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Distillation of crash1.C problem (PR 3633)
++// Build don't link:
++
++template<class P>
++class A
++{
++ P p;
++};
++
++template<class Q>
++class B
++{
++ A<Q> a; // bogus error - temp parm name propagating
++};
++
++template<class R>
++class C
++{
++ B<R> b;
++};
++
++template<class S>
++class D
++{
++ S s;
++};
++
++C< D<int> > c;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/this.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/this.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/this.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/this.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// PRMS Id: 5190
++// Bug: g++ fails to build up a const reference to `this'.
++// Build don't link:
++
++class X
++{
++public:
++ void member ();
++};
++
++void print (const X* const &);
++
++void X::member ()
++{
++ print (this);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/thunk1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/thunk1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/thunk1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/thunk1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// Test that non-variadic function calls using thunks work right.
++// Special g++ Options: -fvtable-thunks
++
++struct A {
++ void* p;
++ A (void* q): p (q) { }
++ A (const A& a): p (a.p) { }
++};
++
++class CBase {
++public:
++ void BaseFunc();
++};
++
++class MMixin {
++public:
++ virtual A MixinFunc(int arg, A arg2) = 0;
++};
++
++class CExample : public CBase, public MMixin {
++public:
++ A MixinFunc(int arg, A arg2);
++};
++
++void CBase::BaseFunc()
++{
++}
++
++A CExample::MixinFunc(int arg, A arg2)
++{
++ if (arg != 1 || arg2.p != 0)
++ return 0;
++ return this;
++}
++
++void* test(MMixin& anExample)
++{
++ return anExample.MixinFunc(1,A(0)).p;
++}
++
++main ()
++{
++ CExample c;
++
++ if (test(c) != &c)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/thunk2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/thunk2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/thunk2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/thunk2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// Test that non-variadic function calls using thunks and PIC work right.
++// Skip if not native
++// Special g++ Options: -fvtable-thunks -fPIC
++// excess errors test - XFAIL m68k-motorola-sysv m88k-motorola-sysv3
++
++struct A {
++ void* p;
++ A (void* q): p (q) { }
++ A (const A& a): p (a.p) { }
++};
++
++class CBase {
++public:
++ void BaseFunc();
++};
++
++class MMixin {
++public:
++ virtual A MixinFunc(int arg, A arg2) = 0;
++};
++
++class CExample : public CBase, public MMixin {
++public:
++ A MixinFunc(int arg, A arg2);
++};
++
++void CBase::BaseFunc()
++{
++}
++
++A CExample::MixinFunc(int arg, A arg2)
++{
++ if (arg != 1 || arg2.p != 0)
++ return 0;
++ return this;
++}
++
++void* test(MMixin& anExample)
++{
++ return anExample.MixinFunc(1,A(0)).p;
++}
++
++main ()
++{
++ CExample c;
++
++ if (test(c) != &c)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/thunk3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/thunk3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/thunk3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/thunk3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,59 @@
++// Test that variadic function calls using thunks work right.
++// Note that this will break on any target that uses the generic thunk
++// support, because it doesn't support variadic functions.
++
++// Special g++ Options: -fvtable-thunks
++// excess errors test - XFAIL mips*-*-* rs6000-*-* powerpc-*-eabi m68k-*-coff m68k-motorola-sysv m88k-motorola-sysv3
++
++#include <stdarg.h>
++
++struct A {
++ void* p;
++ A (void* q): p (q) { }
++ A (const A& a): p (a.p) { }
++};
++
++class CBase {
++public:
++ void BaseFunc();
++};
++
++class MMixin {
++public:
++ virtual A MixinFunc(int arg, ...) = 0;
++};
++
++class CExample : public CBase, public MMixin {
++public:
++ A MixinFunc(int arg, ...);
++};
++
++void CBase::BaseFunc()
++{
++}
++
++A CExample::MixinFunc(int arg, ...)
++{
++ va_list ap;
++ va_start (ap, arg);
++
++ if (arg != 1 || va_arg (ap, int) != 2 || va_arg (ap, int) != 3
++ || va_arg (ap, int) != 4 || va_arg (ap, int) != 5
++ || va_arg (ap, int) != 6 || va_arg (ap, int) != 7
++ || va_arg (ap, int) != 8 || va_arg (ap, int) != 9)
++ return 0;
++ return this;
++}
++
++void* test(MMixin& anExample)
++{
++ return anExample.MixinFunc(1,2,3,4,5,6,7,8,9).p;
++}
++
++main ()
++{
++ CExample c;
++
++ if (test(c) != &c)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Testcase for use of template parms as types for other template parms.
++
++template <class T, T t>
++class A {
++ T a;
++public:
++ A(): a(t) {}
++
++ operator T () { return a; }
++};
++
++template <class S, S s>
++class B {
++ A<S,s> a;
++public:
++ B(A<S,s>& b): a(b) {}
++
++ operator S () { return a*20; }
++};
++
++main()
++{
++ A<int, 5> a;
++ B<int, 5> b(a);
++
++ if (b * a == 500)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// No bug; making sure my fix for tredecl.C doesn't break other cases
++// Build don't link:
++
++template<class T> struct Foo { Foo<T> * me() { return this; } };
++Foo<int> i;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// PRMS Id: 4679
++// Bug: redeclaration of templates erases the definition.
++// Build don't link:
++
++template <class T> class Foo { public: void h(); };
++template <class T> class Foo;
++
++void g()
++{
++ Foo<int> f;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// It is illegal to use the name of a class template for anything else,
++// including another class template.
++
++template <class T> class A { }; // ERROR -
++template <class U, class V> class A { }; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/tredecl.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/tredecl.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Bug: Foo<Bar> *p semi-instantiates Foo<Bar> in local scope, so
++// when Foo<Bar> f tries to instantiate it later, it only finds the partial
++// instantiation from before.
++//
++// No PR; distilled from James Clark's SGML project.
++//
++// Build don't link:
++
++class Bar { };
++
++template<class T> class Foo;
++
++Foo<Bar> *p;
++
++template<class T> class Foo { };
++
++Foo<Bar> f; // gets bogus error - hosed binding levels
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/trivial.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/trivial.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/trivial.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/trivial.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++// PRMS Id: 3665
++// Build don't link:
++
++//-------------------------------------------------------------
++// Referential declaration within class
++//
++// Imbeded below is the invocation of the compiler and the error
++// message
++//
++// This compiles successfully with both the xlC and CFRONT compilers
++// This was reviewed with Clem Dickey and we agree that it appears to
++// be a Cygnus compiler problem.
++//-------------------------------------------------------------
++/*
++$ make bug.reference.o
++ /usr/p3/bin/i960-vxworks-g++ `getsrc bug.reference.C` -I. -Iinc1 -Iinc2
++ -I/vw5.0.3/h -I/vw5.0.3/h/i960 -I/usr/p3/lib/gcc-lib/i960-vxworks/cygnus-2.3.3
++/include -I/usr/p3/lib/gcc-lib/i960-vxworks/cygnus-2.3.3-930417/include -I/usr/p
++3/lib/i960-vxworks/include -I/usr/p3/i960-vxworks/include -c -DCPU_FAMILY=I960
++-DCPU=I960CA -mca -mold-align -g3 -O1 -DASSERT_ON -nostdinc -nostdinc++ -MD
++./bug.reference.C: In method `class1::class1 (long unsigned int, long unsigned i
++nt **&)':
++./bug.reference.C:43: cannot convert type `long unsigned int **'
++./bug.reference.C:43: to type `long unsigned int *[]&'
++make: 1254-004 The error code from the last command is 1.
++*/
++
++// typedefs
++typedef unsigned long u32;
++typedef u32 *ul[16];
++
++// class defs
++class class1 {
++ u32 var1;
++ class1(const class1 &); // Copy constructor
++ class1& operator=(const class1 &); // operator= member function
++public:
++ class1(u32, ul&);
++ ul &ulref;
++ ~class1() {}
++};
++
++
++// member function defs
++class1::class1(u32 u, ul &l) : var1(u), ulref(l)
++{}
++
++/* ===========================================================================
++Note: The following is a "work around" that allows the successful compilation.
++
++
++// typedefs
++typedef unsigned long u32;
++typedef u32 *ul[16];
++
++// class defs
++class class1 {
++ u32 var1;
++ class1(const class1 &); // Copy constructor
++ class1& operator=(const class1 &); // operator= member function
++public:
++ class1(u32, ul*);
++ ul &ulref;
++ ~class1() {}
++};
++
++
++// member function defs
++class1::class1(u32 u, ul *l) : var1(u), ulref(*l)
++{}
++============================================================================*/
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typeck.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typeck.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typeck.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typeck.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Bug: g++ fails to catch incompatibilities in the parameter lists when
++// assigning.
++// Build don't link:
++
++typedef struct S *type_p;
++typedef struct S const *ctype_p;
++
++typedef ctype_p (*PF) (int);
++
++type_p callee (type_p arg) { return 0; }
++
++void foobar ()
++{
++ static PF p = callee; // ERROR -
++
++ p = callee; // ERROR -
++}
++
++PF pp = callee; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typedef2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typedef2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typedef2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typedef2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// PRMS Id: 5367
++// Bug: the nested name of C::func gets hosed.
++
++struct C {
++ typedef int func(int *, int *);
++};
++
++int
++main()
++{
++ C::func *handler;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typedef3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typedef3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typedef3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typedef3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Test that inheriting from a type typedefed to itself works.
++// Build don't link:
++
++typedef struct class1 {
++ class1& operator=(const class1&);
++} class1;
++
++class class2 : public class1 { };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typedef.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typedef.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typedef.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typedef.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// PRMS Id: 4687
++// Bug: g++ misinterprets typedefs of function type in class scope.
++// Build don't link:
++
++struct A {
++ typedef int F();
++ F *fp;
++ void* g() { return fp; } // gets bogus error - typing
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typeid1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typeid1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typeid1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typeid1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++#include <typeinfo>
++#include <iostream.h>
++
++struct foo { double f(int); };
++
++int main() {
++ double f (int);
++ const std::type_info &r = typeid (f);
++ cout << typeid(f).name() << endl;
++ cout << typeid(foo::f).name() << endl;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typeid2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typeid2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/typeid2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/typeid2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// PRMS Id: 11596
++
++#include <typeinfo>
++extern "C" int printf (const char *, ...);
++
++class Chicken
++{
++public:
++ int eggs_per_day;
++};
++
++template <class Bird>
++class Flock
++{
++public:
++ Bird * flock_head;
++ int head_count;
++ void print_self() {
++ printf ("A flock of %d %ss\n", head_count, typeid (Bird).name ());
++ printf ("A flock of %d %ss\n", head_count, typeid (*flock_head).name ());
++ }
++};
++
++int main()
++{
++ Flock<Chicken> x;
++ printf ("%s\n", typeid(x).name());
++ x.head_count = 42;
++ x.print_self();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/union.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/union.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/union.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/union.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Bug: g++ doesn't insert anon union members into class scope.
++// Breaks groff.
++// Build don't link:
++
++struct A {
++ union {
++ int i;
++ };
++
++ void foo () { i = 1; } // gets bogus error -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/vecdel.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/vecdel.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/vecdel.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/vecdel.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++__SIZE_TYPE__ newsize = 0;
++__SIZE_TYPE__ delsize = 0;
++
++struct A {
++ int i;
++ void * operator new [] (__SIZE_TYPE__ i)
++ { newsize = i; return ::operator new [](i); }
++ void operator delete [] (void *p, __SIZE_TYPE__ i)
++ { delsize = i; ::operator delete [](p); }
++};
++
++int main()
++{
++ A* ap = new A [2];
++ delete [] ap;
++ if (!newsize || newsize != delsize)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/virtual2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/virtual2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/virtual2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/virtual2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++struct A {
++ virtual A* f () { return this; }
++};
++
++struct B: public A {
++ virtual B* f () { return 0; }
++};
++
++int main ()
++{
++ A* ap = new B;
++ return (ap->f () != 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/virtual.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/virtual.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/virtual.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/virtual.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// From: chw@bellcore.com (Charlie Woloszynski,MRE 2J-278,8295228,,27143)
++// Newsgroups: gnu.g++.bug
++// Subject: gcc-2.5.5 bug in multiple inheritance and pure virtual functions
++// Date: 25 Jan 1994 23:41:36 -0500
++
++// Bug: g++ fails to notice definitions of abstract virtuals.
++// Build don't link:
++
++class A
++{
++public:
++ virtual void a1() = 0;
++ virtual void a2() = 0;
++};
++
++class B
++{
++public:
++ virtual void b1() = 0;
++ virtual void b2() = 0;
++};
++
++
++class C: public A, public B
++{
++public:
++ virtual void a2() {};
++ virtual void b2() {};
++};
++
++class D : public C
++{
++public:
++ virtual void a1() {};
++ virtual void b1() {};
++};
++
++int main()
++{
++ D d; // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Don't warn about these comparisons.
++// Build don't link:
++// Special g++ Options: -W -Wall
++
++struct A {
++ unsigned int b : 28;
++};
++
++int f (int i, unsigned char u, A a, unsigned long ul)
++{
++ if ((u & 0x10) == 0)
++ return 1;
++ if (i == 0U)
++ return 1;
++ if (a.b > ul)
++ return 1;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Bug: g++ protests that foo was never defined.
++// Build don't link:
++
++static void foo ();
++static void foo ();
++static void foo () { }
++void bar () { foo(); } // gets bogus error -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// g++ ought to warn about casting a base pointer to a derived reference.
++// Build don't link:
++
++struct A {
++ virtual int f () = 0;
++};
++
++struct B: public A { int f () { } };
++
++int main()
++{
++ B* bp;
++ A& ar = (A&)bp; // WARNING -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Bug: overloading of 'A' for template causes bogus shadowing warnings.
++// Special g++ Options: -Wshadow
++// Build don't link:
++
++template<class T>
++class A
++{
++ public:
++ virtual ~A() {}
++};
++
++template class A<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Bug: a virtual function with the same name in an unrelated class will
++// cause a bogus overloading warning.
++// Special g++ Options: -Woverloaded-virtual
++// Build don't link:
++
++struct A {
++ virtual void foo ();
++};
++
++struct B {
++ virtual void bar ();
++};
++
++struct C: public A {
++ virtual void bar ();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// PRMS Id: 5135
++// Bug: g++ complains that the result of the new expression is not used.
++// Special g++ Options: -Wall
++
++extern "C" int printf (const char *, ...);
++inline void * operator new (__SIZE_TYPE__, void *p) { return p; }
++
++class foo {
++public:
++ foo() : a(42) {};
++ int a;
++};
++
++int
++main()
++{
++ char buffer[1024];
++
++ new (buffer) foo;
++
++ foo* pY = (foo *)buffer;
++
++ return pY->a != 42;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Special g++ Options: -Wunused
++// Build don't link:
++
++struct A {
++ int i:8;
++ virtual ~A() {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// PRMS Id: 5481
++// Special g++ Options: -Wunused
++// Build don't link:
++
++struct A { };
++static A a = A();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++struct A {
++ A();
++ ~A();
++};
++
++struct B {
++ B (const A&);
++ ~B ();
++};
++
++const B& f ()
++{
++ A a;
++ return a; // WARNING - returning reference to temporary
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.jason/warning9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.jason/warning9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Special g++ Options: -Wsynth
++
++struct A {
++ operator int ();
++ A& operator= (int); // WARNING - not used below
++};
++
++main()
++{
++ A a, b;
++
++ a = b; // WARNING - uses synthesized op=
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Build don't link:
++// GROUPS passed access
++// access file
++// Message-Id: <9211281852.AA24557@cove.cis.ufl.edu>
++// From: Robert Forsman <thoth@cove.cis.ufl.edu>
++// Subject: method access bug in gcc-2.3.1 on a sparc-sun-sunos4.1.2
++// Date: Sat, 28 Nov 92 13:52:14 EST
++
++extern "C" {
++ int atoi(const char*);
++}
++
++struct thingus;
++
++class foo {
++public:
++ static const foo alpha;
++ static const foo beta;
++
++private:
++ int i;
++ foo(thingus * s);
++public:
++ foo() {i=0;}
++};
++
++struct thingus {
++ int i;
++};
++
++static thingus blah, blah2;
++
++const foo foo::alpha(&blah);
++const foo foo::beta(&blah2);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed access
++// access file
++// Message-Id: <9306301534.AA05072@sparc1.cnm.us.es>
++// From: juando@cnm.us.es (Juan D. Martin)
++// Subject: Compiler lets access to private constructor in template.
++// Date: Wed, 30 Jun 93 17:34:10 +0200
++
++template <class T> class Foo
++{
++private:
++ friend class Bar; // To avoid warning.
++ Foo(const T &v) {}; // ERROR - private
++};
++
++
++int main()
++{
++ Foo<int>(1);// ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed access
++// unsorted.2 file
++// Date: Sat, 6 Jun 1992 18:23:03 -0400
++// From: Brendan Kehoe <brendan@cs.widener.edu>
++// Message-Id: <199206062223.AA22653@betty.cs.widener.edu>
++// Subject: bug with access control to member functions
++
++ class X {
++ void g (int); // ERROR - is private
++ public:
++ void g (double);
++ };
++
++ class Y : public X { void f() { g (1); } };// ERROR -
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// GROUPS passed access
++// (Message bugs/access:3)
++// From: jamshid@ses.com (Jamshid Afshar)
++// Date: Wed, 2 Mar 94 18:24:22 CST
++// Subject: g++ 2.5.5 doesn't warn about inaccessible virtual base ctor
++// Message-ID: <9403030024.AA04534@ses.com>
++
++class ForceLeafSterile {
++ friend class Sterile;
++ ForceLeafSterile() {} // ERROR -
++};
++
++class Sterile : private virtual ForceLeafSterile {
++public:
++ Sterile() {}
++ Sterile(const char* /*blah*/) {}
++};
++
++class Illegitimate : public Sterile {
++public:
++ Illegitimate() {} // ERROR - can't access virtual base deflt ctor
++ Illegitimate(const char* /*blah*/)
++ : ForceLeafSterile() {} // ERROR - can't access default ctor
++ Illegitimate(const Illegitimate&)
++ {} // ERROR - can't access default ctor
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/access5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/access5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed access
++// access file
++// From: Jeffrey C. Gealow <jgealow@mtl.mit.edu>
++// Date: Thu, 18 Feb 93 10:22:23 -0500
++// Subject: nested class access control bug
++// Message-ID: <9302181522.AA29209@mtl.mit.edu>
++
++
++class enclose {
++public:
++ class nested_public { int x; };
++protected:
++ class nested_protected { int x; };
++private:
++ class nested_private { int x; };
++};
++
++class derived : public enclose {
++ nested_public obj1; // ok
++ nested_protected obj2; // ok
++ nested_private obj3; // error// ERROR - .* , XFAIL *-*-*
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed arg-matching
++// arg-matching file
++// From: Terry Lee <terry@uivlsisd.csl.uiuc.edu>
++// Date: Sat, 14 May 1994 02:46:15 -0500
++// Subject: g++ 2.5.8 template<const void*> bug
++// Message-ID: <199405140746.AA03993@uivlsisd.csl.uiuc.edu>
++
++template<class T>
++class A {
++public:
++ void func(const T& val) { }
++};
++
++int main()
++{
++ A<const void*> a;
++ int* ptr = 0;
++ a.func(ptr);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed arg-matching
++// From: gustavo@cpqd.br (Gustavo Chaves)
++// Date: Wed, 25 May 94 09:38:00 EST
++// Subject: problem with user defined conversions in initialization
++// Message-ID: <9405251238.AA19815@moon.cpqd.br>
++
++struct String { String(const char*); };
++
++struct Ack { Ack(String); };
++
++struct S { void method(Ack); }; // ERROR - referenced below
++
++void function(Ack);
++
++int
++foo(S *o)
++{ // Neither call has a usable constructor for conversions of char[5] to Ack.
++ function("adsf");// ERROR -
++ o->method("adsf");// ERROR -
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// GROUPS passed arg-matching
++// arg-matching file
++// Subject: argument matching depending on the def order
++// From: kondo@akane.mech.ibaraki.ac.jp
++// Date: Fri, 04 Sep 92 17:41:05 JST
++
++#include <iostream.h>
++// check the order of declarations
++class A {
++public:
++ void f(double* p) { cout << "A(double*)\n"; } // ERROR - candidate
++ void f(int* p) { cout << "A(int*)\n"; } // ERROR - candidate
++};
++
++class B {
++public:
++ void f(int* p) { cout << "B(int*)\n"; } // ERROR - candidate
++ void f(double* p) { cout << "B(double*)\n"; } // ERROR - candidate
++};
++
++int main()
++{
++ A a;
++ B b;
++
++ a.f(0);// ERROR - .*
++ b.f(0);// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed arg-matching
++// arg-matching file
++// Message-Id: <199303032114.AA03574@kolvir.Boulder.ParcPlace.COM>
++// From: Warner Losh <imp@boulder.parcplace.com>
++// Subject: Overloading bug in g++ 2.3.3 (sparc) compiled by GNU C version 2.3.3
++// Date: Wed, 03 Mar 1993 14:14:02 MST
++
++class c1 { };
++
++typedef void (*fnp)(void *);
++typedef void (c1::*memfnp)(void *);
++extern void fn1( fnp );
++extern void fn1( c1*, memfnp );
++
++void f3(void *) { }
++
++void fn2()
++{
++ fn1((fnp) &f3); // Everybody likes this
++ fn1(&f3); // g++ complains here line 13
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed arg-matching
++typedef void* Ptr;
++
++
++void func(int, const Ptr& p);
++
++template <class T> void func(T, const Ptr& p);
++
++
++Ptr& return_ref();
++
++
++int main()
++{
++ char* x;
++
++ func(x,return_ref()); // bug:
++ // call of func(int, const Ptr&)
++ // instead of func(char*,const Ptr&)
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed arg-matching
++// arg-matching file
++// Message-Id: <14t4tyk@rpi.edu>
++// From: jorgej@colossus.cs.rpi.edu (Joaquim Jorge)
++// Subject: g++ 2.3.3 Doesn't check function types in initializer lists ?
++// Date: Tue, 9 Mar 1993 21:39:08 GMT
++
++typedef void (*FuncPtr)(int a, float b);
++class Amazing { int a; int b; int c; };
++
++extern void *Wrong1(char *a, int *b);
++extern void *Wrong2(Amazing a, int *b);
++extern void *Wrong3(char *a, Amazing *b);
++extern void Wrong4(char *a, int *b);
++extern Amazing Wrong5(char *a, int *b);
++
++FuncPtr p = &Wrong5;// ERROR - .*
++FuncPtr func_ptr_array[] = { &Wrong1, &Wrong2, &Wrong3, &Wrong4, &Wrong5, 0 };// ERROR - .*
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed arg-matching
++extern double pow(double,int*);
++
++extern "C" {
++ extern int printf(char*,...);
++ extern double pow(double, double);
++}
++
++int main()
++{
++ if (pow (2.0, 3.0) != 8.0)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed arg-matching
++// arg-matching file
++// Message-Id: <9305032310.AA03900@malachite.bbn.com>
++// From: Dan Franklin <dan@diamond.bbn.com>
++// Subject: overloaded function bug
++// Date: Mon, 3 May 93 19:10:10 EDT
++
++
++ typedef int (*fnp)(int, void*);
++ void dispatch_insert(int, int, fnp, void* = 0);
++ void dispatch_insert(int, int, long*, char*);
++ typedef void (*InsertFunP)(int, int, fnp, void*);
++ extern void f(InsertFunP);
++ void g() { f(dispatch_insert); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// GROUPS passed arg-matching
++// arg-matching file
++// Message-Id: <9305041759.AA04913@malachite.bbn.com>
++// From: Dan Franklin <dan@diamond.bbn.com>
++// Subject: overloaded function resolved incorrectly
++// Date: Tue, 4 May 93 13:59:18 EDT
++
++#include <stdio.h>
++
++// Given the following overloaded function definitions
++
++void ovf(unsigned long, short, short) { printf ("PASS\n"); }
++void ovf( int, short, unsigned long) { printf ("FAIL\n"); }
++
++// and the call
++//
++// ovf(unsigned long, unsigned int, unsigned int)
++//
++// it seems to me (and to cfront) that this should resolve to ovf #1 above,
++// but g++ resolves it to ovf #2. Resolving to ovf #1 requires two conversions
++// (unsigned int => short) while resolving to ovf #2 takes two conversions
++// (unsigned long => int, unsigned int => short) and a promotion
++// (unsigned int => unsigned long).
++
++int main(int, char**)
++{
++ unsigned long pixmap = 0;
++ unsigned int x = 0;
++ unsigned int y = 0;
++
++ ovf(pixmap, x, y);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// GROUPS passed arg-matching
++// arg-matching file
++// Message-Id: <9307081747.AA14030@tnt>
++// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin)
++// Subject: g++ bug
++// Date: Thu, 8 Jul 93 11:47:28 MDT
++
++
++#include <iostream.h>
++#include <stdio.h>
++
++// With this declaration the program will not link.
++template <class Type> ostream & save(ostream & os, Type T);
++
++ template <class Type> ostream &
++save(ostream & os, Type T) {
++ return os << T;
++} // save
++
++ int
++main() {
++ int i = 10;
++ save((ostream &)cout, i) << endl;
++ short int s = 5;
++ save((ostream &)cout, s) << endl;
++ printf ("PASS\n");
++} // main
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arg9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arg9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// Build don't link:
++// GROUPS passed arg-matching
++// arg-matching file
++// Message-Id: <199405132049.QAA06835@elan.cs.UMD.EDU>
++// Subject: Bug in g++ 2.4.5 and 2.5.8
++// Date: Fri, 13 May 1994 16:49:22 -0400
++// From: Evan Rosser <ejr@cs.umd.edu>
++
++#include <assert.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++class TupleIterator {
++public:
++ TupleIterator(int *tpl);
++ int& operator*();
++ int live() const;
++// The compile fails with "no post-increment operator for type" at "TI++"
++// below.
++// It succeeds with the same declarations if set_position does not take an int.
++// This occurs with G++ 2.4.5 and 2.5.8.
++// Sun CC works OK with either case.
++ void operator++(int);
++ void set_position(int);
++private:
++};
++
++int main() {
++
++int t[5];
++t[1] = 1; t[2] = 2;t[3] = 3;t[4] = 4;
++TupleIterator TI(t);
++
++ while(TI.live()){
++ printf("%d", *TI);
++ TI++;
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <1oab2hINN7m@gap.caltech.edu>
++// From: tll@cco.caltech.edu (Tal Lewis Lancaster)
++// Subject: ARM Page 65
++// Date: 18 Mar 1993 17:21:21 GMT
++
++int(*p)[10]=new int[20][10];
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <9302181055.AA12522@slsvitt>
++// From: dcb@us-es.sel.de (David Binderman 3841)
++// Subject: Page 81 of the ARM
++// Date: Thu, 18 Feb 93 11:55:15 +0100
++
++
++int main() {
++ int x[ 10, 11]; // ERROR - .*
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// From: belley@cae.ca (Benoit Belley 3218)
++// Subject: Bad access control with private constructor and derivation
++// Date: Fri, 28 May 1993 12:39:57 -0400 (EDT)
++
++#include <iostream.h>
++
++class X
++{
++public:
++ void f();
++
++private:
++ X();
++};
++
++class Y : public X
++{
++public:
++ Y();
++};
++
++X::X()
++{// ERROR - .*
++ cout << "X::X()" << endl;
++}
++
++void X::f()
++{
++ cout << "X::f()" << endl;
++}
++
++Y::Y()
++{// ERROR - within this
++ cout << "Y::Y()" << endl;
++}
++
++
++int main()
++{
++ Y y;
++ y.f();
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// GROUPS passed ARM-compliance
++#include <stdio.h>
++#include <stdlib.h>
++
++inline void *operator new(size_t, void *place) { return place; }
++
++int main()
++{
++ int* p = (int*) malloc(sizeof(int));
++ (void) new (p) int(1);
++ p->int::~int();
++ free(p);
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// unsorted.2 file
++// Message-Id: <BpBu19.GrF@math.waterloo.edu>
++// Date: Thu, 4 Jun 1992 15:07:56 GMT
++// Subject: access control
++// From: gjditchf@plg.waterloo.edu (Glen Ditchfield)
++
++
++class X {
++ private:
++ enum E1 {a1, b1}; // ERROR - private
++ public:
++ enum E2 {a2, b2};
++ };
++
++void h(X* p) {
++ X::E2 e2;
++ int x2 = X::a2;
++
++ X::E1 e1; // Should be rejected, but isn't.// ERROR - .* , XFAIL *-*-*
++ int x1 = X::a1; // ERROR - Should be rejected, and is.
++ }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// GROUPS passed ARM-compliance
++// arm file
++// From: Johan Bengtsson <jbn@lulea.trab.se>
++// Date: Thu, 21 Oct 93 16:10:25 +0100
++// Subject: gcc 2.4.5 initializes base classes in mem-initializer order
++// Message-ID: <9310211510.AA14943@holden.lulea.trab.se>
++
++#include <stdio.h>
++
++int state = 0;
++
++class A { public:
++ A() {
++ if (state == 0)
++ state = 1;
++ else {
++ printf ("FAIL\n");
++ exit (1);
++ }
++ }
++};
++
++class B { public:
++ B() {
++ if (state == 1)
++ state = 2;
++ else {
++ printf ("FAIL\n");
++ exit (1);
++ }
++ }
++};
++
++class AB : public A, public B { public:
++ AB() : B(), A() {
++ if (state == 2)
++ state = 3;
++ else {
++ printf ("FAIL\n");
++ exit (1);
++ }
++ }
++};
++
++int main()
++{
++ AB ab;
++ if (state == 3)
++ printf("PASS\n");
++ else
++ printf("FAIL\n");
++ exit (state != 3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -ansi -Wall -pedantic
++// GROUPS passed ARM-compliance
++// arm file
++// From: Olaf.Weber@cwi.nl
++// Date: Fri, 2 Dec 1994 09:14:25 +0100
++// Subject: Omitting & when obtaining a pointer to member function.
++// Message-ID: <9412020814.AA00604=olaf@havik.cwi.nl>
++
++struct C {
++ void foo();
++};
++
++void (C::*pfm)() = C::foo;// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <9211191128.AA14718@us-es.sel.de>
++// From: dcb@us-es.sel.de
++// Subject: ARM p79 trivial bug
++// Date: Thu, 19 Nov 92 12:28:24 +0100
++
++extern "C" int printf( const char *, ...);
++
++int main()
++{
++ int a = 1 ;
++ int b = 2 ;
++ int c = 3 ;
++
++ (a = b) = c ;
++ printf( " %d %d %d\n", a, b, c);
++ return 0 ;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <199301260140.AA13734@world.std.com>
++// From: gparker@world.std.com (Glenn P Parker)
++// Subject: gcc bug
++// Date: Mon, 25 Jan 1993 20:40:44 -0500
++
++int f() { return 1; }
++
++int main()
++{
++ int (&fr)() = f;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <199301260139.AA13555@world.std.com>
++// From: gparker@world.std.com (Glenn P Parker)
++// Subject: gcc bug
++// Date: Mon, 25 Jan 1993 20:39:19 -0500
++
++class X {
++ enum S { blue, pink };
++ int S;
++public:
++ void f (enum S arg) ;
++};
++
++void X::f (enum S arg)
++{
++ S = arg; // g++ gives error on this line.
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <199301272139.AA25489@world.std.com>
++// From: kol@world.std.com (Nikolay Yatsenko)
++// Subject: g++ bug
++// Date: Wed, 27 Jan 1993 16:39:10 -0500
++
++extern "C" int printf(const char*,...);
++int count = 0;
++
++struct S {
++ int i;
++ S(int b) {
++ i = b;
++ count++; }
++};
++
++int main(void)
++{
++ double a = 2.0;
++
++ S x(int (a));
++ if (count > 0)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <9212072127.AA24243@us-es.sel.de>
++// From: dcb@us-es.sel.de
++// Subject: page 78 of the ARM
++// Date: Mon, 7 Dec 92 22:27:09 +0100
++
++extern "C" int printf( const char *, ...);
++
++int & max( int & a, int & b) {
++ return (a < b) ? b : a;
++}
++
++int main( void) {
++ int a = 1;
++ int b = 2;
++ int & c = max( a, b);
++
++ if (&c == &b)
++ printf( "PASS\n");
++ else
++ printf( "FAIL\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <9211231051.AA11287@us-es.sel.de>
++// From: dcb@us-es.sel.de
++// Subject: ARM page 87
++// Date: Mon, 23 Nov 92 11:51:38 +0100
++
++
++int main() {
++ int a;
++
++ switch (a) {
++ case 1:
++ int v2 = 3;// ERROR - crosses.*
++ case 2:// ERROR - jump.*
++ if (v2 == 7) // error not flagged by 2.3.1
++ ;
++ }
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// Special g++ Options: -w
++// GROUPS passed ARM-compliance
++// arm file (also in cvt file)
++// Message-Id: <9303061246.AA09402@gjetost.cs.wisc.edu>
++// From: solomon@cs.wisc.edu (Marvin Solomon)
++// Subject: Incorrect resolution of conversion path
++// Date: Sat, 6 Mar 93 06:46:27 -0600
++
++
++extern "C" void printf(const char *,...);
++
++class Base {
++public:
++ int i;
++ Base(int ii) : i(ii) {}
++};
++
++class Derived : public Base {
++public:
++ Derived(int ii) : Base(ii) {}
++ operator Base&();
++};
++
++Derived::operator Base&() {
++ Base *b = new Base(100*i);
++ return *b;
++}
++
++void f(Base &b) {
++ if (b.i == 99)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
++
++int main() {
++ Derived d(99);
++ f(d);
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++// arm file
++// Message-Id: <9303161105.AA29336@slsvitt>
++// From: dcb@us-es.sel.de (David Binderman 3841)
++// Subject: Page 141 of the ARM
++// Date: Tue, 16 Mar 93 12:05:24 +0100
++
++struct K {
++ void f( int *p = 0); // ERROR - previous specification
++};
++
++extern int * q;
++
++void K::f( int *p = q);// ERROR - .*
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/arm9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/arm9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++// GROUPS passed ARM-compliance
++#include <iostream.h>
++enum f1 {
++ F1
++};
++
++enum f2 {
++ F2
++};
++
++class A {
++public:
++ void set (f1 f);
++};
++void A::set (f1 f) { cout << "called A f1\n";}
++
++class B : public A {
++public:
++ void set (f2 f);
++};
++void B::set (f2 f) { cout << "called B\n";} // ERROR - candidate
++
++int main() {
++ B b;
++ b.set(F1); // ARM page 309: should call A.set(f1) and that what g++ does,// ERROR - .*
++ // but 13.1 of ARM clearly states that it should call B::set()
++ // or generate an error because overloading works only for
++ // functions within the same scope (first page of chapter 13)
++ // while member of derived and base classes are considered to
++ // belong to different scopes. Thus B::set() should have
++ // hidden (completely) the A::set() function.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/array1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/array1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/array1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/array1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// GROUPS passed arrays
++// array file
++// Message-Id: <9204120353.AA06266@cs.rice.edu>
++// From: dougm@cs.rice.edu (Doug Moore)
++// Subject: constructors not called on new'ed array elements
++// Date: Sat, 11 Apr 92 22:53:35 CDT
++
++#include <stdio.h>
++
++int i = 0;
++
++class foo
++{
++private:
++ static foo *array;
++public:
++ foo()
++ {
++ i++;
++ }
++};
++
++foo* foo::array = new foo [5];
++
++int main()
++{
++ if (i != 5)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/array2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/array2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/array2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/array2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed arrays
++// excess errors test - XFAIL *-*-*
++// array file
++// Message-Id: <"nac.no.188:05.10.92.14.37.45"@nac.no>
++// From: frode@auticon.no
++// Subject: prototype bug ?
++// Date: Thu, 5 Nov 92 15:37:34 PST
++
++ extern unsigned char * (*trt_def(int))[][2];
++ extern unsigned char * (trt_rplst(unsigned char *(*)[][2]));
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed bad-errors
++// bad-error file
++// Message-Id: <9301081103.AA29469@jclark.com>
++// From: jjc@jclark.com (James Clark)
++// Subject: initializer for static class member array
++// Date: Fri, 8 Jan 93 11:03:05 GMT
++
++struct A {
++ static int v[];
++};
++
++int A::v[1] = { 1 };
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed bad-errors
++// bad-error file
++// Date: Sun, 31 Jul 1994 11:37:43 +1000 (EST)
++// From: Rohan LENARD <rjl@iassf.easams.com.au>
++// Subject: g++-2.6.0 gives wrong warning for placement syntax new
++// Message-Id: <0iCk1b0000000z0VY0@iassf.easams.com.au>
++
++
++#include <stddef.h>
++
++void * operator new(size_t, int *);
++void * operator new(size_t, void *);
++
++int *x = 0;
++int foo(){
++new (x) int *;
++new (&x) int *;
++new (x) int *; // This is identical to line 8 !!!
++return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed bad-errors
++#include <stddef.h>
++
++void * operator new(size_t, int *);
++void * operator new(size_t, void *);
++
++int *x = 0;
++int foo(){
++new (x) int *;
++new (&x) int *;
++new (x) int *; // This is identical to line 8 !!!
++return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed bad-errors
++typedef __SIZE_TYPE__ size_t;
++
++class tt {
++ public:
++ tt(int);
++
++ private:
++ void *operator new(size_t a); // Forbid object creation in heap memory.
++};
++
++void st(const tt&, int);
++
++void ff(int i, int j)
++{
++ if( i > 0 ) {
++ // This work ok.
++ tt a_tt(i);
++ st(a_tt, j);
++ }
++ else {
++ // This triggers an error because of private operator new ????.
++ st(tt(-i), j);
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bad-error7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bad-error7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed bad-errors
++#include <iostream.h>
++
++class ParX
++ {
++ public:
++ ParX() {}
++ };
++
++class X : public ParX
++ {
++ public:
++ void fn2() { cout << "hi" << endl; }
++ };
++
++int main()
++ {
++ X x;
++ ParX* pParX = &x;
++ void (ParX::*p)() = (void (ParX::*)()) &X::fn2; // line 19
++
++ (pParX->*p)();
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed bit-fields
++typedef int A;
++
++struct B
++{
++ int A : 2;
++} ;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// GROUPS passed bit-fields
++// bitfield file
++// Message-Id: <92Oct29.191913est.62@jarvis.csri.toronto.edu>
++// From: mdivax1!robinson@ai.mit.edu (Jim Robinson)
++// Subject: gcc 2.2.2 C++ bug in handling :0 bit fields
++// Date: Thu, 29 Oct 1992 19:18:28 -0500
++//
++// Also applies to:
++// bitfield file
++// From: Jaimie Wilson/MSL <Jaimie_Wilson@msl.isis.org>
++// Date: Fri, 28 Jan 1994 06:11:43 -0500
++// Subject: GCC bug report
++
++
++#include <stdio.h>
++#include <stddef.h>
++
++struct foo {
++ char a;
++ char b;
++ unsigned int : 0; /* force word alignment */
++ char c;
++};
++
++int
++main(int argc, char **argv)
++{
++ struct foo bar;
++
++ if (offsetof (struct foo, c) > sizeof (unsigned int))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed bit-fields
++ class t {
++ short :(sizeof(short)-2);
++ public:
++ t();
++ };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/builtin1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/builtin1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/builtin1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/builtin1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// GROUPS passed builtins
++// Apparently not in g++ bug snapshot (was originally sent to bug-gcc)
++// Message-Id: <m0p74Fh-0002fCC@neal.ctd.comsat.com>
++// Date: Tue, 7 Dec 93 10:23 EST
++// From: neal@ctd.comsat.com (Neal Becker)
++// Subject: builtin_alloca on hpux (gcc-2.5.6)
++// We have to avoid using -ansi, which results in a call to alloca instead of
++// the use of __builtin_alloca, and thus ends up being unresolved.
++// Special g++ Options:
++
++extern "C" void* alloca( __SIZE_TYPE__ );
++extern "C" int printf (const char *, ...);
++
++void* junk() {
++ return alloca(10);
++}
++main() { printf ("PASS\n");}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/casts1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/casts1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/casts1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/casts1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed casts
++// casts file
++// From: dcb@us-es.sel.de (David Binderman 3841)
++// Date: Thu, 18 Feb 93 14:42:48 +0100
++// Subject: Page 67 of the ARM
++// Message-ID: <9302181342.AA14050@slsvitt>
++
++int main() {
++ (struct T { int b; } *) 0; // ERROR -
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/casts2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/casts2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/casts2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/casts2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// Build don't link:
++// GROUPS passed casts
++class VObject;
++
++typedef int boolean;
++
++typedef boolean (VObject::*method)();
++typedef boolean (VObject::*method0)();
++typedef boolean (VObject::*method1)(long);
++
++#define methodOf(o,m) (method)(&o::m)
++
++
++class VObject {
++ public:
++ boolean perform(method );
++ boolean perform(method , long);
++ void affectMethod(method );
++ void dummy(){};
++};
++
++
++boolean VObject::perform(method m)
++{
++ method0 q = (method0)m;
++ return(this->*q)();
++}
++
++
++boolean VObject::perform(method m, long param)
++{
++ method1 q = (method1)m;
++ return(this->*q)(param);
++ }
++
++void VObject::affectMethod(method m)
++{
++ m = methodOf(VObject, dummy);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/casts3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/casts3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/casts3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/casts3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed casts
++// casts file
++// From: fjh@cs.mu.oz.au
++// Message-Id: <9310121939.29641@munta.cs.mu.OZ.AU>
++// Subject: should emit diagnostic for `int *p = (void *)0;'
++// Date: Wed, 13 Oct 93 5:39:35 EST
++ int *p = (void *)0;// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// GROUPS passed code-generation
++// code-gen file
++// From: Jeffrey C. Gealow <jgealow@mtl.mit.edu>
++// Date: Sun, 4 Jul 93 18:57:53 -0400
++// Subject: increment bug (0 + 1 + 1 = 3)
++// Message-ID: <9307042257.AA23538@mtl.mit.edu>
++
++#include <stdio.h>
++
++int main()
++{
++ int i = 0;
++ (++i)++;
++ if (i == 2)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// GROUPS passed code-generation
++// code-gen file
++// From: Gunther Seitz <Gunther.Seitz@regent.e-technik.tu-muenchen.dbp.de>
++// Date: Thu, 18 Mar 1993 10:45:29 +0100
++// Message-ID: <93Mar18.104538met.1094@regatta.regent.e-technik.tu-muenchen.de>
++
++
++#include <stdio.h>
++
++class X {
++
++public:
++ double x;
++ X () { x=3.5; } // Here we go. This assignment fails because
++ // of X::x being aligned on a doubleword
++ // boundary, not a quadword one.
++ };
++
++
++class A : public virtual X {}; // Only way to produce the
++class B : public virtual X {}; // error is to use this
++class C : public virtual X {}; // construct of virtual
++ // base classes.
++
++class Y : public A, public B, public C {};
++
++
++int main ()
++{
++ Y y; // To call the constructor
++ printf ("PASS\n");
++ }
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// GROUPS passed code-generation
++// code-gen file
++// From: david.binderman@pmsr.philips.co.uk
++// Date: Tue, 17 Aug 93 10:09:38 BST
++// Subject: .* broken in 2.4.5
++// Message-ID: <9308170909.AA05509@pmsr.philips.co.uk>
++
++class A {
++public:
++ char c;
++};
++
++typedef char A::*PMA;
++
++PMA pmA = &A::c;
++
++A oA;
++
++extern "C" int printf( const char *, ...);
++
++int main()
++{
++ oA.c = 'q';
++
++ if ( (oA .* pmA))
++ printf( "PASS\n");
++ else
++ printf(" FAIL\n");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/code-gen5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/code-gen5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,283 @@
++// GROUPS passed code-generation
++// code-gen file
++// From: "David" <norman@pi14.arc.umn.edu>
++// Date: Mon, 15 Nov 1993 20:59:14 -0600 (CST)
++// Subject: An error!
++// Message-ID: <9311160259.AA03353@pi14.arc.umn.edu>
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <assert.h>
++#include <fstream.h>
++#include <iostream.h>
++#include <math.h>
++
++#define ANSI_C
++
++typedef double VEC ;
++
++class Vector;
++
++class VectorInt
++{
++ public:
++
++ /* Nothing public!! Only Vector can use this class */
++
++ private:
++
++ VectorInt( int );
++ VectorInt( int, double *, int = 0 );
++ VectorInt( const VectorInt & );
++ ~VectorInt();
++
++ VectorInt *refer();
++ void unrefer();
++ int count; /* Number of Vector's refering to me */
++
++ VEC *vec;
++
++ friend class Vector;
++ friend class VecElem;
++};
++
++class VecElem
++{
++ public:
++
++ operator double();
++ double operator=( double );
++
++ private:
++
++ VecElem( Vector &, int );
++ VecElem( const VecElem & );
++
++ Vector &v;
++ int row; /* Row element refers to */
++
++ friend class Vector;
++};
++
++class Vector
++{
++ public:
++
++ Vector(); // Must be assigned to before used
++ Vector( VectorInt * );
++ Vector( int );
++ Vector( int, double *, int beg = 0 );
++ Vector( const Vector & );
++ Vector &operator=( const Vector & );
++ ~Vector() { if(r) r->unrefer(); };
++
++ int row() const { return 19; }
++ int dim() const { return 10; }
++
++ double operator()( int ) const;
++ VecElem operator()( int );
++
++ double assign( int, double );
++
++ friend ostream& operator<<( ostream&, const Vector& m );
++
++ private:
++
++ VectorInt *r; /* Reference to real data */
++
++ friend class VecElem;
++ friend class LUDecom;
++ friend class SVD;
++};
++
++
++Vector::
++Vector()
++ : r(0)
++{}
++
++Vector::
++Vector( VectorInt *vi )
++ : r(vi)
++{
++ r->refer();
++}
++
++Vector::
++Vector( int row )
++{
++ assert( row > 0 );
++
++ r = new VectorInt( row );
++
++ r->refer();
++}
++
++Vector::
++Vector( int row, double *d, int beg )
++{
++ assert( row > 0 );
++
++ r = new VectorInt( row, d, beg );
++
++ r->refer();
++}
++
++Vector::
++Vector( const Vector &A )
++ : r( A.r->refer() )
++{}
++
++Vector& Vector::
++operator=( const Vector &A )
++{
++ if( r )
++ r->unrefer();
++
++ r = A.r->refer();
++
++ return *this;
++}
++
++double Vector::
++operator()( int row ) const
++{
++ assert( r );
++
++ return *r->vec;
++}
++
++VecElem Vector::
++operator()( int r )
++{
++ assert(r);
++
++ return VecElem( *this, r );
++}
++
++ /* assign changes the matrix, it does not create a new one! */
++double Vector::
++assign( int rownum, double d )
++{
++ assert(r);
++
++ if( rownum > row() || rownum <= 0 ) {
++ cerr << "Warning: trying to assign out of bounds" << endl;
++ cerr << "row " << rownum << endl;
++ cerr << "Vector size " << row() << endl;
++ abort();
++ }
++
++ if( r->count == 1 ) {
++ /* Don't need to create a new matrix, since we are the only */
++ /* one pointing to ours */
++ }
++ else {
++ VectorInt *vi = new VectorInt( *r );
++ r->unrefer();
++ r = vi->refer();
++ }
++
++ return d;
++}
++
++
++VectorInt::
++VectorInt( int sx )
++ : vec( new double[sx] ), count(0)
++{ }
++
++VectorInt::
++VectorInt( int sx, double *, int )
++ : vec( new double[sx] ), count(0)
++{
++}
++
++VectorInt::
++VectorInt( const VectorInt & )
++ : vec( new double[10] ), count(0)
++{
++}
++
++VectorInt * VectorInt::
++refer()
++{
++ count ++;
++ return this;
++
++ // cout << "Refering vec" << endl;
++}
++
++void VectorInt::
++unrefer()
++{
++ count--;
++
++ if( count == 0 ) {
++ delete this;
++ }
++
++ // cout << "Unrefering vec" << endl;
++}
++
++VectorInt::
++~VectorInt()
++{
++ delete vec;
++ vec = 0;
++}
++
++VecElem::
++VecElem( Vector &vec, int r )
++ : v(vec), row(r)
++{
++ if( r < 1 || r > vec.row() ) {
++ cerr << "Trying to access vector element out of bounds" << endl;
++ abort();
++ }
++}
++
++VecElem::
++VecElem( const VecElem &elem )
++ : v(elem.v), row(elem.row)
++{}
++
++VecElem::
++operator double()
++{
++ assert( v.r->vec );
++ return *v.r->vec;
++};
++
++double VecElem::
++operator=( double d )
++{
++ return v.assign( row, d );
++}
++
++
++
++
++
++int makeforms( Vector cen, Vector **a, Vector **b );
++
++int main()
++{
++ Vector *a[8], *b[8], disp(3);
++ Vector cen(3), cen2(3);
++ int i, j;
++
++ if (makeforms (cen,a,b) != 10)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++
++
++}
++
++int
++makeforms( Vector cen, Vector **a, Vector **b)
++{
++ return 10;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/copy1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/copy1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/copy1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/copy1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,66 @@
++// GROUPS passed copy-ctors
++#include <stdio.h>
++
++int pass = 0;
++class name {
++ int namestuff;
++public:
++ name() {
++ namestuff = 111;
++ }
++ name(const name& subject);
++
++ name & operator = (const name& right) {
++ this->namestuff = right.namestuff;
++ return *this;
++ }
++
++ ~name() {
++ ;
++ }
++};
++
++name::name(const name& subject) {
++ pass = 1;
++}
++
++class person {
++ int personstuff;
++ name personname;
++public:
++ person() {
++ ;
++ personstuff = 222;
++ }
++ ~person() {
++ ;
++ }
++ void print() {
++ ;
++ }
++
++};
++
++void
++test(person argp)
++{
++ person testp;
++
++ ;
++ argp.print();
++ testp = argp;
++ argp.print();
++ testp.print();
++ ;
++}
++
++int main()
++{
++ person mainp;
++ test(mainp);
++ if (pass)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/copy2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/copy2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/copy2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/copy2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed copy-ctors
++// copy file
++// From: Vivek Khera <khera@cs.duke.edu>
++// Date: Mon, 15 Nov 1993 16:02:18 -0500
++// Subject: g++ 2.5.3 fails to automatically generate default initializer
++// Message-ID: <9311152102.AA21248@thneed.cs.duke.edu>
++
++class String
++{
++ private:
++ char a[100];
++ int len;
++ public:
++ String();
++};
++
++String::String()
++{
++ len = 0;
++}
++
++
++struct List
++{
++ String item[100];
++ int num_items;
++// List(); // uncomment this line to let compile work
++};
++
++int
++main(int argc, char **argv)
++{
++ List a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <9302052351.AA10789@harvey>
++// From: greg@qualcomm.com (Greg Noel)
++// Subject: bug019.cc
++// Date: Fri, 5 Feb 93 15:51:42 -0800
++
++#include <iostream.h>
++
++class Class
++{
++ class Err : public ostream
++ {
++ public:
++ Err(void) : ostream() { }
++ ~Err(void) { }
++ };
++public:
++ //template<class T> Err& operator << (const T x) { return Err() << x; }
++ Err& operator << (const char *x) { return Err() << x; }// ERROR - .*
++private:
++ char x;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <9302081631.AA14744@tera.com>
++// From: rrh@tera.com (Robert R. Henry)
++// Date: Mon, 8 Feb 93 08:31:39 PST
++extern "C" void printf(const char *,...);
++class A{
++public:
++ inline A(int x){printf("constructing A with %d\n", x);}
++};
++
++class B:public A{
++private:
++public:
++}; // ERROR - non-default constructor
++
++int main()
++{
++ B(10);// ERROR - B doesn't have a constructor taking int
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// GROUPS passed constructors
++#include <stdio.h>
++#include <stdlib.h>
++#include <iostream.h>
++
++#define MAGIC 7654
++
++class complex {
++ double re;
++ double im;
++ int magic;
++ static int count;
++public:
++ complex() { re=im=0; magic=MAGIC; }
++ complex(double d) { re=d; im=0; magic=MAGIC; }
++ complex(double d, double d2) {re=d; im=d2; magic=MAGIC; }
++ ~complex() {if(magic!=MAGIC) {printf("FAIL\n");exit(0);}}
++ friend ostream& operator << (ostream& o, const complex& c)
++ { return o << "(" << c.re << "," << c.im << ")"; }
++};
++
++int complex::count=0;
++
++int main()
++{
++ complex v[6] = {1, complex(1,2), complex(), 2 }; // ARM Sect. 12.6.1
++ int i; // page 289
++
++ for(i=0; i<6; i++) ;
++ printf ("PASS\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed constructors
++#include <iostream.h>
++
++class A {
++ A() {} // private constructor// ERROR - .*
++};
++
++int main() {
++ A* a = new A();// ERROR - .*
++ if (a) {
++ cout << "a != NULL\n";
++ } else {
++ cout << "a == NULL\n";
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <199301310203.AA22417@oak.ucsc.edu>
++// From: "Dean R. E. Long" <dlong@cse.ucsc.edu>
++// Subject: problems with default constructors
++// Date: Sat, 30 Jan 1993 18:03:32 -0800
++
++class A0 {
++};
++
++class A1 {
++public:
++ A1(void) {}
++};
++
++class A2 {
++ A1 a;
++};
++
++class B0 : public A0 {
++public:
++ B0(void) {}
++ B0(int) {}
++ B0(char) : A0() {}
++ B0(short) : A0() {}
++};
++
++class B1 : public A1 {
++public:
++};
++
++class B2 : public A2 {
++public:
++ B2(void) : A2() {}
++ B2(int) : A2() {}
++};
++
++class C : public B1 {
++public:
++ C(void) : B1() {}
++ C(int) : B1() {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <9303270404.28207@munta.cs.mu.OZ.AU>
++// From: fjh@cs.mu.oz.au
++// Subject: bug with new/delete of multidimensional array
++// Date: Sat, 27 Mar 93 14:04:52 EST
++
++#include <stdio.h>
++#include <stdlib.h>
++
++int construct = 0;
++
++class Element {
++public:
++ Element() { construct++; if (construct > 6) {printf ("FAIL\n"); exit(1);}}
++ ~Element() { }
++};
++
++typedef Element array[2];
++
++int main() {
++ array *x;
++ x = new array[3];
++ delete x;
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <9306021533.AA14347@icepick.jts.com>
++// From: roland@jts.com (Roland Knight )
++// Subject: gcc 2.4.1 bug
++// Date: Wed, 2 Jun 1993 11:33:34 -0400
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++char stuff[50];
++char *p = stuff;
++
++class A {
++public:
++ A() { *p++ = 'A';}
++};
++
++class B {
++public:
++ B() { *p++ = 'B'; }
++};
++
++class C : public A, public B {
++public:
++ C() : B(), A() { *p++ = 'C'; }
++};
++
++class D : public A, public B {
++public:
++ D() : B() { *p++ = 'D'; }
++};
++
++class E : public A, public B {
++public:
++ E() { *p++ = 'E'; }
++};
++
++
++int main() {
++ C c;
++ D d;
++ E e;
++ if (strncmp ("ABCABDABE", stuff, 9))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <199306151813.gD28471@mail.Germany.EU.net>
++// From: stephan@ifconnection.de (Stephan Muehlstrasser)
++// Subject: gcc 2.4.3.1: illegal constructor call not rejected
++// Date: Tue, 15 Jun 1993 18:34:14 +0200 (MET DST)
++
++
++#include <fstream.h>
++
++class X : public ifstream {
++ public:
++ X(int a, char *b) {} // ERROR - candidate
++}; // ERROR - candidate
++int main()
++{
++ X *y = new X(10, "123");
++ // the compiler must reject this constructor call:
++ X *x = new X("abc");// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// GROUPS passed constructors
++class test1 {
++};
++
++template<class T>
++class GC_PTR {
++public:
++ GC_PTR(T &a) {}
++};
++
++
++void
++gotPtrs(GC_PTR<test1> r1)
++{
++}
++
++static void
++short_alloc(int n)
++{
++ test1 here;
++ GC_PTR<test1> foo = here; // This works fine.
++
++ gotPtrs(here); // Compile error from this
++ // No constructor named `GC_PTR` in visible scope
++ // conversion between incompatible aggregate types requested
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// From: mkohtala@vinkku.hut.fi
++// Date: Tue, 5 Oct 1993 19:31:16 +0200
++// Message-Id: <199310051731.AA12260@lk-hp-11.hut.fi>
++// Subject: Nested class constructor calling bug
++
++class X
++{
++ public:
++ class Y
++ {
++ public:
++ Y(int i) : a(i) {}
++ int a;
++ };
++ static void f(Y y);
++};
++
++void X::f(X::Y y)
++{
++}
++
++int
++main()
++{
++ X::Y y = X::Y(1); // Tries to call ctor Y instead of X::Y
++ X::f(X::Y(2)); // Tries to call Y instead of X::Y
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// From: rac@qedinc.com (Robert Clark)
++// Date: Tue, 14 Dec 93 10:45:50 PST
++// Subject: bug in g++ 2.5.7 Array of objects
++// Message-ID: <9312141845.AA09188@annapurna.qedinc.com>
++
++
++class POOL {
++public:
++ POOL();
++};
++
++struct VAL_LIST {
++ POOL pool[2];
++};
++
++VAL_LIST baz;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <9311011758.AA25157@thneed.cs.duke.edu>
++// From: Vivek Khera <khera@cs.duke.edu>
++// Subject: g++ 2.5.0 fails to automatically generate default initializer
++// Date: Mon, 01 Nov 1993 12:58:34 -0500
++
++class String
++{
++ private:
++ char a[100];
++ int len;
++ public:
++ String();
++};
++
++String::String()
++{
++ len = 0;
++}
++
++
++struct List
++{
++ String item[100];
++ int num_items;
++// List(); // uncomment this line to let compile work
++};
++
++int
++main(int argc, char **argv)
++{
++ List a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// From: mln@tera.com (Mark Niehaus)
++// Subject: g++-2.5.2 -- private copy ctor hides public ctor
++// Date: Mon, 8 Nov 93 10:14:50 PST
++
++class A {
++ A(A&);
++ public:
++ A();
++};
++
++class B {
++ A a;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++// GROUPS passed constructors
++// Message-Id: <m0p8Am6-0002fCC@neal.ctd.comsat.com>
++// Date: Fri, 10 Dec 93 11:33 EST
++// From: neal@ctd.comsat.com (Neal Becker)
++// Subject: serious problems with static constructors
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++#define CONST const
++
++class Sig {
++
++public:
++
++ enum Type { Byte_t, Word_t, Long_t, Float_t, Double_t, Complex_t, ComplexLong_t, Bad_t };
++
++private:
++
++ Type T;
++
++public:
++
++ static CONST char *ByteMagic, *WordMagic, *LongMagic,
++ *FloatMagic, *DoubleMagic, *ComplexMagic, *ComplexLongMagic, *BadMagic;
++
++ struct SigTable {
++ Type T;
++ CONST char* Magic;
++ };
++
++ static CONST SigTable sigTable[];
++
++};
++
++CONST char
++*Sig::ByteMagic = "BYTE",
++*Sig::WordMagic = "WORD",
++*Sig::LongMagic = "LONG",
++*Sig::FloatMagic = "FLOA",
++*Sig::DoubleMagic = "DOUB",
++*Sig::ComplexMagic = "COMP",
++*Sig::ComplexLongMagic = "CMPL",
++*Sig::BadMagic = NULL;
++
++
++CONST Sig::SigTable Sig::sigTable[] = {
++ { Byte_t, ByteMagic },
++ { Word_t, WordMagic },
++ { Long_t, LongMagic },
++ { Float_t, FloatMagic },
++ { Double_t, DoubleMagic },
++ { Complex_t, ComplexMagic },
++ { ComplexLong_t, ComplexLongMagic },
++ { Bad_t, BadMagic }
++};
++
++int main() {
++ if (strcmp (Sig::sigTable[0].Magic, "BYTE")
++ || strcmp (Sig::sigTable[1].Magic, "WORD")
++ || strcmp (Sig::sigTable[2].Magic, "LONG")
++ || strcmp (Sig::sigTable[3].Magic, "FLOA")
++ || strcmp (Sig::sigTable[4].Magic, "DOUB")
++ || strcmp (Sig::sigTable[5].Magic, "COMP"))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <m0oxRi1-0002fPC@nesmith.pactitle.com>
++// From: genehi@nesmith.pactitle.com (Gene Hightower)
++// Subject: Apparent bug in g++ 2.5.2
++// Date: Wed, 10 Nov 93 18:24 PST
++
++class One {
++ public:
++ One() {}
++};
++
++template<class T> class Two : public One {
++};
++
++class Three {
++};
++
++class Four {
++ Two<Three> x[1];
++};
++
++class Five {
++ Four y;
++
++ public:
++ Five() {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Special g++ Options: -w
++// GROUPS passed constructors
++// ctors file
++// Message-Id: <ACHILLES.92Nov25192123@i90s8.ira.uka.de>
++// From: Alf-Christian Achilles <achilles@ira.uka.de>
++// Subject: g++ 2.3.1 rejects initialization with object of derived class
++// Date: 25 Nov 92 19:21:23
++
++extern "C" int printf (const char *, ...);
++
++class A {
++public:
++ virtual void foo() {};
++};
++
++class B : public A {
++public:
++ void foo() {};
++};
++
++main ()
++{
++ B b;
++ A a = b; //unjustified error: unexpected argument to constructor `A'
++ printf ("PASS\n");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctors file
++// Subject: bug in handling static const object of the enclosing class
++// Date: Tue, 1 Sep 92 10:38:44 EDT
++
++class X
++{
++ private:
++ int x;
++ public:
++ static const X x0;
++ X( int );
++}; // ERROR - candidate
++
++class Y
++{
++ private:
++ X xx;
++ public:
++ Y();
++}
++X::X( int xi )
++{// ERROR - return.*
++ x = xi;
++}
++
++const X X::x0( 0 );
++
++Y::Y()
++{// ERROR - no mat
++ xx = X::x0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed constructors
++#include <complex.h>
++
++double foo(double_complex *a)
++{
++ return 0.0;
++}
++
++
++double bar(void)
++{
++ double_complex v[10];
++ return foo(v);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed constructors
++// ctors file
++// Message-Id: <3JUL199214462623@envmsa.eas.asu.edu>
++// From: peckham@envmsa.eas.asu.edu (Bill)
++// Subject: const constructor causes crash
++// Date: Fri, 3 Jul 1992 21:46:00 GMT
++
++class base_t {
++public:
++ virtual char *name () { return "base_t"; }
++
++ base_t ();
++ virtual ~base_t ();
++};
++
++class d1_t : public base_t {
++public:
++ virtual char *name () { return "d1_t"; }
++
++ // The const keyword on this constructor is an error, but it shouldn't
++ // cause the compiler to crash.
++
++ d1_t () const;// ERROR - .*const.*
++ virtual ~d1_t ();
++};
++
++class d2_t : public base_t {
++public:
++ virtual char *name () { return "d2_t"; }
++
++ d2_t (int);
++ virtual ~d2_t ();
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// GROUPS passed constructors
++// ctor file
++// Message-Id: <199212160609.AA18247@phecda.cs.sfu.ca>
++// From: Taj Khattra <khattra@cs.sfu.ca>
++// Subject: gcc 2.3.1 global ctor bug ?
++// Date: Tue, 15 Dec 92 22:09:37 PST
++
++#include <stdio.h>
++
++struct foo {
++ foo() : index(-1) {}
++ int index;
++};
++
++foo *arr = new foo[2];
++
++int main()
++{
++ if (arr[0].index == -1
++ && arr[1].index == -1)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/ctors9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/ctors9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed constructors
++// ctors file
++// Message-Id: <9301132030.AA05210@cs.rice.edu>
++// From: dougm@cs.rice.edu (Doug Moore)
++// Subject: 2.3.3: accepts ctor-less derived class of ctor-ful base class
++// Date: Wed, 13 Jan 93 14:30:21 CST
++// Note: It gives an error now. But not a very good one.
++
++struct Foo
++{
++ Foo(int aa);
++ int a;
++ const Foo* operator-> () const {return this;}
++};
++
++Foo::Foo(int aa)
++:a(aa)
++{ }
++
++
++struct var_Foo: public Foo
++{
++ var_Foo* operator-> () {return this;}
++};// ERROR - base.*// ERROR - in class.*
++
++int blort(Foo& f)
++{
++ return f->a;
++};
++
++int main()
++{
++ var_Foo b(2);// ERROR -
++ b->a = 0;
++ int x = blort(b);
++ return x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,60 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <CC7oHn.B4F@izf.tno.nl>
++// From: tom@izfcs.izf.tno.nl (Tom Vijlbrief)
++// Subject: g++ 2.4.5 has problems with NON virtual shared base classes
++// Date: Mon, 23 Aug 1993 12:10:34 GMT
++
++
++#include <stdio.h>
++
++#define FAIL
++
++class Base {
++public:
++ Base() { printf("Base::Base\n"); }
++ virtual ~Base() { printf("Base::~Base\n"); }
++ virtual void v() { printf("Base::v\n"); }
++};
++
++class Base2 {
++public:
++ Base2() { printf("Base2::Base2\n"); }
++ virtual ~Base2() { printf("Base2::~Base2\n"); }
++ virtual void v() { printf("Base2::v\n"); }
++};
++
++class A: public Base {
++public:
++ A() { printf("A::A\n"); }
++ ~A() { printf("A::~A\n"); }
++ virtual void va() { printf("A::va\n"); }
++};
++
++#ifdef FAIL
++class B: public Base {
++#else
++class B: public Base2 {
++#endif
++public:
++ B() { printf("B::B\n"); }
++ ~B() { printf("B::~B\n"); }
++ virtual void vb() { printf("B::vb\n"); }
++};
++
++class C: public A, public B {
++public:
++ C() { printf("C::C\n"); }
++ ~C() { printf("C::~C\n"); }
++ void va() { printf("C::va\n"); }
++};
++
++
++int main()
++{
++ C *cp= new C;
++ cp->va();
++ delete cp;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Date: Tue, 10 Nov 92 11:08:08 PST
++// From: rrh@tera.com (Robert R. Henry)
++// Message-Id: <9211101908.AA13557@tera.com>
++// Subject: type cast of qualified const member breaks g++2.3.1
++
++#include <stdio.h>
++
++class Thing{
++private: int x;
++ public: const int N = -1; // ERROR - bad initialization
++ Thing(int y);
++};
++
++class Bar{ public: void doit(void); };
++
++void Bar::doit(void)
++{
++ int i, j;
++ i = Thing::N;
++ printf("i = %d\n", i);
++
++ j = (int)Thing::N;
++ printf("i = %d\n", j);
++}
++Thing::Thing(int y) { x = y; }
++int main(){ Bar x; x.doit(); }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9301071708.AA03432@muresh.et.tudelft.nl>
++// From: stravers@muresh.et.tudelft.nl (Paul Stravers)
++// Subject: conversion method never called
++// Date: Thu, 7 Jan 93 18:08:33 +0100
++
++#include <stdio.h>
++
++class test
++{
++ double d;
++ int i;
++public:
++ test(double dd,int ii) {d=dd; i=ii;} // constructor
++ operator int&() {return i;} // define a conversion from test to int&
++ int& geti() {return i;} // same thing, but different
++};
++
++int main()
++{
++ test t(3.14, 5); // Create an object t of class "test"
++ int x = (int&)t; // This should call operator int&() but it does not ...
++ int y = t.geti(); // x and y should both be 5 ...
++ if (x == 5 && y == 5)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <ISHAI.93Mar26102509@cs73.technion.ac.il>
++// From: ishai@cs.technion.ac.il (& Ben-Aroya)
++// Subject: Type conversion problem.
++// Date: Fri, 26 Mar 1993 08:25:09 GMT
++
++typedef int array[10];
++
++void f(array &arg)
++{
++}
++
++int main()
++{
++ array var;
++ f(var);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9303241504.AA25988@spock.orl.mmc.com>
++// Subject: internal compiler error
++// Date: Wed, 24 Mar 1993 10:04:06 -0500
++// From: "Malcolm C. Strickland" <chucks@orl.mmc.com>
++
++
++int main()
++ {
++ double *d;
++ d = new double(10);
++ return 1;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9308051530.AA05922@NeoSoft.Com>
++// From: daniels@sugar.neosoft.com (Brad Daniels)
++// Subject: g++ 2.4.5: Conversion operators to complex types don't work either
++// Date: Thu, 5 Aug 93 15:30:04 CDT
++
++class bar { int x; public: bar() : x(1){} };
++
++class foo {
++ bar a, b;
++public:
++ foo(bar i, bar j) : a(i),b(j) {}
++ operator const bar() const { return a; }
++ const bar f() { return *this; }
++ void g(foo &c) { b = c; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9304121647.AA25819@tnt>
++// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin)
++// Subject: g++ bug
++// Date: Mon, 12 Apr 93 10:47:01 MDT
++
++#include <iostream.h>
++
++class B {
++};
++
++class A : public B {
++ short s;
++public:
++ A(short _s = 0) { s = _s; }
++ operator const short &() const { return s; }
++};
++
++ int
++main() {
++ A a(37);
++ //cout << a << endl;
++ cout << (short)a << endl;
++
++ return 0;
++} // main
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9305210124.AA02409@kato.cs.brown.edu>
++// From: pcm@cs.brown.edu (Peter C. McCluskey)
++// Subject: illegal code compiles silently
++// Date: Thu, 20 May 93 21:24:22 -0400
++
++
++
++class Point {};
++class Line_Segment{ public: Line_Segment(const Point&){} };
++class Node { public: Point Location(){ Point p; return p; } };
++
++int main()
++{
++ Node** node1;
++ Line_Segment(node1->Location()); // intended (*node1)// ERROR - .*
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9307090042.AA28565@uluru.Stanford.EDU>
++// From: interran@uluru.stanford.edu (John Interrante)
++// Subject: gcc 2.4.5 on sparc-sun-sunos4.1.2: automatic conversion functions
++// Date: Thu, 8 Jul 93 17:42:12 PDT
++
++class Token {
++public:
++ operator const void*() const;
++ int operator !=(int code) const;
++private:
++ int code_;
++};
++
++extern Token next_token();
++
++void foo(Token token) {
++ if (token && token != '{') {}
++
++ const int inside_body = 1;
++ if (inside_body && (token = next_token())) {}
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <1166.9307131600@ace.eng.cam.ac.uk>
++// From: ajp@eng.cam.ac.uk
++// Date: Tue, 13 Jul 93 17:00:44 BST
++
++
++class B {};
++
++class A {
++ public:
++ operator const B*() const {
++ return b;
++ }
++ private:
++ B* b;
++};
++
++
++int main()
++{
++ A a;
++ if (a!=0) {
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// From: dak@pool.informatik.rwth-aachen.de
++// Date: Sun, 21 Nov 93 17:40:32 +0100
++// Subject: g++ mixes up array dimensions with new
++// Message-ID: <9311211640.AA11787@messua>
++
++int main()
++{
++ int (*a)[5] = new int[6][5];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9307152250.AA24812@volterra>
++// From: rst@ai.mit.edu (Robert S. Thau)
++// Subject: g++ won't convert char[] to char*&
++// Date: Thu, 15 Jul 93 18:50:59 EDT
++
++
++// Compiles fine with Sun CC 2.1
++
++void f(char *& x)
++{// ERROR - location of error
++ x++;
++}
++
++int main()
++{
++ f ("foo");// ERROR - init of non-const ref from char*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9307200528.AA02094@legolas>
++// From: Mark Kuzmycz <kuzmycz@deakin.edu.au>
++// Subject: int & conversion operator
++// Date: Tue, 20 Jul 93 15:28:47 EST
++
++class Int
++{
++ public:
++ Int(void);
++ Int(int);
++ Int(const Int&);
++
++ Int* copy(void) const;
++
++ operator int&();
++
++ Int& operator ++(void);
++ Int& operator --(void);
++
++ private:
++ int value;
++};
++
++int main()
++{
++ Int data = 2;
++ Int test;
++
++ test = data * 12;
++ data += 1;
++}
++
++// UNKNOWN "FAIL"
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <93Aug2.163542pdt.26892@franklin.parc.xerox.com>
++// From: Jesse Hull <jhull@parc.xerox.com>
++// Subject: typedef bug
++// Date: Mon, 2 Aug 1993 16:35:28 PDT
++
++typedef int A[10];
++
++int main()
++{
++ int* a1 = new A;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9308051209.AA15962@NeoSoft.Com>
++// From: daniels@sugar.neosoft.com (Brad Daniels)
++// Subject: Bug in g++ 2.4.5: Conversion operators to enumerated types don't wor
++// Date: Thu, 5 Aug 93 12:09:09 CDT
++
++enum bar { AAA, BBB };
++
++class foo {
++ bar a, b;
++public:
++ foo(bar i, bar j) : a(i),b(j) {}
++ operator const bar() const { return a; }
++ bar f() { return *this; }
++ void g(foo &c) { b = c; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// GROUPS passed conversions
++#include <stdio.h>
++#include <stdlib.h>
++#include <iostream.h>
++#include <fstream.h>
++
++extern "C" {
++int strncmp (const char *, const char *, size_t);
++}
++
++class cvec {
++public:
++ ~cvec(){ delete s; }
++ cvec(const char*x) { s = new char[strlen(x)+1]; strcpy(s, x); }
++ cvec(const cvec& c) { s = new char[strlen(c.s)+1]; strcpy(s, c.s); }
++ operator const char*() { return s; }
++private:
++ char *s;
++};
++
++cvec
++B(const char* a)
++{
++ return a;
++}
++
++void
++A(const char* s)
++{
++ // s still ok here
++ ifstream inf(s);
++ if (strncmp ("aaa", s, 3))
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
++
++int main()
++{
++ A(B("aaa"));
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9308122113.AA14119@tnt.acsys.com>
++// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin)
++// Subject: g++ bug
++// Date: Thu, 12 Aug 93 15:13:23 MDT
++
++
++class C { };
++
++void f(C) { }
++
++void g(const C & c) { f(c); }
++
++void h(const C & c) { f(C(c)); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9308091213.AA11572@emmy.Mathematik.Uni-Dortmund.DE>
++// From: Michael Strauch <strauch@emmy.mathematik.uni-dortmund.de>
++// Subject: Bug in GCC 2.4.5
++// Date: Mon, 9 Aug 93 14:13:50 MESZ
++
++extern "C" int printf (const char *, ...);
++
++int destruct = 2;
++
++ class Test{
++ protected:
++ long x;
++ public:
++ Test(){;}
++ Test(long l) {x=l;}
++ ~Test() {if (--destruct == 0) printf ("PASS\n");}
++ };
++
++int main()
++ {
++ long i=1;
++ Test t;
++
++ t=(Test)i;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <1992Jul31.142856.10082@ericsson.se>
++// From: jonas@ericsson.se (Jonas Nygren)
++// Subject: g++ bug
++// Date: Fri, 31 Jul 1992 14:28:56 GMT
++
++class A {};
++class B : public A {};
++
++B b;
++
++class R{
++public:
++ R() {}
++ operator B&() { return b; }
++};
++
++void f(A&) {}
++
++int main(){
++ R r;
++
++ f(r); // problem to cast to B& and then to A&
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <9208261851.AA16997@josquin.media.mit.edu>
++// From: bilmes@media.mit.edu
++// Subject: gcc (g++) 2.2.2 constructing nested class from external scope
++// Date: Wed, 26 Aug 92 14:51:17 -0400
++
++
++class foo {
++
++ class bar {
++ int i;
++ public:
++ bar(int j) { i = j; }
++ };
++
++ bar b;
++public:
++ foo() : b(3) {}
++ void test(bar lb) { b = lb; }
++};
++
++
++int main() {
++ foo f;
++ f.test(34); // line 18
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,74 @@
++// GROUPS passed conversions
++// cvt file
++// From: krste@icsi.berkeley.edu (Krste Asanovic)
++// Date: Mon, 24 Aug 92 19:05:10 PDT
++// Message-Id: <9208250205.AA26351@icsib43.ICSI.Berkeley.EDU>
++// Subject: implicit int. convs. from member refs. in switch expressions
++
++#include <stream.h>
++#include <stdio.h>
++
++class A
++{
++public:
++ A(int j) { i = j; }
++ A(A& a) { i = a.i; }
++ operator int() { return i; }
++
++ void assign(int v) { i = v; }
++ int i;
++};
++
++class B
++{
++public:
++ B(A& inArg) : in(inArg), out(0) {}
++
++ A& in;
++ A out;
++
++ void run();
++};
++
++void
++B::run()
++{
++ // I get a "switch quantity not an integer" error for this statement.
++ switch (in)
++ // Replacing above with "switch (int(in))" removes the error.
++ {
++ case 0:
++ out = 1;
++ break;
++ default:
++ out = 0;
++ break;
++ }
++}
++
++int main()
++{
++ A a(1);
++
++ A& ar = a;
++
++ A& ar2 = ar;
++
++ // ....but no errors for this switch statement.
++ switch (ar2)
++ {
++ case 1:
++ printf ("PASS\n");
++ break;
++ default:
++ printf ("FAIL\n");
++ }
++
++ B b(a);
++ a.assign(3);
++ b.run();
++ a.assign(0);
++ b.run();
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed conversions
++// cvt file
++// From: solomon@cs.wisc.edu (Marvin Solomon)
++// Message-Id: <9209141509.AA23124@gjetost.cs.wisc.edu>
++// Subject: g++ 2.2.2 seems to be forgetting a "const"
++// Date: Mon, 14 Sep 92 10:09:58 -0500
++
++extern "C" void printf(...);
++
++struct A {
++ int i;
++};
++
++struct B {
++ int i;
++ operator const A&() const;
++};
++
++B::operator const A&() const {
++ static A a;
++ a.i = i;
++ printf("convert B to A at %x\n", &a);
++ return a;
++}
++
++void f(A &a) { // ERROR - in passing argument
++ printf("A at %x is %d\n", &a, a.i);
++}
++
++int main() {
++ B b;
++ b.i = 99;
++ f(b);// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/cvt9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/cvt9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed conversions
++// cvt file
++// Message-Id: <m0mVSRj-0000cEC@mobius.veritas.com>
++// From: joe@veritas.com (Joe Fasano)
++// Subject: gcc-2.2.2 bug report
++// Date: Thu, 17 Sep 92 13:27 PDT
++
++typedef int (*widget) ();
++
++class window {
++public:
++ int Isopen ();
++};
++
++widget fp = (widget) &window::Isopen; // ERROR - // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dossier1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dossier1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dossier1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dossier1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options: -frtti
++// GROUPS passed rtti
++// dossier file
++// Message-Id: <9212021501.AA02484@olympia.miro.com>
++// From: rme@miro.com (Richard M. Emberson)
++// Subject: bug
++// Date: Wed, 2 Dec 92 07:01:30 PST
++
++class Vector {
++ int *p;
++ int sz;
++public:
++ Vector(int );
++ ~Vector();
++
++ int& operator[](int i);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed destructors
++// friends file
++// From: offline!marc@ai.mit.edu (Marc Duponcheel) (Marc Duponcheel)
++// Date: Sat, 6 Feb 93 23:31:22 PST
++// Subject: some 2.2.2 bugs
++// Message-ID: <9302070731.AA002jw@offline.UUCP>
++
++void f()
++{
++ int i;
++ i.i::~i();// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// GROUPS passed destructors
++#include <stdio.h>
++
++int destruct = 0;
++
++class bla {
++
++public:
++
++ inline bla(char * jim) { ; };
++
++ inline ~bla() { destruct++; if (destruct == 2) printf ("PASS\n");};
++};
++
++class ulk {
++
++public:
++
++ inline ulk() {};
++ inline ~ulk() {};
++
++ void funk(const bla & bob) { ;};
++ // ^ interestingly, the code compiles right if
++ // this & is deleted (and therefore the parameter
++ // passed as value)
++};
++
++int main() {
++
++ ulk dumm;
++
++ dumm.funk(bla("laberababa")); // this compiles correctly
++
++ dumm.funk((bla)"laberababa"); // this produces incorrect code -
++ // the temporary instance of
++ // the class "bla" is constructed
++ // but never destructed...
++
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// GROUPS passed destructors
++// dtor file
++// Message-Id: <9301242117.AA04053@cs.rice.edu>
++// From: dougm@cs.rice.edu (Doug Moore)
++// Subject: 2.3.3: premature dtor of temp?
++// Date: Sun, 24 Jan 93 15:17:07 CST
++
++#include <stdio.h>
++#include <stdlib.h>
++
++int killed = 0;
++
++class Foo
++{
++ int a;
++public:
++ Foo()
++ :a(0) {;}
++ ~Foo() { killed++;}
++ Foo& operator << (int b)
++ {
++ a += b;
++ if (killed)
++ {
++ printf ("FAIL\n");
++ exit (0);
++ }
++ return *this;
++ }
++};
++
++int main()
++{
++ Foo() << 1 << 3 << 5 << 7;
++ printf ("PASS\n");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// GROUPS passed destructors
++#include <stdio.h>
++
++int destruct = 2;
++
++class a {
++ public:
++ char *p;
++ a(){ ; }
++ ~a(){ destruct--; if (! destruct) printf ("PASS\n");}
++};
++
++a test(){
++ return a();
++}
++
++int main(){
++ a ai;
++
++ ai = test();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/dtors5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/dtors5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// GROUPS passed destructors
++// dtor file:
++// Message-Id: <1992Jun25.181845.18886@leland.Stanford.EDU>
++// From: niz@leland.stanford.edu (Jim Nisbet)
++// Subject: gcc 2.2.2 -- c++ bug: destructor called twice (example)
++// Date: 25 Jun 92 18:18:45 GMT
++
++#include <stdio.h>
++
++int things = 0;
++
++class foo {
++public:
++ foo() { things++; }
++ foo(const foo&) { things++; }
++ ~foo() { things--; }
++
++ int i;
++};
++
++void
++sub(foo f) {
++ ;
++};
++
++
++int main() {
++ sub(foo());
++ if (things == 0)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed enums
++class X {
++ struct X1;
++ enum { A= sizeof(X1 *) }; //Causes a problem.
++ struct X1 { int i; };
++ X1 *f(X1 *);
++public:
++ X(void);
++};
++
++X::X1 *X::f(X1 *x) {
++ return x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// Special g++ Options: -fshort-enums
++// GROUPS passed enums
++// enum file
++// From: Jeff Gehlhaar <jbg@qualcomm.com>
++// Date: Mon, 4 Jan 1993 09:20:50 -0700
++// Subject: Enum bug, affects library
++// Message-ID: <9301041720.AA17340@harvey>
++
++typedef unsigned long __fmtflags;
++class ios {
++ public:
++ typedef __fmtflags fmtflags;
++ enum { skipws=01, left=02, right=04, internal=010,
++ dec=020, oct=040, hex=0100,
++ showbase=0200, showpoint=0400, uppercase=01000, showpos=02000,
++ scientific=04000, fixed=010000, unitbuf=020000, stdio=040000,
++ dont_close=0x80000000 //Don't delete streambuf on stream destruction
++ };
++
++ fmtflags setf (fmtflags, fmtflags);
++};
++
++// from <iostream.h>
++inline ios& dec(ios& i)
++{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed enums
++// enum file
++// From: frode@auticon.no
++// Date: Wed, 13 Jan 93 9:24:50 PST
++// Subject: enum trouble
++// Message-ID: <"nac.no.001:13.00.93.18.40.52"@nac.no>
++
++typedef enum{on, off} TOGGLE;
++
++class field {
++private:
++ TOGGLE toggle;
++public:
++ virtual void on(void) { toggle = 3; };// ERROR - .*
++ virtual void off(void) { toggle = on; };// ERROR - .*
++};
++
++int main()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// GROUPS passed enums
++// enum file
++// From: dougm@cs.rice.edu (Doug Moore)
++// Date: Thu, 18 Mar 93 00:14:57 CST
++// Subject: 2.3.3:Inconsistent behavior for enum conversions
++// Message-ID: <9303180614.AA12123@cs.rice.edu>
++
++enum Enum {enumerator1, enumerator2};
++
++struct Struct
++{
++ int i;
++ int getI(Enum) {return i;} // ERROR - candidates
++};
++
++int funct (Enum)
++{
++ return 0;
++}
++
++int main()
++{
++ Enum e = enumerator1;
++ Struct s;
++ int x = funct(e+1);// ERROR - .*
++ int y = s.getI(e+1);// ERROR - .*
++ return x+y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed enums
++// enum file
++// From: polstra!jdp@uunet.uu.net (John Polstra)
++// Date: Mon, 15 Nov 93 12:14 PST
++// Subject: GCC 2.5.3 Enum Bitfield Causes Bogus Warning
++// Message-ID: <m0ozAJo-0001EgC@seattle.polstra.uucp>
++
++ enum Color { Red, Green, Blue };
++
++ struct S {
++ Color c : 8;
++ } s;
++
++ void foo()
++ {
++ s.c = Red; // <== This statement produces the warning message.
++ }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed enums
++// friends file
++// From: offline!marc@ai.mit.edu (Marc Duponcheel) (Marc Duponcheel)
++// Date: Sat, 6 Feb 93 23:31:22 PST
++// Subject: some 2.2.2 bugs
++// Message-ID: <9302070731.AA002jw@offline.UUCP>
++
++class X
++{
++ enum E { A, B };
++static enum E e;
++};
++enum X::E X::e = A;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// Special g++ Options: -fshort-enums
++// GROUPS passed enums
++ enum E { A = 0x80000000 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/enum9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/enum9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Special g++ Options: -fshort-enums
++// GROUPS passed enums
++ extern "C" int printf (const char *, ...);
++
++ enum E { A = 0x80000000, B = 0 };
++
++ main()
++ {
++ if (sizeof (E) != 4)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++ return 0;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++// GROUPS passed exceptions
++// except file
++// Message-Id: <9207221230.AA08566@life.ai.mit.edu>
++// From: EWALLACE@endvmtkl.vnet.ibm.com
++// Subject: Bugs
++// Date: Wed, 22 Jul 92 08:29:30 EDT
++
++extern "C" void puts(const char *);
++
++class foo {
++public:
++ class error {};
++
++ void cause_error(void) { throw error(); }
++};
++
++int main(void)
++{
++ foo f;
++ try {
++ f.cause_error();
++ }
++ catch (foo::error) {
++ puts("Caught it.");
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options: -fexceptions -g
++// GROUPS passed exceptions
++// except file
++// Message-Id: <9211061330.AA29334@ifad.dk>
++// From: erik@ifad.dk (Erik Toubro Nielsen)
++// Subject: g++-2.3.1 gets fatal signal with -g and -fhandle-exceptions
++// Date: Fri, 6 Nov 92 14:30:33 +0100
++
++int main()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++// GROUPS passed exceptions
++// except file
++// Message-Id: <9211301118.AA09810@ss670mp.geco.slb.com>
++// From: willoch@ss670mp.oslo.sgp.slb.com (thorbjorn willoch)
++// Subject: -fansi-exceptions bug
++// Date: Mon, 30 Nov 92 11:18:05 GMT
++
++extern "C" int printf(const char *, ...);
++
++class Vector
++{
++ int* p;
++ int sz;
++ public:
++ Vector(int s) { p = new int[sz=s]; }
++ ~Vector() {delete [] p; }
++ int size() {return sz; }
++ class Range{};
++
++
++ int& operator[](int i);
++};
++
++int& Vector::operator[](int i)
++{
++ if(0<=i && i<sz) return p[i];
++ throw Range();
++}
++
++void do_something(Vector& v)
++{
++ int i = v[v.size()+10];
++}
++
++main()
++{
++ Vector v(10);
++
++ try
++ {
++ do_something(v);
++ }
++
++ catch (Vector::Range)
++ {
++ printf("Range error exception\n");
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++// GROUPS passed exceptions
++// except file
++// Message-Id: <9307071456.AA05275@davinci.hio.hen.nl>
++// From: akkersdi@hio.hen.nl
++// Subject: exceptions broken
++// Date: Wed, 7 Jul 1993 16:56:52 +0200 (MET DST)
++
++class ball {
++public: int dummy;
++ ball() : dummy(0) { ; }
++};
++
++void pitcher()
++{
++ throw ball();
++}
++
++void catcher()
++{
++ try // <=== gcc 2.* fails here
++ {
++ pitcher();
++ }
++ catch (ball) {
++ /* sleepy catcher doing nothing */ ;
++ }
++}
++
++int main()
++{
++ catcher();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++// GROUPS passed exceptions
++// except file
++// Message-Id: <199311101607.AA11803@hsi86.hsi.com>
++// From: Grigory Tsipenyuk <grigory@hsi.com>
++// Subject: exception's bug?
++// Date: Wed, 10 Nov 1993 11:07:12 -0500
++
++#include <stream.h>
++class X {
++ int *a;
++ int sz;
++public:
++ class range { }; // exception class
++ X(int s) { a=new int[sz=s]; }
++ int& operator[](int i);
++};
++
++int& X::operator[](int i)
++{
++ if (i < 0 || i >= sz) {
++ throw range();
++ }
++ return a[i];
++}
++
++int
++main()
++{
++ X c(10);
++ try {
++ for (int i = 0; i < 12; i++)
++ c[i] = 1;
++ } catch (X::range) {
++ cerr << "invalid range\n";
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/except6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/except6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++// GROUPS passed exceptions
++// except file
++// From: GUSTAVO%DRAGON@orion.cpqd.ansp.br
++// Date: 15 Dec 1993 09:33:30 +0000 (C)
++// Subject: exception handling problem
++// Message-ID: <01H6I5GEAF5UPBJ0UV@VENUS.CPQD.ANSP.BR>
++
++struct Exception
++ {
++ int v;
++ Exception(int i) { v = i; };
++ };
++
++void inc(int &i)
++ {
++ try {
++ if (i == 0)
++ throw Exception(i);
++ else
++ i++;
++ }
++ catch (Exception v) {
++ i = v.v;
++ }
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/friend1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/friend1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/friend1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/friend1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed friends
++// friends file
++// From: rwave!myersn%rwave.roguewave@cs.orst.edu (Nathan Myers)
++// Date: Thu, 17 Dec 92 16:33 PST
++// Subject: 2.3.2: friend decl of new confuses constructor
++// Message-ID: <m0n2Vec-0000GrC@rwave.roguewave.com>
++
++#include <stddef.h>
++#include <new>
++struct Foo {
++ friend void* operator new(size_t) throw (std::bad_alloc);
++ friend void operator delete(void*) throw ();
++ Foo();
++ ~Foo();
++};
++Foo::Foo() { }
++Foo::~Foo() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/friend4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/friend4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/friend4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/friend4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed friends
++// friends file
++// From: osinski@cs.nyu.edu (Ed Osinski)
++// Date: Fri, 05 Jun 92 20:47:37 -0400
++// Subject: parameter name forgotten in certain friends
++// Message-ID: <9206060047.AA05594@MURRAY.CS.NYU.EDU>
++
++class T2;
++
++class T {
++ friend void f (int&);
++};
++
++class T2 {
++ friend void f (int& i) { // BOGUS -
++ i = 1;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/friend5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/friend5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/friend5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/friend5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed friends
++ extern "C" int good_friend(int);
++ extern "C" int bad_friend();
++
++ class assembler {
++ friend int good_friend(int);
++ friend int bad_friend();
++ void *parts;
++ };
++
++ assembler obj;
++
++ int good_friend(int)
++ {
++ obj.parts = 0;
++ } // ERROR - non-void
++
++ int bad_friend()
++ {
++ obj.parts = 0;
++ } // ERROR - non-void
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/global-init1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/global-init1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/global-init1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/global-init1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// GROUPS passed initialization
++// global-init file
++// Message-Id: <9212021756.AA12639@grumpy.pocs.com>
++// From: wp@pocs.com (Wolfgang Polak)
++// Subject: Initializers - gcc 2.2.2 (g++), Sparc, SunOS 4.1.1
++// Date: Wed, 2 Dec 92 09:56:01 PST
++
++#include <stdio.h>
++struct S { int a; int c; };
++int i = 3;
++S s = {6, i};
++S * the_s () { return &s; };
++int main ()
++{
++ S * cls = the_s ();
++ if (cls->a != 6)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/incdec1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/incdec1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/incdec1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/incdec1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// Build don't link:
++// Special g++ Options: -w -O3
++// GROUPS passed incdec
++typedef void* Pix;
++class ndbArtPtrVec
++{
++public:
++ ndbArtPtrVec (ndbArtPtrVec&);
++};
++class intndbArtPtrVecMap
++{
++protected:
++ int count;
++ ndbArtPtrVec def;
++ intndbArtPtrVecMap(ndbArtPtrVec& dflt);
++ virtual ndbArtPtrVec& operator [] (int key) = 0;
++ virtual void del(int key) = 0;
++public:
++ virtual Pix first() = 0;
++ virtual void next(Pix& i) = 0;
++ virtual int& key(Pix i) = 0;
++ virtual ndbArtPtrVec& contents(Pix i) = 0;
++};
++struct intndbArtPtrVecAVLNode
++{
++ ndbArtPtrVec cont;
++ intndbArtPtrVecAVLNode(int h, ndbArtPtrVec& c,
++ intndbArtPtrVecAVLNode* l=0, intndbArtPtrVecAVLNode* r=0);
++};
++class intndbArtPtrVecAVLMap : intndbArtPtrVecMap
++{
++protected:
++ intndbArtPtrVecAVLNode* root;
++public:
++ ndbArtPtrVec& operator [] (int key);
++ intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap&);
++};
++ndbArtPtrVec& intndbArtPtrVecAVLMap::operator [] (int item)
++{
++ ++count;
++ root = new intndbArtPtrVecAVLNode(item, def);
++}
++intndbArtPtrVecAVLMap::intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap& b) :intndbArtPtrVecMap(b.def)
++{
++ for (Pix i = b.first(); i != 0; b.next(i))
++ (*this)[b.key(i)] = b.contents(i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed initialization
++// init file
++// From: Ingo Donasch <ingo@specs.de>
++// Date: Wed, 16 Jun 93 13:28:55 +01:00
++// Subject: g++-2.4.2 bug report
++// Message-ID: <199306161128.AA22079@opamp.specs.de>
++
++class b;
++
++class a {
++public:
++ a(const b*); // needs this parameter
++};
++
++class b {
++private:
++ a three[3];
++public:
++ b();
++};
++
++b::b() : three(this)
++{ // ERROR - bad array initializer
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// GROUPS passed initialization
++// init file
++// From: hansen@srd.ull.rdc.toshiba.co.jp
++// Date: Mon, 13 Dec 93 18:27:51 +0900
++// Subject: g++ Bug
++// Message-ID: <9312130927.AA08192@VLCS151.noname>
++
++#include <stdio.h>
++
++int X = 7;
++
++struct foo {
++ int a,b,c;
++};
++
++struct foo Ack = {5, X, 3};
++
++int main()
++{
++ if (Ack.a == 5 && Ack.b == 7 && Ack.c == 3)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// GROUPS passed initialization
++// init file
++// Message-Id: <9306280834.AA20921@slsvitt.us-es.sel.de>
++// From: David Binderman 3841 <dcb@us-es.sel.de>
++// Subject: Page 289 of the ARM
++// Date: Mon, 28 Jun 93 10:34:37 +0200
++
++struct T {
++ int m;
++
++ T( int g):m(g){}
++};
++
++// T s1[2][2] = {1,2,3,4};
++
++int main() {
++ T s1[2][2] = {1,2,3,4};
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// GROUPS passed initialization
++// init file
++// From: hansen@srd.ull.rdc.toshiba.co.jp
++// Message-Id: <9312130927.AA08192@VLCS151.noname>
++// Subject: g++ Bug
++// Date: Mon, 13 Dec 93 18:27:51 +0900
++
++#include <stdio.h>
++
++int X = 7;
++
++struct foo {
++ int a,b,c;
++};
++
++struct foo Ack = {5, X, 3};
++
++int main()
++{
++ if (Ack.a != 5
++ || Ack.b != 7
++ || Ack.c != 3)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed initialization
++class foo {
++public:
++ int data;
++ foo(int dat) { data = dat; }
++};
++
++class bar {
++public:
++ foo f[3] = { 1, 2, 3 }; // works: f[0] = 1, f[1] = 2, f[2] = 3 // ERROR - ANSI C++ forbids initialization of member f;
++};
++
++class bar2 {
++public:
++ foo f[3] = { foo(1), foo(2), foo(3) }; // ERROR - ANSI C++ forbids initialization of member f;
++ // does not compile -- error: field initializer is not constant
++};
++
++int main(void)
++{
++ foo f[3] = { foo(1), foo(2), foo(3) };
++ // standard C++ ... and it works too! :)
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed initialization
++// init file
++// From: lupine!segfault!rfg@uunet.UU.NET
++// Date: Sun, 27 Sep 92 14:06:22 MDT
++// Subject: Bug in g++ (920220) handling reference initializers.
++// Message-ID: <15409.717627982@segfault>
++
++int * const & fiddle = 0;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed initialization
++// init file
++// From: thayer@moose.cs.columbia.edu (Charles Thayer)
++// Date: Wed, 30 Sep 92 02:38:17 EDT
++// Subject: small bug
++// Message-ID: <9209300638.AA22334@moose.cs.columbia.edu>
++
++int main() {
++int offset;
++char buf[offset]=""; // ERROR - ansi forbids variable arrays
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed initialization
++class Time;
++class TimeNote;
++
++class SvTime
++{
++public:
++ static TimeNote *time_events = 0;// ERROR - .*
++};
++
++SvTime CurrentTime = {0};// ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++// GROUPS passed initialization
++// init file
++// From: dcb@us-es.sel.de
++// Date: Mon, 12 Oct 92 07:51:52 +0100
++// Subject: G++, ARM Page 141
++// Message-ID: <9210120651.AA15257@us-es.sel.de>
++
++extern int fred( int);
++
++class X {
++ public :
++ void f( int = fred( 0) ) ; // ERROR - previous spec
++} ;
++
++void X::f( int x = fred( 0) ) {// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed initialization
++class Vector {
++ double *v;
++ int size;
++
++public:
++ Vector(int n);
++ ~Vector();
++};
++
++exmpl() { Vector x(8)[16]; }// ERROR - .*
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed initialization
++class test
++ {
++ public:
++ int x;
++ int y;
++ test (int val) { x = val; y = 0;}
++ };
++
++test ar(34)[5];// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed initialization
++// init file
++// From: kol@world.std.com (Nikolay Yatsenko)
++// Date: Wed, 27 Jan 1993 16:39:13 -0500
++// Subject: g++ bug
++// Message-ID: <199301272139.AA25514@world.std.com>
++
++
++const int ic = 1;
++void f(int& arg)
++{ // ERROR - argument 1
++ if (arg) ;
++}
++const int& icr = ic;
++
++int main(void)
++{
++ f(icr); // g++ does not give error here// ERROR - .*
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/init9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/init9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// GROUPS passed initialization
++// init file
++// From: Richard Speed <speed@cs.montana.edu>
++// Date: Sun, 6 Jun 1993 15:19:41 -0600 (MDT)
++// Subject: excess elements in aggr initzer
++// Message-ID: <Pine.3.07.9306061541.A10267-b100000@fubar.cs.montana.edu>
++
++extern "C" void printf (char *, ...);
++
++class samp {
++ int a;
++public:
++ samp(int n) { a = n; }
++ int get_a() { return a; }
++};
++
++int main() {
++ samp ob[4] [2] = { // Generated Error
++ 1, 2,
++ 3, 4,
++ 5, 6,
++ 7, 8,
++ };
++ int i;
++
++ if (ob[0][0].get_a() == 1 && ob[0][1].get_a() == 2
++ && ob[1][0].get_a() == 3 && ob[1][1].get_a() == 4
++ && ob[2][0].get_a() == 5 && ob[2][1].get_a() == 6
++ && ob[3][0].get_a() == 7 && ob[3][1].get_a() == 8)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/inline4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/inline4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/inline4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/inline4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// GROUPS passed inlining
++// inline file
++// Message-Id: <9306020823.AA14027@joker>
++// From: stefan@mpi-sb.mpg.de
++// Subject: gcc-2.4.2 template function bug (1)
++// Date: Wed, 2 Jun 93 10:23:14 +0200
++
++extern "C" int printf (const char *, ...);
++
++template <class T> inline T func(const T& x) { return x; }
++
++inline int func(const int& x) { return x; }
++
++
++int main()
++{ int x;
++ func(x);
++ printf ("PASS\n");
++ }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/inline6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/inline6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/inline6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/inline6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed inlining
++// inline file
++// Message-Id: <199307162240.AA04019@world.std.com>
++// From: kol@world.std.com (Nikolay Yatsenko)
++// Subject: g++ bug: crash with extern C friend
++// Date: Fri, 16 Jul 1993 18:40:48 -0400
++
++inline void Ignore(){}
++
++extern "C" void foo() {} // but without extern C g++ compiles it
++
++struct A
++{
++ void f() {Ignore();}
++ friend void foo ();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/inline7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/inline7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/inline7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/inline7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed inlining
++ template <class Type>
++struct A {
++ typedef int X;
++ A() {}
++ virtual ~A() { }
++};
++ template <class Type>
++struct B : public A<Type> {
++ B() { }
++};
++B<int>::X x;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/memoized1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/memoized1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/memoized1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/memoized1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// Special g++ Options: -fsave-memoized
++// GROUPS passed memoized
++class CArray
++{
++public:
++ CArray();
++};
++class CBTree : public CArray
++{
++};
++class CData
++{
++public:
++ virtual ~CData();
++};
++class CStr : public CData
++{
++ inline int Read();
++ inline int Write() const;
++};
++class CResource : private CBTree
++{
++ struct SResourceNode
++ {
++ CStr xKey;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/mentor1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/mentor1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/mentor1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/mentor1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Special g++ Options: -O
++// GROUPS passed mentor
++struct Word {
++ struct S1 *p1;
++};
++struct S1 {
++ Word o;
++ void shift_left(int delta, int ct);
++};
++inline void S1::shift_left(int delta, int ct)
++{
++ int cnt = ct;
++ for (S1 *to_p = this, *from_p = to_p + delta; cnt--;) *to_p++ = *from_p++;
++}
++
++void dispose_t(S1 *tp, int from_index, int ct, const int d_last_t)
++{
++ int new_ct = d_last_t + 1 - ct;
++ tp[0].o.p1[from_index].shift_left(ct, new_ct - from_index);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missed-error1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missed-error1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missed-error1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missed-error1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed missed-error
++// missed-error file
++// From: John Carr <jfc@Athena.MIT.EDU>
++// Date: Tue, 02 Feb 1993 07:38:53 EST
++// Subject: Re: g++ ignores language context of function pointers
++// Message-ID: <9302021238.AA01513@Achates.MIT.EDU>
++
++typedef void (*pfv)();
++void f ();
++
++extern "C"
++{
++ typedef void (*pcfv)(void);
++ void cf (void);
++}
++
++pfv p = f;
++pfv p2 = cf; // ERROR - mismatch XFAIL *-*-*
++pcfv p3 = f; // ERROR - mismatch XFAIL *-*-*
++pcfv p4 = cf;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missed-error2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missed-error2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missed-error2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missed-error2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed missed-error
++// missed-error file
++// From: ndc!don@csvax.cs.caltech.edu (Don Erway)
++// Date: Thu, 21 May 92 15:40:45 PDT
++// Subject: More on [g++ 2.1 : overloaded function selection incorrect]
++// Message-ID: <9205212240.AA17934@ndc.com>
++
++#include <iostream.h>
++
++inline int max(int a, int b) {return a > b ? a : b;}; // ERROR - candidate
++inline double max(double a, double b) {return a > b ? a : b;}; // ERROR - candidate
++
++int main() {
++ static void foo(int i, int j, double x, double y) ;// ERROR - .*
++
++ foo(4, -37, 14.39, 14.38);
++}
++
++// 971006 we no longer give an error for this since we emit a hard error
++// about the declaration above
++static void foo(int i, int j, double x, double y) {
++
++ cout << "Max(int): " << max(i,j) << " Max(double): " <<
++max(x,y) << '\n';
++ cout << "Max(int, double): " << max(i, y) << '\n';// ERROR -
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missed-error3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missed-error3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missed-error3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missed-error3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,124 @@
++// Build don't link:
++// GROUPS passed missed-error
++// missed-error file
++// From: Neil Wilson <csf004@cch.coventry.ac.uk>
++// Date: Tue, 28 Apr 92 13:53:54 WET DST
++// Subject: g++ version 2.1 bugs
++// Message-ID: <15717.9204281253@cch.coventry.ac.uk>
++
++
++// enum bool { FALSE = 0, TRUE = 1 };
++
++typedef int T;
++
++class Traversable {
++public:
++ virtual const T item() const = 0;
++ virtual const bool off() const = 0;
++ virtual ~Traversable() { };
++};
++
++class Chain : public Traversable {
++public:
++ virtual const int count() const = 0;
++ virtual const bool empty() const = 0;
++ virtual void forth() const = 0;
++ virtual const bool isfirst() const = 0;
++ virtual const bool islast() const = 0;
++ virtual const int position() const = 0;
++ virtual const T first() const = 0;
++ virtual const T last() const = 0;
++ virtual const T i_th(const int index) const = 0;
++ virtual void start() const = 0;
++ virtual void back() const = 0;
++ virtual void finish() const = 0;
++ virtual void move(const int index) const = 0;
++ virtual void go(const int index) const = 0;
++ virtual void put(const T value) = 0;
++ virtual void put_i_th(const T value, const int index) = 0;
++ virtual void swap(const int index) = 0;
++ virtual void wipe_out() = 0;
++};
++class List : public Chain {
++protected:
++ int item_count;
++ int cursor_position;
++ virtual void go_offleft() const = 0;
++ virtual void go_offright() const = 0;
++ virtual void copy(const List& other) = 0;
++public:
++ List() : item_count(0), cursor_position(0) { };
++ virtual const int count() const;
++ virtual const bool empty() const;
++ virtual const bool isfirst() const;
++ virtual const bool islast() const;
++ virtual const bool offleft() const;
++ virtual const bool offright() const;
++ virtual const bool off() const;
++ virtual const int position() const;
++ virtual const T first() const;
++ virtual const T last() const;
++ virtual const T i_th(const int index) const;
++ virtual void start() const;
++ virtual void forth() const;
++ virtual void back() const;
++ virtual void finish() const;
++ virtual void move(const int index) const;
++ virtual void go(const int index) const;
++ friend const bool operator==(const List& left,
++ const List& right);
++ friend const bool operator!=(const List& left,
++ const List& right);
++ virtual void put_i_th(const T value, const int index);
++ virtual void swap(const int index);
++};
++typedef int T;
++class Array {
++private:
++ int lower_index;
++ int upper_index;
++ T *array;
++protected:
++ virtual void allocate(const int minindex, const int maxindex);
++ virtual void copy(const Array&other);
++public:
++ Array(const int minindex, const int maxindex);
++ Array(const Array& other);
++ virtual const int count() const;
++ virtual const int lower() const;
++ virtual const int upper() const;
++ virtual const T item(const int index) const;
++ const T Array::operator[](const int index); // ERROR - qualification ignored
++ virtual const bool valid_index(const int index) const;
++ virtual const bool empty() const;
++ friend const bool operator==(const Array& left, const Array& right);
++ friend const bool operator!=(const Array& left, const Array& right);
++ virtual void put(const T value, const int index);
++ virtual void wipe_out();
++ Array& operator=(const Array& other);
++ virtual ~Array();
++};
++class Fixed_List: public List, private Array {
++protected:
++ virtual void go_offleft() const;
++ virtual void go_offright() const;
++ virtual void copy(const List& other);
++public:
++ Fixed_List(const List& other);
++ Fixed_List(const int size): Array(1, size) { };
++ virtual const bool empty() const;
++ virtual const int count() const;
++ virtual const T item() const;
++ virtual const T i_th(const int index) const;
++ virtual void move(const int index) const;
++ virtual void put(const T value);
++ virtual void put_i_th(const T value, const int index);
++ virtual void wipe_out() { };
++ Fixed_List& operator=(const List& other);
++};
++
++void Fixed_List::go_offleft() const
++{
++ cursor_position = 0;// ERROR -
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missing1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missing1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/missing1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/missing1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed missing
++// missing file
++// Message-Id: <9207100259.AA11702@quaestor>
++// From: adam@inference.com (David Adam)
++// Subject: G++ does not allow parens around declarators.
++// Date: Thu, 9 Jul 92 19:59:51 PDT
++
++void foo()
++{
++ long (bar)[5];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed nest
++// nest file
++// From: gs4t@virginia.edu (Gnanasekaran Swaminathan)
++// Date: Wed, 30 Dec 1992 20:38:07 GMT
++// Subject: Local type names bug in g++ 2.3.3
++// Message-ID: <1992Dec30.203807.17504@murdoch.acc.Virginia.EDU>
++
++typedef char* T; // ERROR - previous declaration
++
++struct Y {
++ T a;
++ typedef long T; // error. See ARM p189-191 for details// ERROR -
++ T b;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed nest
++struct B
++{
++ class B_I { };
++};
++
++struct D : public B
++{
++ B_I foo;
++ class I : public B_I { };
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed nest
++#include <iostream.h>
++
++struct inner {
++ static void f() { cout << "inner::f()\n";}
++};
++
++struct outer {
++
++ struct inner {
++ static void f() { cout << "outer::inner::f()\n";}
++ };
++
++ static void f() {
++ inner::f(); //call of outer::inner::f()
++ ::inner::f(); //(try to) call inner::f() => parse error
++ }
++};
++
++int main() {
++ outer::f();
++ cout << endl;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed nest
++// nest file
++// From: Neal Young <ney@princeton.edu>
++// Date: Mon, 11 Oct 93 17:03:59 EDT
++// Subject: g++ 2.4.5 bug report: local class decl can't access local static var
++// Message-ID: <9310112103.AA06326@cs>
++
++void f()
++{
++ static int s;
++
++ struct local {
++ int j() { return s; } // should be okay, see 1991 ref. man. r.9.8
++ };
++}
++
++int main()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/nest5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/nest5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed nest
++// nest file
++// From: tal@vlsi.cs.caltech.edu
++// Date: Mon, 11 Oct 93 16:26:02 -0700
++// Subject: Serious bug: g++2.4.5 -Doesn't support local classes
++// Message-ID: <9310112325.AA13386@vlsi.cs.caltech.edu>
++
++void foo() {
++ class Wrapper {
++ public:
++ void F (void * Wrapperptr)
++ {
++ Wrapper * wrapptr = ( Wrapper *) Wrapperptr;
++ }
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-eq file
++// Message-Id: <9306040324.AA22954@balder.cs.wisc.edu>
++// From: so@cs.wisc.edu (Bryan So)
++// Subject: g++ bug
++// Date: Thu, 3 Jun 93 22:24:13 -0500
++
++template <class T>
++struct Test {
++ int data;
++ Test& operator=(int i) { data = i; return *this; }
++};
++
++
++int main()
++{
++ Test<int> i, j;
++
++ i = j;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-eq file
++// Message-Id: <CCJrut.9M7@csc.ti.com>
++// From: rowlands@hc.ti.com (Jon Rowlands)
++// Subject: g++ 2.4.5: assignment operator in base class
++// Date: Mon, 30 Aug 1993 00:54:29 GMT
++
++class B {
++public:
++ B & operator = (B); // delete this line and problem goes away
++};
++
++class D : public B {
++public:
++ D();
++ D(int);
++ D(B);
++};
++
++int
++main() {
++ B b;
++ D d;
++
++ d = d;
++
++ d = 0; // t.cxx:20: assignment not defined for type `D'
++ d = D(0);
++
++ d = b; // t.cxx:23: assignment not defined for type `D'
++ d = D(b);
++
++ return(0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-eq file
++// Message-Id: <199311181618.AA27761@oil.cs.columbia.edu>
++// From: Sam Fenster <fenster@cs.columbia.edu>
++// Subject: g++ 2.5.3 can't disable assignment
++// Date: Thu, 18 Nov 1993 11:18:18 -0500
++
++class B
++ {
++ B &operator = (const B &); //Disable assignment!
++ public:
++ virtual ~B () {}
++ };
++
++class D: public B
++ {
++ public:
++ D () {}
++ };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-eq file
++// Message-Id: <1993Nov18.210502.28842@midway.uchicago.edu>
++// From: mps@dent.uchicago.edu (Michael Spertus)
++// Subject: g++ 2.5.4 bug : operator=
++// Date: Thu, 18 Nov 1993 21:05:02 GMT
++
++class T {
++};
++
++class EP {
++public:
++ void operator=(T *);
++};
++
++
++void EP::operator=(T *) { }
++
++int main()
++{
++ EP ep1, ep2;
++ ep1 = ep2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed operators
++void foo (int * a, int * b, int * c) {}
++
++int main() {
++ int a,b,c;
++ foo (&a, &b, &c);
++ (a = b) = c;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// GROUPS passed operators
++// opr-del file
++// Message-Id: <199301272137.AA25213@world.std.com>
++// From: kol@world.std.com (Nikolay Yatsenko)
++// Subject: bug report
++// Date: Wed, 27 Jan 1993 16:37:30 -0500
++
++extern "C" int printf(const char* ...);
++
++int delete_counter = -1;
++
++struct T{
++ void operator delete (void * p) {delete_counter ++; ::operator delete(p);}
++};
++
++int main(void)
++{
++ T * ps1 = new T;
++
++ ::delete ps1; // Wrong T::operator delete() is called here
++
++ if (delete_counter != -1)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// GROUPS passed operators
++// copy file
++// From: gfm@mencon.mencon.oz.au (Graham Menhennitt)
++// Date: Thu, 29 Apr 93 20:53:07 EST
++// Subject: 4 bugs in g++ 2.3.3
++// Message-ID: <9304291053.AA00090@mencon>
++
++#include <stdio.h>
++
++int pass = 0;
++struct A {
++ A(void) {}
++ A(const A& a) { ; }
++ A& operator = (const A& a) { pass = 1; }
++};
++
++struct B {
++ B(const A& aa) { B::a = aa; }
++ A a;
++};
++
++int main(void)
++{
++ B(A());
++ if (pass)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Special g++ Options: -Wall -pedantic-errors
++// GROUPS passed operators
++// copy file
++// From: gfm@mencon.mencon.oz.au (Graham Menhennitt)
++// Date: Thu, 29 Apr 93 20:53:07 EST
++// Subject: 4 bugs in g++ 2.3.3
++// Message-ID: <9304291053.AA00090@mencon>
++
++ struct A {
++ A& operator = (const A& a) {}// ERROR -
++ };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-ampr file
++// From: mecklen@oops.cs.utah.edu (Robert Mecklenburg)
++// Date: Thu, 8 Oct 92 16:33:08 -0600
++// Subject: Type conversion and overloading bugs in 2.2.2
++// Message-ID: <9210082233.AA28203@hellgate.utah.edu>
++
++ enum E { a, b, c };
++ struct Estr {
++ E value;
++ Estr() {}
++ Estr( int i ) : value( (E)i ) {}
++ operator E() { return value; }
++ };
++ extern Estr baz();
++ int bazz() { return baz() & 2; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-ampr file
++// From: Jarkko Sonninen <Jarkko.Sonninen@lut.fi>
++// Date: Thu, 7 Oct 1993 08:25:26 +0200
++// Subject: type of base class member
++// Message-ID: <199310070625.AA18653@kaisa.it.lut.fi>
++
++class A {
++ public:
++ int j;
++};
++
++class B: public A {
++ public:
++ B () {
++ !(A::j);
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed operators
++
++struct A {
++ int x;
++};
++
++int operator()(A x,float y) {// ERROR - .*
++ return 1;
++}
++
++int main() {
++ A x;
++ x(1.0); // ERROR - no match
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed operators
++template <class T>
++class t {
++public:
++ t() {}
++};
++
++class m {
++ t<int> c;
++public:
++ m() : c() {}
++};
++
++m *p() {return new m;}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// GROUPS passed operators
++// opr-new file
++// From: (The Crossjammer) <xjam@cork.cs.berkeley.edu>
++// Date: Mon, 23 Nov 92 23:35:26 PST
++// Subject: g++-2.3.1 : Incorrectly calls overloaded operator new
++// Message-ID: <9211240735.AA06872@cork.CS.Berkeley.EDU>
++
++
++#include <stdio.h>
++#include <stdlib.h>
++
++class blah {
++ int j;
++ public:
++ blah();
++ void *operator new(size_t size) throw();
++};
++
++inline blah::blah() : j(0) {
++
++}
++
++
++void *blah::operator new(size_t size) throw(){
++ printf ("FAIL\n");
++ exit (1);
++ return NULL;
++}
++
++int main(int arg, char** argv) {
++ blah* blahPtr;
++
++ blahPtr = new blah[100];
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-new file
++// From: rwave!myersn%rwave.roguewave@cs.orst.edu (Nathan Myers)
++// Date: Wed, 16 Dec 92 11:55 PST
++// Subject: 2.3.2: friend decl breaks member op new
++// Message-ID: <m0n24qP-0000GmC@rwave.roguewave.com>
++
++#include <stddef.h>
++struct Link {
++ void* operator new(size_t, int);
++ friend void* __builtin_new(size_t); // This declaration triggers the bug
++};
++void f() { new(2) Link; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-new file
++// From: gparker@world.std.com (Glenn P Parker)
++// Date: Mon, 25 Jan 1993 20:43:43 -0500
++// Subject: gcc bug
++// Message-ID: <199301260143.AA14133@world.std.com>
++
++typedef int (**PPF)(int);
++
++int main(void)
++{
++ PPF pf2 = new (int (*) (int)); // internal compiler error on this line.
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// GROUPS passed operators
++// opr-new file
++// From: David Binderman 3841 <dcb@us-es.sel.de>
++// Date: Mon, 21 Jun 93 11:42:11 +0200
++// Subject: G++ 2.4.3 and operator new
++// Message-ID: <9306210942.AA10276@slsvitt.us-es.sel.de>
++
++int FLAG=0;
++
++#include <new>
++
++extern "C" int printf( const char *, ...);
++
++void * operator new(size_t, const std::nothrow_t&) throw() { FLAG=1; return 0; }
++
++class K {
++private:
++ int i;
++public:
++ K( int j) {
++ i = j;
++ }
++};
++
++int main(void)
++{
++ K * pK = new (std::nothrow) K( 10);
++ if ( FLAG != 1 )
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed operators
++#include <sys/types.h>
++#include <stdio.h>
++
++class new_test
++{
++ int type;
++public:
++ void* operator new(size_t sz, int count, int type);
++};
++
++void* new_test::operator new(size_t sz, int count, int type)
++{
++ void *p;
++
++ printf("%d %d %d\n", sz, count, type);
++
++ p = new char[sz * count];
++ ((new_test *)p)->type = type;
++ return p;
++};
++
++int main()
++{
++ new_test *test;
++ int count = 13;
++
++ test = new(count, 1) new_test;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed operators
++// (Message bugs/opr-del:4)
++// From: jamshid@ses.com (Jamshid Afshar)
++// Date: Fri, 25 Feb 94 18:44:01 CST
++// Subject: Re: delete on "smart pointers"
++// Message-ID: <9402262328.AA16321@pancake>
++//
++// Who was apparently replying to kuhlins@hawk.wifo.uni-mannheim.de
++
++
++template<class T> class Ptr {
++public:
++ Ptr(T*);
++ operator T*();
++};
++
++int main() {
++ Ptr<int> ip = new int(2);
++ delete ip;
++ operator delete(ip);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-conv file
++// Message-Id: <199301260142.AA13995@world.std.com>
++// From: gparker@world.std.com (Glenn P Parker)
++// Subject: gcc bug
++// Date: Mon, 25 Jan 1993 20:42:35 -0500
++
++int main(void)
++{
++ int i = int(); // g++ 2.3.3 cannot compile it.
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// GROUPS passed operators
++// opr-mm file
++// Date: Thu, 2 Jun 94 10:00:29 +0200
++// From: chatty@cenatls.cena.dgac.fr (Stephane Chatty)
++// Message-Id: <9406020800.AA14201@geant.cenatls.cena.dgac.fr>
++// Subject: result of operator -- with g++-2.5.8
++
++#include <stdio.h>
++
++void nop()
++{
++}
++
++int main ()
++{
++ int a = 2;
++
++ if (----a == 0)
++ nop ();
++
++ if (a == 0)
++ printf("PASS\n");
++ else
++ printf("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-del file
++// From: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
++// Date: Thu, 4 Aug 94 08:19:20 +0200
++// Subject: delete [] A::s
++// Message-ID: <9408040619.AA27602@azu.informatik.uni-stuttgart.de>
++
++class A
++{
++ char *s;
++public:
++ void f ();
++};
++
++void A::f ()
++{
++ delete [] A::s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++// Build don't link:
++// GROUPS passed operators
++#include <iostream.h>
++
++//
++// frees space allocated for N-D array
++//
++
++template <class T>
++void free(long rows, T** array)
++{
++for( long i = 0; i < rows; i++ )
++ delete [] array[i]; // delete row
++delete [] array; // delete outer array
++}
++
++template <class T>
++T* allocate1d(long size, T*& array)
++{
++return array = new T[size];
++}
++
++template <class T>
++T** allocate2d(long d1, long d2, T**& array)
++{
++if( allocate1d(d1, array) != 0 )
++ {
++ for( long i = 0; i < d1; i++ )
++ {
++ if( allocate1d(d2, array[i]) == 0 )
++ {
++ free(i,array);
++ return array;
++ }
++ }
++ }
++return array;
++}
++
++int main()
++{
++long d1 = 3, d2 = 4;
++class foo
++{
++public:
++foo() {cout << "foo created" << endl; }
++
++~foo() {cout << "foo deleted" << endl; }
++};
++
++foo **f2;
++allocate2d(d1, d2, f2);// ERROR - type.*// ERROR - trying to.*
++free(d1, f2);// ERROR - type.*// ERROR - trying to.*
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-new file
++// From: flisakow@cae.wisc.edu
++// Date: Thu, 1 Sep 94 18:21:09 CDT
++// Subject: g++ bug?
++// Message-ID: <9409012321.AA05346@hprisc-19.cae.wisc.edu>
++
++#include <stdio.h>
++
++
++struct fcell {
++ FILE *fd;
++ struct fcell *next;
++};
++
++
++class FStack {
++public:
++ struct fcell *top;
++ FStack() { top = NULL ; } ;
++ inline void push(FILE * fd1, int line_num, char *fname = NULL) {
++ struct fcell *tmp = new struct fcell;
++ tmp->fd = fd1;
++ tmp->next = top;
++ top = tmp ;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed operators
++class A {
++ public:
++ A() {
++ }
++};
++
++static class A *A_new_() {
++ return new class A;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-pl file
++// Message-Id: <9212010409.AA24967@zeus.research.otc.com.au>
++// From: grahamd@zeus.research.otca.oz.au (Graham Dumpleton)
++// Subject: Failure to use conversion operator.
++// Date: Tue, 1 Dec 92 15:11:18 EST
++
++class BUG1
++{
++ public:
++
++ operator char*() const { return myData; }
++ char* myData;
++};
++
++void bug1()
++{
++ BUG1 bug1;
++ bug1.myData = "0123456789";
++ char* s = bug1 + 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// GROUPS passed operators
++// opr-del file
++// From: rollins@bart.ee.queensu.ca (Mark Rollins)
++// Date: Thu, 3 Sep 1992 22:01:03 -0400 Fri, 4 Sep 1992 02:00:25 GMT
++// Subject: delete [size] pointer; Problem
++// Message-ID: <92Sep3.220137edt.30@jarvis.csri.toronto.edu>
++
++#include <complex>
++typedef complex<double> Complex;
++#include <stdio.h>
++
++class Vector {
++ int size;
++ Complex *v;
++ public:
++ Vector(int s=1) { size = s; v = new Complex[size];};
++ ~Vector() { delete [size] v;}// ERROR - warning
++};
++
++void foo(int s)
++{
++ Vector junk(s);
++}
++
++int main()
++{
++ Vector* test;
++ for (int i=0;i<40;i++) // was 100000
++ foo(1000);
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-as file
++// From: Klaus Ahrens <ahrens@informatik.hu-berlin.de>
++// Date: Fri, 26 Mar 93 12:50:37 mez
++// Subject: no default assignment
++// Message-ID: <199303261149.TA23114@mail.Germany.EU.net>
++
++class A {
++public:
++ A(int){}
++ A& operator=(const A&){return *this;}
++};
++
++class B: public A {
++public:
++ B(int i): A(i) {}
++};
++
++int main()
++{
++ B b=1;
++ b=1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// GROUPS passed operators
++#include <stdio.h>
++
++class shape {
++ public:
++ virtual void vDisplay(void) const = 0;
++ protected:
++ int X;
++ int Y;
++};
++
++class square :public shape {
++ public:
++ square(int x, int y, int width_) {
++ X = x;
++ Y = y;
++ width = width_;
++ }
++ void vDisplay(void) const {
++ printf ("PASS\n");
++ }
++ protected:
++ int width;
++};
++
++
++class triangle :public shape {
++ public:
++ triangle(int x, int y, int width_, int height_) {
++ X = x;
++ Y = y;
++ width = width_;
++ height = height_;
++ }
++ void vDisplay(void) const {
++ printf ("FAIL\n");
++ }
++ protected:
++ int width;
++ int height;
++};
++
++int main() {
++ shape* s1 = new square(4,4,5);
++ shape* s2 = new triangle(6,6,2,3);
++ *s1 = *s2;
++ s1->vDisplay();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/operators9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/operators9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed operators
++// opr-eq file
++// Message-Id: <9301141514.AA05925@mi.el.utwente.nl>
++// From: klamer@mi.el.utwente.nl (Klamer Schutte)
++// Subject: 2.3.3: failed to detect error
++// Date: Thu, 14 Jan 93 16:14:21 +0100
++
++class B
++{
++public:
++ operator=(B &); // ERROR - no type or storage class
++};
++
++void
++test(B &b1, const B &b2)
++{
++ b1 = b2;// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: Eirik Fuller <eirik@elf.ithaca.ny.us>
++// Date: Wed, 15 Dec 1993 17:06:11 -0500
++// Subject: parse error
++// Message-ID: <199312152206.AA06584@tonttu.TC.Cornell.EDU>
++
++
++class s;
++
++template <class T>
++class t
++{
++public:
++ void f(T *t);
++};
++
++class l
++{
++public:
++ void s() {};
++};
++
++extern t<l> g;
++
++class p
++{
++public:
++ void *h;
++ s *a() {return (s *) h;};
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: hendrik%vedge.UUCP@iro.umontreal.ca
++// Date: Wed, 23 Sep 92 17:10:28 -0400
++// Subject: parenthesized method
++// Message-ID: <9209232110.AA02533@.>
++
++
++class goo{
++public:
++ void noo_bloo();
++};
++
++void choo(goo* too)
++{ (too->noo_bloo)();
++}
++
++void choo_too(goo* too)
++{ too->noo_bloo();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: jonathan@Pescadero.Stanford.EDU
++// Date: Tue, 15 Sep 92 14:15:29 PDT
++// Subject: Function taking as argument a pointer to a pointer to a function
++// that returns int causes coredump in cc1plus
++// Message-ID: <9209152115.AA07423@Pescadero.Stanford.EDU>
++
++ unsigned char FindMdc ( int (**)() );
++ unsigned char FindMdc2 ( int (**funcname)() );
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: tll@cco.caltech.edu (Tal Lewis Lancaster)
++// Date: 18 Mar 1993 17:09:43 GMT
++// Subject: Re: unexpected difference between gcc and g++ (both 2.3.3)
++// Message-ID: <1oaacnINNt20@gap.caltech.edu>
++
++/* Notice that this case parses fine */
++int (* volatile y)[10];
++
++void foo2() {
++ /* The parser can't handle it now */
++ int (* volatile x)[10];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: Glenn Engel <glenne@lsid.hp.com>
++// Date: Fri, 29 Jan 93 18:42:03 PST
++// Subject: Parse Error
++// Message-ID: <9301300242.AA15550@hplslk.lsid.hp.com>
++
++int test1(void (**roc)(int,int)); // parse error
++int test2(int id,void (**orc)(int,int)); // works
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed parsing
++// From: Teemu Torma <Teemu.Torma@frend.fi>
++// Date: Mon, 15 Jun 92 18:42:25 +0300
++// Subject: G++ 2.2.2: Strange parse error
++// Message-ID: <"relay.fren.501:15.05.92.15.42.30"@frend.fi>
++
++long (*foo1 ()) (); // This is ok.
++
++typedef long INT;
++INT (*foo2 ()) (); // This is not, g++ says "parse error before `('"
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: "James S. Vera" <vera@fanaraaken.stanford.edu>
++// Date: Thu, 01 Jul 1993 16:36:32 -0700
++// Subject: Mildly complicated type not understood, 2.4.5
++// Message-ID: <9307012336.AA13841@fanaraaken.Stanford.EDU>
++
++typedef int (*cow[3])(...);
++
++int main() {
++ cow fs;
++ int (*pig[3])(...); // line 5
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: szahn%Robinie@goesser.sie.siemens.co.at (Hr. Zahn)
++// Date: Mon, 5 Jul 93 10:45:51 +0200
++// Subject: Bug report g++ 2.4.5, unexpected syntax errors
++// Message-ID: <9307050845.AA00499@ets5.uebemc.siemens.de>
++
++int f1(
++ int (**a1)()
++ );
++
++int f2(
++ int (**a1)()
++ );
++
++
++int f3(
++ int (**a1)( int a, int b )
++ );
++
++int f4(
++ int (**a1)( int a, int b )
++ );
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++// GROUPS passed parsing
++// parsing folder
++// From: nag@soft.flab.fujitsu.co.jp
++// Date: Thu, 08 Jul 1993 10:54:59 +0900
++// Subject: g++ cannot understand `void (**f)()'
++// Message-ID: <9307080155.AA00496@kumade.soft.flab.fujitsu.co.jp>
++
++ void
++ func() {
++ int ( * * i )[ 2 ];
++ }
++
++// Looks like this is probably the same problem
++// parsing folder
++// From: nag@soft.flab.fujitsu.co.jp
++// Date: Thu, 08 Jul 1993 10:54:59 +0900
++// Subject: g++ cannot understand `void (**f)()'
++// Message-ID: <9307080155.AA00496@kumade.soft.flab.fujitsu.co.jp>
++int main()
++{
++ void (**f)();
++}
++
++
++// Same as
++// From: Chris Dodd <dodd@csl.sri.com>
++// Date: Fri, 16 Jul 93 17:05:04 -0700
++// Subject: bug in declaration parsing in g++ 2.4.5
++// Message-ID: <9307170005.AA03857@pekoe.csl.sri.com>
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/parsing9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/parsing9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++// GROUPS passed parsing
++// From: Jason Merrill <jason@cygnus.com>
++// Date: Fri, 13 Aug 93 12:49:11 PDT
++// Subject: 2.4.5 won't compile array of pointers to functions returning T
++// Message-ID: <9308131949.AA26348@cygnus.com>
++// From: "Robert M. Keller" <keller@jarthur.Claremont.EDU>
++// Subject: g++ bug
++// Date: Fri, 13 Aug 93 10:09:27 PDT
++
++/* Testing declaration of "array of pointers to functions returning T" */
++
++typedef int T;
++
++T foo()
++{ return 10; }
++
++T bar()
++{ return 20; }
++
++T baz()
++{ return 30; }
++
++int main()
++{
++T (*apfrt[10])();
++
++apfrt[0] = foo;
++apfrt[1] = bar;
++apfrt[2] = baz;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/patches1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/patches1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/patches1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/patches1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed patches
++// patches file
++// From: david.binderman@pmsr.philips.co.uk
++// Date: Wed, 6 Oct 93 17:05:54 BST
++// Subject: Reno 1.2 bug fix
++// Message-ID: <9310061605.AA04160@pmsr.philips.co.uk>
++
++int type(float) { return 1; }
++int type(double) { return 2; }
++int type(long double) { return 3; }
++
++extern "C" int printf( const char *, ...);
++
++int main()
++{
++ int i = 0;
++ if (type(0.0) != 2)
++ ++i;
++ if (i > 0)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/pic1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/pic1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/pic1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/pic1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed operators
++// pic file
++// Message-Id: <199406132030.NAA23508@dewitt.eecs.berkeley.edu>
++// Subject: gcc-2.5.8 -fpic fails to compile extern const char static initializer
++// Date: Mon, 13 Jun 1994 13:30:14 -0700
++// From: Christopher Hylands <cxh@dewitt.eecs.berkeley.edu>
++
++extern const char SDFdomainName[] = "SDF";
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/profile1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/profile1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/profile1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/profile1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Special g++ Options: -pg
++// GROUPS passed profiling
++// Skip if not native
++// excess errors test - XFAIL m68k-motorola-sysv m88k-motorola-sysv3 mips*-*-* i[3456]86-*-sco3.2v5*
++#include <stdio.h>
++main()
++{
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// GROUPS passed references
++// (Message bugs/refs:1)
++// From: tal@vlsi.cs.caltech.edu
++// Date: Fri, 25 Feb 94 23:55:50 -0800
++// Subject: g++-2.5.8 produces incorrect code for references
++// Message-ID: <9402260755.AA27693@vlsi.cs.caltech.edu>
++
++#include <stdio.h>
++
++class C {
++private:
++ char** list;
++public:
++ C(char** );
++ void count (int&);
++};
++
++C::C (char** l) {
++ list = l;
++}
++
++void C::count (int& total) {
++ if (*list == NULL)
++ return;
++ else {
++ list++;
++ count (++total); // THIS IS WHERE THE TROUBLE STARTS
++ }
++}
++
++char * foo[] = {
++ "one", "two", "three", NULL};
++
++int main() {
++ C c(foo);
++ int i = 0;
++ c.count(i);
++ if (i == 3)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed references
++int func(int& i)
++{
++ static int& v = i;
++ return v;
++}
++
++int main()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed references
++const int& min(const int& n, const int& m)
++{
++ return n < m ? n : m;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/refs4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/refs4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// GROUPS passed references
++extern "C" void printf (char *, ...);
++
++const int& min(const int& tX, const int& tY)
++{
++ return tX < tY ? tX : tY;
++}
++
++void foo(const int m, const int n)
++{
++ if (m == 1 && n == 100)
++ printf("PASS\n");
++ else
++ printf("FAIL\n");
++}
++
++int main()
++{
++ foo(min(2, 1), min(100, 200));
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed scoping
++// scoping file
++// From: kol@world.std.com (Nikolay Yatsenko)
++// Date: Fri, 16 Jul 1993 18:48:32 -0400
++// Subject: g++ gives wrong error for local structure
++// Message-ID: <199307162248.AA05360@world.std.com>
++
++int main(void)
++{
++ struct A{
++ public: int i;
++ void set (int i)
++ {A::i = i;} // g++ gives wrong error
++ };
++
++ A a;
++ a.set(17);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// GROUPS passed scoping
++// scoping file
++// From: svkakkad@cs.utexas.edu (Sheetal V. Kakkad)
++// Date: Tue, 5 Oct 93 12:38:49 -0500
++// Subject: G++ 2.4.5 - global delete operator not called when using "::delete"
++// Message-ID: <9310051738.AA14586@boogie.cs.utexas.edu>
++
++#include <stdio.h>
++#include <stddef.h>
++#include <stdlib.h>
++
++class foo
++{
++ public:
++ foo () { ; }
++ ~foo () { ; }
++ void *operator new (size_t);
++ void operator delete (void *);
++};
++
++void *foo::operator new (size_t size)
++{
++ return malloc (size);
++}
++
++int overloaded_delete = 0;
++
++void foo::operator delete (void *data)
++{
++ free ((char *) data);
++ overloaded_delete++;
++}
++
++int main ()
++{
++ foo *f = new foo;
++ foo *ff = ::new foo;
++ ::delete ff; // should call the default delete operator
++ delete f;
++ if (overloaded_delete == 1)
++ printf ("PASS\n");
++ else
++ printf ("FAIL\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed scoping
++// local-class file
++// From: dcb@us-es.sel.de
++// Date: Fri, 27 Nov 92 15:34:28 +0100
++// Subject: GNU G++ 2.3.1 bug report
++// Message-ID: <9211271434.AA15612@us-es.sel.de>
++
++
++void f()
++{
++ {
++ struct A {
++ A() {};
++ } a;
++ };
++ {
++ struct A {
++ A() {};
++ } a ;
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed scoping
++// local-class file
++// From: daniels@sugar.neosoft.com (Brad Daniels)
++// Date: Thu, 5 Aug 93 15:36:36 CDT
++// Subject: Bug in g++ 2.4.5: Can't touch nested class identifier inside its members
++// Message-ID: <9308051536.AA06115@NeoSoft.Com>
++
++void f() {
++ class foo {
++ int x;
++ public:
++ foo() : x(1) {}
++ int bar() { foo p; return p.x; }
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/scope5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/scope5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed scoping
++// local-class file
++// From: schlaege@methusalix.ert.rwth-aachen.de (Chris Schlaeger H Zivojnovic)
++// Date: Tue, 10 Aug 93 16:50:33 +0200
++// Subject: Bug report
++// Message-ID: <9308101450.AA28016@methusalix.ert.rwth-aachen.de>
++
++int main()
++{
++ class foo
++ {
++ int i;
++ } ;
++ class bar
++ {
++ public:
++ bar() { y = 0; }
++ void f() { foo x; }
++ private:
++ int y;
++ } ;
++
++ bar c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/shadow1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/shadow1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/shadow1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/shadow1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// Special g++ Options: -Wshadow
++// GROUPS passed shadow-warnings
++// shadow file
++// Message-Id: <9211061827.AA03517@harvey>
++// From: Jeff Gehlhaar <jbg@qualcomm.com>
++// Subject: GCC Bug..
++// Date: Fri, 6 Nov 1992 10:27:10 -0700
++
++class Class
++{
++public:
++ Class(void); // constructor
++ int Shadow(void); // member function
++private:
++ long value;
++};
++
++Class::Class(void)
++{
++ value = 0;
++}
++
++static inline unsigned char
++Function(int Shadow)
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/shadow2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/shadow2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/shadow2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/shadow2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// Special g++ Options: -Wshadow
++// GROUPS passed shadow-warnings
++// (Message bugs/shadow:2)
++// From: michael@utex.rni.sub.org (Michael Utech)
++// Date: Sat, 22 Jan 1994 04:28:00 +0100
++// Subject: very minor problem/bug in gcc-2.5.4, -Wshadow
++// Message-ID: <m0pNZ1T-0008QUC@utex.rni.sub.org>
++
++class X
++{
++ int count;
++public:
++ X() {} // necessary to produce the `count' warning
++};
++
++template <class T>
++class Y
++{
++ T t;
++public:
++ int f (int count) { return (count); }
++};
++
++main ()
++{
++ Y<char> y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// GROUPS passed static-mem
++
++class desc;
++
++class a_desc {
++ public:
++
++ static desc the_desc;
++
++ virtual desc *get_desc();
++};
++
++class desc : public a_desc {
++ public:
++
++ static desc the_desc;
++
++ desc(int);
++
++ desc *get_desc();
++};
++
++
++desc desc::the_desc(1);
++
++desc a_desc::the_desc(0);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed static-mem
++// static-mem file
++// Message-Id: <9406021639.AA00789@oz.NeXT.COM>
++// From: Sumana Srinivasan <Sumana_Srinivasan@next.com>
++// Date: Thu, 2 Jun 94 09:39:09 -0700
++// Subject: static members function pointers
++
++class CRTFooBar;
++
++class CRTFoo {
++public:
++ static const CRTFooBar & defaultFooBar( );
++
++ CRTFoo( const CRTFoo & );
++ CRTFoo( );
++ CRTFoo( const char *,
++ const CRTFooBar &tp = CRTFoo::defaultFooBar(),
++ int = 0 );
++ CRTFoo &setFoo( double,
++ const CRTFooBar & = CRTFoo::defaultFooBar() );
++
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed static-mem
++struct test {
++ void test_member() {
++ static test& ds = *this; // FIX: static test* ds = this;
++ }
++};
++
++
++int main()
++{
++ test t;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/static-mem5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/static-mem5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// Special g++ Options: -w
++// GROUPS passed static-mem
++// static-mem file
++// From: bunch@tazboy.jpl.nasa.gov (Walt Bunch)
++// Date: Thu, 23 Jun 94 14:58:35 UNI
++// Subject: bug report
++// Message-ID: <9406232258.AA03897@tazboy.JPL.NASA.GOV>
++
++
++class A
++{
++public:
++ static void F (int i) {}
++ static void A::G (int i) {}
++};
++
++main ()
++{
++ A::F (17);
++ A::G (42);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/template1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/template1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/template1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/template1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed templates
++
++class String {
++ char s[100];
++};
++
++template <class Element>
++class Art {
++public:
++ Element *data;
++ Art() { data=new Element[100]; }
++};
++
++template <class Key,class Value>
++class Assoc {
++public:
++ struct KeyValue {
++ Key key;
++ Value value;
++ int filled;
++ };
++
++ Art<KeyValue> data;
++ int fill;
++};
++
++int main() {
++ Assoc<String,String> table;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/template2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/template2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/template2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/template2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// GROUPS passed templates
++// Special g++ Options: -fguiding-decls
++extern "C" void printf (char *, ...);
++
++template<class T> T max(T a, T b) { return a > b ? a : b; }
++
++int max(int, int);
++
++main()
++{
++ int j;
++
++ j = max(1,2);
++ j = max (1, 'c');
++ printf ("PASS\n");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/template3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/template3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/template3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/template3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed templates
++template< class R, class T1 = R, class T2 = T1 >
++struct plus
++ {
++ R operator()( const T1& x, const T2& y ) const
++ {
++ return x + y;
++ }
++ };
++
++int
++main()
++ {
++ plus< int > p;
++ return 0;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed temps
++// temps file
++// Date: Mon, 07 Sep 1992 13:12:28 EDT
++// From: richard@ttt.kth.se
++struct foo
++{
++ char *s;
++ foo(char *x) { s=x; }
++};
++
++struct cookie
++{
++ foo * v;
++ cookie ( foo * x) { v=x; }
++};
++
++cookie cat(&foo("apabepa"));// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++// GROUPS passed temps
++// temps file
++// Message-Id: <9212181914.AA05066@sparc1.cnm.us.es>
++// From: juando@cnm.us.es (Juan Domingo Martin Gomez)
++// Subject: Temporaries destroyed too soon
++// Date: Fri, 18 Dec 92 20:14:45 +0100
++
++#include <stdio.h>
++
++int status = 0;
++int fail = 0;
++
++class Foo
++{
++public:
++ Foo();
++ ~Foo();
++
++ Foo &method();
++};
++
++Foo f1()
++{
++ return Foo();
++}
++
++Foo::Foo()
++{
++}
++
++Foo::~Foo()
++{
++ if (status == 2)
++ fail = 0;
++ else
++ fail = 1;
++}
++
++Foo &Foo::method()
++{
++ status++;
++ return *this;
++}
++
++int main()
++{
++ // f1() returns a temporary object. The member function
++ // method() returns a reference to the same object.
++ f1().method().method();
++ if (fail)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// GROUPS passed temps
++// temps file
++// Message-Id: <9308231535.AA19432@geant.cenatls.cena.dgac.fr>
++// From: chatty@geant.cenatls.cena.dgac.fr (Stephane CHATTY)
++// Subject: g++ 2.4.5 does not destroy temporaries
++// Date: Mon, 23 Aug 93 17:35:34 +0200
++
++#include <stdio.h>
++
++class A {
++public:
++ int a;
++ A (int i) : a (i) { ;}
++ A (const A& aa) : a (aa.a) { ;}
++ ~A () { printf ("PASS\n");; }
++};
++
++A
++foo ()
++{
++ return A (10);
++}
++
++int main ()
++{
++ int x = foo ().a;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Special g++ Options: -felide-constructors
++// GROUPS passed temps
++// temps file
++// Message-Id: <9311102043.AA22871@ses.com>
++// From: jamshid@ses.com (Jamshid Afshar)
++// Subject: elide-constructors (aka return value optimization)
++// Date: Wed, 10 Nov 93 14:43:54 CST
++
++#include <stdio.h>
++
++class X {
++ int i;
++ public:
++ X();
++ X(const X&);
++ X(int);
++ ~X();
++};
++
++int did_it = 0;
++
++X::X() { ; }
++X::X(const X&) { did_it = 1; }
++X::X(int) { ; }
++X::~X() { ; }
++
++X foo() {
++ X x(1);
++ return x;
++}
++
++main() {
++ X x = foo();
++ if (did_it)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// GROUPS passed temps
++// temps file
++// Message-Id: <9311171029.AA00592@mencon>
++// From: gfm@mencon.mencon.oz.au (Graham Menhennitt)
++// Subject: gcc 2.5.3 - bug deleting object that is still referred to
++// Date: Wed, 17 Nov 93 21:29:23 EST
++
++#include <stdio.h>
++
++class C {
++public:
++ C(int i) : val(i) { ; }
++ C(const C& c) : val(c.val) { ; }
++ ~C(void) { val = 999; }
++ C& operator = (const C& c) { val = c.val; return *this; }
++
++ C& inc(int i) { val += i; return *this; }
++
++ int val;
++};
++
++C
++f(void)
++{
++ return C(3);
++}
++
++C
++f(int i)
++{
++ return f().inc(i);
++}
++
++int
++main(void)
++{
++ if (f (2).val != 5)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// GROUPS passed temps
++// Date: Tue, 22 Mar 94 12:46:28 +0100
++// From: dak@pool.informatik.rwth-aachen.de
++// Message-Id: <9403221146.AA07815@messua>
++// Subject: Bad code for pointer to member use as reference in g++ 2.5.8
++
++#include <stdio.h>
++struct str {
++ int i;
++} xxx = {0};
++
++int& test(str *arg1, int str::*arg2)
++{
++ return (arg1->*arg2);
++}
++
++int main()
++{
++ test(&xxx, &str::i) = 5;
++ if (xxx.i == 0)
++ printf ("FAIL\n");
++ else
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/temps7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/temps7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed temps
++
++template <class B >
++class A {
++public:
++ class C {};
++};
++
++template class A<int>::C;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed typeck
++// typeck file
++// From: vern@daffy.ee.lbl.gov (Vern Paxson)
++// Date: 24 Sep 1992 23:11:22 GMT
++// Subject: 2.2.2 type-checking error (?) when comparing pointers
++// Message-ID: <26475@dog.ee.lbl.gov>
++
++
++ class a { };
++ class foo : a { };
++ class bar : a { };
++
++ int test( const foo* f, const bar* b )
++ {
++ return f == b;// ERROR -
++ }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed typeck
++// typeck file
++// From: Jutta Degener <jutta@cs.tu-berlin.de>
++// Date: Wed, 9 Jun 1993 17:58:35 +0200 (MET DST)
++// Subject: 2.4.3: Type of new <typedef'ed array>
++// Message-ID: <199306091558.AA19075@mail.cs.tu-berlin.de>
++
++ typedef int arr[10];
++int main()
++ {
++ int * p = new int[10];
++ int * q = new arr; /* g++ complains, but shouldn't */
++ int (* r)[10] = new arr; /* g++ doesn't complain, but should */// ERROR -
++ }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed typeck
++// typeck file
++// From: Dror Caspi <dror@fibronics.co.il>
++// Date: Wed, 9 Jun 1993 17:43:48 +0300
++// Subject: function typedefs in classes
++// Message-ID: <199306091443.AA03735@zorba.fibronics.co.il>
++
++class a
++{
++ public:
++ typedef void (X)();
++
++ X x; // Member function of type X
++};
++
++class b
++{
++ public:
++ typedef void (X)(); //!!!!!! g++ says : syntax error before `;'
++
++ X x; // Member function of type X
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/typeck4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/typeck4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed typeck
++class A {
++ public:
++ const int &operator[]( int i );
++ private:
++ int k;
++};
++
++const int& A::operator[]( int i )
++{
++ return k;
++}
++
++
++void ff( A &anA )
++{
++ int &ani = anA[0];// ERROR -
++
++ ani = 7;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++// GROUPS passed unions
++// anon-union file
++// From: "Terry R. Coley" <terry@wag.caltech.edu>
++// Date: Tue, 25 Aug 1992 17:33:29 -0700
++// Subject: possible bug in gcc/g++
++// Message-ID: <199208260033.AA19417@brahms.wag.caltech.edu>
++
++typedef enum { BADBINOP = 0, PLUS, MINUS, MULT, DIV, POWR } binoptype;
++typedef enum { BADUNOP = 0, NEG = POWR+1, SIN, COS, TAN } unoptype;
++
++typedef struct {
++ char *s;
++ union {
++ binoptype bop;
++ unoptype uop;
++ };
++}
++op_to_charp;
++
++op_to_charp BINOPS[] = { {"+", PLUS},
++ {"-", MINUS},
++ {"*", MULT},
++ {"/", DIV},
++ {"^", POWR} };
++
++int main() {
++ int dummy;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed unions
++// anon-union file
++// From: gerlek@dat.cse.ogi.edu (Michael Gerlek)
++// Date: Tue, 8 Dec 92 12:56 PST
++// Subject: private anonymous unions have public members? (gcc-2.3.1)
++// Message-ID: <m0mzByL-0000hoC@dat.cse.ogi.edu>
++
++class A {
++public:
++ int x;
++private:
++ int y; // ERROR - private
++ union {
++ int z; // ERROR - private
++ };
++};
++
++void f() {
++ A a;
++
++ a.x = 0;
++ a.y = 1;// ERROR - .*
++ a.z = 2;// ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed unions
++// anon-union file
++// From: dcb@us-es.sel.de (David Binderman 3841)
++// Date: Tue, 30 Mar 93 09:06:15 +0200
++// Subject: Page 183 of the ARM
++// Message-ID: <9303300706.AA17079@slsvitt>
++
++static union {
++ char* uC;
++private:
++ int uI;// ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/union4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/union4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed unions
++// anon-union file
++// From: hossein@veritas.com (Hossein Raassi)
++// Date: Wed, 15 Dec 93 13:52 PST
++// Subject: Internal Error
++// Message-ID: <m0pA49A-0000LdC@piano.veritas.com>
++
++static union {
++ struct SS {
++ int ss;
++ };
++};// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++// Special g++ Options: -O
++// GROUPS passed unsorted
++// unsorted.2 file
++// From: skipnyc!skipsun!skip@fsg.com (Skip Gilbrech)
++// Date: Wed, 10 Jun 92 6:55:18 EDT
++// Subject: Problem with derived class access adjustment and -O
++// Message-ID: <9206101055.AA20593@skipsun.UUCP>
++
++
++class A {
++ public:
++ virtual void func() = 0;
++};
++
++class B : public A {
++ public:
++ void func() {}
++};
++
++class C : private B {
++ public:
++ B::func;
++};
++
++class D {
++ C c;
++ public:
++ void func() { c.func(); }
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/unsorted2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/unsorted2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/unsorted2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/unsorted2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed unsorted
++// code-gen file
++// From: klaus@steinitz.mathematik.uni-dortmund.de
++// Date: Mon, 15 Nov 1993 16:51:11 +0100
++// Message-ID: <9311151551.AA17761@steinitz.mathematik.uni-dortmund.de>
++
++template <int A,int B>
++class X
++{
++};
++
++template <int A,int B,int C>
++X<A,C> f(X<A,B>,X<B,C>)
++{
++ X<A,C> result;
++ return result;
++}
++
++int main()
++{
++ X<1,3> x;
++ X<1,2> y;
++ X<2,3> z;
++ x=f(y,z);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vbase1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vbase1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vbase1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vbase1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed vbase
++// vbase file
++// From: pino@hubble.eecs.berkeley.edu (Jose Luis Pino)
++// Date: 28 Jul 1994 05:17:39 GMT
++// Subject: g++ 2.6 bug: virtual base class & protected methods
++// Message-ID: <317f1j$o9c@agate.berkeley.edu>
++
++
++#include <iostream.h>
++
++class a {
++protected:
++ virtual void foo() { cout << "Class A\n";}
++};
++
++class b : public virtual a {};
++
++class c : public b {
++public:
++ void bar() { b::foo();}
++};
++
++int main() {
++ c test;
++ test.bar();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Special g++ Options: -Woverloaded-virtual
++// GROUPS passed virtual-warnings
++// copy file
++// From: gfm@mencon.mencon.oz.au (Graham Menhennitt)
++// Date: Thu, 29 Apr 93 20:53:07 EST
++// Subject: 4 bugs in g++ 2.3.3
++// Message-ID: <9304291053.AA00090@mencon>
++
++ struct A {
++ virtual ~A(void);
++ };
++
++ struct B {
++ friend class A;
++ virtual void f(void);
++ };
++
++ struct C : public A {
++ virtual void f(void);
++ };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// GROUPS passed virtual-functions
++// Not in g++ bugs snapshot
++// From: grande@isi.edu (Jim Grande)
++// Subject: g++ 2.3.3 (HPPA) virt class definition dumps core
++// Date: 5 Mar 1993 22:51:14 -0500
++// Message-ID: <23611@venera.isi.edu>
++
++#include <stdio.h>
++
++class doubleclass
++{
++ public:
++ double d;
++ doubleclass(double x = 0) { d = x; };
++};
++
++class test
++{
++ doubleclass doublec;
++};
++
++class vderived : virtual public test
++{
++};
++
++int main()
++{
++ vderived v;
++
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// GROUPS passed virtual-functions
++// virtual file
++// From: allan@ramjet.multinet.DE (Allan Brighton)
++// Subject: pos. bug in gcc-2.5.2 on hp
++// Date: 4 Nov 1993 22:57:36 -0500
++// Message-ID: <9311041820.AA05942@ramjet.multinet.DE>
++
++#include <iostream.h>
++#include <strstream.h>
++
++
++class BugStream : public ostrstream {
++public:
++ BugStream() {}
++ BugStream& eval();
++};
++
++
++static struct Eval_ { } eval;
++BugStream& operator<<(ostream& os, Eval_);
++
++BugStream& BugStream::eval()
++{
++ // make sure str is null terminated
++ *this << ends;
++
++ // eval the command and set the status
++ char* s = str();
++ cerr << s << endl;
++
++ // reset the stream for the next command
++ clear(0);
++ rdbuf()->freeze(0);
++ seekp(0);
++
++ return *this;
++}
++
++BugStream& operator<<(ostream& os, Eval_)
++{
++ return ((BugStream&)os).eval();
++}
++
++int main() {
++ BugStream bs;
++ bs << "PASS" << eval;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/virtual4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/virtual4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// GROUPS passed virtual-functions
++#include <stdio.h>
++#include <stdlib.h>
++
++int aset = 0;
++class A
++{
++ public:
++ void Set() { SetProp(); }
++ virtual void SetProp() { aset++;}
++};
++
++class B:public A
++{
++ public:
++ void SetProp() { if (!aset) { printf ("FAIL\n"); exit (0);} aset--;}
++};
++
++int main()
++{
++ A a;
++ B b;
++ A *c=new A;
++ A *d=new B;
++
++ a.Set();
++ b.Set();
++ c->Set();
++ d->Set();
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed visibility
++
++#include <iostream.h>
++
++class base {
++public:
++ void f1 () { cout << "f1" << endl; };
++ void f2 () { cout << "f2" << endl; };
++};
++
++class deriv : public base {
++ void base :: f1();// ERROR - .*
++};
++
++int main ()
++{
++ deriv d;
++
++ d.f2();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++// Build don't link:
++// Special g++ Options: -w
++// GROUPS passed visibility
++// visibility file
++// From: Alan Shepherd <a.shepherd@nexor.co.uk>
++// Date: Tue, 22 Jun 1993 14:53:23 +0100
++// Subject: bug with MI in gcc-2.4.5
++// Message-ID: <9659.740757203@nexor.co.uk>
++
++class A
++{
++ int a;
++
++protected:
++
++ virtual void State(int b) { a = b; }
++
++};
++
++class B : public A
++{
++ char* foo;
++
++public:
++
++ B(const char*);
++};
++
++class C : public A
++{
++ char* foo2;
++
++public:
++
++ C(const char*);
++};
++
++class D : public B, public C
++{
++public:
++ D();
++protected:
++
++ virtual void State(int a)
++ {
++ B::State(a);
++ C::State(a);
++ }
++};
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: Mark Rawling <Mark.Rawling@mel.dit.csiro.au>
++// Date: Wed, 30 Jun 93 15:28:34 +1000
++// Subject: member access rule bug
++// Message-ID: <9306300528.AA17185@coda.mel.dit.CSIRO.AU>
++struct a {
++ int aa; // ERROR - private
++ };
++
++class b : private a {
++ };
++
++class c : public b {
++ int xx(void) { return (aa); } // aa should be invisible// ERROR - .*
++ };
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,108 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: dinh@cs.ucla.edu (Dinh Le)
++// Date: Mon, 12 Jul 93 22:21:06 -0700
++// Subject: class, template and their scoping problem
++// Message-ID: <9307130521.AA18312@oahu.cs.ucla.edu>
++
++#include <iostream.h>
++#include <assert.h>
++
++// --------------- Array.h && Array.cc ------------------
++
++const int ArraySize = 12;
++
++template <class Type>
++class Array { // ERROR - .struct Array_RC redecl.*
++friend class Array_RC;
++public:
++ Array(const Type *ar, int sz) { init(ar,sz); }
++ virtual ~Array() { delete [] ia; }
++ virtual void print(ostream& = cout);
++ virtual Type& operator[](int ix) { return ia[ix]; }
++private:
++ void init(const Type*, int);
++ int size; // ERROR - private
++ int *ia; // ERROR - private
++};
++
++template <class Type>
++ostream& operator<<( ostream& os, Array<Type>& ar )
++{
++ ar.print(os);
++ return os;
++}
++
++template <class Type>
++void Array<Type>::print(ostream& os)
++{
++ const int lineLength = 12;
++
++ os << "( " << size << " )< ";
++ for (int ix = 0; ix < size; ++ix) {
++ if (ix % lineLength == 0 && ix) os << "\n\t";
++ os << ia[ ix ];
++
++ if (ix % lineLength != lineLength-1 &&
++ ix != size-1)
++ os << ", ";
++ }
++ os << " >\n";
++}
++
++template <class Type>
++void Array<Type>::init(const Type *array, int sz)
++{
++ ia = new Type[size = sz];
++
++ for (int ix = 0; ix < size; ++ix)
++ ia[ix] = (array!=0) ? array[ix] : (Type)0;
++}
++
++// --------------- Array_RC.h && Array_RC.cc ----------------
++
++template <class Type>
++class Array_RC : public Array<Type> {// ERROR - previous declaration.*
++public:
++ Array_RC(const Type *ar, int sz);
++ Type& operator[](int ix);
++};
++
++template <class Type>
++Array_RC<Type>::Array_RC(const Type *ar, int sz) : Array<Type>(ar, sz) {}
++
++template <class Type>
++Type &Array_RC<Type>::operator[](int ix) {
++ assert(ix >= 0 && ix < size);// ERROR - member .size.*
++ return ia[ix];// ERROR - member .ia.*
++}
++
++// ------------------- Test routine ----------------------
++
++template <class Type>
++void try_array( Array<Type> &iA )
++{
++ cout << "try_array: initial array values:\n";
++ cout << iA << endl;
++}
++
++template <class Type>
++inline void
++try_array( Array_RC<Type> &rc )
++{
++ try_array( ((Array<Type>&)rc) );
++}
++
++int main()
++{
++ static int ia[10] = { 12, 7, 14, 9, 128, 17, 6, 3, 27, 5 };
++ Array_RC<int> iA(ia, 10);// ERROR - instantiated from here
++
++ cout << "template Array_RC class" << endl;
++ try_array(iA);
++
++ return 0;
++}
++
++template class Array_RC<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: ajp@eng.cam.ac.uk
++// Date: Tue, 13 Jul 93 17:15:11 BST
++// Message-ID: <1171.9307131615@ace.eng.cam.ac.uk
++
++class A {
++ static A* list;
++
++ protected:
++ struct AA {
++ AA();
++ ~AA();
++ };
++};
++
++A::AA::~AA()
++{
++ A* d=list;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: wpsun4!xinforms!johnjo@uunet.uu.net (John D. Johnson)
++// Date: Wed, 4 Aug 93 13:25:25 MDT
++// Subject: Access to private 'operator new()'
++// Message-ID: <9308041925.AA09825@xinforms.wpunix
++#include <stdio.h>
++#include <sys/types.h>
++
++class X {
++private:
++ void* operator new(size_t) throw(){// ERROR - .*
++ printf("Inside private new().\n");
++ return NULL;
++ }
++public:
++ X() {}
++};
++
++
++int main(void)
++{
++ X* p = new X;// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: Marie Trapp <Marie.Trapp@analog.com>
++// Date: Thu, 5 Aug 93 11:55:15 EDT
++// Subject: access of protected members
++// Message-ID: <9308051553.AA07639@nwd2sun1.analog.com>
++class A {
++ protected:
++ int astuff; // ERROR - protected
++ A() {
++ astuff = 3;
++ }
++};
++
++class B : public A {
++ int bstuff;
++ public:
++ B( A *p) {
++ bstuff = p->astuff;// ERROR - .*
++ }
++};
++
++class C : public A {
++ int cstuff;
++ public:
++ C() {
++ cstuff = 5;
++ }
++};
++
++int main() {
++ C cvar;
++ B bvar(&cvar);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: Sandeep Shroff <ss@caere.com>
++// Date: Thu, 05 Aug 1993 17:23:20 -0700
++// Subject: Access to private constructor.
++// Message-ID: <9308060023.AA10283@neptune.caere.com>
++#include <iostream.h>
++
++class Base
++{
++public:
++ char* getName() {return name_;}
++
++private:
++ Base();
++ Base(char* str);
++
++ char* name_;
++};
++
++class Derived : public Base
++{
++public:
++ Derived(int n, char* str);
++ Derived(int n);
++
++ int getNum() {return num_;}
++private:
++ int num_;
++};
++
++Base::Base()
++{ // ERROR - private
++ name_ = strcpy(new char[strlen(" ") + 1], " ");
++}
++
++Base::Base(char* str)
++{ // ERROR - private
++ if(str != NULL)
++ name_ = strcpy(new char[strlen(str) + 1], str);
++}
++
++Derived::Derived(int n, char* str) : Base(str)
++{// ERROR - .*
++ num_ = n;
++}
++
++Derived::Derived(int n) : Base()
++{// ERROR - .*
++ num_ = n;
++}
++
++
++
++int main()
++{
++ // Derived* d = new Derived(10, "test");
++ Derived* d = new Derived(10);
++
++ cerr << d->getNum() << "\t" << d->getName() << endl;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: cmwang@iis.sinica.edu.tw (Chien-Min Wang)
++// Date: Fri, 6 Aug 93 19:42:31 CST
++// Subject: A bug in g++ 2.4.5
++// Message-ID: <9308061142.AA08533@iiserv>
++struct T1 { int i; };
++
++struct T2 { int j; }; // ERROR - private
++
++struct T3 : public T1, private T2 {
++} x;
++
++int main ()
++{
++ x.i = 1;
++ x.j = 2; // error: x.j is private// ERROR - .*
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin)
++// Date: Wed, 25 Aug 93 14:30:47 MDT
++// Subject: g++ bug
++// Message-ID: <9308252030.AA02352@tnt.acsys.com>
++class B {
++protected:
++ int i; // ERROR - protected
++};
++
++class D1 : public B {
++};
++
++class D2 : public B {
++ friend void fr(B*,D1*,D2*);
++ void mem(B*,D1*);
++};
++
++void fr(B* pb, D1* p1, D2* p2)
++{
++ pb->i = 1; // illegal// ERROR - .*
++ p1->i = 2; // illegal// ERROR - .*
++ p2->i = 3; // ok (access through D2)
++}
++
++void D2::mem(B* pb, D1* p1)
++{
++ pb->i = 1; // illegal// ERROR - .*
++ p1->i = 2; // illegal// ERROR - .*
++ i = 3; // ok (access through `this')
++}
++
++void g(B* pb, D1* p1, D2* p2)
++{
++ pb->i = 1; // illegal// ERROR - .*
++ p1->i = 2; // illegal// ERROR - .*
++ p2->i = 3; // illegal// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,68 @@
++// Build don't link:
++// GROUPS passed visibility
++#include <iostream.h>
++
++
++
++class base {
++//==========
++
++ void base_priv(char * n)
++ { cout << "base_priv called from: " << n << "\n"; };
++
++protected:
++
++ void base_prot(char * n)
++ { cout << "base_prot called from: " << n << "\n"; };
++
++public:
++
++ void base_publ(char * n)
++ { cout << "base_publ called from: " << n << "\n"; };
++
++ void test(char * n) { base_publ(n); base_prot(n); base_priv(n); }
++
++}; // class base
++
++
++
++class derived : private base { // Make this public,
++//============================ // and we don't get an error
++
++friend void derived_friend();
++
++public :
++
++ void test(char * n) { base_publ(n); base_prot(n);}
++
++}; // class derived
++
++
++
++void
++derived_friend()
++//--------------
++{
++ derived pd;
++
++ pd.base_publ("friend of derived class"); // Compiler error here
++ pd.base_prot("friend of derived class");
++}
++
++
++
++int main(int argc, char *argv[])
++//==========================
++{
++ base b;
++ b.base_publ("base class object");
++ b.test("member of base class object");
++ cout << "\n";
++
++ derived pd;
++ pd.test("member of derived class object");
++ derived_friend();
++ cout << "\n";
++
++} /* main */
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: doug@foxtrot.ccmrc.ucsb.edu (Douglas Scott)
++// Date: Tue, 10 Aug 93 10:06:33 PDT
++// Subject: G++ 2.4.5 allows access to protected base members
++// Message-ID: <9308101706.AA04485@foxtrot.ccmrc.ucsb.edu>
++
++class Base {
++protected:
++ void protectedBaseFunction() {} // ERROR - protected
++public:
++ Base() {}
++};
++
++
++class Derived : public Base {
++public:
++ Derived() {}
++ void noticeThisFunction(Base *);
++};
++
++
++void
++Derived::noticeThisFunction(Base *b) {
++ b->protectedBaseFunction(); // ARM says this is not allowed// ERROR - .*
++ // since it is not called on 'this'
++}
++
++int main() {
++ Base b;
++ Derived d;
++ d.noticeThisFunction(&b);
++ printf("gpptest run\n");// ERROR - .*
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: klamer@mi.el.utwente.nl (Klamer Schutte)
++// Date: Thu, 12 Aug 93 12:03:09 +0200
++// Subject: g++ 2.4.5 failed to report a bug
++// Message-ID: <9308121003.AA02294@mi.el.utwente.nl>
++class A {
++protected:
++ void foo(); // ERROR - protected
++};
++
++class B : public A
++{
++ void bar(A &a)
++ { a.foo(); }// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: Robert Carden <carden@thoth.ics.uci.edu>
++// Date: Thu, 12 Aug 1993 13:48:05 -0700
++// Subject: bug 8/12/93 -- #5
++// Message-ID: <9308121348.aa26256@Paris.ics.uci.edu>
++
++// 5.cc
++#include <stream.h>
++
++class A {
++ int x;
++public:
++ void f(int);
++ void f(float);
++ void g(void *);
++};
++
++class B : private A {
++protected:
++ A::f;
++public:
++ A::g;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: joe@consolve.com (Joe Shapiro)
++// Date: Fri, 20 Aug 93 17:18:18 EDT
++// Subject: Template classes seem to allow users to get at private members
++// Message-ID: <9308202118.AA25599@ghana.consolve>
++/*
++ * private.cc
++ */
++extern "C" void printf(...);
++
++template <class T>
++class A
++{
++public:
++ void Fun() { printf( "Fun fun fun!\n" ); } // ERROR - private
++};
++
++
++template <class T>
++class B: private A<T>
++{
++};
++
++
++class C
++{
++public:
++ C() { _b.Fun(); }// ERROR - .*
++
++private:
++ B<int> _b;
++};
++
++
++int main()
++{
++ C c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: gfm@mencon.mencon.oz.au (Graham Menhennitt)
++// Date: Wed, 17 Nov 93 21:30:32 EST
++// Subject: gcc 2.5.3 - can't privately inherit and contain same class
++// Message-ID: <9311171030.AA00604@mencon>
++#include <iostream.h>
++
++class A {
++public:
++ A(void);
++};
++
++class B : private A {
++public:
++ B(void) : A() {}
++};
++
++class C : public B {
++public:
++ C(void) : B(), a() {}
++
++private:
++ A a;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: jamshid@ses.com (Jamshid Afshar)
++// Date: Sun, 12 Dec 93 03:09:15 CST
++// Subject: Missed access declaration error
++// Message-ID: <9312120909.AA22135@ses.com>
++
++class X {
++ public:
++ void f();
++};
++
++class Y : private X {
++ public:
++ void f(int);// ERROR - because.*
++ X::f; // g++ 2.5.5 doesn't flag this misuse
++};// ERROR - cannot adjust.*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: jbuck@synopsys.com (Joe Buck)
++// Date: 3 Aug 1994 01:52:04 GMT
++// Subject: 2.6.0 bug with protected members and virtual baseclasses
++// Message-ID: <31mt84$lfq@hermes.synopsys.com>
++
++struct R {
++protected:
++ virtual void foo();
++};
++
++struct A : public R {
++};
++
++struct B : virtual public A {
++ void bletch() { foo();}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// GROUPS passed visibility
++extern "C" int printf( const char *, ...);
++
++class B {
++public:
++ B() { };
++ virtual ~B() { printf( "B::~B\n"); };
++};
++
++class D : public B {
++public:
++ virtual ~D() { printf( "D::~D\n"); };
++ void operator = ( int i) { this->~B(); }// ERROR - D has no ~B part to it
++};
++
++int
++main()
++{
++ D * pd = new D;
++ B * pb = pd;
++ delete pb;
++ return 0;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,68 @@
++// Build don't link:
++// GROUPS passed visibility
++#include <iostream.h>
++
++
++
++class base {
++//==========
++
++ void base_priv(char * n)
++ { cout << "base_priv called from: " << n << "\n"; };
++
++protected:
++
++ void base_prot(char * n)
++ { cout << "base_prot called from: " << n << "\n"; };
++
++public:
++
++ void base_publ(char * n)
++ { cout << "base_publ called from: " << n << "\n"; };
++
++ void test(char * n) { base_publ(n); base_prot(n); base_priv(n); }
++
++}; // class base
++
++
++
++class derived : public base { // Make this public,
++//============================ // and we don't get an error
++
++friend void derived_friend();
++
++public :
++
++ void test(char * n) { base_publ(n); base_prot(n);}
++
++}; // class derived
++
++
++
++void
++derived_friend()
++//--------------
++{
++ derived pd;
++
++ pd.base_publ("friend of derived class"); // Compiler error here
++ pd.base_prot("friend of derived class");
++}
++
++
++
++int main(int argc, char *argv[])
++//==========================
++{
++ base b;
++ b.base_publ("base class object");
++ b.test("member of base class object");
++ cout << "\n";
++
++ derived pd;
++ pd.test("member of derived class object");
++ derived_friend();
++ cout << "\n";
++
++} /* main */
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: kol@world.std.com (Nikolay Yatsenko)
++// Date: Wed, 27 Jan 1993 16:39:00 -0500
++// Subject: g++ bug
++// Message-ID: <199301272139.AA25442@world.std.com>
++
++int x;
++
++int main(void)
++{
++ static int s;
++ int x; // ERROR - declared
++ extern int g();
++
++ struct local {
++ int g() { return x; } // illegal (non-static x); g++ does not give error// ERROR -
++ int h() { return s; } // ok, but g++ give error
++ };
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: dcb@us-es.sel.de (David Binderman 3841)
++// Date: Tue, 30 Mar 93 15:48:47 +0200
++// Subject: page 242 of the ARM
++// Message-ID: <9303301348.AA20751@slsvitt>
++
++class A {
++public:
++ int b; // ERROR - private
++};
++
++class C : private A { // NOTE WELL. private, not public
++public:
++ int d;
++};
++
++extern "C" int printf( const char *, ...);
++
++class E : public C {
++ void f() {
++ printf( "%d\n", b);// ERROR - .*
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed visibility
++
++class a {
++
++private:
++ a (int i);// ERROR - .*
++
++public:
++ a ();
++};
++
++void test ()
++{
++ a *ap = new a;
++ a *ap2 = new a (3);// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: Rob Hasker <hasker@sparc0a.cs.uiuc.edu>
++// Date: Sat, 3 Apr 1993 13:19:05 -0600
++// Subject: no privacy
++// Message-ID: <199304031919.AA20554@sparc17.cs.uiuc.edu
++class Top {
++public:
++ Top() {}
++ void val() {} // ERROR - private base class
++};
++
++class Derived : private Top {
++public:
++ Derived() {}
++};
++
++class Unrelated {
++ Derived derived;
++public:
++ void oops() { derived.val(); }// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: Gordon Joly <G.Joly@cs.ucl.ac.uk>
++// Date: Wed, 21 Apr 93 09:42:07 +0100
++// Subject: /*** BUG REPORT : THE MYTH OF PRIVATE INHERITANCE ***/
++// Message-ID: <9304210842.AA01815@life.ai.mit.edu>
++#include <iostream.h>
++
++class A {
++ private:
++ int number;
++ public:
++ A(int i) : number(i)
++ {}
++ virtual ~A()
++ {}
++ virtual void Number(int c)
++ { number = c; } // ERROR - private
++ virtual int Number()
++ { return number; } // ERROR - private
++};
++
++class B : private A {
++ private:
++ int second_number;
++ public:
++ B(int c, int i) : second_number(c), A(i)
++ {}
++ virtual ~B()
++ {}
++
++ virtual void firstNumber(int b) // renames member function Number(int) of class A
++ { A::Number(b); }
++ virtual int firstNumber() // renames member function Number() of class A
++ { return A::Number(); }
++};
++
++
++
++
++class C {
++ private:
++ B* bobject;
++ public:
++ C(B* bp) : bobject(bp)
++ {}
++ virtual ~C()
++ {}
++ //
++ // the following two functions access
++ // private member functions of class B
++ // and they should not be able to do so
++ //
++ virtual void setBValue(int i)
++ { if (bobject) bobject->Number(i); }// ERROR - .*
++ virtual int getBValue()
++ { if (bobject) { return bobject->Number(); } return 0; }// ERROR - .*
++};
++
++
++int main()
++{
++ B* bobject = new B(2, 1);
++ C* cobject = new C(bobject);
++ cobject->setBValue(8);
++ cout << cobject->getBValue() << endl;
++ delete bobject;
++ delete cobject;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// From: roland@jts.com (Roland Knight )
++// Date: Thu, 29 Apr 1993 16:17:00 -0400
++// Subject: gcc 2.3.3 bug
++// Message-ID: <m0nof3E-0021ifC@jts.com
++class t1 {
++protected:
++ int a; // ERROR - protected
++};
++
++
++class t2 : private t1 {
++public:
++ int b;
++};
++
++
++class t3 : public t2 {
++public:
++ int ttt();
++};
++
++
++int t3::ttt() { return a; }// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/visibility9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/visibility9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed visibility
++// visibility file
++// rom: roland@jts.com (Roland Knight )
++// Date: Sat, 8 May 1993 17:27:35 -0400
++// Subject: gcc 2.3.3 protected member access bug
++// Message-ID: <9305082127.AA19577@icepick.jts.com>
++
++class A {
++protected:
++ int a; // ERROR - protected
++};
++
++class B : public A {
++public:
++ void f1(A* pa);
++};
++
++
++void B::f1(A* pa) {
++ pa->a = 1; // illegal but allowed by gcc// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vtable1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vtable1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vtable1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vtable1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// Special g++ Options: -w
++// GROUPS passed vtable
++// vtable file
++// From: mrs@cygnus.com (Mike Stump)
++// Date: Wed, 20 Apr 1994 17:46:11 -0700
++// Subject: vtable name generation is wrong
++// Message-ID: <199404210046.RAA25652@rtl.cygnus.com>
++
++// prepare_fresh_vtable doesn't build the names of
++// vtables very well.
++
++struct B {
++ virtual void vf() { }
++};
++
++struct Main {
++ virtual void vf() { }
++};
++
++struct Other : public Main, public B {
++ virtual void vf() { }
++};
++
++struct D : public Main, public B, public Other {
++ virtual void vf() { }
++} a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vtable2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vtable2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vtable2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vtable2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options: -fvtable-thunks
++// GROUPS passed vtable
++struct C1
++{
++ virtual ~C1();
++};
++
++struct C2 : public virtual C1
++{
++ virtual ~C2();
++};
++
++struct C3 : public virtual C2
++{
++ virtual ~C3();
++};
++
++C3::~C3() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vtable3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vtable3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/vtable3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/vtable3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// GROUPS passed vtable
++// vtable file
++// From: Pete Bevin <pete@deng.icl.co.uk>
++// Date: Mon, 28 Nov 1994 19:57:53 +0000 (GMT)
++// Subject: g++-2.6.2: Virtual inheritance causes incorrect padding
++// Message-ID: <Pine.SOL.3.91.941128194453.7510A-100000@gabriel>
++
++extern "C" void printf (char *, ...);
++
++struct A {
++};
++
++
++struct B : virtual A {
++ public:
++ int b;
++};
++
++
++int main()
++{
++ B blist[10];
++ printf ("PASS\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/weak.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/weak.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.law/weak.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.law/weak.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: g++ fails to instantiate operator<<.
++// Build don't run:
++// Special g++ Options: -static
++// Skip if not target: i?86-*-linux*
++
++// libc-5.4.xx has __IO_putc in its static C library, which can conflict
++// with the copy of __IO_putc in the libstdc++ library built by egcs.
++#include <iostream.h>
++#include <streambuf.h>
++
++istream x;
++extern "C" int putc(), fgets();
++
++main () {
++ x.get();
++ putc();
++ fgets();
++ x.gets(0, 0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/access1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/access1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/access1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/access1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++class A{
++ public:
++ enum Foo{f1,f2};
++
++ class B{
++ friend class A;
++ Foo f;
++ public:
++ B():f(f1){}
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/ambig1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/ambig1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/ambig1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/ambig1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++//Build don't link:
++//Based on a report by Bill Currie <bcurrie@tssc.co.nz>
++struct foo {
++ protected:
++ int x; // ERROR - candidate
++};
++
++struct bar {
++ public:
++ int x(); // ERROR - candidate
++};
++
++struct foobar: public foo, public bar {
++ foobar();
++};
++
++int func(int);
++
++foobar::foobar()
++{
++ func(x); // ERROR - ambiguous member access
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/conv1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/conv1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/conv1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/conv1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++struct S{
++ operator bool()
++ {
++ return true;
++ }
++};
++
++int main()
++{
++ S a;
++ if (S &b = a);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/lookup1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/lookup1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/lookup1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/lookup1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++//Build don't link:
++//In the base class list, the context of the current is used
++//reported by Stephen Vavasis <vavasis@CS.Cornell.EDU>
++
++namespace N1 {
++ namespace N2 {
++ class A{};
++ class B;
++ }
++}
++
++class N1::N2::B : public A {
++};
++
++
++class C1 {
++ class A{};
++ class B;
++};
++
++class C1::B : A {
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/new1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/new1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/new1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/new1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,121 @@
++//Lifetime of temporaries:
++//egcs 2.92 performs cleanup for temporaries inside new expressions
++//after the new is complete, not at the end of the full expression.
++
++#include <new>
++#include <cstdlib>
++#include <cstdio>
++
++bool new_throws;
++bool ctor_throws;
++
++int new_done;
++int ctor_done;
++int func_done;
++int dtor_done;
++int delete_done;
++
++int count;
++
++void init()
++{
++ new_throws = ctor_throws = false;
++ new_done = ctor_done = func_done = dtor_done = delete_done = count = 0;
++}
++
++struct line_error{
++ int line;
++ line_error(int i):line(i){}
++};
++
++#define CHECK(cond) if(!(cond))throw std::line_error(__LINE__);
++
++struct A{
++ A(int){
++ ctor_done = ++count;
++ if(ctor_throws)
++ throw 1;
++ }
++ A(const A&){
++ CHECK(false); //no copy constructors in this code
++ }
++ ~A(){
++ dtor_done = ++count;
++ }
++ A* addr(){return this;}
++};
++
++struct B{
++ B(A*){}
++ void* operator new(size_t s){
++ new_done = ++count;
++ if(new_throws)
++ throw 1;
++ return malloc(s);
++ }
++ void operator delete(void *){
++ delete_done = ++count;
++ }
++};
++
++void func(B* )
++{
++ func_done = ++count;
++}
++
++void test1()
++{
++ init();
++ try{
++ func(new B(A(10).addr()));
++ }catch(int){
++ }
++ CHECK(new_done==1);
++ CHECK(ctor_done==2);
++ CHECK(func_done==3);
++ CHECK(dtor_done==4);
++ CHECK(delete_done==0);
++}
++
++void test2()
++{
++ init();
++ new_throws = true;
++ try{
++ func(new B(A(10).addr()));
++ }catch(int){
++ }
++ CHECK(new_done==1);
++ CHECK(ctor_done==0);
++ CHECK(func_done==0);
++ CHECK(dtor_done==0);
++ CHECK(delete_done==0);
++}
++
++void test3()
++{
++ init();
++ ctor_throws = true;
++ try{
++ func(new B(A(10).addr()));
++ }catch(int){
++ }
++ CHECK(new_done==1);
++ CHECK(ctor_done==2);
++ CHECK(func_done==0);
++ CHECK(dtor_done==0);
++ CHECK(delete_done==3);
++}
++
++int main()
++{
++ try{
++ test1();
++ test2();
++ test3();
++ }catch(line_error e){
++ printf("Got error in line %d\n",e.line);
++ return 1;
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/overload1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/overload1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/overload1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/overload1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++//Overload resolution should consider both declarations of func identically.
++
++struct S{};
++void func(S&){}
++
++int main()
++{
++ void func(S&);
++ S s;
++ func(s);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_conv.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_conv.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_conv.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_conv.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// ecgs-bugs 1999-02-22 14:21, Stefan Schwarzer
++// sts@ica1.uni-stuttgart.de
++// this code should compile quietly
++
++class CArray
++{
++public:
++ operator double* (){ return a; }
++ // works if we comment this line:
++ operator double* () const { return const_cast<double *>(a); }
++private:
++ double a[2];
++};
++
++int main(){
++ CArray a;
++ double *pa = a + 1; // gets bogus error - should convert
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_iarr.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_iarr.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_iarr.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_iarr.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// egcs-bugs 999-02-22 14:26 Stefan Schwarzer
++// sts@ica1.uni-stuttgart.de
++// should compile and return 0
++
++template <int N>
++struct Outer{
++ struct Inner{
++ Inner(int n): sum(n){}
++
++ typename Outer<N-1>::Inner operator[](int n) const
++ { return typename Outer<N-1>::Inner(sum + n); }
++
++ int sum;
++ };
++
++ typename Outer<N-1>::Inner operator[](int n) const
++ { return typename Outer<N-1>::Inner(n); }
++};
++
++
++// specializations for N==1
++template<>
++struct Outer<1> {
++ struct Inner {
++ Inner(int n): sum(n){}
++
++ int operator[](int n) const
++ { return sum+n; }
++
++ int sum;
++ };
++
++ int operator[](int n) const
++ { return n; }
++};
++
++
++int main()
++{
++ Outer<1> sum1;
++ //std::cout << sum1[1] << "\n";
++ Outer<2> sum2;
++ //std::cout << sum2[1][1] << "\n";
++ return sum1[1] + sum2[1][1] - 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_partial.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_partial.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_partial.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_partial.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// excess errors test - XFAIL
++// ecgs-bugs 1999-02-22 14:26 Stefan Schwarzer
++// sts@ica1.uni-stuttgart.de
++// partial ordering problem in egcs <= 1.1.1
++
++template<class T>
++int f(T &){ return 1; }
++
++template<class T>
++int f( T[] ){ return 0; }
++
++int main(){
++ int d[] ={2};
++ return f(d);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_vectini.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_vectini.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/sts_vectini.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/sts_vectini.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// Special g++ Options: -O2
++// egcs-bugs 1999-02-22 14:24 Stefan Schwarzer
++// sts@ica1.uni-stuttgart.de
++// optimizer problem in egcs <= 1.1.1
++
++struct XTVec{
++ XTVec(){x[0]=x[1] =x[2] =0;}
++ XTVec(int ax,int y=0.,int z=0.){x[0]=ax;x[1]=y; x[2]=z; }
++ int& operator[](int);
++
++ int x[3];
++};
++
++inline
++int & XTVec::operator[](int i){
++ return x[i];
++}
++
++inline
++XTVec& operator+=(XTVec& lhs, XTVec& rhs){
++ lhs[0]+=rhs[0];
++ lhs[1]+=rhs[1];
++ lhs[2]+=rhs[2];
++ return lhs;
++}
++
++inline
++XTVec operator+(XTVec& lhs, XTVec& rhs){
++ XTVec result(lhs);
++ return result += rhs;
++}
++
++int main()
++{
++ XTVec ur(4.,0.,1.);
++ XTVec ll(0.,2.,0.);
++ XTVec initsum(ur + ll);
++
++ // sum of components should be 7
++ return (initsum[0] + initsum[1] + initsum[2] - 7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/typedef1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/typedef1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/typedef1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/typedef1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++// Copyright (C) 1999 Free Software Foundation, Inc.
++// Contributed by Nathan Sidwell 31 Mar 1999 <nathan@acm.org>
++
++// Make sure we see through typedefs.
++
++typedef int Int;
++
++void fn()
++{
++ int *p;
++ Int *&pr2 = p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/typedef2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/typedef2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.martin/typedef2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.martin/typedef2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Testcase from Alexander Zvyagin <zvyagin@mx.ihep.su>
++// Check implicit conversion from string constants into typedefs
++
++typedef char CHAR;
++void f2(CHAR *s="");
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/align1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/align1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/align1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/align1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++// Check to make sure we align virtual base classes properly
++
++class eel_base {
++public:
++};
++
++class markable_eel_base : public eel_base {
++private:
++ int mark;
++};
++
++class eel_edge : public markable_eel_base {
++public:
++private:
++ int foo;
++};
++
++class edge : public virtual eel_edge {
++public:
++ edge() {
++ _weight = 0.0;
++ }
++private:
++ double _weight;
++};
++class eel_branch_edge : public virtual edge {
++};
++class branch_edge : public eel_branch_edge {
++};
++
++class eel_interproc_branch_edge : public branch_edge {
++};
++
++class interproc_edge : public virtual edge {
++};
++
++class eel_jump_edge : public virtual edge {
++protected:
++};
++
++class jump_edge : public eel_jump_edge {
++public:
++};
++
++class eel_interproc_jump_edge : public jump_edge {
++protected:
++};
++
++class interproc_jump_edge : public eel_interproc_jump_edge,
++ public interproc_edge {
++public:
++};
++
++int main () {
++ void *vp = new interproc_jump_edge();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/align2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/align2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/align2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/align2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++class Foo {
++};
++
++class Bar : virtual Foo {
++public:
++ int b;
++} x;
++
++int main()
++{
++ // printf("Foo offset %d\n", (int)(Foo*)&x - (int)&x);
++ // printf("b offset %d\n", (int)&x.b - (int)&x);
++ // printf("sizeof is %d\n", sizeof(Bar));
++ // This core dumps on a SPARC is alignment is wrong.
++ Bar blist[10];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ambig1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ambig1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ambig1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ambig1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++extern "C" int printf(const char *, ...);
++
++struct VB {
++ virtual void f() {
++ printf("VB\n");
++ }
++};
++
++class M : public virtual VB {
++public:
++ int i;
++ void f() {
++ printf("M(%d)\n", i);
++ }
++};
++
++class lM : public M {
++};
++
++class rM : public M {
++};
++
++class D : public lM, rM {
++} d; // ERROR - ambiguous function
++
++int main() {
++ ((lM*)&d)->i = 1;
++ ((rM*)&d)->i = 2;
++ ((rM*)&d)->f();
++ ((lM*)&d)->f();
++ ((VB*)&d)->f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/asm1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/asm1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/asm1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/asm1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// Special g++ Options:
++
++struct A {
++ static void foo() asm("_my_routine");
++};
++
++void A::foo() {
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/asm2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/asm2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/asm2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/asm2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Compile with -S, there should be no references to
++// LTRAMP in the output.
++
++extern "C"
++{
++ int printf (char *, ...);
++}
++
++void
++sub2 (void (*func) ())
++{
++ (*func) ();
++}
++
++int
++main(void)
++{
++ extern void sub (void);
++
++ sub2 (sub);
++}
++
++void
++sub (void)
++{
++ printf ("hello world\n");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/bool1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/bool1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/bool1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/bool1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// bool test case
++
++// Build don't link:
++
++void foo(int i) {
++ foo (true);
++}
++
++struct C {
++ void foo(int i) {
++ foo(true);
++ }
++ void bar(bool b) {
++ bar(0);
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/bool2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/bool2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/bool2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/bool2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++// Special g++ Options:
++class A {
++public:
++ operator bool () {
++ return true;
++ }
++} a;
++class A1 {
++public:
++ operator int () {
++ return true;
++ }
++} a1;
++class A2 {
++public:
++ operator char * () {
++ return "";
++ }
++} a2;
++class A3 {
++public:
++ operator unsigned long long int () {
++ return true;
++ }
++} a3;
++class A4 {
++public:
++ operator char * () {
++ return "";
++ }
++ operator unsigned long long int () {
++ return true;
++ }
++} a4;
++class A5 {
++public:
++ operator double () {
++ return 256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0
++ *256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0
++ *256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0
++ *256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0;
++ }
++} a5;
++int i = true;
++bool b = true;
++bool c = (bool)(void (A::*)())0;
++bool d = 256;
++main() {
++ if (!d) return 1;
++ if (!a) return 1;
++ if (!(bool)a) return 1;
++ // if (!(long long)a) return 1;
++ if (!a1) return 1;
++ if (!a2) return 1;
++ if (!a3) return 1;
++ if (!a5) return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/bool4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/bool4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/bool4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/bool4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++
++void foo(bool arg = (1==0)) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/conv1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/conv1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/conv1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/conv1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++enum E { C };
++
++E foo() {
++ return C;
++}
++
++int main() {
++ if (foo() != C)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/.cvsignore gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/.cvsignore
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/.cvsignore 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/.cvsignore 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++Makefile
++config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/debug1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/debug1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/debug1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/debug1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -g -O -fkeep-inline-functions
++
++class c {
++public:
++ ~c () { };
++};
++
++int
++foo (const c& lhs)
++{
++ c str (lhs);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Special g++ Options: -fexceptions -w
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe
++
++#include <typeinfo>
++
++struct B {
++ virtual int f() { }
++};
++
++struct D {
++ virtual int f() { }
++};
++
++main() {
++ B b;
++ try {
++ (void)dynamic_cast<D&>(b);
++ } catch (std::bad_cast) {
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Special g++ Options: -fexceptions -w
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe
++
++// Ensure reference handling works.
++
++#include <typeinfo>
++
++struct B {
++ virtual int f() { }
++} ob;
++
++struct D : public B {
++ virtual int f() { }
++} od;
++
++main() {
++ B *b=&ob;
++ try {
++ void *vp = &dynamic_cast<D&>(*b);
++ return 1;
++ } catch (std::bad_cast) {
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Special g++ Options: -fexceptions -w
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++// Ensure that the return type of dynamic_cast is the real type.
++
++struct B {
++ virtual int f() { }
++};
++
++struct D : public B {
++ virtual int f() { }
++ int i;
++} od;
++
++main() {
++ B *b=&od;
++ if (dynamic_cast<D*>(b)->i)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++int main() {
++ int* d;
++ dynamic_cast<void*>(d); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++#include <stddef.h>
++
++void *p;
++int fail;
++
++class HeapTracked {
++public:
++ virtual ~HeapTracked() = 0;
++ void *operator new(size_t size);
++ void operator delete(void *ptr);
++ static bool isObjectAllocation(const HeapTracked *ptr);
++};
++
++HeapTracked::~HeapTracked(){}
++void * HeapTracked::operator new(size_t size)
++{
++ void * memPtr = ::operator new(size);
++ p = memPtr;
++ return memPtr;
++}
++
++void HeapTracked::operator delete(void *ptr)
++{
++ if (p != ptr)
++ fail = 1;
++ ::operator delete(ptr);
++}
++
++bool HeapTracked::isObjectAllocation(const HeapTracked *ptr)
++{
++ if (p != const_cast<void*>(dynamic_cast<const void*>(ptr)))
++ fail = 1;
++ return false;
++}
++
++class Mumble1: public virtual HeapTracked {
++ double d;
++public:
++ virtual ~Mumble1(){}
++};
++
++class Mumble2: public virtual HeapTracked {
++ double d;
++public:
++ virtual ~Mumble2(){}
++};
++
++class Foo: virtual public HeapTracked,
++ virtual public Mumble1,
++ virtual public Mumble2 {
++public:
++ ~Foo(){}
++};
++
++int main()
++{
++ Foo *pf = new Foo;
++ pf->isObjectAllocation(pf);
++
++ Mumble1 *pm1 = pf;
++ pm1->isObjectAllocation(pm1);
++
++ Mumble2 *pm2 = pf;
++ pm2->isObjectAllocation(pm2);
++
++ // delete pf;
++ // delete pm1;
++ delete pm2;
++
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#include <typeinfo>
++
++class A {
++public:
++ virtual void j () {}
++};
++
++class B : public A { };
++
++void x (A& a) {
++ const B& b1 = dynamic_cast<B&>((const A&)a); // ERROR - opps
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Special g++ Options: -fexceptions
++
++#include <typeinfo>
++#include <stdexcept>
++
++class A {
++public:
++ virtual void j () {}
++};
++
++class B : public A { };
++
++void x (A& a) {
++ // These should all work.
++ const B& b2 = dynamic_cast<B&>(a);
++ const B& b3 = dynamic_cast<const B&>((const A&)a);
++ const B& b4 = dynamic_cast<const B&>(a);
++}
++
++int main() {
++ try {
++ B b;
++ x (b);
++ } catch (std::exception& e) {
++ // If we get a bad_cast, it is wrong.
++ return 1;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++#include <typeinfo>
++
++class Base
++{
++public:
++ virtual ~Base() { }
++};
++
++class Derived : public Base { };
++
++int main()
++{
++ const Derived b;
++ const Base* ap = &b;
++
++ const Derived* p1 = dynamic_cast<const Derived*>(ap);
++ return p1 == 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++class S1 { int i; };
++class S2 { int i; };
++class VB {
++public:
++ virtual void foo() { }
++};
++
++class D : public S1, virtual public VB {
++} d;
++
++class E : public S2, public D {
++} e;
++
++int main() {
++ return (char *)&e - (char *)dynamic_cast<E*>((D*)&e);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++void foo() {
++ int i;
++ i = 42;
++ throw i;
++}
++
++void ee(int *);
++
++void bar() {
++ int i = 2;
++ ee(&i);
++}
++
++void ee(int *) { }
++
++main() {
++ try {
++ foo();
++ return 3;
++ } catch (int& i) {
++ bar();
++ return i != 42;
++ }
++ return 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Special g++ Options: -fexceptions
++// Build don't link:
++
++struct A {
++ ~A();
++};
++
++int main(int argc, char** argv) {
++ A a;
++ return 0;
++}
++
++
++A::~A() {
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++class MyError { };
++
++int main (int argc, char **argv) {
++ try {
++ throw MyError();
++ }
++ catch (MyError x) {
++ }
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sh-*-* arm-*-pe**-*
++
++#include <string>
++
++main() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++class arghh {
++public:
++ int n;
++ arghh (int v) { n = v; }
++};
++
++int main () {
++ try {
++ throw arghh (11);
++ }
++ catch (arghh& a) {
++ if (a.n != 11)
++ return 1;
++ }
++ try {
++ throw arghh (22);
++ }
++ catch (arghh& a) {
++ if (a.n != 22)
++ return 2;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++
++struct A {
++ A() throw (int);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int err = 1;
++
++struct A {
++ ~A() {
++ --err;
++ }
++};
++
++struct B {
++ A a;
++ B() {
++ throw 1;
++ }
++};
++
++main() {
++ try {
++ B b;
++ } catch (...) {
++ return err;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int err = 1;
++
++struct A {
++ ~A() {
++ --err;
++ }
++};
++
++struct B : public A {
++ B() {
++ throw 1;
++ }
++};
++
++main() {
++ try {
++ B b;
++ } catch (...) {
++ return err;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,63 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++class VB {
++public:
++ int n;
++ VB (int v) { n = v; }
++ VB (const VB& o) {
++ n = o.n;
++// printf("copying VB from %d to %d\n", &o, this);
++ }
++};
++
++class D : public virtual VB {
++ int j;
++public:
++ D(int i1, int i2) : VB(i2) { j = i1; }
++ VB& vb() { return *(VB*)this; }
++ const VB& vb() const { return *(const VB*)this; }
++};
++
++class pD : private virtual VB {
++ int j;
++public:
++ pD(int i1, int i2) : VB(i2) { j = i1; }
++ VB& vb() { return *(VB*)this; }
++ const VB& vb() const { return *(const VB*)this; }
++};
++
++
++int main () {
++ D d(1943, 4279);
++ pD pd(3621, 9527);
++ VB *vb = &d.vb();
++ VB *pvb = &pd.vb();
++
++ // A catch of a public virtual base.
++ try {
++// printf("Throwing D at %d (VB at %d)\n", &d, vb);
++ throw d;
++ }
++ catch (VB& vb) {
++// printf("Catching VB at %d\n", &vb);
++ if (vb.n != 4279)
++ return 1;
++ }
++ catch (...) {
++ return 1;
++ }
++
++ // A catch of a private virtual base.
++ try {
++// printf("Throwing D at %d (VB at %d)\n", &pd, pvb);
++ throw pd;
++ }
++ catch (VB& vb) {
++// printf("Catching VB at %d\n", &vb);
++ // This was a private base of the throw object, don't catch it.
++ return 1;
++ }
++ catch (...) {
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Special g++ Options: -fexceptions
++// Build don't link:
++
++class test1 {
++public:
++ class fehler{public:fehler(){};};
++ void func(int a) {
++ if( a == 0 )
++ throw fehler();
++ }
++};
++
++int main() {
++ test1 var;
++
++ try {
++ var.func(1);
++ var.func(0);
++ } catch(test1::fehler()) // function type promoted to pointer
++ {
++ ;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Build don't link:
++// Special g++ Options: -fexceptions -O -S
++
++extern "C" void printf (char *, ...);
++extern "C" int atoi (const char *);
++extern "C" void exit (int);
++
++struct Exception
++ {
++ int v;
++ Exception(int i) { v = i; };
++ };
++
++ void inc(int &i)
++ {
++ try {
++ if (i == 0)
++ throw Exception(i);
++ else
++ i++;
++ }
++ catch (Exception v) {
++ i = v.v;
++ }
++ }
++
++main (int argc, const char *argv[])
++{
++ if (argc != 2)
++ {
++ printf ("usage: a.out <num>\n");
++ exit (1);
++ }
++ int count = atoi (argv[1]);
++ inc (count);
++ printf ("success\n");
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Special g++ Options: -fexceptions -Wall
++
++int
++main() {
++ throw 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int main () {
++ try {
++ try {
++ throw 1;
++ } catch ( char * ) {
++ }
++ } catch ( int ) {
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <exception>
++
++struct double_fault { };
++int fault_now;
++
++class E {
++public:
++ E() { }
++ E(const E&) {
++ if (fault_now)
++ throw double_fault();
++ }
++};
++
++void foo() {
++ try {
++ throw E();
++ } catch (...) {
++ fault_now = 1;
++ throw;
++ }
++}
++
++void bar() {
++ try {
++ foo();
++ } catch (E e) { // double fault here
++ }
++}
++
++void my_terminate() {
++ exit (0); // double faults should call terminate
++}
++
++main() {
++ std::set_terminate (my_terminate);
++ try {
++ bar();
++ } catch (...) {
++ return 1;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int fail = 0;
++
++struct A {
++ int ok;
++ A() {
++ ok = 1;
++ }
++ ~A() {
++ if (! ok)
++ fail = 1;
++ ok = 0;
++ }
++};
++
++main() {
++ try {
++ try {
++ A a;
++ throw 1.0;
++ } catch (double i) {
++ A a1;
++ throw 1; // make sure both a1 and a2 are not destroyed when we throw!
++ } catch (int i) {
++ A a2;
++ throw 1.0;
++ }
++ } catch (int i) {
++ }
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <exception>
++
++void my_terminate() {
++ exit (0); // Double faults should call terminate
++}
++
++struct A {
++ A() { }
++ ~A() {
++ std::set_terminate (my_terminate);
++ throw 1; // This throws from EH dtor, should call my_terminate
++ }
++};
++
++main() {
++ try {
++ try {
++ throw 1;
++ } catch (int i) {
++ A a; // A hit on this EH dtor went to the wrong place
++ throw 1;
++ }
++ } catch (...) {
++ return 1;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++class MyExceptionHandler { };
++
++main() {
++ try {
++ throw MyExceptionHandler();
++ } catch(const MyExceptionHandler& eh) {
++ return 0;
++ } catch(...) {
++ return 1;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <typeinfo>
++
++class MyExceptionHandler { };
++
++main() {
++ try {
++ throw MyExceptionHandler();
++ } catch(const MyExceptionHandler& eh) {
++ return 0;
++ } catch(...) {
++ return 1;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <typeinfo>
++
++int fail = 1;
++
++class X { public: virtual void p() { } };
++class Y : public X { public: virtual void p() { fail = 0; } };
++
++main()
++{
++ try { Y y; throw y; }
++ catch (X& x) { x.p(); }
++ catch (...) { }
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int count;
++
++class A {
++public:
++ A() {
++// printf("ctor %x\n", (int)this);
++ if (count==3)
++ throw 1;
++ ++count;
++ }
++ ~A() {
++ --count;
++// printf("dtor %x\n", (int)this);
++ }
++};
++
++main() {
++ try {
++ A a[5];
++ } catch (...) {
++ return count;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <stdlib.h>
++#include <iostream.h>
++
++class Vector {
++private:
++ int *p;
++ int sz;
++
++public:
++ // Exception class
++ class Range {
++ private:
++ int value_i;
++
++ public:
++ Range( int i ) { value_i = i; };
++ int value() { return value_i; };
++ };
++
++ Vector( int s );
++ ~Vector();
++ int size() { return sz; };
++ int& operator []( int i );
++};
++
++Vector::Vector(int s) {
++ sz = s;
++ p = new int[sz];
++}
++
++Vector::~Vector() {
++ delete [] p;
++}
++
++int&
++Vector::operator [](int i) {
++ if (0<=i && i<sz) {
++ return p[i];
++ } else {
++ throw Range( i );
++ }
++}
++
++void crash(Vector& v ) {
++ v[v.size()+10]; // Triggers range error!
++}
++
++void do_something(Vector& v) {
++ crash( v );
++}
++
++void
++f(Vector& v) {
++ try {
++ do_something( v );
++ } catch (Vector::Range& r) {
++ cout << "Invalid vector range " << r.value()
++ << " caught in f()" << endl;
++ exit(0);
++ }
++}
++
++main() {
++ Vector v(10);
++
++ f( v );
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// Skip if not native
++// Special g++ Options: -fexceptions -fPIC -S
++
++main() { throw 1; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int count;
++
++class Foo {
++public:
++ Foo() { ++count; }
++ Foo(const Foo&) { ++count; }
++ ~Foo() { --count; }
++};
++
++
++main() {
++ try {
++ throw Foo();
++ }
++ catch (Foo& object) {
++ if (count == 1)
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++
++class Base {
++public:
++ virtual ~Base() throw();
++};
++
++Base::~Base() throw()
++{
++}
++
++class Foo : public Base {
++public:
++ virtual ~Foo() throw();
++};
++
++Foo::~Foo() throw()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL hppa*-*-* a29k-*-* sparc64-*-elf sh-*-* z8k-*-* arm-*-pe**-*
++
++#include <exception>
++
++void my_unexpected() {
++ throw 42;
++}
++
++void foo() throw (int) { throw "Hi"; }
++
++int main() {
++ std::set_unexpected (my_unexpected);
++ try {
++ foo();
++ } catch (int i) {
++ if (i == 42)
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <exception>
++
++void my_unexpected() {
++ exit (0);
++}
++
++void foo() throw () { throw "Hi"; }
++
++int main() {
++ std::set_unexpected (my_unexpected);
++ foo();
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++main() {
++ try {
++ throw 'a';
++ } catch (char a) {
++ try {
++ throw 'a';
++ } catch (int i) {
++ return 1;
++ } catch (char c) {
++ return 0;
++ }
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <typeinfo>
++
++class A {
++ int space;
++};
++class B {
++public:
++ int data;
++ B(int i) : data(i) {
++ }
++};
++class D : public A, public B {
++public:
++ D(int i) : B(i) {
++ }
++} d(42);
++
++main() {
++ try {
++ throw &d;
++ } catch (B* b) {
++ if (b->data == 42)
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <typeinfo>
++
++class B {
++public:
++ int data;
++ B(int i) : data(i) {
++ }
++} b(42);
++
++main() {
++ try {
++ throw &b;
++ } catch (B* b) {
++ if (b->data == 42)
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <typeinfo>
++
++class B {
++public:
++ int data;
++ B(int i) : data(i) {
++ }
++} b(42);
++
++main() {
++ try {
++ throw &b;
++ } catch (const B* bptr) {
++ if (bptr->data == 42)
++ {
++ try {
++ throw &b;
++ } catch (void *bptr) {
++ if (((B*)bptr)->data == 42)
++ return 0;
++ }
++ }
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int fail = 1;
++class B {
++public:
++ B() { throw 1; }
++};
++class D : public B {
++public:
++ D();
++};
++
++D::D() try : B() {
++ fail = 1;
++} catch (...) {
++ fail = 0;
++ throw;
++}
++
++main() {
++ try {
++ D d;
++ fail = 1;
++ } catch (...) {
++ }
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++class foo {
++public:
++ class error {};
++
++ void cause_error(void) { throw error(); }
++};
++
++int main(void)
++{
++ foo f;
++ try {
++ f.cause_error();
++ }
++ catch (foo::error&) {
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int fail = 1;
++class B {
++public:
++ B() { throw 1; }
++};
++class D : public B {
++public:
++ D() try : B() {
++ fail = 1;
++ } catch (char c) {
++ fail = 1;
++ throw;
++ } catch (...) {
++ fail = 0;
++ throw;
++ }
++};
++
++main() {
++ try {
++ D d;
++ fail = 1;
++ } catch (...) {
++ }
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++int fail = 0;
++
++struct A {
++ A () { a = 'a'; b = 'b'; c = 'c'; }
++ ~ A () {
++ if ( a != 'a' ) fail = 1;
++ if ( b != 'b' ) fail = 1;
++ if ( c != 'c' ) fail = 1;
++ }
++ char a, b, c;
++};
++
++void some_init () { throw 1; }
++
++struct C : A {
++ C () { some_init (); }
++};
++
++int main () {
++ try {
++ C c;
++ } catch (int i) {
++ return 0;
++ }
++ return 1;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++struct none { int i[50]; };
++
++class my_ex { } a;
++
++none throw_it() {
++ throw 1;
++}
++
++int main() {
++ try {
++ none n = throw_it();
++ } catch (int ex) {
++ return 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh44.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh44.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh44.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh44.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++// prms-id: 9159
++
++static unsigned int iCounter = 0;
++static unsigned int iMax;
++int fail = 0;
++
++class ca {
++public:
++ ca(int) {
++ if (iCounter++ == iMax)
++ throw (const char*)"iCounter";
++ }
++ virtual ~ca() {
++ }
++};
++
++class cc {
++public:
++ cc(const ca &rca1, const ca &rca2) {
++ }
++ virtual ~cc() {
++ fail = 1;
++ }
++};
++
++
++int main(int argc, char **argv) {
++ iMax = 1;
++ try {
++ cc sc(ca(1), ca(1));
++ } catch (const char *pMsg) {
++ }
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh45.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh45.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh45.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh45.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++int i;
++int fail;
++
++class ca {
++public:
++ ca() {
++ if (++i != 1)
++ fail = 1;
++ }
++ virtual ~ca() {
++ if (++i != 4)
++ fail = 4;
++ }
++};
++
++class cb {
++public:
++ cb(const ca &rca) {
++ if (++i != 2)
++ fail = 2;
++ }
++ virtual ~cb() {
++ if (++i != 3)
++ fail = 3;
++ }
++};
++
++void foo(const cb &rcb) {
++}
++
++int main(int argc, char **argv) {
++ foo(cb(ca()));
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh46.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh46.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh46.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh46.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sh-*-* arm-*-pe**-*
++
++int atoi(const char *);
++
++struct ios {
++ virtual ~ios();
++};
++
++class fstreambase : virtual public ios {
++};
++
++class ifstream : public fstreambase {
++};
++
++class ofstream : public fstreambase {
++};
++
++extern const short O;
++extern const short D;
++
++const short O= 0;
++const short D= -3;
++
++
++short glc(const char* const * const l,
++ short& n,short& x,short& y,
++ ifstream* i,ofstream* o)
++
++{
++ n=atoi(l[1]);
++
++ x=atoi(l[2]);
++ y=atoi(l[3]);
++
++ if((x < 0)||(y <0))
++ {
++ return D;
++ }
++
++ i = new ifstream[n];
++ o = new ofstream[2];
++
++ return O;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh47.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh47.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh47.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh47.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <cstdlib>
++#include <exception>
++
++void myterm() {
++ exit (0);
++}
++
++main() {
++ try {
++ throw "";
++ } catch (...) {
++ }
++ try {
++ std::set_terminate (myterm);
++ throw;
++ } catch (...) {
++ return 1;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh48.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh48.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh48.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh48.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <exception>
++using std::uncaught_exception;
++class A {
++public:
++ ~A() {
++ if (uncaught_exception ())
++ exit (0);
++ }
++};
++
++int main() {
++ if (uncaught_exception ())
++ return 1;
++ try {
++ throw "";
++ } catch (...) {
++ if (uncaught_exception ())
++ return 1;
++ }
++ if (uncaught_exception ())
++ return 1;
++ try {
++ A a;
++ throw "";
++ } catch (...) {
++ return 1;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh49.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh49.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh49.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh49.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Special g++ Options: -fexceptions -O9
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++void main1() {
++ throw 1;
++}
++
++int main() {
++ try {
++ main1();
++ } catch (...) {
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++
++void foo() {
++ throw 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh50.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh50.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh50.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh50.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL hppa*-*-* a29k-*-* sparc64-*-elf sh-*-* z8k-*-* arm-*-pe**-*
++
++#include <exception>
++
++void my_unexpected() {
++ throw 42;
++}
++
++template <class T> int foo(T) throw (int) { throw "Hi"; }
++
++main() {
++ std::set_unexpected (my_unexpected);
++ try {
++ foo(1);
++ } catch (int i) {
++ if (i == 42)
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh51.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh51.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh51.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh51.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* z8k-*-* arm-*-pe**-*
++
++#include <exception>
++
++void my_unexpected() {
++ throw 42;
++}
++
++template <class T> int foo(T) throw (T) { throw "Hi"; }
++
++main() {
++ std::set_unexpected (my_unexpected);
++ try {
++ foo(1);
++ } catch (int i) {
++ if (i == 42)
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh52.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh52.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh52.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh52.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Special g++ Options: -fexceptions -O9
++
++int promote_mode (int mode, int *punsignedp)
++{
++ int unsignedp = *punsignedp;
++ *punsignedp = unsignedp;
++ return mode;
++}
++
++int main() {
++ int i;
++ i = promote_mode (42, &i);
++ return i != 42;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh53.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh53.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh53.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh53.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Special g++ Options: -fexceptions -g
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++class zeroset {
++public:
++ ~zeroset () { }
++};
++
++int main () {
++ zeroset a;
++ try {
++ ;
++ } catch( zeroset ) {
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh54.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh54.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh54.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh54.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Special g++ Options: -fexceptions
++
++int main() { try { 1; } } // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh55.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh55.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh55.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh55.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++#include <exception>
++
++void my_terminate_handler() {
++ exit(0);
++}
++
++void throw_an_unexpected_exception() throw() {
++ throw 1;
++}
++
++int main() {
++ std::set_terminate(my_terminate_handler);
++ throw_an_unexpected_exception();
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh56.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh56.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh56.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh56.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Special g++ Options: -fexceptions
++
++struct A {
++ A() { }
++ A(const char *) { }
++ A(const A&) { }
++ ~A() { }
++};
++
++struct bmf {
++ bmf (const A n) { }
++ ~bmf (void) { }
++ A name;
++};
++
++void imf (void) {
++ bmf Sabs ("abs");
++}
++
++int main(void) {
++ imf ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh57.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh57.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh57.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh57.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options: -fno-exceptions
++
++class Calendar_Time {
++public:
++ ~Calendar_Time ();
++ int operator <= (const Calendar_Time& t) const;
++};
++
++class Temporal_Model_Interval {
++public:
++ Calendar_Time start_time ();
++};
++
++int intersects_p (Temporal_Model_Interval* i1, Temporal_Model_Interval* i2) {
++ return ((i1->start_time() <= i2->start_time())
++ || (i1->start_time() <= i2->start_time()));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh58.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh58.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh58.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh58.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++
++struct C {
++ bool mem;
++ ~C();
++};
++
++C genTemp();
++
++int foo_notok(int arg) {
++ switch (arg) {
++ case 0:
++ return genTemp().mem;
++ default:
++ return 3;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++class foo {
++public:
++ class error {};
++
++ void cause_error(void) { throw "Hello World!"; }
++};
++
++int main(void)
++{
++ foo f;
++ try {
++ f.cause_error();
++ }
++ catch (const char cp[]) {
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++extern "C" int printf(const char *, ...);
++
++void main1() {
++ throw 1;
++}
++
++
++int main() {
++ try {
++ main1();
++ } catch (...) {
++ printf("Unwind works!\n");
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++main() {
++ if (0)
++ throw 1 | 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++
++extern "C" int printf(const char *, ...);
++
++int i;
++
++main() {
++ try {
++ try {
++ throw i;
++ } catch (char *) {
++ return 1;
++ }
++ return 1;
++ } catch (int i) {
++ return 0;
++ }
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/eh9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/eh9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe*
++
++main() throw () { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/enum1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/enum1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/enum1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/enum1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Warn if a enum cannot fit into a small bit-field.
++
++enum TypeKind { ATK, BTK, CTK, DTK } ;
++
++struct Type {
++ enum TypeKind kind : 1; // WARNING -
++ void setBTK();
++};
++
++void Type::setBTK() { kind = DTK; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/err1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/err1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/err1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/err1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++struct gorf {
++ int stuff;
++ void snarf();
++};
++
++template <class T> void gorf::snarf() { return; } // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/err2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/err2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/err2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/err2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++class foo {
++public:
++ void apply(foo *(foo::*memptr)()) {
++ this->*memptr(); // ERROR - wrong
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/err3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/err3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/err3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/err3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++class cb {
++};
++
++class cc {
++public:
++ cc()
++ : cb() { // ERROR -
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/explicit1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/explicit1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/explicit1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/explicit1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++struct A1 {
++ explicit A1(int) { }
++} a1(1);
++
++struct A {
++ explicit A(int);
++} a(1);
++
++A::A(int) {
++}
++
++void foo(A a) {
++ foo(a);
++ foo(1); // ERROR - not allowed
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/explicit2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/explicit2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/explicit2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/explicit2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++class string {
++public:
++ string(const char*) { }
++ explicit string(int size) { }
++};
++
++void foo(string) { }
++
++string bar() {
++ foo("hello"); // ok
++ foo(string(2)); // ok
++ foo(2); // ERROR - no implicit conversion from int to string
++ string x = 2; // ERROR - no implicit conversion from int to string
++ string y(2); // ok
++ foo((string)2); // ok
++ return 2; // ERROR - no implicit conversion from int to string
++}
++
++class A : string {
++public:
++ A() : string(2) { } // ok
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/for1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/for1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/for1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/for1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++int main() {
++ for( {int i = 0; int j = 0;} i < 10; ++i ) ; // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/for2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/for2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/for2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/for2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++void foo() {
++ for (class C {};;)
++ ;
++ C c; // ERROR -
++}
++
++void bar() {
++ for (enum E {num};;)
++ ;
++ E e; // ERROR -
++}
++
++void bee () {
++ int i = 0;
++ for (int fun() = 0; i != 2; ++i) { // ERROR -
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/fresco1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/fresco1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/fresco1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/fresco1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++// This is a Fresco found bug.
++
++class WhoCares {};
++
++typedef float Coord;
++
++class BugDemo : public WhoCares {
++public:
++ typedef Coord Matrix[4][4];
++ virtual void vf1(BugDemo::Matrix m) = 0;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/hog1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/hog1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/hog1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/hog1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,187 @@
++class dummy { public: void operator++(void) {}
++ };
++class dummy_000 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_001 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_002 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_003 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_004 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_005 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_006 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_007 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_008 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_009 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_010 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_011 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_012 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_013 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_014 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_015 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_016 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_017 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_018 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_019 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_020 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_021 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_022 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_023 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_024 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_025 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_026 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_027 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_028 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_029 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_030 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_031 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_032 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_033 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_034 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_035 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_036 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_037 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_038 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_039 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_040 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_041 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_042 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_043 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_044 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_045 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_046 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_047 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_048 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++class dummy_049 : private virtual dummy { public: void operator++(void) {
++dummy::operator++(); } };
++
++class super :
++ private dummy_000, private dummy_001, private dummy_002, private
++dummy_003, private dummy_004,
++ private dummy_005, private dummy_006, private dummy_007, private
++dummy_008, private dummy_009,
++ private dummy_010, private dummy_011, private dummy_012, private
++dummy_013, private dummy_014,
++ private dummy_015, private dummy_016, private dummy_017, private
++dummy_018, private dummy_019,
++ private dummy_020, private dummy_021, private dummy_022, private
++dummy_023, private dummy_024,
++ private dummy_025, private dummy_026, private dummy_027, private
++dummy_028, private dummy_029,
++ private dummy_030, private dummy_031, private dummy_032, private
++dummy_033, private dummy_034,
++ private dummy_035, private dummy_036, private dummy_037, private
++dummy_038, private dummy_039,
++ private dummy_040, private dummy_041, private dummy_042, private
++dummy_043, private dummy_044,
++ private dummy_045, private dummy_046, private dummy_047, private
++dummy_048, private dummy_049
++{
++public:
++ void operator++(void);
++};
++
++void super::operator++(void)
++{
++ dummy_000::operator++();
++ dummy_001::operator++();
++ dummy_002::operator++();
++ dummy_003::operator++();
++ dummy_004::operator++();
++ dummy_005::operator++();
++ dummy_006::operator++();
++ dummy_007::operator++();
++ dummy_008::operator++();
++ dummy_009::operator++();
++ dummy_010::operator++();
++ dummy_011::operator++();
++ dummy_012::operator++();
++ dummy_013::operator++();
++ dummy_014::operator++();
++ dummy_015::operator++();
++ dummy_016::operator++();
++ dummy_017::operator++();
++ dummy_018::operator++();
++ dummy_019::operator++();
++ dummy_020::operator++();
++ dummy_021::operator++();
++ dummy_022::operator++();
++ dummy_023::operator++();
++ dummy_024::operator++();
++ dummy_025::operator++();
++ dummy_026::operator++();
++ dummy_027::operator++();
++ dummy_028::operator++();
++ dummy_029::operator++();
++ dummy_030::operator++();
++ dummy_031::operator++();
++ dummy_032::operator++();
++ dummy_033::operator++();
++ dummy_034::operator++();
++ dummy_035::operator++();
++ dummy_036::operator++();
++ dummy_037::operator++();
++ dummy_038::operator++();
++ dummy_039::operator++();
++ dummy_040::operator++();
++ dummy_041::operator++();
++ dummy_042::operator++();
++ dummy_043::operator++();
++ dummy_044::operator++();
++ dummy_045::operator++();
++ dummy_046::operator++();
++ dummy_047::operator++();
++ dummy_048::operator++();
++ dummy_049::operator++();
++}
++
++
++int main(void)
++{
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/init1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/init1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/init1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/init1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++int count;
++
++extern "C" void _exit(int);
++
++struct C {
++ ~C() { if (count != 1) _exit(1); }
++} c;
++
++class A {
++public:
++ ~A () { ++count; }
++};
++
++void f() {
++ static A a;
++}
++
++void g() {
++ // Since this isn't constructed, we can't destruct it.
++ static A a;
++}
++
++int main () {
++ f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/init2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/init2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/init2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/init2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct Foo {
++ Foo (int);
++};
++
++int bar (Foo);
++
++int x = bar (3);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/leak1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/leak1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/leak1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/leak1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++int count = 0;
++
++class T {
++ int i;
++public:
++ T() {
++ i = 1;
++ ++count;
++ }
++ T(const T& o) {
++ i = o.i;
++ ++count;
++ }
++ T operator +(const T& o) {
++ T r;
++ r.i = this->i + o.i;
++ return r;
++ }
++ operator int () {
++ return i;
++ }
++ ~T() {
++ --count;
++ }
++} s, b;
++
++void bar() {
++ static int j = int(s+b);
++ int i = int(s+b);
++}
++
++int i = int(s+b);
++
++int main() {
++ bar();
++ bar();
++ return count != 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mangle1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mangle1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mangle1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mangle1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// Special g++ Options:
++
++// Make sure the typedef name is used in name mangling, not some random
++// anonymous name
++
++struct foo {
++ typedef enum { red } color;
++ void bar(color r) {
++ }
++} f;
++
++#ifdef sparc
++void f1() asm("bar__3fooQ23foo3$_0");
++void f1() {
++}
++void f2() asm("_bar__3fooQ23foo3$_0");
++void f2() {
++}
++void f3() asm("__bar__3fooQ23foo3$_0");
++void f3() {
++}
++#endif
++
++main() {
++ f.bar(foo::red);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mangle2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mangle2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mangle2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mangle2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// Special g++ Options:
++
++typedef struct {
++} color;
++
++void foo(color) {
++}
++
++#ifdef sparc
++void f1() asm("foo__FG3$_0");
++void f1() { }
++void f2() asm("_foo__FG3$_0");
++void f2() { }
++void f3() asm("__foo__FG3$_0");
++void f3() { }
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mangle3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mangle3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mangle3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mangle3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++struct ZZ {
++ int p;
++};
++
++
++template <int ZZ::* ptr>
++struct YY {
++ ZZ qq;
++ YY() { }
++};
++
++int main() {
++ YY<&ZZ::p> ww;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/memoize1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/memoize1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/memoize1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/memoize1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// Special g++ Options: -fsave-memoized
++
++#include <iostream.h>
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mi1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mi1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mi1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mi1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Special g++ Options: -w
++
++class A {
++public:
++ virtual ~A(){};
++ virtual int type(void) {
++ return -1;
++ }
++};
++
++class B : public A {
++public:
++ virtual ~B(){};
++};
++
++
++class C0 : public B, public virtual A {
++public:
++ virtual int type(void) {
++ return 0;
++ }
++};
++
++class C1 : public C0
++{
++public:
++ virtual int type(void) {
++ return 1;
++ }
++};
++
++class C2 : public C0 {
++public:
++ virtual int type(void) {
++ return 2;
++ }
++};
++
++main() {
++ C1 *one = new C1;
++
++ if (one->type() != 1)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mi2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mi2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/mi2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/mi2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++class A {
++ char a;
++public:
++ A(char x) : a(x) { }
++ virtual ~A() { }
++};
++
++class B : virtual public A {
++ char b;
++public:
++ B(char x) : A('b'), b(x) { }
++ ~B() { }
++};
++
++class C : virtual public A {
++ char c;
++public:
++ C(char x) : A('c'), c(x) { }
++ ~C() { }
++};
++
++class D : virtual public A, public B, public C {
++ char d;
++public:
++ D(char x) : A('d'), B('d'), C('d'), d(x) { }
++ ~D() { }
++};
++
++class E : virtual public A, public B, public C {
++ char e;
++public:
++ E(char x) : A('e'), B('e'), C('e'), e(x) { }
++ ~E() { }
++};
++
++class F : virtual public A, public D, public E {
++ char f;
++public:
++ F(char x) : A('f'), D('f'), E('f'), f(x) { }
++ ~F() { }
++};
++
++int main() {
++ F f('x');
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed pt coredump
++template<class T> class A;
++void f () { A<int> *a; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed
++struct A { virtual void f(); };
++struct B { virtual void f() ; };
++struct C : virtual A , virtual B { virtual void f(); };
++
++/* This used to get an error because the DECL_CONTEXT was blown away. */
++void g(A *ptr) { ptr->f(); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// GROUPS passed vtable
++extern "C" int printf(...);
++enum { vf_request, vf_event } want;
++
++int errs = 0;
++
++class ivResource {
++public:
++ virtual ~ivResource () { }
++};
++
++class ivHandler : public ivResource {
++public:
++ virtual void event() { }
++};
++
++class ivGlyph : public ivResource {
++public:
++ virtual ~ivGlyph () { }
++ virtual void request () {
++ if (want!=vf_request)
++ ++errs;
++ }
++};
++
++class ItemView : public ivGlyph, public ivHandler {
++public:
++ virtual void event () {
++ if (want!=vf_event)
++ ++errs;
++ }
++} a;
++
++ivGlyph *bar() {
++ return &a;
++}
++
++ivHandler *bar2() {
++ return &a;
++}
++
++int main() {
++ want=vf_request;
++ bar()->request();
++ want=vf_event;
++ bar2()->event();
++ if (errs) {
++ printf("FAIL\n");
++ return 1;
++ }
++ printf("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// GROUPS passed
++extern "C" int printf(...);
++extern "C" void exit(int);
++
++class A {
++public:
++ virtual ~A() {
++ printf("FAIL\n");
++ exit (1);
++ }
++};
++
++class B : public A {
++public:
++ virtual ~B() {
++ printf("PASS\n");
++ exit (0);
++ }
++};
++
++int main() {
++ B b;
++ A *ap = &b;
++ ap->~A(); // This should call the destructor virtually.
++ printf("FAIL\n");
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// GROUPS passed construct-destruct
++/* g++ constructs j 13 times, and destructs it once. */
++
++extern "C" {
++ int printf(...);
++ void exit(int);
++}
++
++void foo() {
++}
++
++class C {
++ int val;
++ public:
++ static int count;
++ C(int ii) {
++ val = ii;
++ ++count;
++ printf("up\n");
++ }
++ ~C() {
++ --count;
++ printf("down\n");
++ }
++ int operator ++() {
++ return ++val;
++ }
++ operator int() {
++ return val;
++ }
++};
++
++int C::count = 0;
++
++void bar() {
++ for (int ii=0; ii<13; ++ii)
++ for (C j=1; j<9; ++j)
++ foo();
++}
++
++int main() {
++ bar();
++ if (C::count)
++ {
++ printf("FAIL\n");
++ exit(1);
++ }
++ else
++ {
++ printf("PASS\n");
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Special g++ Options: -ansi -pedantic
++// GROUPS passed
++/* -ansi -pedantic-errors should catch this. */
++
++class C {
++ public:
++ extern inline int A() {// ERROR - .*
++ return 1;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS uncaught
++int a;// ERROR - .*
++int a;// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS uncaught
++// Cfront bug A.3 (See Language System Release Notes for the
++// SPARCompiler C++ version 3.0)
++
++struct S1 {
++ static int S1; // ERROR - uses same name 9.3
++};
++struct S2 {
++ union { int ii; float S2; }; // ERROR - uses same name 9.3
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS uncaught
++// Cfront bug A.4 (See Language System Release Notes for the
++// SPARCompiler C++ version 3.0)
++
++struct assign {
++ assign& operator = (const assign&);
++};
++union U {
++ assign a; // ERROR - member of union cannot have op= 9.4// ERROR - .*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed MI
++struct S1 { };
++
++struct S2 : S1 { };
++struct S3 : S1 { };
++
++struct S4 : S3, S2 { };
++
++struct S1 *p1;
++struct S4 *p4;
++
++void foobar ()
++{
++ p1 = p4; // ERROR - this is illegal// ERROR - .*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed vtable
++class T { public: virtual ~T() {} };
++template<class P> class X : public virtual T {};
++int main() { X<int> x; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/misc9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/misc9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options: -Wall -pedantic
++// GROUPS passed qualifiers
++class bee {
++ public:
++ int bee::bar; // WARNING - there is an extra bee:: here
++};
++
++class foo {
++ public:
++ int bee::bar; // ERROR - you cannot do this
++ int me();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++
++const int ci=10, *pc = &ci, *const cpc = pc, **ppc;
++int i, *p, *const cp = &i;
++
++int main()
++{
++ i = ci;
++ *cp = ci;
++ pc++;
++ pc = cpc;
++ pc = p;
++ ppc = &pc;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++
++struct Foo {
++ char *p;
++ const char *q;
++ void m() const;
++};
++
++void other(char &x);
++
++void
++Foo::m() const
++{
++ other(*p); // this is legal
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++
++struct Foo {
++ char *p;
++ const char *q;
++ void m() const;
++};
++
++void other(char &x); // ERROR - reference below
++
++void
++Foo::m() const
++{
++ other(*q); // ERROR - this is bad
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++// make sure extern "C" friends work.
++
++extern "C" { void func(); }
++
++struct crash {
++ int i;
++ friend void func();
++} a;
++
++void func() {
++ a.i = 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// this probably does not have correct debugging info generated.
++
++typedef struct Thing {
++ Thing();
++ int x;
++} Thing;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,46 @@
++// InterViews (ibuild) requires this to work.
++
++extern "C" void exit(int);
++
++void *old;
++
++class c1
++{
++ int i;
++public:
++ c1 () {}
++};
++
++class c2
++{
++ int j;
++public:
++ c2 () {}
++};
++
++class c3 : public c1, public c2
++{
++public:
++ c3 ()
++ {
++ old = this;
++ // printf("new object c3 at %x\n", (int)this); }
++ }
++};
++
++c2* f ()
++{
++ c2* n = new c3 ();
++ // printf ("new object c3 casted to c2 at %x\n", (int)n);
++ return n;
++}
++
++int main ()
++{
++ c3* o = (c3*)f ();
++ // printf("new object c3, upcasted from c2 at %x\n", (int)o);
++ // if old and o are not the same, fail the test case.
++ if (old != o)
++ exit(1);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// On an i386, this core dumps because the reg-stack.c code is wrong, and
++// pops an fp register that it thinks is not used, but it is.
++
++extern "C" int printf (const char*, ...);
++struct S { ~S () { } };
++double f (S) { return 5; }
++int main() { S s; double dist = f (s); printf ("%g\n", dist); return 0; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,58 @@
++// example from the ARM page 292 and 293
++
++extern "C" int printf(const char *, ...);
++extern "C" void exit(int);
++
++int i = 0;
++
++class A {
++public:
++ A() {
++ printf("Doing A\n");
++ if (++i != 1)
++ exit(1);
++ }
++};
++
++class B {
++public:
++ B() {
++ printf("Doing B\n");
++ if (++i != 2)
++ exit(1);
++ }
++};
++
++class C : public virtual A, public virtual B {
++public:
++ C() {
++ printf("Doing C\n");
++ if (++i != 3)
++ exit(1);
++ }
++};
++
++class D : public virtual B, public virtual A {
++public:
++ D() {
++ printf("Doing D\n");
++ if (++i != 4)
++ exit(1);
++ }
++};
++
++class E : public C, public D {
++public:
++ E() {
++ printf("Doing E\n");
++ if (++i != 5)
++ exit(1);
++ }
++} e;
++
++
++int main() {
++ if (++i != 6)
++ exit(1);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++class ClassA {
++public:
++ typedef ClassA& (*PMFV)(const char*);
++ static PMFV setMapper(PMFV);
++ static PMFV _mapper;
++};
++
++class ClassB {
++public:
++ typedef ClassB& (*PMFV)(const char*);
++};
++
++ClassA::PMFV ClassA::setMapper(ClassA::PMFV newFunc)
++{
++ PMFV oldFunc = _mapper;
++ _mapper = newFunc;
++
++ return oldFunc;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Test to make sure &<incomplete record type> works in c++
++// Build don't link:
++
++struct FILE {
++ int _flags;
++};
++
++extern struct _fake_filebuf __std_filebuf_2;
++
++class Value {
++ int width;
++public:
++ Value();
++ friend Value operator&( __const Value&, __const Value&);
++};
++
++FILE* Foo ()
++{
++ return ((FILE*)&__std_filebuf_2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Here is a net bug
++
++class ivAllocation {
++public:
++ ivAllocation();
++ int x_;
++};
++
++class TBScrollBoxInfo {
++public:
++ ivAllocation allocation_;
++};
++
++TBScrollBoxInfo* items_;
++
++inline TBScrollBoxInfo item() {
++ return items_[0];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// A pointer to member function test case.
++
++struct X
++{
++};
++
++void (X::* fee ())()
++{
++ lab: goto lab;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,59 @@
++// Make sure we can initialize complex (MI ambiguous) vtables.
++
++extern "C" int printf(const char *, ...);
++
++struct a
++{
++ virtual void f() = 0;
++};
++
++struct b
++{
++ virtual void g() { };
++};
++
++struct c: public a, public b
++{
++ virtual void f();
++ virtual void g();
++};
++
++void c::f()
++{
++ printf("c::f()\n");
++}
++
++void c::g()
++{
++ printf("c::g()\n");
++}
++
++struct e: public b
++{
++};
++
++struct h
++{
++};
++
++struct d: public c, public e, public h
++{
++ virtual void f();
++ virtual void g();
++};
++void d::f()
++{
++ printf("d::f()\n");
++}
++
++void d::g()
++{
++ printf("d::g()\n");
++}
++
++int main(int argc, char* argv[])
++{
++ a* tmp = new d;
++ tmp->f();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++class Parent {
++public:
++ Parent() {}
++ Parent( char *s ) {}
++};
++
++class Child : public Parent {
++}; // ERROR - called
++
++int main() {
++ Child c( "String initializer" ); // ERROR - bad
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++class environment {
++public:
++ int get_font() ;
++};
++
++typedef int (environment::*INT_FUNCP)();
++
++void myfoo(INT_FUNCP a);
++
++void init_env_requests()
++{
++ myfoo(&environment::get_font);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++
++ char HexDigit(unsigned char ch) { return ch < 'f'; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++void shake_zero()
++{
++}
++
++void shake_one()
++{
++}
++
++void (*foo)();
++
++int main(int a)
++{
++ foo = a ? shake_zero : shake_one;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// A test case found by InterViews testing...
++
++extern "C" int printf(const char *, ...);
++
++class A {
++public:
++ int foo() { printf("ok nv\n"); }
++ virtual int vfoo() { printf("ok v\n"); }
++};
++
++struct S {
++ int (A::*pfn1)();
++ int (A::*pfn2)();
++ int (A::*pfn3)();
++};
++
++// This failed before.
++S s = { &A::foo, &A::vfoo, &A::foo };
++
++A a;
++
++int main() {
++ (a.*s.pfn1)();
++ (a.*s.pfn2)();
++ printf("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++class path {
++public:
++ path (const path& r)
++ { "\"";
++ '\'';
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// From reinhard@ifki50.informatik.fh-muenchen.de against gcc 2.5.0.
++// shows an InterViews problem on RS6000 and i386. Doesn't happen on
++// SPARC.
++
++// From fbrowser.c.
++
++// Build don't link:
++
++class test {
++};
++
++
++typedef int ( test ::* test2)(int fd);
++
++class ivFileBrowserImpl_IOCallback
++{
++ public:
++
++ int inputReady(int fd);
++ test * _obj;
++ test2 _input;
++};
++
++
++int ivFileBrowserImpl_IOCallback ::inputReady(int fd)
++{
++ return (_obj->*_input)(fd);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// This is a test case for the recent libg++ make check problem.
++// Build don't link:
++
++class SubString {
++public:
++ SubString();
++ SubString(const SubString& x);
++};
++
++class String {
++public:
++ String();
++ String(const SubString& x);
++};
++
++int operator!=(const String& x, const SubString& y);
++int operator!=(const String& x, const String& y);
++
++int operator!=(const SubString& x, const String& y);
++int operator!=(const SubString& x, const SubString& y);
++
++void comparetest()
++{
++ String x;
++ SubString s;
++ x != s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Here is another program from the net.
++
++class B;
++
++class A {
++ private:
++ A(B *); // ERROR -
++ public:
++ A(long); // ERROR -
++};
++
++A a(0); // ERROR - should be ambigious
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++class X {
++public:
++ void x(void);
++};
++
++class Y : public X {
++};
++
++class Z : private Y {
++public:
++ void y(void);
++};
++
++void Z::y(void) {
++ x(); // should be OK
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,68 @@
++// Build don't link:
++
++class foo_a {
++ protected:
++ double func(int xi) {return 0.0;}
++ public:
++ foo_a() {}
++};
++
++class foo_b {
++ public:
++ foo_b(int);
++ foo_b();
++ ~foo_b();
++ foo_b(const foo_b&);
++ inline double& operator()(int);
++ foo_b& operator=(foo_b&);
++ void bar_a(int);
++};
++
++foo_b& operator*(foo_b&, foo_b&);
++foo_b& operator*(double, foo_b&);
++
++template <class TP>
++class foo_c {
++ typedef double (TP::* Tmatf)(int);
++ int m;
++ Tmatf* a;
++ void foo_cinst (int mm);
++ public:
++ foo_c(int mm);
++ foo_c() {m = 0; a = 0;}
++ ~foo_c() {delete a;}
++ double (TP::*& operator()(int i))(int) {return a[i];}
++ foo_b& bug_func(int);
++};
++
++template <class TP>
++foo_b& foo_c<TP>::bug_func(int x) {
++ static foo_b retval(m);
++ retval.bar_a(m);
++ for (register int i = 0; i < m; i++)
++ retval(i) = (*(operator()(i)))(x); // ERROR -
++ return retval;
++}
++
++template <class TP>
++class foo_d {
++ protected:
++ foo_c<TP> bar_b;
++ public:
++ foo_d() {}
++ virtual ~foo_d() {}
++ virtual void setfoo_c();
++};
++
++class foo_e : public foo_a, public foo_d<foo_a> {
++ public:
++ foo_e();
++ ~foo_e() {}
++ void setfoo_c();
++};
++
++void foo_e::setfoo_c() {
++ bar_b(0) = func; // ERROR -
++}
++
++template class foo_c<foo_a>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++class Co_obj {
++public:
++ Co_obj() {}
++ };
++class Linear_list_node : virtual public Co_obj { };
++class M1 : public Linear_list_node { };
++class M2 : public Linear_list_node { };
++class New_node : public M1, public M2 { };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++#include <iostream.h>
++
++class foo {
++public:
++ foo(int i) {k = i;}
++protected:
++ int k;
++};
++
++class bar_1 : public foo {
++public:
++ bar_1(int i) : foo(i) {}
++ int get_k() {return k;}
++};
++
++class bar_2 : public foo {
++public:
++ bar_2(int i) : foo(i) {};
++ int get_k() {return k;}
++};
++
++class multiple : public bar_1, public bar_2 {
++public:
++ multiple(int i1, int i2) : bar_1(i1), bar_2(i2) {}
++ void print() {
++ cout << "bar_1::k -> " << bar_1::k << "\n";
++ cout << "bar_2::k -> " << bar_2::k << "\n";
++ cout << "bar_1::get_k() -> " << bar_1::get_k() << "\n";
++ cout << "bar_2::get_k() -> " << bar_2::get_k() << "\n";
++ }
++};
++
++int main() {
++ multiple m(1,2);
++ m.print();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++extern "C" int printf(const char *, ...);
++
++class A {
++ public:
++ char *x;
++};
++
++class B1:public virtual A { };
++
++class B2:public virtual A { };
++
++class C:public B1, public B2 {
++public:
++ C() { }
++};
++
++int main() {
++ C c;
++ printf("&c.x = %x\n", &c.x);
++ printf("&c.B1::x = %x\n", &c.B1::x);
++ printf("&c.B2::x = %x\n", &c.B2::x);
++ printf("&c.A::x = %x\n", &c.A::x);
++ if (&c.x != &c.B1::x
++ || &c.x != &c.B2::x
++ || &c.x != &c.A::x)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++class X;
++
++class A {
++public:
++ void handlerFn(X*);
++};
++
++typedef void (A::*handler) (X*);
++
++class B {
++public:
++ void setHandler(handler);
++};
++
++void f(B* b) {
++ b->setHandler(A::handlerFn); // ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++class B {
++public:
++ int bi;
++ void bProc ( void ) { bi = 39; }
++ };
++
++class D : public B {
++public:
++ int di;
++ void dProc (void ){ di = 42; }
++ };
++
++typedef void (B::*BPROC)(void);
++typedef void (D::*DPROC)(void);
++
++union AFX_PMSG {
++public:
++
++ AFX_PMSG () {};
++ AFX_PMSG ( BPROC bpr ) { bfn = bpr ; }
++
++ operator BPROC() { return bfn; }
++
++ BPROC bfn;
++ DPROC dfn;
++};
++
++
++int main(int argc, char *argv[]) {
++ B b;
++ D d;
++
++ BPROC bpr = &B::bProc;
++ AFX_PMSG pmsg(bpr);
++
++ BPROC ppr = pmsg;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++struct A {
++ virtual int a () { return 0; }
++};
++
++struct B {
++ virtual int b () { return 0; }
++ virtual int b2 () { return 0; }
++};
++
++struct C : public A, public B {
++ virtual int a () { return 1; }
++ virtual int b () { return 2; }
++ virtual int b2 () { return 3; }
++};
++
++int (C::*vmpb) () = &C::b;
++int (C::*vmpb2) () = &C::b2;
++int (C::*vmpa) () = &C::a;
++
++int main () {
++ C c;
++ if ((c.*vmpa)() != 1)
++ return 1;
++ if ((c.*vmpb)() != 2)
++ return 1;
++ if ((c.*vmpb2)() != 3)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++void *vp;
++
++class silly {
++public:
++ virtual int b() { return 1; }
++};
++class solly : silly {
++public:
++ virtual int b() { return 2; }
++};
++class thing {
++public:
++ virtual int a() { return 3; }
++};
++class thong : public solly, public thing {
++public:
++ virtual int a() {
++ if (this != vp) return 4;
++ else return 0;
++ }
++};
++
++typedef int(thing::*ping)();
++ping qq = &thing::a;
++
++int main() {
++ thong b;
++ vp = &b;
++ return (b.*qq)();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Here is another program from the net.
++
++class BOOL {
++ public:
++ int val;
++
++ BOOL(int i =0);
++ operator int();
++};
++
++BOOL& foo()
++{
++ static BOOL status;
++ return status;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++#include <stddef.h>
++extern "C" void abort();
++
++class toto {
++public:
++ void * operator new (size_t t) {
++ abort();
++ }
++ void operator delete (void*p, size_t t) {
++ abort();
++ }
++};
++
++int main() {
++ toto * p;
++ p = new toto[5];
++ delete [] p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++int main() {
++ int i = ~ false;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++typedef void (*__sighandler_t)(int);
++
++struct sigaction {
++ __sighandler_t sa_handler;
++};
++
++struct task_struct {
++ struct sigaction sigaction[32];
++};
++
++void
++get_stat() {
++ struct task_struct ** p = 0;
++ unsigned long bit = 1;
++ unsigned long sigignore = 0;
++ int i = 0;
++ switch((unsigned long) (*p)->sigaction[i].sa_handler)
++ {
++ case 1:
++ sigignore |= bit;
++ break;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net43.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net43.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net43.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net43.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++class foo {
++ public:
++ friend int operator ^(const foo&, const foo&);
++};
++
++int main ()
++{
++ int (*funptr) (const foo &, const foo &) = operator ^;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net44.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net44.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net44.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net44.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Make sure we don't dump core
++
++enum request { q, w, e}; // ERROR -
++
++class request { // ERROR -
++public:
++ int a;
++ request( int b) {
++ a = b;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net45.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net45.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net45.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net45.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++template <class T1, class T2>
++struct pair {
++ T1 first;
++ T2 second;
++ pair(const T1& a, const T2& b) : first(a), second(b) {}
++};
++
++struct myint {
++ myint() {
++ }
++ myint(const myint& mi) {
++ }
++ myint& operator=(const myint& mi) {
++ }
++};
++
++extern pair<const myint, myint> a;
++pair<const myint, myint> b(a);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net46.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net46.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net46.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net46.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++#include <iostream.h>
++#include <stddef.h>
++#include <new>
++
++int fail = 1;
++
++static void *operator new(size_t size) throw (std::bad_alloc) {
++ --fail;
++ return (void*) 0;
++}
++
++int main() {
++ cout << "";
++ new int;
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net47.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net47.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net47.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net47.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// Special g++ Options: -w -fpermissive
++
++class foo {};
++class bar : foo {
++public:
++ bar () : () {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net48.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net48.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net48.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net48.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++char *a="aê";
++
++class A
++{
++public:
++ A()
++ {
++ char *b="aê";
++ }
++};
++
++char *c="aê";
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Message-Id: <m0lLuUK-0000fRC@nix.appli.se>
++// Date: Wed, 4 Mar 92 12:50 MET
++// From: niklas@appli.se (Niklas Hallqvist)
++// To: eichin@cygnus.com, tiemann@cygnus.com
++// Cc: gcc2@cygnus.com
++// Subject: nested type handling
++//
++// The last couple of days I've been struggling with nested types in the
++// C++ compiler. Frankly, it's a mess! Was it impossible to put the stuff
++// into the parser instead of the lexer? Well, anyway, to get the following
++// code to compile:
++//
++// struct O {
++// struct M {
++// struct I
++// {};
++// };
++// };
++// O::M::I s;
++//
++// a patch enclosed below is needed. I'm not sure if it causes any
++// unanticipated side-effects, but it seem to work well for me.
++
++// Build don't link:
++
++struct O {
++ struct M {
++ struct I
++ {};
++ };
++};
++O::M::I s;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Special g++ Options:
++
++volatile void abort();
++volatile void oink() {
++ abort() ;
++} // gets bogus error -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// Special g++ Options:
++
++struct X {};
++X x = X(); // gets bogus error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Special g++ Options:
++
++// This should compile.
++
++int foo (signed char *);
++int foo (char *);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++
++class Base {
++public:
++ int foo;
++};
++
++class Derived : public Base {
++public:
++ int bar;
++};
++
++void func(Base&); // ERROR -
++
++void func2(const Derived& d) {
++ func(d); // ERROR - this is bad
++}
++
++void
++foo (int& a)
++{ // ERROR -
++}
++
++int main ()
++{
++ int b;
++ const int*const a = &b;
++ *a = 10; // ERROR - it's const
++ foo (*a); // ERROR - it's const
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/net9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/net9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++
++const int ci=10, *pc = &ci, *const cpc = pc, **ppc;
++int i, *p, *const cp = &i;
++
++int main()
++{
++ ci = 1; // ERROR - bad
++ ci++; // ERROR - bad
++ *pc = 2; // ERROR - bad
++ cp = &ci; // ERROR - bad
++ cpc++; // ERROR - bad
++ p = pc; // ERROR - bad
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++namespace Foo {
++ int bar() {
++ return 0;
++ }
++}
++
++int main() {
++ return Foo::bar();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++class Foo {
++};
++
++namespace A {
++ namespace Foo {
++ int bar() {
++ return 0;
++ }
++ }
++
++ int mymain() {
++ return Foo::bar();
++ }
++}
++
++int main() {
++ return A::mymain();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++namespace {
++ int i = 10;
++ enum fish { one = 1, two = 2, red = 3, blue = 4 };
++}
++extern "C" void printf (const char *, ...);
++int main(void)
++{
++ if (i != 10) {
++ return 1;
++ }
++ if (one != 1) {
++ return 2;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++namespace N {
++ struct C {
++ C();
++ };
++}
++
++namespace M {
++ struct C {
++ C();
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++namespace Jazz {
++ int horn( int h ) { return 1; }
++}
++
++using Jazz::horn;
++
++namespace Jazz {
++ int horn ( char c ) { return 0; }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++
++#include <stdio.h>
++#include <stdlib.h>
++
++#define MAX 256
++#define MAXSTATE 1000000
++
++struct R {
++ int count;
++ int state1;
++ int state2;
++};
++
++int cmp_d(const R* a, const R* b) {
++ return a->count > b->count;
++}
++
++namespace CXX {
++ template<class T, int i1, int i2>
++ inline void qsort (T b[i1][i2], int (*cmp)(const T*, const T*)) {
++ ::qsort ((void*)b, i1*i2, sizeof(T), (int (*)(const void *, const void *))cmp);
++ }
++}
++
++using namespace CXX;
++
++void sort_machine() {
++ struct R d[MAX][MAX];
++ qsort<R,MAX> (d, cmp_d);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++namespace Foo {
++ int bar() {
++ return 0;
++ }
++}
++
++using namespace Foo;
++
++int main() {
++ bar();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++namespace N {
++ int i;
++};
++
++using namespace N;
++
++int main() {
++ return i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++int i; // ERROR -
++
++namespace i { // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++namespace i {
++}
++namespace i {
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++namespace A {
++ int i = 1;
++}
++
++int j = i; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++namespace A {
++ int i = 1;
++}
++
++namespace A {
++ int j = i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++namespace A {
++ int i = 1;
++}
++
++namespace B {
++ int j = i; // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++namespace A {
++ int i = 1;
++}
++
++namespace A {
++ int j = i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ns9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ns9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++namespace Foo {
++ int bar() {
++ return 0;
++ }
++}
++
++using Foo::bar;
++
++int main() {
++ return bar();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/offset1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/offset1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/offset1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/offset1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++extern "C" int printf(const char *, ...);
++void *vp;
++int fail = 0;
++
++class Foo {
++public:
++ virtual void setName() {
++ printf("Foo at %x\n", this);
++ if (vp != (void*)this)
++ fail = 1;
++ }
++};
++
++class Bar : public Foo {
++public:
++ virtual void init(int argc, char **argv) {
++ printf("Bar's Foo at %x\n", (Foo*)this);
++ vp = (void*)(Foo*)this;
++ setName();
++ }
++};
++
++class Barf : virtual public Bar {
++public:
++ virtual void init(int argc, char **argv) { Bar::init(argc, argv); }
++};
++
++class Baz : virtual public Bar, virtual public Barf {
++public:
++ virtual void init(int argc, char **argv) { Barf::init(argc, argv); }
++};
++
++Bar *theBar = new Baz();
++
++int main(int argc, char **argv) {
++ theBar->init(argc, argv);
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Shows a problem with the default op= not being an implementation...
++
++class C {
++ int i;
++};
++
++C a, b;
++
++int main() {
++ a = b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++typedef struct base1 {
++ int x;
++} base1_t;
++
++typedef struct base2 {
++ int x;
++} base2_t;
++
++class derived1 : public base1 {
++};
++
++class derived2 : public derived1, public base2 {
++};
++
++struct test {
++ derived2& fails;
++ void test1() {
++ fails.base1::x = 5;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10148.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10148.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10148.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10148.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// prms-id: 10148
++
++int fail = 1;
++void ok() { fail = 0; }
++
++class TC {
++ int s_;
++};
++
++class TIRD {
++ public:
++ void (*itc)();
++ TIRD() { itc = ok; }
++};
++
++class TCCB : public TC, public TIRD {
++};
++
++class TCRCB : public TCCB {
++public:
++ virtual void eat ();
++};
++
++void TCRCB::eat () {
++ void *vp = (TIRD*)this->itc;
++ this->itc();
++}
++
++int main() {
++ TCRCB a;
++ a.eat();
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10247.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10247.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10247.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10247.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// prms-id: 10247
++
++class a {
++public:
++ int operator++(int) { return operator()++ ; } // ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10416.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10416.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10416.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10416.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe*
++// prms-id: 10416
++
++class not_ok {
++public:
++ void f() throw(int) { }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10511.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10511.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10511.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10511.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// prms-id: 10511
++
++class S {
++public:
++ enum E {a, b, c};
++};
++
++class C {
++public:
++ bool f (S::E()) { }
++ virtual void foo();
++};
++
++void C::foo() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10769a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10769a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10769a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10769a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,45 @@
++// Special g++ Options: -Wno-pmf-conversions
++// prms-id: 10769
++
++#define PMF2PF(PMF) ((void (*)())(PMF))
++
++int ok = 0;
++
++class A {
++public:
++ void f1a() { ok += 3; }
++ void f1b() { ok += 5; }
++ void f2a() { ok += 7; } // gets bogus error XFAIL *-*-*
++ void f2b() { }
++ const static void (*table[2][2])();
++ void main();
++} a;
++
++const void (*A::table[2][2])()
++ = { { PMF2PF(&A::f1a), PMF2PF(&A::f1b) },
++ { PMF2PF(&A::f2a), PMF2PF(&A::f1b) },
++ };
++
++void
++dispatch (A *obj, int i, int j)
++{
++ (*(void (*)(A *))A::table[i][j])(obj);
++}
++
++void A::main() {
++ dispatch (&a, 0, 0);
++ void (A::*mPtr)() = &A::f1a;
++
++ (*(void (*)(A*))PMF2PF(mPtr))(&a);
++ (*(void (*)(A*))PMF2PF(f2a))(&a); // gets bogus error XFAIL *-*-*
++}
++
++int main() {
++ a.A::main();
++ dispatch (&a, 0, 1);
++ void (A::*mPtr)() = &A::f1b;
++
++ (*(void (*)(A*))PMF2PF(a.*mPtr))(&a);
++ (*(void (*)(A*))PMF2PF(a.f2a))(&a); // gets bogus error XFAIL *-*-*
++ return ok != 3+3+5+5+7+7;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10769b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10769b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10769b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10769b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Special g++ Options:
++// prms-id: 10769
++
++#define PMF2PF(PMF) ((void (*)())(PMF))
++
++class A {
++public:
++ void f1a() { }
++ void main();
++} a;
++
++class B {
++public:
++ void bf1() { }
++} b;
++
++void A::main() {
++ void (B::*mPtrB)(B*);
++ (*(void (*)(A*))PMF2PF(mPtrB))(&b); // ERROR -
++}
++
++int main() {
++ void (A::*mPtr)() = &A::f1a;
++ (*(void (*)(A*))PMF2PF(mPtr))(&a); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10849a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10849a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10849a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10849a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// prms-id: 10849
++
++struct A
++{
++ int comm;
++ A(int i) : comm(i) { }
++};
++
++struct S1 { char c1; };
++
++struct B : public S1, public A
++{
++ B(int i) : A(i) { }
++};
++
++struct C : public A
++{
++ C(int i) : A(i) { }
++};
++
++struct D : public B, public C
++{
++ virtual int g() {
++ int D::*pmd = (int C::*)&C::comm;
++ return (this->*pmd) == 42;
++ }
++ D() : B(41), C(42) { }
++} d;
++
++int main() {
++ if (! d.g())
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10951.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10951.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p10951.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p10951.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// prms-id: 10951
++
++inline int m1(const int& a) {
++ return 1;
++}
++
++template <class T>
++class A {
++public:
++ typedef int st;
++
++ static int m2t() {
++ return m1(1);
++ }
++};
++
++A<int>::st i;
++int m3() {
++ return A<int>::m2t();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11012.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11012.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11012.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11012.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -Wno-pmf-conversions
++// prms-id: 11012
++
++class Foo {
++public:
++ int f(){}
++};
++
++void foo() {
++ void *p1 = &Foo::f;
++ const void *p2 = &Foo::f;
++ int (*p3)() = &Foo::f;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11110.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11110.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11110.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11110.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// prms-id: 11110
++
++class data;
++
++class conatiner {
++public:
++ virtual void* first ();
++ virtual data* contents (void* i); // ERROR - candidates
++};
++
++class user {
++public:
++ data* data1 () const;
++private:
++ conatiner& _c;
++};
++
++data* user::data1() const {
++ return (_c.contents (_c.first)); // ERROR -
++} // ERROR - control reaches end
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11116.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11116.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11116.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11116.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// Special g++ Options: -Wno-pmf-conversions
++// prms-id: 11116
++
++class Bar {
++public:
++ int f(int a) { val = a; return val; }
++private:
++ int val;
++};
++
++typedef int (Bar::*BarPtr)(int);
++
++void foo() {
++ int a;
++ int (Bar::*bp)(int) = &Bar::f;
++ Bar bar;
++ int (*p)(void *, int);
++
++ p = (int (*)(void*,int))((void (*)())((bp).__pfn_or_delta2.__pfn));
++ a = (*p)(&bar, 4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11142.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11142.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11142.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11142.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options: -fexceptions -O -g
++// prms-id: 11142
++
++class RWxmsg {
++public:
++ RWxmsg();
++ virtual ~RWxmsg();
++};
++
++class RWTHRInternalError : public RWxmsg {
++public:
++ virtual ~RWTHRInternalError() { }
++};
++
++void setCount(int count) {
++ throw RWTHRInternalError();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11144.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11144.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11144.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11144.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Special g++ Options: -O
++// prms-id: 11144
++
++class Id {
++public:
++ int d_i;
++ Id(int i) : d_i(i) {}
++ int value() {return d_i;}
++} id(1);
++
++Id foo() { return id; }
++
++int main() {
++ const Id &id1 = foo();
++ const Id &id2 = foo();
++ return &id1 == &id2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11482.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11482.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11482.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11482.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// prms-id: 11482
++
++void *vp;
++
++enum E { bad, ok } e;
++
++void foo() {
++ e = (E)vp; // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11667.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11667.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p11667.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p11667.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,62 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++// prms-id: 11667
++
++extern "C" int printf(const char *,...);
++
++template < class T >
++class LIST {
++public:
++
++ LIST() { nitems = 16; items = new T[nitems]; };
++
++ LIST(int u) { nitems = u; items = new T[nitems]; };
++
++ T& operator[](int i) const {
++ return items[i];
++ }
++
++ void grow(int n) {
++ T* newlist = new T[n];
++ T* src = items;
++ T* dst = newlist;
++ int i = nitems;
++
++ try {
++ while (i--) *dst++ = *src++;
++ } catch (...) {
++ delete[] newlist;
++ throw;
++ }
++
++ if (items) delete[] items;
++ nitems = n;
++ items = newlist;
++ }
++
++private:
++ int nitems;
++ T *items;
++};
++
++int main(int argc, char **argv) {
++ int i;
++ LIST<int> mylist(10);
++
++ printf("Start dumping initial 10 item list\n");
++ for (i = 0; i < 10 ; i++) {
++ mylist[i] = i;
++ printf("%d\n", mylist[i]);
++ }
++
++ printf("Growing list to 20\n");
++ mylist.grow(20);
++
++ printf("Start dumping grown 20 item list\n");
++ for (i = 0; i < 20; i++) {
++ mylist[i] = i;
++ printf("%d\n", mylist[i]);
++ }
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p12306a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p12306a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p12306a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p12306a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// prms-id: 12306
++// a net report of the same problem as 12306
++
++class a {
++public:
++ int i;
++};
++
++class g : virtual public a {
++};
++
++class b : virtual public a {
++ int j;
++};
++
++class c : public g, public b {
++};
++
++class d {
++public:
++ virtual class b* get() {return 0;}
++};
++
++class f : public d {
++public:
++ virtual class b* get() {return &_c;}
++ c _c;
++};
++
++int main(void) {
++ f D;
++ b* bp=D.get();
++ D._c.i = 42;
++ return &D._c.i != &bp->i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p12306.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p12306.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p12306.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p12306.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,75 @@
++// prms-id: 12306
++
++void *ptr1, *ptr2;
++int fail = 0;
++
++extern "C" int printf(const char *...);
++
++class RWSlist { };
++
++class RWSlistIterator {
++public:
++ RWSlist *slist;
++ RWSlistIterator(RWSlist& s) { }
++ void toLast() {
++ if (ptr1 != (RWSlistIterator*)this)
++ fail = 5;
++ if (ptr2 != &(*this).slist)
++ fail = 6;
++
++ if (0) printf("at %x %x\n", (RWSlistIterator*)this, &(*this).slist);
++ }
++};
++
++class RWCollectable {
++};
++
++class RWSlistCollectables : public RWSlist {
++public:
++ RWSlistCollectables() { }
++ RWSlistCollectables(RWCollectable* a) { }
++};
++
++class RWIterator { };
++
++class RWSlistCollectablesIterator : public RWIterator, public RWSlistIterator {
++public:
++ RWSlistCollectablesIterator(RWSlistCollectables& s) : RWSlistIterator(s) { }
++};
++
++class Sim_Event_Manager {
++public:
++ RWSlistCollectables scheduled_events_;
++ RWSlistCollectablesIterator last_posted_event_position_;
++ Sim_Event_Manager();
++ void post_event();
++};
++
++Sim_Event_Manager::Sim_Event_Manager ()
++ :last_posted_event_position_(scheduled_events_)
++{
++}
++
++void Sim_Event_Manager::post_event () {
++ ptr1 = (RWSlistIterator*)&last_posted_event_position_;
++ ptr2 = &((RWSlistIterator*)&last_posted_event_position_)->slist;
++ if (0) printf("at %x %x\n", (RWSlistIterator*)&last_posted_event_position_,
++ &((RWSlistIterator*)&last_posted_event_position_)->slist);
++ if (ptr1 != (RWSlistIterator*)&last_posted_event_position_)
++ fail = 1;
++ if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist)
++ fail = 2;
++ if (0) printf("at %x ?%x\n", (RWSlistIterator*)&last_posted_event_position_,
++ &((RWSlistIterator&)last_posted_event_position_).slist);
++ if (ptr1 != (RWSlistIterator*)&last_posted_event_position_)
++ fail = 3;
++ if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist)
++ fail = 4;
++ last_posted_event_position_.toLast();
++}
++
++int main(int argc, char **argv) {
++ Sim_Event_Manager foo;
++ foo.post_event();
++ return fail;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1248.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1248.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1248.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1248.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// GROUPS passed pure-virt
++extern "C" { void printf(const char *, ...); }
++class Base {
++public:
++ virtual ~Base() =0;
++};
++
++class Deranged : public Base {
++public:
++ int value;
++ virtual ~Deranged();
++};
++
++
++Deranged::~Deranged(){}
++
++void foo() {
++ Deranged d;
++}
++
++int main()
++{
++ foo();
++ printf("PASS\n");
++ return 0;
++}
++
++Base::~Base () { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1567.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1567.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1567.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1567.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// GROUPS passed vtable
++extern "C" int printf (const char *, ...);
++extern "C" void exit(int);
++
++class A {
++public:
++ virtual const char* f1() { return "A::f1"; }
++ virtual const char* f2() { return "A::f2"; }
++ virtual const char* f3() { printf("FAIL\n"); exit(1); return "A::f3"; }
++};
++
++class B {
++public:
++ virtual const char* f2() { return "B::f2"; }
++ virtual const char* f3() { return "B::f3"; }
++};
++
++class C: public A, public B {
++public:
++ const char* f2() { return B::f2(); }
++ const char* f1() { return f2(); }
++ const char* f3() { return A::f3(); }
++};
++
++class D: public A, public B {
++public:
++ const char* f2() { return B::f2(); }
++ const char* f1() { return D :: f2(); }
++ const char* f3() { return A::f3(); }
++};
++
++int main() {
++ C* tempC = new C;
++ D* tempD = new D;
++ A* a = tempC;
++ printf("calling f1 on a C gives %s\n", a->f1());
++ a = tempD;
++ printf("calling f1 on a D gives %s\n", a->f1());
++ printf("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p16146.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p16146.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p16146.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p16146.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,89 @@
++// prms-id: 16146
++
++extern "C" int printf (const char *, ...);
++
++class myFoundation {
++protected:
++ myFoundation () { count = 0; };
++ virtual ~myFoundation () {};
++
++public:
++ void addRef () { ++count; }
++ void removeRef () { if (count > 0) --count; }
++
++private:
++ long count;
++};
++
++
++class firstIntermediate :virtual public myFoundation {
++public:
++ firstIntermediate () {};
++ ~firstIntermediate () {};
++
++ void bar () { printf ("Bar\n"); }
++};
++
++
++class firstBase : public firstIntermediate {
++public:
++ firstBase () {};
++ ~firstBase () {};
++
++ virtual void g () {};
++};
++
++
++class secondIntermediate : virtual public myFoundation {
++public:
++ secondIntermediate () {};
++ ~secondIntermediate () {};
++
++ virtual void h () {};
++};
++
++
++class secondBase : public secondIntermediate {
++public:
++ secondBase () {};
++ ~secondBase () {};
++
++ virtual void h () {};
++};
++
++
++class typeInterface : virtual public firstBase {
++public:
++ typeInterface () {};
++ ~typeInterface () {};
++
++ virtual void i () {};
++};
++
++class classServices : virtual public firstBase,
++ public secondBase {
++public:
++ classServices () {};
++ ~classServices () {};
++
++ virtual void j () {};
++};
++
++class classImplementation : public typeInterface,
++ public classServices {
++public:
++ classImplementation () {};
++ ~classImplementation () {};
++
++ void g () {};
++ void h () {};
++ void i () {};
++ void j () {};
++};
++
++int main () {
++ firstBase* fbp = new classImplementation;
++ classImplementation* cip = dynamic_cast <classImplementation*> (fbp);
++ cip->addRef();
++ myFoundation* mfp = cip;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1862.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1862.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1862.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1862.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,62 @@
++// GROUPS vtable
++extern "C" int printf (const char *, ...);
++
++class A
++{
++public:
++ virtual ~A(){};
++ virtual int type(void)
++ {
++ return -1;
++ }
++};
++
++class B
++{
++public:
++ virtual ~B(){};
++};
++
++
++class C0 : public B, public A
++{
++public:
++ virtual int type(void)
++ {
++ return 0;
++ }
++};
++
++class C1 : public C0
++{
++public:
++ virtual int type(void)
++ {
++ return 1;
++ }
++};
++
++class C2 : public C0
++{
++public:
++ virtual int type(void)
++ {
++ return 2;
++ }
++};
++
++int main()
++{
++ C1 *one = new C1;
++
++ if (one->type() == 1)
++ {
++ printf ("PASS\n");
++ return 0;
++ }
++ else
++ {
++ printf ("FAIL\n");
++ return 1;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1989.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1989.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p1989.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p1989.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,494 @@
++// Build don't link:
++// prms-id: 1989
++
++#define TRUE true
++#define FALSE false
++typedef void *Pix;
++
++template<class T>
++struct link {
++ T item;
++ link *next;
++ link *prev;
++
++ link(const T& t): item(t), prev(0), next(0)
++ { };
++ link(const T& t, link<T> *p, link<T> *n): item(t), prev(p), next(n)
++ { };
++};
++
++template<class T>
++class List_DL {
++public:
++ List_DL();
++ List_DL(const List_DL&);
++ ~List_DL();
++
++ void append(const T& item);
++ void prepend(const T& item);
++ void insert(const T& item, Pix x, bool before);
++
++ void remove(Pix& x)
++ { T tmp; remove(x, tmp); }
++ void remove(Pix& x, T& item);
++
++ void clear();
++
++ unsigned length() const
++ { return count; }
++
++private:
++
++ unsigned count;
++ link<T> *head;
++ link<T> *tail;
++
++public:
++ Pix first() const
++ { return Pix(head); }
++ Pix last() const
++ { return Pix(tail); }
++ void next(Pix& x) const
++ { if (0 != x) x = ((link<T> *) x)->next; }
++ void prev(Pix& x) const
++ { if (0 != x) x = ((link<T> *) x)->prev; }
++ T& operator()(Pix x) const
++ { return ((link<T> *) x)->item; }
++};
++
++template<class T>
++List_DL<T>::List_DL():
++count(0),
++head(0)
++{ }
++
++template<class T>
++List_DL<T>::List_DL(const List_DL& other):
++count(0),
++head(0)
++{
++ for (Pix x=other.first(); 0 != x; other.next(x))
++ append(other(x));
++}
++
++template<class T>
++List_DL<T>::~List_DL()
++{
++ clear();
++}
++
++template<class T>
++void
++List_DL<T>::append(const T& item)
++{
++ count++;
++ if (0 == head) {
++ head = new link<T>(item);
++ tail = head;
++ } else {
++ tail->next = new link<T>(item, tail, 0);
++ tail = tail->next;
++ }
++}
++
++template<class T>
++void
++List_DL<T>::prepend(const T& item)
++{
++ count++;
++ if (0 == head) {
++ head = new link<T>(item);
++ tail = head;
++ } else {
++ head = new link<T>(item, 0, head);
++ if (tail == head)
++ tail = tail->next;
++ }
++}
++
++template<class T>
++void
++List_DL<T>::insert(const T& item, Pix x, bool before = TRUE)
++{
++ link<T> *l = (link<T> *) x;
++
++ if (before) {
++ if (0 == l || l == head) {
++ prepend(item);
++ } else {
++ link<T> *n = new link<T>(item, l->prev, l);
++ l->prev->next = n;
++ l->prev = n;
++ }
++ } else {
++ if (0 == l || l == tail) {
++ append(item);
++ } else {
++ link<T> *n = new link<T>(item, l, l->next);
++ l->next->prev = n;
++ l->prev = n;
++ }
++ }
++}
++
++template<class T>
++void
++List_DL<T>::remove(Pix& x, T& item)
++{
++ link<T> *l = (link<T> *) x;
++
++ if (0 == l)
++ return;
++
++ item = l->item;
++ if (1 == count) {
++ delete head;
++ head = 0;
++ tail = 0;
++ } else {
++ // more than one item in the list
++ if (l == head) {
++ link<T> *old = head;
++ head = head->next;
++ head->prev = 0;
++ delete old;
++ } else if (l == tail) {
++ link<T> *old = tail;
++ tail = tail->prev;
++ tail->next = 0;
++ delete old;
++ } else {
++ l->next->prev = l->prev;
++ l->prev->next = l->next;
++ delete l;
++ }
++ }
++}
++
++template<class T>
++void
++List_DL<T>::clear()
++{
++ link<T> *l, *succ;
++ for (l=head; 0 != l; l=succ) {
++ succ = l->next;
++ delete l;
++ }
++ head = 0;
++ tail = 0;
++}
++
++template<class T>
++class List_DLS: public List_DL<T> {
++public:
++ List_DLS(): List_DL<T>()
++ { };
++ List_DLS(const List_DLS& other): List_DL<T>(other)
++ { };
++
++ bool contains(const T& item) const
++ { return search(item) != 0 ? TRUE: FALSE; }
++ Pix search(const T&) const;
++};
++
++template<class T>
++Pix
++List_DLS<T>::search(const T& item) const
++{
++ for (Pix x=first(); 0 != x; next(x)) {
++ if (item == operator()(x)) // ERROR - const subversion
++ return x;
++ }
++ return 0;
++}
++
++template<class T>
++class List_DLSp: public List_DL<T> {
++public:
++ List_DLSp(): List_DL<T>()
++ { };
++ List_DLSp(const List_DLSp& other): List_DL<T>(other)
++ { };
++
++ bool contains(const T& item) const
++#ifndef INTERNAL_ERROR
++ ;
++#else
++ { return search(item) != 0 ? TRUE: FALSE; }
++#endif
++ Pix search(const T&) const;
++};
++
++template<class T>
++bool
++List_DLSp<T>::contains(const T& item) const
++{
++ for (Pix x=first(); 0 != x; next(x)) {
++ if (*item == *operator()(x))
++ return TRUE;
++ }
++ return FALSE;
++}
++
++template<class T>
++class Set {
++public:
++ Set();
++ Set(const Set& other);
++
++ virtual void add(const T& item);
++
++ void remove(const T& item)
++ { Pix x = search(item); remove(x); }
++ void remove(Pix& x)
++ { T tmp; remove(x, tmp); }
++ virtual void remove(Pix& x, T& item);
++
++ virtual void clear();
++
++ virtual bool contains(const T&) const;
++ virtual Pix search(const T&) const;
++
++ virtual unsigned length() const;
++
++ virtual Pix first() const;
++ virtual void next(Pix& x) const;
++ virtual T& operator()(Pix x) const;
++};
++
++template<class T>
++Set<T>::Set()
++{ }
++
++template<class T>
++Set<T>::Set(const Set& other)
++{ }
++
++
++template<class T>
++class Set_DL: public List_DLS<T> {
++public:
++ Set_DL();
++ Set_DL(const Set_DL& other);
++
++ void add(const T& item)
++ { list.append(item); }
++ void remove(Pix& x, T& item)
++ { list.remove(x, item); }
++
++ void clear()
++ { list.clear(); }
++
++ bool contains(const T& item) const
++ { return list.contains(item); }
++ Pix search(const T& item) const
++ { return list.search(item); }
++
++ unsigned length() const
++ { return list.length(); }
++
++ Pix first() const
++ { return list.first(); }
++ void next(Pix& x) const
++ { list.next(x); }
++ T& operator()(Pix x) const
++ { return list(x); }
++private:
++ List_DLS<T> list;
++};
++
++template<class T>
++class Set_DLp: public List_DLSp<T> {
++public:
++ Set_DLp();
++ Set_DLp(const Set_DLp& other);
++
++ void add(const T& item)
++ { list.append(item); }
++ void remove(Pix& x, T& item)
++ { list.remove(x, item); }
++
++ void clear()
++ { list.clear(); }
++
++ bool contains(const T& item) const
++ { return list.contains(item); }
++ Pix search(const T& item) const
++ { return list.search(item); }
++
++ unsigned length() const
++ { return list.length(); }
++
++ Pix first() const
++ { return list.first(); }
++ void next(Pix& x) const
++ { list.next(x); }
++ T& operator()(Pix x) const
++ { return list(x); }
++private:
++ List_DLSp<T> list;
++};
++
++template<class T>
++struct vertex {
++ T item;
++ List_DL<vertex<T> *> fanout;
++
++ vertex(): item(), fanout() // gets bogus error
++ { };
++ vertex(const T& i): item(), fanout() // gets bogus error
++ { };
++};
++
++template<class T>
++class Graph {
++public:
++ Graph();
++ Graph(const Graph&);
++ ~Graph();
++
++ void add(const T& from, const T& to);
++ bool contains(const T& from, const T& to) const;
++
++ void clear()
++ { vertices.clear(); }
++
++ unsigned lengthV() const
++ { return vertices.length(); }
++
++ Pix firstV() const
++ { return vertices.first(); }
++ void nextV(Pix& x) const
++ { vertices.next(x); }
++ T& V(Pix x) const
++ { return vertices(x).item; }
++
++ Pix firstV1(Pix vx) const;
++ void nextV1(Pix vx, Pix& x) const;
++ T& V1(Pix vx, Pix x) const;
++private:
++ vertex<T> *lookup(const T& from) const;
++ vertex<T> *lookup_new(const T& from);
++
++ List_DLS<vertex<T> > vertices;
++};
++
++template<class T>
++Graph<T>::Graph():
++vertices()
++{ }
++
++template<class T>
++Graph<T>::Graph(const Graph& other):
++vertices()
++{
++ for (Pix vx=firstV(); 0 != vx; nextV(vx)) {
++ for (Pix vx1=firstV1(vx); 0 != vx1; nextV1(vx, vx1)) {
++ add(V(vx), V1(vx, vx1));
++ }
++ }
++}
++
++template<class T>
++Graph<T>::~Graph()
++{
++ clear();
++}
++
++template<class T>
++void
++Graph<T>::add(const T& from, const T& to)
++{
++ vertex<T> *fromv = lookup_new(from);
++ if (from == to)
++ return;
++ vertex<T> *tov = lookup_new(to);
++ fromv->fanout.append(tov);
++}
++
++template<class T>
++bool
++Graph<T>::contains(const T& from, const T& to) const
++{
++ vertex<T> *fromv = lookup(from);
++ if (0 == fromv)
++ return FALSE;
++
++ for (Pix x=fromv->fanout.first(); 0 != x; fromv->fanout.next(x)) {
++ if (fromv->fanout(x)->item == to)
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++template<class T>
++vertex<T> *
++Graph<T>::lookup(const T& from) const
++{
++ for (Pix x=vertices.first(); 0 != x; vertices.next(x)) {
++ if (vertices(x).item == from)
++ return &vertices(x);
++ }
++ return 0;
++}
++
++template<class T>
++vertex<T> *
++Graph<T>::lookup_new(const T& from)
++{
++ vertex<T> *v = lookup(from);
++ if (0 == v) {
++ vertices.append(from);
++ return &vertices(vertices.last());
++ }
++ return v;
++}
++
++template<class T>
++Pix
++Graph<T>::firstV1(Pix vx) const
++{
++ vertex<T> *v = (vertex<T> *) vx;
++ return v->fanout.first();
++}
++
++template<class T>
++void
++Graph<T>::nextV1(Pix vx, Pix& x) const
++{
++ vertex<T> *v = (vertex<T> *) vx;
++ return v->fanout.next(x);
++}
++
++template<class T>
++T&
++Graph<T>::V1(Pix vx, Pix x) const
++{
++ vertex<T> *v = (vertex<T> *) vx;
++ static T x1;
++ return x1;
++}
++
++class STRLIdentifier;
++
++extern int x(List_DL<STRLIdentifier *>);
++extern int x(List_DLS<STRLIdentifier *>);
++
++extern int x(Set<STRLIdentifier *>);
++extern int x(Set_DL<STRLIdentifier *>);
++extern int x(Set_DLp<STRLIdentifier *>);
++
++extern int x(Graph<STRLIdentifier *>);
++
++class STRLIdentifier {
++ char buf[10];
++};
++
++extern int operator==(vertex<STRLIdentifier*>&, vertex<STRLIdentifier*>&); // ERROR - const subversion
++extern int operator==(STRLIdentifier&, STRLIdentifier&); // ERROR - fn ref in err msg
++
++extern int x(List_DLSp<STRLIdentifier *>);
++
++template class Graph<STRLIdentifier *>;
++template class List_DLS<vertex<STRLIdentifier *> >;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2394.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2394.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2394.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2394.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// prms-id: 2394
++
++class Foo {
++ public:
++ int x;
++ int y;
++ Foo(int i, int j) { x = i; y = j; }
++} foo(10, 11);
++
++class Wasted { int unsed; };
++
++class Bar : Wasted, public Foo {
++public:
++ Bar() : Foo(12, 13) { }
++} bar;
++
++int
++test0() {
++ int Foo::* pmi = &Foo::y;
++ return (int)(foo.*pmi);
++}
++
++int
++test1() {
++ int Foo::* pmi = &Foo::y;
++ return (int)(bar.*pmi);
++}
++
++int
++main() {
++ if (test0() != 11)
++ return 1;
++ if (test1() != 13)
++ return 2;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2431.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2431.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2431.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2431.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// GROUPS passed infinite_loop
++class A
++{
++ public:
++ A(A &); // ERROR - candidates are
++};
++
++class B
++{
++ public:
++ operator A ();
++};
++
++class C
++{
++ public :
++ C()
++ {
++ B b;
++ A a = b;// ERROR -
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2573.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2573.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2573.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2573.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// prms-id: 2573
++
++class X {
++public:
++ int key();
++ virtual int vkey();
++ char *add();
++};
++
++char *X::add() {
++ char *f1 = (char *) &key; // ERROR -
++ char *f2 = (char *) &vkey; // ERROR -
++ return f1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2736.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2736.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2736.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2736.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// This is a poor test case, it is meant to ensure that function local
++// statics are destroyed at the right time. See PR 2736 for details.
++// prms-id: 2736
++
++int count;
++
++struct A {
++ int which;
++ A(int i) :which(i) {
++ // printf("ctor %x\n", this);
++ }
++ ~A() {
++ // printf("dtor %x\n", this);
++ if (++count != which)
++ abort ();
++ }
++};
++
++void
++foo() {
++ static A a(1);
++}
++
++A a(2);
++
++int main() {
++ foo();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2746.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2746.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2746.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2746.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,156 @@
++// Build don't link:
++// GROUPS passed scope pt
++class Link {
++public:
++ Link();
++ Link(Link *);
++private:
++ Link *next_;
++
++friend class IListBase;
++friend class IListIterBase;
++};
++
++inline
++Link::Link() : next_(0)
++{
++}
++
++inline
++Link::Link(Link *next) : next_(next)
++{
++}
++
++class IListBase {
++public:
++ IListBase();
++ IListBase(Link *);
++ void append(Link *);
++ void insert(Link *);
++ Link *head();
++ int empty();
++ Link *get();
++ void remove(Link *);
++private:
++ Link *head_;
++friend class IListIterBase;
++};
++
++inline
++IListBase::IListBase() : head_(0)
++{
++}
++
++inline
++IListBase::IListBase(Link *head) : head_(head)
++{
++}
++
++inline
++void IListBase::insert(Link *p)
++{
++ p->next_ = head_;
++ head_ = p;
++}
++
++inline
++Link *IListBase::head()
++{
++ return head_;
++}
++
++inline
++int IListBase::empty()
++{
++ return head_ == 0;
++}
++
++inline
++Link *IListBase::get()
++{
++ Link *tem = head_;
++ head_ = head_->next_;
++ return tem;
++}
++
++template<class T> class IListIter;
++
++template<class T>
++class IList : private IListBase {
++public:
++ IList() { }
++ IList(T *p) : IListBase(p) { }
++ ~IList();
++ void append(T *p) { IListBase::append(p); }
++ void insert(T *p) { IListBase::insert(p); }
++ void remove(T *p) { IListBase::remove(p); }
++ T *head() { return (T *)IListBase::head(); }
++ T *get() { return (T *)IListBase::get(); }
++ IListBase::empty;
++friend class IListIter<T>;
++};
++
++template<class T>
++IList<T>::~IList()
++{
++ while (!empty())
++ delete get();
++}
++
++class IListIterBase {
++public:
++ IListIterBase(const IListBase &);
++ int done();
++ Link *cur();
++ void next();
++private:
++ Link *p_;
++};
++
++inline
++IListIterBase::IListIterBase(const IListBase &list) : p_(list.head_)
++{
++}
++
++inline
++int IListIterBase::done()
++{
++ return p_ == 0;
++}
++
++inline
++Link *IListIterBase::cur()
++{
++ return p_;
++}
++
++inline
++void IListIterBase::next()
++{
++ p_ = p_->next_;
++}
++
++
++template<class T>
++class IListIter : private IListIterBase {
++public:
++ IListIter(const IList<T> &list) : IListIterBase(list) { }
++ T *cur() { return (T *)IListIterBase::cur(); }
++ IListIterBase::next;
++ IListIterBase::done;
++};
++
++
++struct A {
++ IList<Link> list;
++ int x;
++ void foo();
++};
++
++
++void A::foo()
++{
++ for (IListIter<Link> iter(list); !iter.done(); iter.next())
++ ;
++ x = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2793.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2793.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2793.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2793.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// prms-id: 2793
++
++void f(char&) { // ERROR - referenced by error below
++ f('c'); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2806.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2806.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2806.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2806.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed
++template<class T>
++class List
++{
++ public:
++ List();
++ void f() const;
++};
++
++template<class T>
++void List<T>::f() const
++{
++}
++
++void func()
++{
++ List<int> list;
++ list.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2846a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2846a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2846a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2846a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Shows that problem of initializing one object's vtable pointer from
++// another object's vtable pointer when doing a default copy of it
++// and the vtable pointer involved is the main one.
++
++// Correct answer is B::print.
++// g++ prints D::print, which is wrong. Cfront gets is right.
++
++// prms-id: 2846
++
++extern "C" int printf(const char *, ...);
++extern "C" void exit(int);
++
++class B {
++public:
++ virtual void print(void) const { printf("B::print\n"); }
++};
++
++class D : public B {
++public:
++ void print(void) const { printf("D::print\n"); exit(1); }
++ B compute(void) const;
++};
++
++B D::compute(void) const
++{
++ B sub(*(B*)this);
++ return sub;
++}
++
++int main () {
++ D titi;
++ titi.compute().print();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,52 @@
++// Shows that problem of initializing one object's secondary base from
++// another object via a user defined copy constructor for that base,
++// the pointer for the secondary vtable is not set after implicit
++// copying of the outer class, but rather has the pointer to the main
++// vtable for the secondary base left over from the user defined copy
++// constructor for that base.
++
++// Correct answer is B::beefy.
++// g++ prints A::beefy, which is wrong. Cfront gets it right.
++
++// prms-id: 2846
++
++extern "C" int printf(const char *, ...);
++extern "C" void exit(int);
++
++class B;
++
++class A {
++ public:
++
++ A(void){}
++ A(const A&){}
++
++ virtual void print(void) const { }
++ B compute(void) const;
++};
++
++class C {
++public:
++ C() { }
++ C(C& o) { } // with it, things are wrong, without it, they're ok
++ virtual void beefy(void) const { printf("A::beefy\n"); exit(1); }
++};
++
++class B : private A, public C {
++public:
++ B(const A& x, int){}
++ void beefy(void) const { printf("B::beefy\n"); }
++};
++
++B A::compute(void) const
++{
++ B sub(*this, 1);
++ return sub;
++}
++
++int main ()
++{
++ A titi;
++ titi.compute().beefy();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2846.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2846.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2846.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2846.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++// prms-id: 2846
++
++extern "C" int printf(const char *, ...);
++extern "C" void exit(int);
++
++class A;
++class B;
++
++class A {
++public:
++
++ A(void){}
++ A(const A&){}
++ A(const B&);
++
++ virtual ~A(void){}
++
++ virtual void print(void) const {
++ printf("A::print\n");
++ printf("FAIL\n");
++ exit(1);
++ }
++ B compute(void) const;
++};
++
++class B : private A {
++friend class A;
++public:
++
++ virtual ~B(void){}
++
++ void print(void) const {
++ printf("B::print\n");
++ }
++
++private:
++ B(const A& x, int){}
++};
++
++A::A(const B& s) {
++ s.print();
++}
++
++B A::compute(void) const {
++ B sub(*this, 1);
++ return sub;
++}
++
++int main ()
++{
++ A titi;
++ A toto = titi.compute();
++ printf("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2855.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2855.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2855.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2855.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Special g++ Options: -Wcast-qual
++// prms-id: 2855
++
++class Ctest {
++private:
++ char* data;
++public:
++ operator const char *() const;
++};
++
++Ctest::operator const char *() const
++{
++ return data;
++}
++int main()
++{
++ Ctest obj;
++ char* temp = (char *)obj; // WARNING -
++ temp[0] = '\0';
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2960.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2960.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p2960.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p2960.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// prms-id: 2960
++
++extern "C" int printf(const char *, ...);
++
++class Test0 {
++public:
++ virtual void f0() { } // works fine if this virtual removed
++};
++
++class Test1 : public Test0 {
++public:
++ void f1() { f2(); } // generates bus error here
++ virtual void f2() { printf("Test1::f2\n"); }
++};
++
++class Test2 {
++public:
++ virtual void f3() { }
++};
++
++class Test3 : public Test2, public Test1 { // works fine if Test1 first
++public:
++ virtual ~Test3() { f1(); } // calling f2 directly works
++ virtual void f2() { printf("Test3::f2\n"); }
++};
++
++int main() {
++ Test3 t3;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3041.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3041.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3041.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3041.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// prms-id: 3041
++
++class A {
++public:
++ A() { }
++ virtual void a() = 0;
++ static int b(A * p) {
++ p->a();
++ return 1;
++ }
++};
++
++class B : virtual public A {
++public:
++ B() {
++ static int installed = b(this);
++ }
++ void a() { }
++};
++
++class C : virtual public B {
++public:
++ C() {
++ static int installed = b(this);
++ }
++ void a() { }
++};
++
++int main()
++{
++ C c;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3060c.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3060c.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3060c.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3060c.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// A new problem with my pointer to member function work.
++// Build don't link:
++// prms-id: 3060
++
++class Foo
++{
++ public:
++ int x;
++ int y;
++ Foo (int i, int j) { x = i; y = j; }
++ operator int ();
++};
++
++int Foo::operator int() { return x; } // WARNING - can't specify return type
++
++Foo foo(10, 11);
++
++int
++main()
++{
++ int Foo::* pmi = &Foo::y;
++ return foo.*pmi;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3060d.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3060d.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3060d.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3060d.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// This is a test case to make sure the explicit cast on a pointer to
++// a member function works ok.
++// prms-id: 3060
++
++extern "C" int printf(const char *, ...);
++
++class Object;
++
++typedef void (Object::*VoidObjMemberFunc)(Object *, ...);
++
++class Object {
++public:
++ int foo;
++};
++
++class Clipper: public Object {
++public:
++ int bar;
++ void Feedback(Object*, void*);
++};
++void Clipper::Feedback(Object *tracker, void *ap) {
++ printf("Doing feedback\n");
++}
++
++void vfunc(VoidObjMemberFunc of, Object *op, void *v1) {
++ (op->*of)(op, v1);
++}
++
++int main() {
++ Object o;
++
++ vfunc((VoidObjMemberFunc)&Clipper::Feedback, &o, 0);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3068.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3068.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3068.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3068.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,60 @@
++// prms-id: 3068
++
++extern "C" int printf(const char *, ...);
++extern "C" void exit(int);
++
++class LB {
++public:
++ virtual int test() { return 0; }
++ virtual ~LB() { }
++protected:
++ LB() { }
++};
++
++class RRB {
++public:
++ virtual ~RRB() { }
++ virtual void test2(int a) { }
++};
++
++class RR : public RRB {
++public:
++ virtual ~RR() { }
++};
++
++class RL {
++public:
++ virtual void real(int a) {
++ printf("RL::real\n");
++ }
++};
++
++
++class R : public RL, public RR {
++public:
++ virtual void test3(int a) { }
++ virtual void test2(int a) { }
++};
++
++class L : public LB {
++};
++
++class C : public L, public R {
++public:
++ C() { }
++ virtual ~C() {
++ printf("C::~C\n");
++ exit(1);
++ }
++ virtual void real(int a) {
++ printf("RL::real\n");
++ }
++};
++
++int main() {
++ C& bb = *new C;
++ R& mv = bb;
++ bb.real(0);
++ mv.real(0);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3070.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3070.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3070.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3070.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++// Caused an Internal Compiler Error. Works now.
++// prms-id: 3070
++
++class Object {
++public:
++ virtual ~Object() {}
++};
++
++class BaseView {
++protected:
++ virtual void _forwardReceiveUpdate() = 0;
++};
++
++
++class View : public BaseView {
++public:
++ virtual ~View();
++};
++
++class TestViewBaseUpdate {
++protected:
++ virtual void _receiveUpdate();
++};
++
++class TestViewBase : public TestViewBaseUpdate, private View {
++};
++
++class TestView : public Object, public TestViewBase {
++protected:
++ virtual void _receiveUpdate();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3139.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3139.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3139.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3139.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// prms-id: 3139
++
++extern "C" int printf(const char *, ...);
++
++class A {
++ public:
++ A() { }
++ virtual int a() = 0;
++};
++
++class B : virtual public A {
++ public:
++ virtual int a() = 0;
++};
++
++class C : public B {
++ public:
++ int a() { return 42; }
++};
++
++int main() {
++ B * b = new C;
++ printf("%d.\n", b->a());
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3524a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3524a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3524a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3524a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Make sure we can initialize a reference to a templated type, that
++// requires a conversion from a derived type to a base type.
++
++// Build don't link:
++// prms-id: 3524
++
++struct cc2Vector
++{};
++
++template <class T>
++struct ccPair
++{
++ ccPair (const cc2Vector&);
++};
++
++struct ccLine : cc2Vector
++{
++ double distToPoint (const ccPair <float> &);
++};
++
++void foo ()
++{
++ ccLine l2;
++ l2.distToPoint (l2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3524b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3524b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3524b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3524b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Make sure we can cast to a templated type, that requires a conversion by
++// constructor, from a derived type to a base type.
++
++// Build don't link:
++// prms-id: 3524
++
++template <class T>
++struct ccPair {
++ ccPair () { }
++};
++
++template <class T>
++struct ccO : ccPair<T> {
++ ccO () { }
++};
++
++void foo ()
++{
++ ccO<float> r;
++ (ccPair<float>)r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3524c.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3524c.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3524c.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3524c.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Make sure we can cast to a templated type, that requires a conversion by
++// constructor, from a non-aggregate type.
++
++// Build don't link:
++// prms-id: 3524
++
++template <class T>
++struct ccPair {
++ ccPair (int i) { }
++};
++
++void foo ()
++{
++ (ccPair<float>)1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++// This tests for the compiler_error in binfo_value.
++// prms-id: 3538
++
++class ccObjectInfo
++{
++public:
++ virtual const ccObjectInfo& repInvariant (int);
++};
++
++template<class T>
++class ccHandle : public ccObjectInfo
++{
++protected:
++ T* p;
++public:
++ virtual const ccObjectInfo& repInvariant (int);
++};
++
++template <class T>
++const ccObjectInfo& ccHandle<T>::repInvariant (int)
++{ return p->ri(1); }
++
++class ccHandleBase : public ccObjectInfo
++{};
++
++class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo
++{
++public:
++ virtual const ccObjectInfo& ri (int);
++}; // WARNING -
++
++class ccCircleHdl : public ccHandle <cc_CircleHdl> {};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// prms-id: 3538
++
++// This tests for an ambiguous conversion of the this pointer (going
++// down to DECL_CONTEXT of a FUNCTION_DECL.
++
++class ccObjectInfo
++{
++public:
++ virtual const ccObjectInfo& repInvariant (int);
++};
++
++template<class T>
++class ccHandle : public ccObjectInfo
++{
++protected:
++ T* p;
++public:
++ virtual const ccObjectInfo& repInvariant (int);
++};
++
++template <class T>
++const ccObjectInfo& ccHandle<T>::repInvariant (int)
++{ return p->repInvariant(1); }
++
++class ccHandleBase : public ccObjectInfo
++{};
++
++class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo
++{
++public:
++ virtual const ccObjectInfo& repInvariant (int);
++}; // WARNING -
++
++class ccCircleHdl : public ccHandle <cc_CircleHdl> {};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3570.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3570.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3570.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3570.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// prms-id: 3570
++
++extern "C" int printf(const char *, ...);
++
++struct A {
++ void print() {printf("A");};
++};
++
++struct B : A {
++ typedef A superB;
++ void print() {superB::print(); printf("B");};
++};
++
++struct C : B {
++ typedef B superC;
++ void print() {superC::print(); printf("C");};
++};
++
++int main ()
++{
++ A a;
++ B b;
++ C c;
++
++ a.print(); printf("\n");
++ b.print(); printf("\n");
++ c.print(); printf("\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3579.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3579.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3579.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3579.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// prms-id: 3579
++
++extern "C" int printf(const char *, ...);
++
++int num_x;
++
++class Y {
++public:
++ Y () { printf("Y() this: %x\n", this); }
++ ~Y () { printf("~Y() this: %x\n", this); }
++};
++
++class X {
++public:
++ X () {
++ ++num_x;
++ printf("X() this: %x\n", this);
++ Y y;
++ *this = (X) y;
++ }
++
++ X (const Y & yy) { printf("X(const Y&) this: %x\n", this); ++num_x; }
++ X & operator = (const X & xx) {
++ printf("X.op=(X&) this: %x\n", this);
++ return *this;
++ }
++
++ ~X () { printf("~X() this: %x\n", this); --num_x; }
++};
++
++int main (int, char **) {
++ { X anX; }
++ if (num_x) {
++ printf("FAIL\n");
++ return 1;
++ }
++ printf("PASS\n");
++ return 0;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,86 @@
++// prms-id: 3708
++
++extern "C" void printf (char *, ...);
++extern "C" int atoi (char *);
++
++void *ptr;
++
++class A {
++public:
++ A() { printf ("A is constructed.\n"); }
++ virtual void xx(int doit) { printf ("A is destructed.\n"); }
++};
++
++class A1 {
++public:
++ A1() { printf ("A1 is constructed.\n"); }
++ virtual void xx(int doit) { printf ("A1 is destructed.\n"); }
++};
++
++class B : public A1, public virtual A {
++public:
++ B() { printf ("B is constructed.\n"); }
++ virtual void xx(int doit) {
++ printf ("B is destructed.\n");
++ A1::xx (1);
++ if (doit) A::xx (1);
++ }
++};
++
++int num;
++
++class C : public virtual A, public B {
++public:
++ C() { ++num; printf ("C is constructed.\n");
++ ptr = this;
++ }
++ virtual void xx(int doit) {
++ --num;
++ if (ptr != this)
++ printf("FAIL\n%x != %x\n", ptr, this);
++ printf ("C is destructed.\n");
++ B::xx (0);
++ if (doit) A::xx (1);
++ }
++};
++
++void fooA(A *a) {
++ printf ("Casting to A!\n");
++ a->xx (1);
++}
++void fooA1(A1 *a) {
++ printf ("Casting to A1!\n");
++ a->xx (1);
++}
++
++void fooB(B *b) {
++ printf ("Casting to B!\n");
++ b->xx (1);
++}
++
++void fooC(C *c) {
++ printf ("Casting to C!\n");
++ c->xx (1);
++}
++
++int main(int argc, char *argv[]) {
++ printf ("*** Construct C object!\n");
++ C *c = new C();
++
++ int i = 0;
++
++ printf ("*** Try to delete the casting pointer!\n");
++ switch (i)
++ {
++ case 0: fooA1(c);
++ break;
++ case 1: fooA(c);
++ break;
++ case 2: fooB(c);
++ break;
++ case 3: fooC(c);
++ break;
++ }
++
++ return num!=0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,85 @@
++// prms-id: 3708
++
++extern "C" void printf (char *, ...);
++extern "C" void exit(int);
++
++void *ptr;
++
++class A {
++public:
++ A() { printf ("A is constructed.\n"); }
++ virtual void xx(int doit) { printf ("A is destructed.\n"); }
++};
++
++class A1 {
++public:
++ A1() { printf ("A1 is constructed.\n"); }
++ virtual void xx(int doit) { printf ("A1 is destructed.\n"); }
++};
++
++class B : public virtual A, public A1 {
++public:
++ B() { printf ("B is constructed.\n"); }
++ virtual void xx(int doit) {
++ printf ("B is destructed.\n");
++ A1::xx (1);
++ if (doit) A::xx (1);
++ }
++};
++
++int num;
++
++class C : public virtual A {
++public:
++ C() { printf ("C is constructed.\n");
++ }
++ virtual void xx(int doit) {
++ printf ("C is destructed.\n");
++ if (doit) A::xx (1);
++ }
++};
++
++class D : public C, public B {
++public:
++ D() { ++num; printf ("D is constructed.\n");
++ ptr = this;
++ }
++ virtual void xx(int doit) {
++ --num;
++ if (ptr != this) {
++ printf("FAIL\n%x != %x\n", ptr, this);
++ exit(1);
++ }
++ printf ("D is destructed.\n");
++ C::xx (0);
++ B::xx (0);
++ }
++};
++
++void fooA(A *a) {
++ printf ("Casting to A!\n");
++ a->xx (1);
++}
++void fooA1(A1 *a) {
++ printf ("Casting to A1!\n");
++ a->xx (1);
++}
++
++void fooB(B *b) {
++ printf ("Casting to B!\n");
++ b->xx (1);
++}
++
++void fooC(C *c) {
++ printf ("Casting to C!\n");
++ c->xx (1);
++}
++
++int main(int argc, char *argv[]) {
++ printf ("*** Construct D object!\n");
++ D *d = new D();
++
++ printf ("*** Try to delete the casting pointer!\n");
++ fooA1(d);
++ return num!=0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3708.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3708.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3708.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3708.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,86 @@
++// prms-id: 3708
++
++extern "C" void printf (char *, ...);
++extern "C" int atoi (char *);
++
++void *ptr;
++
++class A {
++public:
++ A() { printf ("A is constructed.\n"); }
++ virtual void xx(int doit) { printf ("A is destructed.\n"); }
++};
++
++class A1 {
++public:
++ A1() { printf ("A1 is constructed.\n"); }
++ virtual void xx(int doit) { printf ("A1 is destructed.\n"); }
++};
++
++class B : public virtual A, public A1 {
++public:
++ B() { printf ("B is constructed.\n"); }
++ virtual void xx(int doit) {
++ printf ("B is destructed.\n");
++ A1::xx (1);
++ if (doit) A::xx (1);
++ }
++};
++
++int num;
++
++class C : public virtual A, public B {
++public:
++ C() { ++num; printf ("C is constructed.\n");
++ ptr = this;
++ }
++ virtual void xx(int doit) {
++ --num;
++ if (ptr != this)
++ printf("FAIL\n%x != %x\n", ptr, this);
++ printf ("C is destructed.\n");
++ B::xx (0);
++ if (doit) A::xx (1);
++ }
++};
++
++void fooA(A *a) {
++ printf ("Casting to A!\n");
++ a->xx (1);
++}
++void fooA1(A1 *a) {
++ printf ("Casting to A1!\n");
++ a->xx (1);
++}
++
++void fooB(B *b) {
++ printf ("Casting to B!\n");
++ b->xx (1);
++}
++
++void fooC(C *c) {
++ printf ("Casting to C!\n");
++ c->xx (1);
++}
++
++int main(int argc, char *argv[]) {
++ printf ("*** Construct C object!\n");
++ C *c = new C();
++
++ int i = 0;
++
++ printf ("*** Try to delete the casting pointer!\n");
++ switch (i)
++ {
++ case 0: fooA1(c);
++ break;
++ case 1: fooA(c);
++ break;
++ case 2: fooB(c);
++ break;
++ case 3: fooC(c);
++ break;
++ }
++
++ return num!=0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3764.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3764.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3764.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3764.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// prms-id: 3764
++
++class Menu;
++class MenuItem;
++
++class MenuAction {
++public:
++ virtual void execute (Menu& menu, MenuItem& menuItem) = 0;
++protected:
++ MenuAction () {}
++};
++
++class Test {
++ class MenuCBA : public MenuAction {
++ public:
++ typedef void (Test::* MenuCBA_Member) (Menu& menu, MenuItem& menuItem) ;
++ MenuCBA(Test& instance, MenuCBA_Member member)
++ : _instance(&instance), _member(member) { }
++ void execute(Menu& menu, MenuItem& menuItem);
++ private:
++ MenuCBA_Member _member;
++ Test *_instance;
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3836.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3836.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p3836.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p3836.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// prms-id: 3836
++
++void f(int &i) { // ERROR - ref line
++ i = 10;
++}
++
++int main()
++{
++ int i=1, j=2;
++ f(i);
++ f((int)j); // ERROR - passing in to non-const
++ if (j != 2)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4068.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4068.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4068.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4068.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// prms-id: 4068
++
++struct A {
++ A();
++ typedef void (A::*F)();
++ void d();
++ void foo() { }
++ F& f() { return f_; }
++ F f_;
++};
++
++A::A() : f_(&A::foo) {
++}
++
++void A::d() {
++ (this->*(f()))();
++}
++
++int main() {
++ A a;
++ a.d();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4104.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4104.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4104.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4104.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// prms-id: 4104
++
++template <class T>
++void F(T &a, void (*P)(T &temp)) {
++ (*P)(a);
++}
++
++template <class T>
++void G(T &a) {
++}
++
++int main() {
++ int a;
++ F(a, G);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4173.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4173.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4173.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4173.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// This error happens because lvalue is not done well in the C++ front-end.
++// NOPs should be lvalues if their arguments are.
++// NON_LVALUE_EXPRs shouldn't be.
++
++// Special g++ Options: -Wall -ansi -pedantic-errors
++// Build don't link:
++// prms-id: 4173
++
++enum TypeKind {
++ RecordTypeKind
++};
++struct Type
++{
++ enum TypeKind kind : 8;
++ unsigned char prefixLen;
++};
++
++Type a;
++Type b;
++TypeKind c;
++
++int
++main() {
++ a.kind = b.kind = c;
++ (a.kind = c) = b.kind; // gets bogus error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p418.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p418.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p418.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p418.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// prms-id: 418
++
++class Base {
++public:
++ int foo;
++};
++
++class Derived : public Base {
++public:
++ int bar;
++};
++
++void func(Base&); // ERROR - referenced by error below
++
++void func2(const Derived& d) {
++ func(d); // ERROR - should be error because of const
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4238.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4238.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4238.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4238.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// This showed a problem with default op=
++// Build don't link:
++// prms-id: 4238
++
++struct sigcontext {
++ int sc_wbuf[31][25];
++}; // gets bogus error - default op= seems broken
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4246.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4246.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4246.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4246.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// prms-id: 4246
++
++extern "C" void abort ();
++int num_d;
++
++class A
++{
++ public:
++ A() { }
++ virtual ~A() { }
++ virtual void id() { }
++};
++
++class B
++{
++ public:
++ B() { }
++ virtual ~B() { }
++ virtual void id() { }
++};
++
++class C : public A, public B
++{
++ public:
++ C() { }
++ virtual ~C() { }
++ void id() { abort(); }
++};
++
++class D : public C
++{
++ public:
++ D() { ++num_d; }
++ virtual ~D() { -- num_d; }
++ void id() { }
++};
++
++int main()
++{
++ D* dp2 = new D;
++ ((B*)dp2)->id();
++ delete (B*) dp2;
++
++ B* bp1 = new D;
++ bp1->id();
++ delete bp1;
++ return num_d != 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4263.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4263.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4263.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4263.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// prms-id: 4263
++
++enum OT {A_type, B_Type};
++enum AT {A, B};
++
++/* These are not ok. */
++OT t = A; // ERROR -
++OT e2 = 1; // ERROR -
++OT e3 = 1.1; // ERROR -
++
++/* These are ok. */
++int i = A;
++double d = A;
++OT e4 = A_type;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p438.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p438.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p438.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p438.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// prms-id: 438
++
++class D;
++
++class C
++{
++ public:
++ void test() const;
++};
++
++class D
++{
++ public:
++ void a(C& b); // ERROR - referenced below
++};
++
++void C::test() const
++{
++ D d;
++
++ d.a(*this); // ERROR - *this is const, so should get error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4484.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4484.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4484.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4484.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// prms-id: 4484
++
++class A {
++ char buf[64];
++};
++
++typedef void (A::*pmf)();
++typedef void (A::*pmfc)() const;
++
++pmfc p = (pmfc)(pmf)0;
++
++class B {
++};
++
++class D : public A, public B {
++};
++
++typedef int (B::*bmfp)();
++typedef int (D::*dmfp)();
++
++bmfp foo;
++
++void bar(dmfp a) {
++ bar(foo);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4511.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4511.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4511.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4511.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// prms-id: 4511
++
++int bad;
++
++class A {
++public:
++ virtual void dummy (){};
++};
++
++class B {
++public:
++ virtual void f(void) = 0;
++};
++
++class C : public A, public B {
++public:
++ void f(void) { bad=1; };
++};
++
++class D : public C {
++public:
++ void f(void) { };
++};
++
++class E : public D { };
++
++int main() {
++ E e;
++ e.f();
++ E * ep = &e;
++ ep->f();
++ return bad;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4619.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4619.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4619.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4619.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// prms-id: 4619
++
++int main() {
++ int i = 3;
++ int (*p)[10] = new int [20][10];
++ int (*p1)[5][7][13][10] = new int [i][5][7][13][10];
++ delete [] p1;
++ delete [] p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4623.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4623.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4623.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4623.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// prms-id: 4623
++
++class base {
++public:
++ int b_data;
++ base( int i=0 ) { b_data = i; }
++ void b_print() { }
++};
++
++class base1: virtual public base {
++public:
++ int b1_data;
++ base1( int i = 0 ) { b1_data = i; b_data++; }
++ void b1_print() { }
++};
++
++class base2: virtual public base {
++public:
++ int b2_data;
++ base2( int i = 0 ) { b2_data = i; b_data++; }
++ void b2_print() { }
++};
++
++class base3: public base {};
++
++class derived: public base3, public base1, public base2 {
++public:
++ int d_data;
++ derived( int i ) { d_data = i; base3::b_data++; }
++ void d_print() { }
++};
++
++int main() {
++ derived d(1); d.d_print(); return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4667.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4667.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4667.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4667.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// prms-id: 4667
++
++int counter = 0;
++int a = 0;
++int b = 0;
++int c = 0;
++
++struct A {
++ A() { a = counter++; }
++};
++
++struct B {
++ B() { b = counter++; }
++};
++
++struct C : public virtual B {
++ C() { c = counter++; }
++};
++
++struct D : public virtual A, public virtual C { };
++
++extern "C" int printf(const char*,...);
++int main(void) {
++ D d;
++
++ if (!(a == 0 && b == 1 && c == 2)) {
++ return 1;
++ }
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4671.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4671.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4671.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4671.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// prms-id: 4671
++
++class ccUnwind {
++public:
++ virtual void _c_getInfo() const;
++ virtual ~ccUnwind ();
++};
++class ccTransmittable {
++public:
++ virtual ~ccTransmittable();
++};
++class ccCommand : public ccUnwind, public ccTransmittable {
++};
++class foo : public ccCommand {
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4677.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4677.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4677.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4677.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// prms-id: 4677
++
++struct A {
++ A(double d) { }
++};
++
++struct B { B(A) { } } bad = 1; // ERROR -
++B good (1);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4693.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4693.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4693.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4693.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// prms-id: 4693
++
++class a {
++public:
++ virtual ~a();
++};
++
++class b {
++public:
++ virtual void set_var() = 0;
++};
++
++class c : public b, public a { };
++
++class d : public c {
++public:
++ void set_var() { }
++};
++
++int main() {
++ d * test;
++ test = new d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4736a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4736a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4736a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4736a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// prms-id: 4736
++
++int did_fail = 1;
++
++class O {
++public:
++ virtual void of() { }
++};
++
++class A : public O {
++public:
++ virtual void vf() { }
++};
++
++class W {
++public:
++ virtual void vf() { }
++};
++
++class X : public W, public A {
++public:
++ virtual void vf() { }
++};
++
++class Z : public X {
++public:
++ virtual void vf() { did_fail = 0; }
++};
++
++Z sz;
++
++void fail1(W* w) {
++ w->vf();
++}
++
++int main() {
++ fail1 (&sz);
++ return did_fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4736b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4736b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4736b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4736b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// prms-id: 4736
++
++class Rep {
++public:
++ virtual int foo() { return 1; }
++};
++
++class Rep_1 : public Rep {
++};
++
++class VBaseMain {
++public:
++ virtual int foo() { return 2; }
++};
++
++class OtherVBase {
++public:
++ virtual int foo() { return 3; }
++};
++
++class Rep_2 : public Rep {
++};
++
++class DVBase : public VBaseMain, public Rep_2, public OtherVBase {
++public:
++ virtual int foo() { return 4; }
++};
++
++class Main : public Rep_1, virtual public DVBase {
++public:
++ virtual int foo() { return 5; }
++};
++
++int main() {
++ Main m;
++ if (m.foo() != 5)
++ return 1;
++ if (((Rep*)(Rep_1*)&m)->foo() != 5)
++ return 2;
++ if (((DVBase*)&m)->foo() != 5)
++ return 3;
++ if (((VBaseMain*)(DVBase*)&m)->foo() != 5)
++ return 4;
++ if (((Rep*)(Rep_2*)(DVBase*)&m)->foo() != 5)
++ return 5;
++ if (((OtherVBase*)(DVBase*)&m)->foo() != 5)
++ return 6;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4736c.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4736c.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4736c.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4736c.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,62 @@
++// prms-id: 4736
++
++int did_fail;
++
++class Rep {
++public:
++ virtual ~Rep() { }
++};
++
++class Rep_1 : public Rep {
++};
++
++class VBaseMain {
++public:
++ virtual ~VBaseMain() { }
++};
++
++class OtherVBase {
++public:
++ virtual ~OtherVBase() { }
++};
++
++class Rep_2 : public Rep {
++};
++
++class DVBase : public VBaseMain, public Rep_2, public OtherVBase {
++public:
++ virtual ~DVBase() { }
++};
++
++class Main : public Rep_1, virtual public DVBase {
++public:
++ virtual ~Main() { did_fail = 0; }
++};
++
++int main() {
++ Main* m;
++ did_fail = 1;
++ delete new Main;
++ if (did_fail)
++ return 1;
++ did_fail = 1;
++ delete (Rep*)(Rep_1*)new Main;
++ if (did_fail)
++ return 2;
++ did_fail = 1;
++ delete (DVBase*)new Main;
++ if (did_fail)
++ return 3;
++ did_fail = 1;
++ delete (VBaseMain*)(DVBase*)new Main;
++ if (did_fail)
++ return 4;
++ did_fail = 1;
++ delete (Rep*)(Rep_2*)(DVBase*)new Main;
++ if (did_fail)
++ return 5;
++ did_fail = 1;
++ delete (OtherVBase*)(DVBase*)new Main;
++ if (did_fail)
++ return 6;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4750.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4750.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p4750.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p4750.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Skip if not native
++// Special g++ Options: -fpic -pedantic-errors -S
++// prms-id: 4750
++
++extern const int FRAME_VEC_MAX;
++
++const int FRAME_VEC_MAX = 12;
++int frame_vec_sizes[FRAME_VEC_MAX+1] = {
++ 0, 1, 3, 3, 6, 6, 6, 9, 9, 9, 12, 12, 12
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5469a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5469a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5469a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5469a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// prms-id: 5469
++
++int count;
++
++class A {
++ A();
++ A(const A&);
++public:
++ A(int) { ++count; }
++ ~A() { --count; }
++ int operator== (const A& r) { return 1; }
++};
++
++int main() {
++ {
++ A a (1);
++ if (a == 2 || a == 1)
++ ;
++ }
++ return count;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5469.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5469.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5469.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5469.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// prms-id: 5469
++
++int count;
++
++class A {
++ A();
++ A(const A&);
++public:
++ A(int) { ++count; }
++ ~A() { --count; }
++ int operator== (const A& r) { return 0; }
++};
++
++int main() {
++ {
++ A a (1);
++ if (a == 2 && a == 1)
++ ;
++ }
++ return count;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5571.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5571.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5571.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5571.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,70 @@
++// prms-id: 5571
++
++int err = 0;
++void *vp = 0;
++
++class ParentOne {
++public:
++ ParentOne() {};
++#ifdef MAKE_WORK
++ virtual ~ParentOne() {};
++#endif
++private:
++ char SomeData[101];
++};
++
++class ParentTwo {
++public:
++ ParentTwo() {};
++ virtual ~ParentTwo() {};
++private:
++ int MoreData[12];
++ virtual int foo() { return 0; }
++};
++
++struct Child : public ParentOne, public ParentTwo {
++ int ChildsToy;
++ virtual void PrintThis() = 0;
++};
++
++struct Student : public Child {
++ int StudentsBook;
++ void PrintThis() {
++ if (vp == 0)
++ vp = (void *)this;
++ else
++ {
++ if (vp != (void *)this)
++ ++err;
++ }
++ }
++ void LocalPrintThis() {
++ if (vp == 0)
++ vp = (void *)this;
++ else
++ {
++ if (vp != (void *)this)
++ ++err;
++ }
++ PrintThis();
++ }
++ void ForcedPrintThis() {
++ if (vp == 0)
++ vp = (void *)this;
++ else
++ {
++ if (vp != (void *)this)
++ ++err;
++ }
++ Student::PrintThis();
++ }
++};
++
++int main() {
++ Student o;
++ o.LocalPrintThis();
++ o.ForcedPrintThis();
++ Child* pX = &o;
++ pX->PrintThis();
++ return err;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5611.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5611.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5611.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5611.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// prms-id: 5611
++
++int main(void)
++{
++ struct B
++ {
++ virtual void b1() { };
++ };
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5673.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5673.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5673.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5673.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// prms-id: 5673
++
++class A {
++public:
++ operator int () {
++ return 7;
++ }
++ ~A();
++};
++
++int foo() {
++ return A();
++}
++
++int main() {
++ return foo() != 7;
++}
++
++A::~A() {
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5718.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5718.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5718.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5718.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// prms-id: 5718
++
++class Base {
++ int i;
++public:
++ Base() { i = 42; };
++};
++
++
++class Mixin {
++ int j;
++public:
++ Mixin() { j = 42; }
++};
++
++
++class Derived : public Base, public Mixin {
++public:
++ Derived() { };
++ Derived & operator=(Mixin & m) { return *this; };
++};
++
++
++void
++testFunct(Derived * arg) {
++ Mixin temp;
++
++ (Mixin &)(*arg) = temp; // gets bogus error
++}
++
++
++int
++main(int argc, char *argv[]) {
++ Derived temp;
++
++ testFunct(&temp);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5793.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5793.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5793.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5793.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// prms-id: 5793
++
++class temp_string {
++ public:
++ temp_string (const int);
++ temp_string (const char * const);
++};
++
++class Range {
++ public:
++ Range ( const int);
++ operator int () const ;
++};
++
++int operator == (const int, temp_string );
++
++void CheckArrayConstraints(void) {
++ if (Range(0L) == 0L)
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5840.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5840.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5840.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5840.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// prms-id: 5840
++
++class Signal {
++public:
++ int Name(void) { return 1; }
++};
++
++class Derived : public Signal {
++public:
++ int Name(void) { return 2; }
++};
++
++template <class Foo , int (Foo::*Id)(void)>
++class Bar
++{
++public:
++ int value (Foo* a) { return (a->*Id)(); }
++};
++
++/* The following line is illegal under the new rules for non-type
++ template arguments in the standard, so it is commented out. */
++/* template class Bar <Derived, &Signal::Name>; */
++template class Bar <Signal, &Signal::Name>;
++template class Bar <Derived, &Derived::Name>;
++
++Derived a;
++
++/* Bar<Derived, &Signal::Name> dispatcher1; */
++Bar<Derived, &Derived::Name> dispatcher2;
++
++int main() {
++ /* int i1 = dispatcher1.value(&a); */
++ int i2 = dispatcher2.value(&a);
++ return /* i1 != 1 || */ i2 != 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5958.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5958.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p5958.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p5958.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Special g++ Options: -ansi
++// prms-id: 5958
++
++class A { };
++
++main() {
++ int i = 1;
++ if (1 not_eq 1)
++ return 1;
++ if (not (1 and 1))
++ return 1;
++ if (not (1 or 1))
++ return 1;
++ if (compl ~0)
++ return 1;
++ if (1 bitand 2)
++ return 1;
++ if (not (1 bitor 2))
++ return 1;
++ if (1 xor 1)
++ return 1;
++ i and_eq 1;
++ i or_eq 2;
++ i xor_eq 4;
++ if (i not_eq 7)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6004.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6004.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6004.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6004.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Special g++ Options:
++// prms-id: 6004
++
++class A {
++public:
++ static int foo() asm("_my_routine");
++};
++
++int bar1() asm("foo__1A");
++int bar2() asm("_foo__1A");
++int bar3() asm("__foo__1A");
++int bar1() { return 45; }
++int bar2() { return 44; }
++int bar3() { return 43; }
++
++int A::foo() { return 42; }
++
++main() {
++ return A::foo() - 42;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6058.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6058.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6058.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6058.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options: -fexceptions -pedantic-errors
++// prms-id: 6058
++
++void bar(struct s1 { } a) { (void)a; } // ERROR -
++
++struct s2*fooey()
++{
++ try {
++ static_cast<struct s3 { } *>(0); // ERROR -
++ const_cast<struct s4 { } *>((s4*)0); // ERROR -
++ reinterpret_cast<struct s5 { } *>((s3*)0); // ERROR -
++ dynamic_cast<struct s6 { } *>((s6*)0); // ERROR -
++ (struct s7 { } *)(int*)0xffedec; // ERROR -
++ } catch (struct s8 { } s) { // ERROR -
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6149.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6149.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6149.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6149.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// prms-id: 6149
++
++int a[3 - sizeof(double)]; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6311.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6311.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6311.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6311.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// prms-id: 6311
++
++struct Foo {
++ int member;
++} a = { 42 }, *ptra = &a;
++
++int Foo::*pmd = &Foo::member;
++
++int main() {
++ if (pmd == 0)
++ return 1;
++ if (a.*pmd != 42)
++ return 2;
++ if (ptra->*pmd != 42)
++ return 3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p646.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p646.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p646.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p646.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,175 @@
++// GROUPS passed i960
++/*
++ Bug Id: bnr
++ PMRS Id: p0000646
++ Bug is: Urgent Code Generation Problem in gcc-i960 V 1.95
++*/
++
++
++// Special g++ Options:
++
++extern "C"
++{
++ void printf (char *, ...);
++ void abort ();
++}
++
++struct foo
++{
++ static int si;
++ int i;
++ foo ();
++ foo (const foo&);
++ ~foo ();
++};
++
++int
++foo_parm_returns_i (foo foo_arg)
++{
++ return foo_arg.i;
++}
++
++int foo::si = 0;
++
++foo::foo ()
++{
++ si++;
++ printf ("new foo @ 0x%x; now %d foos\n", this, si);
++}
++
++foo::foo (const foo &other)
++{
++ si++;
++ printf ("another foo @ 0x%x; now %d foos\n", this, si);
++ *this = other;
++}
++
++foo::~foo ()
++{
++ si--;
++ printf ("deleted foo @ 0x%x; now %d foos\n", this, si);
++}
++
++int
++return_1 ()
++{
++ foo f;
++ printf ("returning 1\n");
++ return 1;
++}
++
++int
++return_arg (int arg)
++{
++ foo f;
++ printf ("returning %d\n", arg);
++ return arg;
++}
++
++int
++return_sum (int x, int y)
++{
++ foo f;
++ printf ("returning %d+%d\n", x, y);
++ return x + y;
++}
++
++foo
++return_foo ()
++{
++ foo f;
++ printf ("returning foo\n");
++ return f;
++}
++
++foo
++return_named_foo () return f
++{
++ printf ("returning named foo\n");
++ return f;
++}
++
++foo
++foo_parm_returns_foo (foo f)
++{
++ return f;
++}
++
++void
++abort_because (char *str)
++{
++ printf ("aborting because %s\n", str);
++ abort ();
++}
++
++int
++warn_return_1 ()
++{
++ foo f;
++ printf ("returning 1\n");
++}
++
++int
++warn_return_arg (int arg)
++{
++ foo f;
++ printf ("returning %d\n", arg);
++ arg;
++}
++
++int
++warn_return_sum (int x, int y)
++{
++ foo f;
++ printf ("returning %d+%d\n", x, y);
++ x + y;
++}
++
++foo
++warn_return_foo ()
++{
++ foo f;
++ printf ("returning foo\n");
++}
++
++foo
++nowarn_return_named_foo () return f
++{
++ printf ("returning named foo\n");
++}
++
++foo
++warn_foo_parm_returns_foo (foo f)
++{
++ f;
++}
++
++main ()
++{
++ int ii = return_1 ();
++ if (ii != 1)
++ abort_because ("wrong value returned");
++ int j = return_arg (42);
++ if (j != 42)
++ abort_because ("wrong value returned");
++ int k = return_sum (-69, 69);
++ if (k != 0)
++ abort_because ("wrong value returned");
++ foo f1 = return_named_foo ();
++ if (foo::si != 1)
++ abort_because ("wrong number of foos");
++ f1.i = 5;
++ int l = foo_parm_returns_i (f1);
++ if (l != 5)
++ abort_because ("l != 5");
++ foo f2 = foo_parm_returns_foo (f1);
++ if (foo::si != 2)
++ abort_because ("wrong number of foos");
++ if (f2.i != 5)
++ abort_because ("f2.i != 5");
++ foo f3 = return_foo ();
++ if (foo::si != 3)
++ abort_because ("wrong number of foos");
++ printf("PASS\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6578.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6578.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6578.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6578.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// prms-id: 6578
++
++struct A {
++ operator int ();
++};
++
++int i = A();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p658.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p658.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p658.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p658.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,101 @@
++// prms-id: 658
++
++#include <ostream.h>
++
++extern "C" void abort();
++
++/* We may not find the libg++ <bool.h>. */
++#ifndef FALSE
++#define FALSE false
++#endif
++#ifndef TRUE
++#define TRUE true
++#endif
++
++class Object {
++public:
++ Object();
++ Object(const Object&);
++ ~Object();
++
++ void OK() const;
++private:
++ bool _destructed;
++};
++
++class Char: public Object {
++public:
++ Char();
++ Char(char);
++ Char(const Char&);
++ ~Char();
++
++ operator char () const;
++private:
++ char _c;
++};
++
++int main()
++{
++ Char r, s;
++
++ r = Char('r');
++ s = Char('s');
++}
++
++//
++// Object stuff
++//
++Object::Object():
++_destructed(FALSE)
++{}
++
++Object::Object(const Object& other):
++_destructed(FALSE)
++{
++ other.OK();
++}
++
++Object::~Object()
++{
++ OK();
++ _destructed = TRUE;
++}
++
++void
++Object::OK() const
++{
++ if (_destructed) {
++ cerr << "FAILURE - reference was made to a destructed object\n";
++ abort();
++ }
++}
++
++//
++// Char stuff
++//
++
++Char::Char():
++Object(),
++_c('a')
++{ }
++
++Char::Char(char c):
++Object(),
++_c(c)
++{ }
++
++Char::Char(const Char& other):
++Object(other),
++_c(other._c)
++{ }
++
++Char::~Char()
++{
++ OK();
++}
++
++Char::operator char () const
++{
++ return _c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6610a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6610a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6610a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6610a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// prms-id: 6610
++// There is a bug in vtable thunks with multiple/virtual inheritance.
++// execution test - XFAIL *-*-linux-gnu *-*-linux
++int fail = 1;
++struct B;
++struct A { virtual int f(const B*) = 0; int g(const B*); };
++int A::g(const B* t) { return f(t); }
++struct B : virtual A { B(); int f(const B*); B* B_this; };
++B::B() { if (g(this)) fail = 0; }
++int B::f(const B* t) { return t == this; }
++struct C : B { int f(const B*); int x; };
++int C::f(const B*) { return 0; }
++
++int main() { C c; return fail; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6610b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6610b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6610b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6610b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// prms-id: 6610
++
++int fail = 1;
++struct B;
++struct A { virtual int f(const B*) = 0; int g(const B*); };
++int A::g(const B* t) { return f(t); }
++struct B : virtual A { int f(const B*); B* B_this; };
++int B::f(const B* t) { return t == this; }
++struct S1 { };
++struct C : virtual S1, virtual B, virtual A { C(); };
++C::C() { if (g(this)) fail = 0; }
++struct D : virtual B, virtual A, C { };
++
++int main() { D d; return fail; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6611.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6611.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6611.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6611.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// prms-id: 6611
++
++class COMPLEX {
++public:
++ COMPLEX(double a, double b=0) { re = a; im = b; }
++ void print() const { }
++private:
++ double re;
++ double im;
++};
++
++int main(void)
++{
++ COMPLEX a[3][3] = {
++ { 1, COMPLEX(2,3), COMPLEX(3,4), },
++ { 1, COMPLEX(2,3), COMPLEX(3,4), },
++ { 1, COMPLEX(2,3), COMPLEX(3,4), },
++ };
++ int i,j;
++
++ for (i = 0; i < 3; i++) {
++ for (j = 0; j < 3; j++) {
++ a[i][j].print();
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6746.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6746.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6746.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6746.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// prms-id: 6746
++
++class call_trace {
++public:
++ call_trace(char* fcn_name);
++ ~call_trace();
++};
++
++static char * last_tree;
++extern "C" void prt();
++
++char * smt_mark_stree() {
++ char* _my_name = "smt_mark_stree" ;
++ call_trace _t(_my_name);
++
++ return last_tree = 0 ? (char*)0 : (prt(), (char*)0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6901.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6901.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6901.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6901.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// prms-id: 6901
++
++void green() {
++ for (int i = 0; i < 10; i++) {}
++ for (int i = 0; i < 10; i++) {}
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6927.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6927.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p6927.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p6927.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// prms-id: 6927
++
++class Object {
++public:
++ Object();
++ int Value;
++};
++
++Object::Object() : Value(-1) { }
++
++Object *pArr = new Object[2];
++
++int main() {
++ if (pArr[0].Value != -1 || pArr[1].Value != -1)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p700.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p700.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p700.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p700.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2387 @@
++// Special g++ Options:
++// prms-id: 700
++
++//# 1 "../../../../libg++/etc/benchmarks/dhrystone.cc"
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 1 "../../../../libg++/etc/benchmarks/Int.h" 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++class Int
++{
++protected:
++ int rep;
++
++
++
++public:
++ Int ();
++ Int (const int b);
++ Int (const Int& b);
++ ~Int();
++
++ operator int() const;
++
++ inline virtual int val() const;
++
++ inline virtual void operator = (const int);
++ inline virtual void operator = (const Int&);
++
++ inline virtual void negate();
++ inline virtual void complement();
++ inline virtual void operator ++ ();
++ inline virtual void operator -- ();
++
++ inline virtual void operator += (const Int & );
++ inline virtual void operator -= (const Int & );
++ inline virtual void operator *= (const Int & );
++ inline virtual void operator /= (const Int & );
++ inline virtual void operator %= (const Int & );
++ inline virtual void operator |= (const Int & );
++ inline virtual void operator &= (const Int & );
++ inline virtual void operator ^= (const Int & );
++ inline virtual void operator <<=(const Int & );
++ inline virtual void operator >>=(const Int & );
++
++
++ inline virtual void operator += (const int);
++ inline virtual void operator -= (const int);
++ inline virtual void operator *= (const int);
++ inline virtual void operator /= (const int);
++ inline virtual void operator %= (const int);
++ inline virtual void operator |= (const int);
++ inline virtual void operator &= (const int);
++ inline virtual void operator ^= (const int);
++ inline virtual void operator <<=(const int);
++ inline virtual void operator >>=(const int);
++
++
++};
++
++inline int Int::val() const { return rep; }
++inline Int::operator int() const { return val(); }
++
++inline Int::Int () :rep(0) {}
++inline Int::Int (const int b) :rep(b) {}
++inline Int::Int (const Int& b) :rep(b.Int::val()) {}
++inline Int::~Int() {}
++
++inline void Int::operator = (const int b)
++{ rep = b; ; }
++inline void Int::operator = (const Int& b)
++{ rep = b.Int::val(); ; }
++
++inline void Int::complement()
++{ rep = ~rep; ; }
++inline void Int::negate()
++{ rep = -rep; ; }
++inline void Int::operator ++ ()
++{ ++rep; ; }
++inline void Int::operator -- ()
++{ --rep; ; }
++
++inline void Int::operator += (const Int & b)
++{ rep += b.Int::val(); ; }
++inline void Int::operator -= (const Int & b)
++{ rep -= b.Int::val(); ; }
++inline void Int::operator *= (const Int & b)
++{ rep *= b.Int::val(); ; }
++inline void Int::operator /= (const Int & b)
++{ rep /= b.Int::val(); ; }
++inline void Int::operator %= (const Int & b)
++{ rep %= b.Int::val(); ; }
++inline void Int::operator |= (const Int & b)
++{ rep |= b.Int::val(); ; }
++inline void Int::operator &= (const Int & b)
++{ rep &= b.Int::val(); ; }
++inline void Int::operator ^= (const Int & b)
++{ rep ^= b.Int::val(); ; }
++inline void Int::operator <<=(const Int & b)
++{ rep <<= b.Int::val(); ; }
++inline void Int::operator >>=(const Int & b)
++{ rep >>= b.Int::val(); ; }
++
++
++
++inline void Int::operator += (const int b)
++{ rep += b; ; }
++inline void Int::operator -= (const int b)
++{ rep -= b; ; }
++inline void Int::operator *= (const int b)
++{ rep *= b; ; }
++inline void Int::operator /= (const int b)
++{ rep /= b; ; }
++inline void Int::operator %= (const int b)
++{ rep %= b; ; }
++inline void Int::operator |= (const int b)
++{ rep |= b; ; }
++inline void Int::operator &= (const int b)
++{ rep &= b; ; }
++inline void Int::operator ^= (const int b)
++{ rep ^= b; ; }
++inline void Int::operator <<=(const int b)
++{ rep <<= b; ; }
++inline void Int::operator >>=(const int b)
++{ rep >>= b; ; }
++
++
++inline int& operator = (int& a, const Int & b)
++{ a = b.Int::val(); return a;} // WARNING -
++inline int& operator += (int& a, const Int & b)
++{ a += b.Int::val(); return a; }
++inline int& operator -= (int& a, const Int & b)
++{ a -= b.Int::val(); return a;}
++inline int& operator *= (int& a, const Int & b)
++{ a *= b.Int::val(); return a;}
++inline int& operator /= (int& a, const Int & b)
++{ a /= b.Int::val(); return a;}
++inline int& operator %= (int& a, const Int & b)
++{ a %= b.Int::val(); return a;}
++inline int& operator |= (int& a, const Int & b)
++{ a |= b.Int::val(); return a;}
++inline int& operator &= (int& a, const Int & b)
++{ a &= b.Int::val(); return a;}
++inline int& operator ^= (int& a, const Int & b)
++{ a ^= b.Int::val(); return a;}
++inline int& operator <<=(int& a, const Int & b)
++{ a <<= b.Int::val(); return a;}
++inline int& operator >>=(int& a, const Int & b)
++{ a >>= b.Int::val(); return a;}
++
++
++
++//# 289 "../../../../libg++/etc/benchmarks/Int.h"
++
++
++inline Int operator - (const Int & a) return r(a)
++{ r.negate(); }
++inline Int operator ~ (const Int & a) return r(a)
++{ r.complement(); }
++
++inline Int operator + (const Int & a, const Int & b) return r(a)
++{ r += b.Int::val(); }
++inline Int operator - (const Int & a, const Int & b) return r(a)
++{ r -= b.Int::val(); }
++inline Int operator * (const Int & a, const Int & b) return r(a)
++{ r *= b.Int::val(); }
++inline Int operator / (const Int & a, const Int & b) return r(a)
++{ r /= b.Int::val(); }
++inline Int operator % (const Int & a, const Int & b) return r(a)
++{ r %= b.Int::val(); }
++inline Int operator << (const Int & a, const Int & b) return r(a)
++{ r <<= b.Int::val(); }
++inline Int operator >> (const Int & a, const Int & b) return r(a)
++{ r >>= b.Int::val(); }
++inline Int operator & (const Int & a, const Int & b) return r(a)
++{ r &= b.Int::val(); }
++inline Int operator | (const Int & a, const Int & b) return r(a)
++{ r |= b.Int::val(); }
++inline Int operator ^ (const Int & a, const Int & b) return r(a)
++{ r ^= b.Int::val(); }
++
++inline Int operator + (const Int & a, const int b) return r(a)
++{ r += b; }
++inline Int operator - (const Int & a, const int b) return r(a)
++{ r -= b; }
++inline Int operator * (const Int & a, const int b) return r(a)
++{ r *= b; }
++inline Int operator / (const Int & a, const int b) return r(a)
++{ r /= b; }
++inline Int operator % (const Int & a, const int b) return r(a)
++{ r %= b; }
++inline Int operator << (const Int & a, const int b) return r(a)
++{ r <<= b; }
++inline Int operator >> (const Int & a, const int b) return r(a)
++{ r >>= b; }
++inline Int operator & (const Int & a, const int b) return r(a)
++{ r &= b; }
++inline Int operator | (const Int & a, const int b) return r(a)
++{ r |= b; }
++inline Int operator ^ (const Int & a, const int b) return r(a)
++{ r ^= b; }
++
++inline Int operator + (const int a, const Int & b) return r(a)
++{ r += b.Int::val(); }
++inline Int operator - (const int a, const Int & b) return r(a)
++{ r -= b.Int::val(); }
++inline Int operator * (const int a, const Int & b) return r(a)
++{ r *= b.Int::val(); }
++inline Int operator / (const int a, const Int & b) return r(a)
++{ r /= b.Int::val(); }
++inline Int operator % (const int a, const Int & b) return r(a)
++{ r %= b.Int::val(); }
++inline Int operator << (const int a, const Int & b) return r(a)
++{ r <<= b.Int::val(); }
++inline Int operator >> (const int a, const Int & b) return r(a)
++{ r >>= b.Int::val(); }
++inline Int operator & (const int a, const Int & b) return r(a)
++{ r &= b.Int::val(); }
++inline Int operator | (const int a, const Int & b) return r(a)
++{ r |= b.Int::val(); }
++inline Int operator ^ (const int a, const Int & b) return r(a)
++{ r ^= b.Int::val(); }
++
++
++
++inline int operator ! (const Int & a) { return !a.Int::val(); }
++
++inline int operator == (const Int & a, const Int & b)
++{ return a.Int::val() == b.Int::val(); }
++inline int operator != (const Int & a, const Int & b)
++{ return a.Int::val() != b.Int::val(); }
++inline int operator < (const Int & a, const Int & b)
++{ return a.Int::val() < b.Int::val(); }
++inline int operator <= (const Int & a, const Int & b)
++{ return a.Int::val() <= b.Int::val(); }
++inline int operator > (const Int & a, const Int & b)
++{ return a.Int::val() > b.Int::val(); }
++inline int operator >= (const Int & a, const Int & b)
++{ return a.Int::val() >= b.Int::val(); }
++
++inline int operator == (const Int & a, const int b)
++{ return a.Int::val() == b; }
++inline int operator != (const Int & a, const int b)
++{ return a.Int::val() != b; }
++inline int operator < (const Int & a, const int b)
++{ return a.Int::val() < b; }
++inline int operator <= (const Int & a, const int b)
++{ return a.Int::val() <= b; }
++inline int operator > (const Int & a, const int b)
++{ return a.Int::val() > b; }
++inline int operator >= (const Int & a, const int b)
++{ return a.Int::val() >= b; }
++
++inline int operator == (const int a, const Int & b)
++{ return a == b.Int::val(); }
++inline int operator != (const int a, const Int & b)
++{ return a != b.Int::val(); }
++inline int operator < (const int a, const Int & b)
++{ return a < b.Int::val(); }
++inline int operator <= (const int a, const Int & b)
++{ return a <= b.Int::val(); }
++inline int operator > (const int a, const Int & b)
++{ return a > b.Int::val(); }
++inline int operator >= (const int a, const Int & b)
++{ return a >= b.Int::val(); }
++
++
++
++//# 26 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2
++
++//# 1 "../../../../libg++/etc/benchmarks/Char.h" 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++class Char
++{
++protected:
++ char rep;
++
++
++
++public:
++ Char ();
++ Char (const char b);
++ Char (const Char& b);
++ ~Char();
++
++ operator char() const;
++
++ inline virtual char val() const;
++
++ inline virtual void operator = (const char);
++ inline virtual void operator = (const Char&);
++
++ inline virtual void negate();
++ inline virtual void complement();
++ inline virtual void operator ++ ();
++ inline virtual void operator -- ();
++
++ inline virtual void operator += (const Char & );
++ inline virtual void operator -= (const Char & );
++ inline virtual void operator *= (const Char & );
++ inline virtual void operator /= (const Char & );
++ inline virtual void operator %= (const Char & );
++ inline virtual void operator |= (const Char & );
++ inline virtual void operator &= (const Char & );
++ inline virtual void operator ^= (const Char & );
++ inline virtual void operator <<=(const Char & );
++ inline virtual void operator >>=(const Char & );
++
++
++ inline virtual void operator += (const char);
++ inline virtual void operator -= (const char);
++ inline virtual void operator *= (const char);
++ inline virtual void operator /= (const char);
++ inline virtual void operator %= (const char);
++ inline virtual void operator |= (const char);
++ inline virtual void operator &= (const char);
++ inline virtual void operator ^= (const char);
++ inline virtual void operator <<=(const char);
++ inline virtual void operator >>=(const char);
++
++
++};
++
++inline char Char::val() const { return rep; }
++inline Char::operator char() const { return val(); }
++
++inline Char::Char () :rep(0) {}
++inline Char::Char (const char b) :rep(b) {}
++inline Char::Char (const Char& b) :rep(b.Char::val()) {}
++inline Char::~Char() {}
++
++inline void Char::operator = (const char b)
++{ rep = b; ; }
++inline void Char::operator = (const Char& b)
++{ rep = b.Char::val(); ; }
++
++inline void Char::complement()
++{ rep = ~rep; ; }
++inline void Char::negate()
++{ rep = -rep; ; }
++inline void Char::operator ++ ()
++{ ++rep; ; }
++inline void Char::operator -- ()
++{ --rep; ; }
++
++inline void Char::operator += (const Char & b)
++{ rep += b.Char::val(); ; }
++inline void Char::operator -= (const Char & b)
++{ rep -= b.Char::val(); ; }
++inline void Char::operator *= (const Char & b)
++{ rep *= b.Char::val(); ; }
++inline void Char::operator /= (const Char & b)
++{ rep /= b.Char::val(); ; }
++inline void Char::operator %= (const Char & b)
++{ rep %= b.Char::val(); ; }
++inline void Char::operator |= (const Char & b)
++{ rep |= b.Char::val(); ; }
++inline void Char::operator &= (const Char & b)
++{ rep &= b.Char::val(); ; }
++inline void Char::operator ^= (const Char & b)
++{ rep ^= b.Char::val(); ; }
++inline void Char::operator <<=(const Char & b)
++{ rep <<= b.Char::val(); ; }
++inline void Char::operator >>=(const Char & b)
++{ rep >>= b.Char::val(); ; }
++
++
++
++inline void Char::operator += (const char b)
++{ rep += b; ; }
++inline void Char::operator -= (const char b)
++{ rep -= b; ; }
++inline void Char::operator *= (const char b)
++{ rep *= b; ; }
++inline void Char::operator /= (const char b)
++{ rep /= b; ; }
++inline void Char::operator %= (const char b)
++{ rep %= b; ; }
++inline void Char::operator |= (const char b)
++{ rep |= b; ; }
++inline void Char::operator &= (const char b)
++{ rep &= b; ; }
++inline void Char::operator ^= (const char b)
++{ rep ^= b; ; }
++inline void Char::operator <<=(const char b)
++{ rep <<= b; ; }
++inline void Char::operator >>=(const char b)
++{ rep >>= b; ; }
++
++
++inline char& operator = (char& a, const Char & b)
++{ a = b.Char::val(); return a;} // WARNING -
++inline char& operator += (char& a, const Char & b)
++{ a += b.Char::val(); return a; }
++inline char& operator -= (char& a, const Char & b)
++{ a -= b.Char::val(); return a;}
++inline char& operator *= (char& a, const Char & b)
++{ a *= b.Char::val(); return a;}
++inline char& operator /= (char& a, const Char & b)
++{ a /= b.Char::val(); return a;}
++inline char& operator %= (char& a, const Char & b)
++{ a %= b.Char::val(); return a;}
++inline char& operator |= (char& a, const Char & b)
++{ a |= b.Char::val(); return a;}
++inline char& operator &= (char& a, const Char & b)
++{ a &= b.Char::val(); return a;}
++inline char& operator ^= (char& a, const Char & b)
++{ a ^= b.Char::val(); return a;}
++inline char& operator <<=(char& a, const Char & b)
++{ a <<= b.Char::val(); return a;}
++inline char& operator >>=(char& a, const Char & b)
++{ a >>= b.Char::val(); return a;}
++
++
++
++//# 291 "../../../../libg++/etc/benchmarks/Char.h"
++
++
++inline Char operator - (const Char & a) return r(a)
++{ r.negate(); }
++inline Char operator ~ (const Char & a) return r(a)
++{ r.complement(); }
++
++inline Char operator + (const Char & a, const Char & b) return r(a)
++{ r += b.Char::val(); }
++inline Char operator - (const Char & a, const Char & b) return r(a)
++{ r -= b.Char::val(); }
++inline Char operator * (const Char & a, const Char & b) return r(a)
++{ r *= b.Char::val(); }
++inline Char operator / (const Char & a, const Char & b) return r(a)
++{ r /= b.Char::val(); }
++inline Char operator % (const Char & a, const Char & b) return r(a)
++{ r %= b.Char::val(); }
++inline Char operator << (const Char & a, const Char & b) return r(a)
++{ r <<= b.Char::val(); }
++inline Char operator >> (const Char & a, const Char & b) return r(a)
++{ r >>= b.Char::val(); }
++inline Char operator & (const Char & a, const Char & b) return r(a)
++{ r &= b.Char::val(); }
++inline Char operator | (const Char & a, const Char & b) return r(a)
++{ r |= b.Char::val(); }
++inline Char operator ^ (const Char & a, const Char & b) return r(a)
++{ r ^= b.Char::val(); }
++
++inline Char operator + (const Char & a, const char b) return r(a)
++{ r += b; }
++inline Char operator - (const Char & a, const char b) return r(a)
++{ r -= b; }
++inline Char operator * (const Char & a, const char b) return r(a)
++{ r *= b; }
++inline Char operator / (const Char & a, const char b) return r(a)
++{ r /= b; }
++inline Char operator % (const Char & a, const char b) return r(a)
++{ r %= b; }
++inline Char operator << (const Char & a, const char b) return r(a)
++{ r <<= b; }
++inline Char operator >> (const Char & a, const char b) return r(a)
++{ r >>= b; }
++inline Char operator & (const Char & a, const char b) return r(a)
++{ r &= b; }
++inline Char operator | (const Char & a, const char b) return r(a)
++{ r |= b; }
++inline Char operator ^ (const Char & a, const char b) return r(a)
++{ r ^= b; }
++
++inline Char operator + (const char a, const Char & b) return r(a)
++{ r += b.Char::val(); }
++inline Char operator - (const char a, const Char & b) return r(a)
++{ r -= b.Char::val(); }
++inline Char operator * (const char a, const Char & b) return r(a)
++{ r *= b.Char::val(); }
++inline Char operator / (const char a, const Char & b) return r(a)
++{ r /= b.Char::val(); }
++inline Char operator % (const char a, const Char & b) return r(a)
++{ r %= b.Char::val(); }
++inline Char operator << (const char a, const Char & b) return r(a)
++{ r <<= b.Char::val(); }
++inline Char operator >> (const char a, const Char & b) return r(a)
++{ r >>= b.Char::val(); }
++inline Char operator & (const char a, const Char & b) return r(a)
++{ r &= b.Char::val(); }
++inline Char operator | (const char a, const Char & b) return r(a)
++{ r |= b.Char::val(); }
++inline Char operator ^ (const char a, const Char & b) return r(a)
++{ r ^= b.Char::val(); }
++
++
++
++inline char operator ! (const Char & a) { return !a.Char::val(); }
++
++inline char operator == (const Char & a, const Char & b)
++{ return a.Char::val() == b.Char::val(); }
++inline char operator != (const Char & a, const Char & b)
++{ return a.Char::val() != b.Char::val(); }
++inline char operator < (const Char & a, const Char & b)
++{ return a.Char::val() < b.Char::val(); }
++inline char operator <= (const Char & a, const Char & b)
++{ return a.Char::val() <= b.Char::val(); }
++inline char operator > (const Char & a, const Char & b)
++{ return a.Char::val() > b.Char::val(); }
++inline char operator >= (const Char & a, const Char & b)
++{ return a.Char::val() >= b.Char::val(); }
++
++inline char operator == (const Char & a, const char b)
++{ return a.Char::val() == b; }
++inline char operator != (const Char & a, const char b)
++{ return a.Char::val() != b; }
++inline char operator < (const Char & a, const char b)
++{ return a.Char::val() < b; }
++inline char operator <= (const Char & a, const char b)
++{ return a.Char::val() <= b; }
++inline char operator > (const Char & a, const char b)
++{ return a.Char::val() > b; }
++inline char operator >= (const Char & a, const char b)
++{ return a.Char::val() >= b; }
++
++inline char operator == (const char a, const Char & b)
++{ return a == b.Char::val(); }
++inline char operator != (const char a, const Char & b)
++{ return a != b.Char::val(); }
++inline char operator < (const char a, const Char & b)
++{ return a < b.Char::val(); }
++inline char operator <= (const char a, const Char & b)
++{ return a <= b.Char::val(); }
++inline char operator > (const char a, const Char & b)
++{ return a > b.Char::val(); }
++inline char operator >= (const char a, const Char & b)
++{ return a >= b.Char::val(); }
++
++
++
++//# 27 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 1 "/giga/hgs/lib/g++-include/sys/types.h" 1
++
++
++//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1
++
++extern "C" {
++//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef int ptrdiff_t;
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef int size_t;
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef short unsigned int wchar_t;
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2
++
++}
++//# 73 "/giga/hgs/lib/g++-include/stddef.h"
++
++//# 3 "/giga/hgs/lib/g++-include/sys/types.h" 2
++
++
++
++
++extern "C"
++{
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 1 "/usr/include/sys/types.h" 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 1 "/usr/include/sys/stdtypes.h" 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef int sigset_t;
++
++typedef unsigned int speed_t;
++typedef unsigned long tcflag_t;
++typedef unsigned char cc_t;
++typedef int pid_t;
++
++typedef unsigned short mode_t;
++typedef short nlink_t;
++
++typedef long clock_t;
++typedef long time_t;
++
++typedef int size_t;
++typedef int ptrdiff_t;
++
++typedef unsigned short wchar_t;
++
++
++//# 16 "/usr/include/sys/types.h" 2
++
++
++
++//# 1 "/usr/include/sys/sysmacros.h" 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 19 "/usr/include/sys/types.h" 2
++
++
++
++
++
++typedef unsigned char u_char;
++typedef unsigned short u_short;
++typedef unsigned int u_int;
++typedef unsigned long u_long;
++typedef unsigned short ushort;
++typedef unsigned int uint;
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef struct _physadr_t { int r[1]; } *physadr_t;
++typedef struct label_t {
++ int val[2];
++} label_t;
++
++
++
++
++
++
++
++typedef struct _quad_t { long val[2]; } quad_t;
++typedef long daddr_t;
++typedef char * caddr_t;
++typedef unsigned long ino_t;
++typedef short dev_t;
++typedef long off_t;
++typedef unsigned short uid_t;
++typedef unsigned short gid_t;
++typedef long key_t;
++typedef char * addr_t;
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef long fd_mask;
++
++
++
++
++
++
++
++
++
++typedef struct fd_set {
++ fd_mask fds_bits[(((256 )+(( (sizeof (fd_mask) * 8 ) )-1))/( (sizeof (fd_mask) * 8 ) )) ];
++} fd_set;
++
++
++
++
++
++
++
++//# 113 "/usr/include/sys/types.h"
++
++
++
++//# 35 "/giga/hgs/lib/g++-include/sys/types.h" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++}
++
++
++
++
++//# 310 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2
++
++//# 1 "/giga/hgs/lib/g++-include/sys/times.h" 1
++//# 1 "/giga/hgs/lib/g++-include/time.h" 1
++
++
++
++
++
++//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1
++
++extern "C" {
++//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1
++//# 94 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h"
++
++//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2
++
++}
++//# 73 "/giga/hgs/lib/g++-include/stddef.h"
++
++//# 6 "/giga/hgs/lib/g++-include/time.h" 2
++
++//# 1 "/giga/hgs/lib/g++-include/stdio.h" 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//#pragma interface
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 80 "/giga/hgs/lib/g++-include/stdio.h"
++
++
++
++//# 117 "/giga/hgs/lib/g++-include/stdio.h"
++
++
++
++
++
++//# 153 "/giga/hgs/lib/g++-include/stdio.h"
++
++
++
++extern "C" {
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 1 "/usr/include/stdio.h" 1
++
++
++
++
++
++extern struct _iobuf {
++ int _cnt;
++ unsigned char *_ptr;
++ unsigned char *_base;
++ int _bufsiz;
++ short _flag;
++ char _file;
++} _iob[];
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++extern struct _iobuf *c_proto_fopen ();
++extern struct _iobuf *c_proto_fdopen ();
++extern struct _iobuf *c_proto_freopen ();
++extern struct _iobuf *c_proto_popen ();
++extern struct _iobuf *tmpfile();
++extern long ftell();
++extern char *fgets();
++extern char *gets();
++extern char *c_proto_sprintf ();
++extern char *ctermid();
++extern char *cuserid();
++extern char *c_proto_tempnam ();
++extern char *tmpnam();
++
++
++
++
++
++
++//# 185 "/giga/hgs/lib/g++-include/stdio.h" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++}
++//# 417 "/giga/hgs/lib/g++-include/stdio.h"
++
++
++
++
++
++
++extern "C" {
++
++
++
++
++
++
++
++int _doprnt(const char*, void*, struct _iobuf *);
++int _doscan(struct _iobuf *, const char*, ...);
++int _filbuf(struct _iobuf *);
++int _flsbuf(unsigned, struct _iobuf *);
++
++int fclose(struct _iobuf *);
++struct _iobuf * fdopen(int, const char*);
++int fflush(struct _iobuf *);
++int fgetc(struct _iobuf *);
++char* fgets(char*, int, struct _iobuf *);
++struct _iobuf * fopen(const char*, const char*);
++int fprintf(struct _iobuf *, const char* ...);
++int fputc(int, struct _iobuf *);
++int fputs(const char*, struct _iobuf *);
++int fread(void*, int, int, struct _iobuf *);
++
++
++
++struct _iobuf * freopen(const char*, const char*, struct _iobuf *);
++
++int fscanf(struct _iobuf *, const char* ...);
++int fseek(struct _iobuf *, long, int);
++long ftell(struct _iobuf *);
++int fwrite(const void*, int, int, struct _iobuf *);
++char* gets(char*);
++int getw(struct _iobuf *);
++int pclose(struct _iobuf *);
++void perror(const char*);
++struct _iobuf * popen(const char*, const char*);
++int printf(const char* ...);
++int puts(const char*);
++int putw(int, struct _iobuf *);
++int rewind(struct _iobuf *);
++int scanf(const char* ...);
++int setbuf(struct _iobuf *, char*);
++int setbuffer(struct _iobuf *, char*, int);
++int setlinebuf(struct _iobuf *);
++int setvbuf(struct _iobuf *, char*, int, int);
++int sscanf(char*, const char* ...);
++struct _iobuf * tmpfile();
++int ungetc(int, struct _iobuf *);
++int vfprintf(struct _iobuf *, const char*, ...);
++
++
++
++
++int vprintf(const char*, ... );
++
++
++
++
++
++char* sprintf(char*, const char*, ...);
++char* vsprintf(char*, const char*, ...);
++
++
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 7 "/giga/hgs/lib/g++-include/time.h" 2
++
++
++//# 1 "/giga/hgs/lib/g++-include/sys/types.h" 1
++
++
++//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1
++
++extern "C" {
++//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1
++//# 94 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h"
++
++//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2
++
++}
++//# 73 "/giga/hgs/lib/g++-include/stddef.h"
++
++//# 3 "/giga/hgs/lib/g++-include/sys/types.h" 2
++
++
++
++
++extern "C"
++{
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 1 "/usr/include/sys/types.h" 1
++
++
++
++
++
++
++
++
++//# 115 "/usr/include/sys/types.h"
++
++//# 35 "/giga/hgs/lib/g++-include/sys/types.h" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++}
++
++
++
++
++//# 9 "/giga/hgs/lib/g++-include/time.h" 2
++
++
++extern "C" {
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 42 "/giga/hgs/lib/g++-include/time.h"
++
++
++
++
++
++
++
++//# 1 "/usr/include/time.h" 1
++
++
++
++
++
++//# 1 "/usr/include/sys/stdtypes.h" 1
++
++
++
++
++
++
++
++
++
++
++//# 32 "/usr/include/sys/stdtypes.h"
++
++//# 6 "/usr/include/time.h" 2
++
++
++
++
++struct tm {
++ int tm_sec;
++ int tm_min;
++ int tm_hour;
++ int tm_mday;
++ int tm_mon;
++ int tm_year;
++ int tm_wday;
++ int tm_yday;
++ int tm_isdst;
++ char *tm_zone;
++ long tm_gmtoff;
++};
++
++extern struct tm *c_proto_gmtime (), *c_proto_localtime ();
++extern char *c_proto_asctime (), *c_proto_ctime ();
++extern void c_proto_tzset (), c_proto_tzsetwall ();
++extern int dysize();
++extern time_t timelocal(), timegm();
++
++
++//# 49 "/giga/hgs/lib/g++-include/time.h" 2
++
++
++//# 1 "/usr/include/sys/times.h" 1
++
++
++
++
++
++
++
++
++
++//# 1 "/giga/hgs/lib/g++-include/sys/types.h" 1
++
++
++//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1
++
++extern "C" {
++//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1
++//# 94 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h"
++
++//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2
++
++}
++//# 73 "/giga/hgs/lib/g++-include/stddef.h"
++
++//# 3 "/giga/hgs/lib/g++-include/sys/types.h" 2
++
++
++
++
++extern "C"
++{
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 1 "/usr/include/sys/types.h" 1
++
++
++
++
++
++
++
++
++//# 115 "/usr/include/sys/types.h"
++
++//# 35 "/giga/hgs/lib/g++-include/sys/types.h" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++}
++
++
++
++
++//# 10 "/usr/include/sys/times.h" 2
++
++
++struct tms {
++ clock_t tms_utime;
++ clock_t tms_stime;
++ clock_t tms_cutime;
++ clock_t tms_cstime;
++};
++
++
++clock_t times( );
++
++
++
++//# 51 "/giga/hgs/lib/g++-include/time.h" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++extern struct tm* localtime(long*);
++extern struct tm* gmtime(long*);
++extern char* ctime(long*);
++extern char* asctime(struct tm*);
++extern void tzset();
++extern void tzsetwall();
++
++
++
++
++
++
++extern long times(struct tms*);
++
++
++//# 97 "/giga/hgs/lib/g++-include/time.h"
++
++extern char* timezone(int, int);
++extern int getitimer(int, struct itimerval*);
++extern int setitimer(int, struct itimerval*, struct itimerval*);
++extern int gettimeofday(struct timeval*, struct timezone*);
++extern int settimeofday(struct timeval*, struct timezone*);
++extern int stime(long*);
++int dysize(int);
++
++
++
++
++
++
++
++
++long clock(void);
++
++long time(long*);
++unsigned ualarm(unsigned, unsigned);
++unsigned usleep(unsigned);
++int profil(char*, int, int, int);
++
++}
++
++
++
++//# 1 "/giga/hgs/lib/g++-include/sys/times.h" 2
++
++//# 311 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef enum {Ident1, Ident2, Ident3, Ident4, Ident5} Enumeration;
++
++
++
++
++typedef Int OneToThirty;
++typedef Int OneToFifty;
++typedef Char CapitalLetter;
++typedef Char String30[31];
++typedef Int Array1Dim[51];
++typedef Int Array2Dim[51][51];
++
++struct Record
++{
++ struct Record *PtrComp;
++ Enumeration Discr;
++ Enumeration EnumComp;
++ OneToFifty IntComp;
++ String30 StringComp;
++};
++
++typedef struct Record RecordType;
++typedef RecordType * RecordPtr;
++typedef int boolean;
++
++
++
++
++
++
++
++
++
++
++
++extern "C" {
++extern int printf(const char* ...);
++extern void exit(int);
++}
++
++void Proc0();
++void Proc1(RecordPtr PtrParIn);
++void Proc2(OneToFifty *IntParIO);
++void Proc3(RecordPtr *PtrParOut);
++void Proc4();
++void Proc5();
++boolean Func3(Enumeration EnumParIn);
++void Proc6( Enumeration EnumParIn, Enumeration *EnumParOut);
++void Proc7(OneToFifty IntParI1, OneToFifty IntParI2, OneToFifty *IntParOut);
++void Proc8(Array1Dim Array1Par,
++ Array2Dim Array2Par,
++ OneToFifty IntParI1,
++ OneToFifty IntParI2);
++Enumeration Func1(CapitalLetter CharPar1, CapitalLetter CharPar2);
++boolean Func2(String30 StrParI1, String30 StrParI2);
++boolean Func3(Enumeration EnumParIn);
++
++void mystrcpy(String30 s, char* t)
++{
++ for (; *t != '\0'; ++s, ++t) *s = *t;
++ *s = '\0';
++}
++
++char mystrcmp(String30 s, String30 t)
++{
++ for (; *s == *t; ++s, ++t) if (*s == '\0') return 0;
++ return char(*s - *t);
++}
++
++
++
++main()
++{
++ Proc0();
++ exit(0);
++}
++
++
++
++
++Int IntGlob;
++boolean BoolGlob;
++char Char1Glob;
++char Char2Glob;
++Array1Dim Array1Glob;
++Array2Dim Array2Glob;
++RecordPtr PtrGlb;
++RecordPtr PtrGlbNext;
++
++void Proc0()
++{
++ OneToFifty IntLoc1;
++ OneToFifty IntLoc2;
++ OneToFifty IntLoc3;
++ char CharLoc;
++ char CharIndex;
++ Enumeration EnumLoc;
++ String30 String1Loc;
++ String30 String2Loc;
++
++//# 445 "../../../../libg++/etc/benchmarks/dhrystone.cc"
++
++
++ time_t starttime;
++ time_t benchtime;
++ time_t nulltime;
++ struct tms Tms;
++ register unsigned int i;
++
++ times(&Tms); starttime = Tms.tms_utime;
++ for (i = 0; i < 500000 ; ++i);
++ times(&Tms);
++ nulltime = Tms.tms_utime - starttime;
++
++
++ PtrGlbNext = new Record;
++ PtrGlb = new Record;
++ PtrGlb->PtrComp = PtrGlbNext;
++ PtrGlb->Discr = Ident1;
++ PtrGlb->EnumComp = Ident3;
++ PtrGlb->IntComp = 40;
++ mystrcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING");
++ mystrcpy(String1Loc, "JUST INITIALIZED TO SOME JUNK.");
++
++
++
++
++
++
++
++
++ times(&Tms); starttime = Tms.tms_utime;
++
++ for (i = 0; i < 500000 ; ++i)
++ {
++
++ Proc5();
++ Proc4();
++ IntLoc1 = 2;
++ IntLoc2 = 3;
++ mystrcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
++ EnumLoc = Ident2;
++ BoolGlob = ! Func2(String1Loc, String2Loc);
++ while (IntLoc1 < IntLoc2)
++ {
++ IntLoc3 = 5 * IntLoc1 - IntLoc2;
++ Proc7(IntLoc1, IntLoc2, &IntLoc3);
++ ++IntLoc1;
++ }
++ Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
++ Proc1(PtrGlb);
++ for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
++ if (EnumLoc == Func1(CharIndex, 'C'))
++ Proc6(Ident1, &EnumLoc);
++ IntLoc3 = IntLoc2 * IntLoc1;
++ IntLoc2 = IntLoc3 / IntLoc1;
++ IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
++ Proc2(&IntLoc1);
++ }
++
++
++
++
++
++
++
++
++
++
++
++
++
++ times(&Tms);
++ benchtime = Tms.tms_utime - starttime - nulltime;
++ printf("Dhrystone time for %ld passes = %ld\n",
++ (long) 500000 , benchtime/60 );
++ printf("This machine benchmarks at %ld dhrystones/second\n",
++ ((long) 500000 ) * 60 / benchtime);
++
++
++}
++
++void Proc1(RecordPtr PtrParIn)
++{
++
++
++ (*(PtrParIn->PtrComp)) = *PtrGlb ;
++ PtrParIn->IntComp = 5;
++ (*(PtrParIn->PtrComp)) .IntComp = PtrParIn->IntComp;
++ (*(PtrParIn->PtrComp)) .PtrComp = PtrParIn->PtrComp;
++
++ Proc3(&((*(PtrParIn->PtrComp)) .PtrComp));
++ if ((*(PtrParIn->PtrComp)) .Discr == Ident1)
++ {
++ (*(PtrParIn->PtrComp)) .IntComp = 6;
++ Proc6(PtrParIn->EnumComp, &(*(PtrParIn->PtrComp)) .EnumComp);
++ (*(PtrParIn->PtrComp)) .PtrComp = PtrGlb->PtrComp;
++ Proc7((*(PtrParIn->PtrComp)) .IntComp, 10, &(*(PtrParIn->PtrComp)) .IntComp);
++ }
++ else
++ *PtrParIn = (*(PtrParIn->PtrComp)) ;
++
++
++}
++
++void Proc2(OneToFifty *IntParIO)
++{
++ OneToFifty IntLoc;
++ Enumeration EnumLoc;
++
++ IntLoc = *IntParIO + 10;
++ for(;;)
++ {
++ if (Char1Glob == 'A')
++ {
++ --IntLoc;
++ *IntParIO = IntLoc - IntGlob;
++ EnumLoc = Ident1;
++ }
++ if (EnumLoc == Ident1)
++ break;
++ }
++}
++
++void Proc3(RecordPtr *PtrParOut)
++{
++ if (PtrGlb != 0 )
++ *PtrParOut = PtrGlb->PtrComp;
++ else
++ IntGlob = 100;
++ Proc7(10, IntGlob, &PtrGlb->IntComp);
++}
++
++void Proc4()
++{
++ boolean BoolLoc;
++
++ BoolLoc = Char1Glob == 'A';
++ BoolLoc |= BoolGlob;
++ Char2Glob = 'B';
++}
++
++void Proc5()
++{
++ Char1Glob = 'A';
++ BoolGlob = 0 ;
++}
++
++
++
++
++void Proc6( Enumeration EnumParIn, Enumeration *EnumParOut)
++{
++ *EnumParOut = EnumParIn;
++ if (! Func3(EnumParIn) )
++ *EnumParOut = Ident4;
++ switch (EnumParIn)
++ {
++ case Ident1: *EnumParOut = Ident1; break;
++ case Ident2: if (IntGlob > 100) *EnumParOut = Ident1;
++ else *EnumParOut = Ident4;
++ break;
++ case Ident3: *EnumParOut = Ident2; break;
++ case Ident4: break;
++ case Ident5: *EnumParOut = Ident3;
++ }
++}
++
++void Proc7(OneToFifty IntParI1, OneToFifty IntParI2, OneToFifty *IntParOut)
++{
++ OneToFifty IntLoc;
++
++ IntLoc = IntParI1 + 2;
++ *IntParOut = IntParI2 + IntLoc;
++}
++
++void Proc8(Array1Dim Array1Par,
++ Array2Dim Array2Par,
++ OneToFifty IntParI1,
++ OneToFifty IntParI2)
++{
++ OneToFifty IntLoc;
++ OneToFifty IntIndex;
++
++ IntLoc = IntParI1 + 5;
++ Array1Par[IntLoc] = IntParI2;
++ Array1Par[IntLoc+1] = Array1Par[IntLoc];
++ Array1Par[IntLoc+30] = IntLoc;
++ for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
++ Array2Par[IntLoc][IntIndex] = IntLoc;
++ ++Array2Par[IntLoc][IntLoc-1];
++ Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
++ IntGlob = 5;
++}
++
++Enumeration Func1(CapitalLetter CharPar1, CapitalLetter CharPar2)
++{
++ CapitalLetter CharLoc1;
++ CapitalLetter CharLoc2;
++
++ CharLoc1 = CharPar1;
++ CharLoc2 = CharLoc1;
++ if (CharLoc2 != CharPar2)
++ return (Ident1);
++ else
++ return (Ident2);
++}
++
++boolean Func2(String30 StrParI1, String30 StrParI2)
++{
++ OneToThirty IntLoc;
++ CapitalLetter CharLoc;
++
++ IntLoc = 1;
++ while (IntLoc <= 1)
++ if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1)
++ {
++ CharLoc = 'A';
++ ++IntLoc;
++ }
++ if (CharLoc >= 'W' && CharLoc <= 'Z')
++ IntLoc = 7;
++ if (CharLoc == 'X')
++ return( 1 );
++ else
++ {
++ if (mystrcmp(StrParI1, StrParI2) > 0)
++ {
++ IntLoc += 7;
++ return ( 1 );
++ }
++ else
++ return ( 0 );
++ }
++}
++
++boolean Func3(Enumeration EnumParIn)
++{
++ Enumeration EnumLoc;
++
++ EnumLoc = EnumParIn;
++ if (EnumLoc == Ident3) return ( 1 );
++ return ( 0 );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p701.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p701.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p701.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p701.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Build don't link:
++// prms-id: 701
++
++extern "C"
++{
++ int printf(const char *, ...);
++};
++
++
++void Munge(int& x)
++{ // ERROR - referenced below
++ x = 2;
++}
++
++
++class A
++{
++ public:
++ int i;
++ A(int x) : i(x) {}
++ void Safe() const;
++};
++
++void
++A::Safe() const
++{
++ Munge(i); // ERROR - should not be able to modify a const object
++}
++
++int main()
++{
++ const A a(1);
++ a.Safe();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p710.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p710.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p710.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p710.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Build don't link:
++// GROUPS passed delete
++/*
++ Bug Id:
++ PRMS Id: p0000710
++ Bug is : overloading operator delete in class def not allowed
++*/
++
++/*
++ In addition to this bug, the compiler permits overloading operator
++ delete in the class definition. This is verboten, and should be
++ caught by a regression suite. In other words, the following is also a
++ bug that's not caught:
++*/
++
++
++#include <stdlib.h>
++
++extern "C"
++{
++ int printf(const char*, ...);
++};
++
++
++
++class B
++{
++ public:
++ int x;
++ virtual ~B() {}
++ void operator delete(void*,size_t s)
++ {
++ printf("B::delete() %d\n",s);
++ }
++ void operator delete(void*){}
++};
++
++int main()
++{
++ B* p = new B;
++ delete p;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7180.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7180.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7180.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7180.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// prms-id: 7180
++
++class String {
++public:
++ String(const char*);
++ ~String();
++};
++
++String::String(const char* str = "") {
++}
++
++String::~String(void) {
++}
++
++int main() {
++ const String array[] = {"3"};
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7325.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7325.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7325.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7325.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,55 @@
++// I hate this type of test case. I'm not sure how to code it better.
++// See the PR for what this tests.
++// prms-id: 7325
++// execution test - XFAIL *-*-*
++
++int fail = 0;
++
++struct A {
++ int i;
++ static const A* match_this;
++ static const A* match_arg;
++ A(): i(7) {
++ if (match_this)
++ if (match_this != this)
++ fail = 1;
++ }
++ A* get_this() { return this; }
++ A& operator = (const A& o) {
++ if (match_this)
++ if (match_this != this)
++ fail = 1;
++ if (match_arg)
++ if (match_arg != &o)
++ fail = 1;
++ match_arg = &o;
++ }
++};
++
++const A* A::match_this;
++const A* A::match_arg;
++A a;
++
++A foo() { return a; }
++void f ()
++{
++ A a;
++ A::match_this = &a;
++ a = foo ();
++ a = foo ();
++ A::match_this = 0;
++}
++
++void g ()
++{
++ A::match_this = A().get_this();
++ A();
++ A();
++ A::match_this = 0;
++}
++
++int main() {
++ f();
++ g();
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7476.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7476.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7476.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7476.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// prms-id: 7476
++
++class HeapTracked {
++public:
++ virtual ~HeapTracked() { }
++ static void isObjectAllocation(const HeapTracked *ptr);
++ static void isObjectAllocation(HeapTracked *ptr);
++};
++
++void HeapTracked::isObjectAllocation(HeapTracked *ptr)
++{
++ dynamic_cast<const void*>(ptr);
++ dynamic_cast<void*>(ptr);
++}
++void HeapTracked::isObjectAllocation(const HeapTracked *ptr)
++{
++ const_cast<void*>(dynamic_cast<const void*>(ptr));
++ dynamic_cast<void*>(ptr); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p755a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p755a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p755a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p755a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// It checks to see if you can define your own global delete operator.
++// prms-id: 755
++
++extern "C" void exit(int);
++
++void operator delete(void *p) throw() {
++ exit(0);
++}
++
++int main () {
++ int* i = new int;
++ delete i;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p755.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p755.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p755.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p755.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// It checks to see if you can define your own global new operator.
++// prms-id: 755
++
++#include <new>
++extern "C" void exit(int);
++
++void* operator new(size_t sz) throw (std::bad_alloc) {
++ void* p = 0;
++ exit(0);
++ return p;
++}
++
++int main () {
++ int* i = new int;
++ delete i;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7626.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7626.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7626.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7626.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Build don't link:
++// prms-id: 7626
++
++int fail;
++
++typedef unsigned int UINT;
++
++class CObject{};
++
++class CCmdTarget : public CObject {
++};
++
++typedef void (CCmdTarget::*AFX_PMSG)(void);
++
++struct AFX_MSGMAP_ENTRY {
++ AFX_PMSG pfn;
++};
++
++class CWnd : public CCmdTarget {
++public:
++ void OnMyMsg() { fail = 1; } // If this one is called, something is wrong.
++ static AFX_MSGMAP_ENTRY _messageEntries[];
++};
++
++typedef void (CWnd::*AFX_PMSGW)(void);
++
++class CDialog : public CWnd
++{
++public:
++ void OnMyMsg() { }
++ static AFX_MSGMAP_ENTRY _messageEntries[];
++};
++
++AFX_MSGMAP_ENTRY CDialog ::_messageEntries[] = {
++ { (AFX_PMSG)(AFX_PMSGW)(void (CWnd::*)())&CDialog::OnMyMsg },
++ { (AFX_PMSG)0 }
++};
++
++int main() {
++ CDialog d;
++ (d.*((CDialog::_messageEntries)[0]).pfn)(); // This should call CDialog::OnMyMsg
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7635.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7635.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7635.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7635.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// prms-id: 7635
++
++class DaycountBasis {
++ mutable const int * p;
++ mutable int * const q; // ERROR -
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7651.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7651.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7651.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7651.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// prms-id: 7651
++
++int fail = 0;
++
++class Foo {
++public:
++ Foo(double i) : data(i) { if (data != 1.0) fail = 1; }
++ ~Foo() { if (data != 1.0) fail = 1; }
++private:
++ volatile double data;
++};
++
++int DingDong(double A) {
++ volatile Foo a(A);
++
++ if ( A != 0.0 ) {
++ return 1;
++ }
++ return 0;
++}
++
++
++int main() {
++ DingDong(1.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p783a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p783a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p783a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p783a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Copying into an object directly is a lose according to tiemann.
++// Deleting an object many times is a lose.
++// prms-id: 783
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++class C {
++ int i;
++public:
++ C() {
++ i = 1;
++ }
++ ~C() {
++ if (i != 1) {
++ exit(1);
++ }
++ i = 0;
++ }
++};
++
++int main(int argc, char**argv) {
++ C c;
++ c = C();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p783b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p783b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p783b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p783b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// This one check for objects being destroyed twice. The bug it is
++// looking for is the extra dtor call on C() even though it is never
++// built.
++// prms-id: 783
++
++extern "C" void printf (char *, ...);
++extern "C" void exit (int);
++
++class C {
++ int i;
++public:
++// C() {printf ("C ctor at %x\n", this);}
++// ~C() {printf ("C dtor at %x\n", this);}
++ C() {
++ i = 1;
++ }
++ ~C() {
++ if (i != 1) {
++ exit(1);
++ }
++ i = 0;
++ }
++};
++
++C g;
++
++C func() {
++ return g;
++}
++
++int main(int argc, char**argv) {
++ C c,d;
++// printf ("\n");
++ c = (argc != 1) ? C() : d;
++// printf ("\n");
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p783.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p783.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p783.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p783.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// prms-id: 783
++
++extern "C" void printf (char *, ...);
++
++class C {
++public:
++ C() { }
++ ~C() { }
++};
++
++int main(int argc, char**argv) {
++ C c,d;
++ c = (argc&1) ? C() : d;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p784.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p784.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p784.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p784.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3658 @@
++// Build don't link:
++// Special g++ Options: -w
++// prms-id: 784
++
++//# 1 "GctSymbol.GctSymbol.CHMap.cc"
++// This may look like C code, but it is really -*- C++ -*-
++/*
++Copyright (C) 1988 Free Software Foundation
++ written by Doug Lea (dl@rocky.oswego.edu)
++
++This file is part of the GNU C++ Library. This library is free
++software; you can redistribute it and/or modify it under the terms of
++the GNU Library General Public License as published by the Free
++Software Foundation; either version 2 of the License, or (at your
++option) any later version. This library is distributed in the hope
++that it will be useful, but WITHOUT ANY WARRANTY; without even the
++implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
++PURPOSE. See the GNU Library General Public License for more details.
++You should have received a copy of the GNU Library General Public
++License along with this library; if not, write to the Free Software
++Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++
++//#pragma implementation
++
++//# 1 "GctSymbol.GctSymbol.CHMap.h" 1
++// This may look like C code, but it is really -*- C++ -*-
++/*
++Copyright (C) 1988 Free Software Foundation
++ written by Doug Lea (dl@rocky.oswego.edu)
++
++This file is part of the GNU C++ Library. This library is free
++software; you can redistribute it and/or modify it under the terms of
++the GNU Library General Public License as published by the Free
++Software Foundation; either version 2 of the License, or (at your
++option) any later version. This library is distributed in the hope
++that it will be useful, but WITHOUT ANY WARRANTY; without even the
++implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
++PURPOSE. See the GNU Library General Public License for more details.
++You should have received a copy of the GNU Library General Public
++License along with this library; if not, write to the Free Software
++Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "GctSymbol.GctSymbol.Map.h" 1
++// This may look like C code, but it is really -*- C++ -*-
++/*
++Copyright (C) 1988 Free Software Foundation
++ written by Doug Lea (dl@rocky.oswego.edu)
++
++This file is part of the GNU C++ Library. This library is free
++software; you can redistribute it and/or modify it under the terms of
++the GNU Library General Public License as published by the Free
++Software Foundation; either version 2 of the License, or (at your
++option) any later version. This library is distributed in the hope
++that it will be useful, but WITHOUT ANY WARRANTY; without even the
++implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
++PURPOSE. See the GNU Library General Public License for more details.
++You should have received a copy of the GNU Library General Public
++License along with this library; if not, write to the Free Software
++Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Pix.h" 1
++
++
++
++typedef void* Pix;
++
++//# 26 "GctSymbol.GctSymbol.Map.h" 2
++
++//# 1 "GctSymbol.defs.h" 1
++// This may look like C code, but it is really -*- C++ -*-
++/*
++Copyright (C) 1988 Free Software Foundation
++ written by Doug Lea (dl@rocky.oswego.edu)
++
++This file is part of the GNU C++ Library. This library is free
++software; you can redistribute it and/or modify it under the terms of
++the GNU Library General Public License as published by the Free
++Software Foundation; either version 2 of the License, or (at your
++option) any later version. This library is distributed in the hope
++that it will be useful, but WITHOUT ANY WARRANTY; without even the
++implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
++PURPOSE. See the GNU Library General Public License for more details.
++You should have received a copy of the GNU Library General Public
++License along with this library; if not, write to the Free Software
++Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++
++
++
++
++
++
++//# 1 "../../GctSymbol.h" 1
++// -*- C++ -*-
++
++
++
++//
++// GctSymbol class
++//
++// Expects to be included by Gct.h
++//
++// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++
++
++//# 25 "../../GctSymbol.h" 2
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1
++// This may look like C code, but it is really -*- C++ -*-
++/*
++Copyright (C) 1988 Free Software Foundation
++ written by Doug Lea (dl@rocky.oswego.edu)
++
++This file is part of the GNU C++ Library. This library is free
++software; you can redistribute it and/or modify it under the terms of
++the GNU Library General Public License as published by the Free
++Software Foundation; either version 2 of the License, or (at your
++option) any later version. This library is distributed in the hope
++that it will be useful, but WITHOUT ANY WARRANTY; without even the
++implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
++PURPOSE. See the GNU Library General Public License for more details.
++You should have received a copy of the GNU Library General Public
++License along with this library; if not, write to the Free Software
++Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 1
++
++
++
++// Compatibility with old library.
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++
++
++//#pragma interface
++
++
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++
++
++
++//#pragma interface
++
++
++/* KLUDGES!! */
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1
++
++
++extern "C" {
++
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/mips/lib/gcc/decstatn/cygnus-1.96/include/stddef.h" 1
++
++
++
++
++
++
++/* This avoids lossage on Sunos but only if stdtypes.h comes first.
++ There's no way to win with the other order! Sun lossage. */
++
++/* In case nobody has defined these types, but we aren't running under
++ GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and
++ __WCHAR_TYPE__ have reasonable values. This can happen if the
++ parts of GCC is compiled by an older compiler, that actually
++ include gstddef.h, such as collect2. */
++
++/* Signed type of difference of two pointers. */
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef long int ptrdiff_t;
++
++
++
++
++
++
++/* Unsigned type of `sizeof' something. */
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef unsigned int size_t;
++
++
++
++
++
++
++/* Data type for wide chars. */
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef int wchar_t;
++
++
++
++
++
++
++
++
++/* A null pointer constant. */
++
++
++
++
++/* Offset of member MEMBER in a struct of type TYPE. */
++
++
++
++
++
++//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 2
++
++
++
++
++}
++
++//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 2
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++class ostream; class streambuf;
++
++typedef long streamoff, streampos;
++
++struct _ios_fields { // The data members of an ios.
++ streambuf *_strbuf;
++ ostream* _tie;
++ long _width;
++ unsigned long _flags;
++ char _fill;
++ unsigned char _state;
++ unsigned short _precision;
++};
++
++
++enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 };
++
++
++class ios : public _ios_fields {
++ public:
++ enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 };
++ enum open_mode {
++ in=1,
++ out=2,
++ ate=4,
++ app=8,
++ trunc=16,
++ nocreate=32,
++ noreplace=64 };
++ enum seek_dir { beg, cur, end};
++ enum { skipws=01, left=02, right=04, internal=010,
++ dec=020, oct=040, hex=0100,
++ showbase=0200, showpoint=0400, uppercase=01000, showpos=02000,
++ scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000,
++ dont_close=0x80000000 //Don't close streambuf when destroying stream
++ };
++
++ ostream* tie() { return _tie; }
++ ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }
++
++ // Methods to change the format state.
++ char fill() { return _fill; }
++ char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; }
++ unsigned long flags() { return _flags; }
++ unsigned long flags(unsigned long new_val) {
++ unsigned long old_val = _flags; _flags = new_val; return old_val; }
++ unsigned short precision() { return _precision; }
++ unsigned short precision(int newp) {
++ unsigned short oldp = _precision; _precision = (unsigned short)newp;
++ return oldp; }
++ unsigned long setf(unsigned long val) {
++ unsigned long oldbits = _flags;
++ _flags |= val; return oldbits; }
++ unsigned long setf(unsigned long val, unsigned long mask) {
++ unsigned long oldbits = _flags;
++ _flags = (_flags & ~mask) | (val & mask); return oldbits; }
++ unsigned long unsetf(unsigned long mask) {
++ unsigned long oldbits = _flags & mask;
++ _flags &= ~mask; return oldbits; }
++ long width() { return _width; }
++ long width(long val) { long save = _width; _width = val; return save; }
++
++ static const unsigned long basefield;
++ static const unsigned long adjustfield;
++ static const unsigned long floatfield;
++
++ streambuf* rdbuf() { return _strbuf; }
++ void clear(int state = 0) { _state = state; }
++ int good() { return _state == 0; }
++ int eof() { return _state & ios::eofbit; }
++ int fail() { return _state & (ios::badbit|ios::failbit); }
++ int bad() { return _state & ios::badbit; }
++ int rdstate() { return _state; }
++ void set(int flag) { _state |= flag; }
++ operator void*() { return fail() ? (void*)0 : (void*)this; }
++ int operator!() { return fail(); }
++
++
++ void unset(state_value flag) { _state &= ~flag; }
++ void close();
++ int is_open();
++ int readable();
++ int writable();
++
++
++ protected:
++ ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' ';
++ _flags=ios::skipws; _precision=6; }
++};
++
++
++
++
++typedef ios::seek_dir _seek_dir;
++
++
++// Magic numbers and bits for the _flags field.
++// The magic numbers use the high-order bits of _flags;
++// the remaining bits are abailable for variable flags.
++// Note: The magic numbers must all be negative if stdio
++// emulation is desired.
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++struct __streambuf {
++ // NOTE: If this is changed, also change __FILE in stdio/stdio.h!
++ int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
++ char* _gptr; /* Current get pointer */
++ char* _egptr; /* End of get area. */
++ char* _eback; /* Start of putback+get area. */
++ char* _pbase; /* Start of put area. */
++ char* _pptr; /* Current put pointer. */
++ char* _epptr; /* End of put area. */
++ char* _base; /* Start of reserve area. */
++ char* _ebuf; /* End of reserve area. */
++ struct streambuf *_chain;
++};
++
++struct streambuf : private __streambuf {
++ friend class ios;
++ friend class istream;
++ friend class ostream;
++ protected:
++ static streambuf* _list_all; /* List of open streambufs. */
++ streambuf*& xchain() { return _chain; }
++ void _un_link();
++ void _link_in();
++ char* gptr() const { return _gptr; }
++ char* pptr() const { return _pptr; }
++ char* egptr() const { return _egptr; }
++ char* epptr() const { return _epptr; }
++ char* pbase() const { return _pbase; }
++ char* eback() const { return _eback; }
++ char* ebuf() const { return _ebuf; }
++ char* base() const { return _base; }
++ void xput_char(char c) { *_pptr++ = c; }
++ int xflags() { return _flags; }
++ int xflags(int f) { int fl = _flags; _flags = f; return fl; }
++ void xsetflags(int f) { _flags |= f; }
++ void gbump(int n) { _gptr += n; }
++ void pbump(int n) { _pptr += n; }
++ void setb(char* b, char* eb, int a=0);
++ void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; }
++ void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; }
++ public:
++ static int flush_all();
++ static void flush_all_linebuffered(); // Flush all line buffered files.
++ virtual int underflow(); // Leave public for now
++ virtual int overflow(int c = (-1) ); // Leave public for now
++ virtual int doallocate();
++ virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
++ virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
++ int sputbackc(char c);
++ int sungetc();
++ streambuf();
++ virtual ~streambuf();
++ int unbuffered() { return _flags & 2 ? 1 : 0; }
++ int linebuffered() { return _flags & 0x4000 ? 1 : 0; }
++ void unbuffered(int i)
++ { if (i) _flags |= 2 ; else _flags &= ~2 ; }
++ void linebuffered(int i)
++ { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; }
++ int allocate() {
++ if (base() || unbuffered()) return 0;
++ else return doallocate(); }
++ virtual int sync();
++ virtual int pbackfail(int c);
++ virtual int ungetfail();
++ virtual streambuf* setbuf(char* p, int len);
++ int in_avail() { return _egptr - _gptr; }
++ int out_waiting() { return _pptr - _pbase; }
++ virtual int sputn(const char* s, int n);
++ virtual int sgetn(char* s, int n);
++ long sgetline(char* buf, size_t n, char delim, int putback_delim);
++ int sbumpc() {
++ if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
++ else return *(unsigned char*)_gptr++; }
++ int sgetc() {
++ if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
++ else return *(unsigned char*)_gptr; }
++ int snextc() {
++ if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
++ else return *(unsigned char*)_gptr; }
++ int sputc(int c) {
++ if (_pptr >= _epptr) return overflow(c);
++ return *_pptr++ = c, (unsigned char)c; }
++ int vscan(char const *fmt0, char* ap);
++ int vform(char const *fmt0, char* ap);
++};
++
++struct __file_fields {
++ char _fake;
++ char _shortbuf[1];
++ short _fileno;
++ int _blksize;
++ char* _save_gptr;
++ char* _save_egptr;
++ long _offset;
++};
++
++class filebuf : public streambuf {
++ struct __file_fields _fb;
++ void init();
++ public:
++ filebuf();
++ filebuf(int fd);
++ filebuf(int fd, char* p, int len);
++ ~filebuf();
++ filebuf* attach(int fd);
++ filebuf* open(const char *filename, const char *mode);
++ filebuf* open(const char *filename, int mode, int prot = 0664);
++ virtual int underflow();
++ virtual int overflow(int c = (-1) );
++ int is_open() { return _fb._fileno >= 0; }
++ int fd() { return is_open() ? _fb._fileno : (-1) ; }
++ filebuf* close();
++ virtual int doallocate();
++ virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
++ int sputn(const char* s, int n);
++ int sgetn(char* s, int n);
++ protected: // See documentation in filebuf.C.
++ virtual int pbackfail(int c);
++ virtual int sync();
++ int is_reading() { return eback() != egptr(); }
++ char* cur_ptr() { return is_reading() ? gptr() : pptr(); }
++ /* System's idea of pointer */
++ char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); }
++ int do_flush();
++ // Low-level operations (Usually invoke system calls.)
++ virtual int sys_read(char* buf, size_t size);
++ virtual long sys_seek(long , _seek_dir);
++ virtual long sys_write(const void*, long);
++ virtual int sys_stat(void*); // Actually, a (struct stat*)
++ virtual int sys_close();
++};
++
++
++inline int ios::readable() { return rdbuf()->_flags & 4 ; }
++inline int ios::writable() { return rdbuf()->_flags & 8 ; }
++inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;}
++
++
++
++
++//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 2
++
++
++class istream; class ostream;
++typedef istream& (*__imanip)(istream&);
++typedef ostream& (*__omanip)(ostream&);
++
++extern istream& ws(istream& ins);
++extern ostream& flush(ostream& outs);
++extern ostream& endl(ostream& outs);
++extern ostream& ends(ostream& outs);
++
++class ostream : public ios
++{
++ void do_osfx();
++ public:
++ ostream();
++ ostream(streambuf* sb, ostream* tied=(__null) );
++ ~ostream();
++
++ int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; }
++ void osfx() { if (flags() & (ios::unitbuf|ios::stdio))
++ do_osfx(); }
++ streambuf* ostreambuf() const { return _strbuf; }
++ ostream& flush();
++ ostream& put(char c);
++ ostream& write(const char *s, int n);
++ ostream& write(const unsigned char *s, int n) { return write((char*)s, n);}
++ ostream& write(const void *s, int n) { return write((char*)s, n);}
++ ostream& seekp(streampos);
++ ostream& seekp(streamoff, _seek_dir);
++ streampos tellp();
++ ostream& form(const char *format ...);
++ ostream& vform(const char *format, char* args);
++};
++
++ostream& operator<<(ostream&, char c);
++ostream& operator<<(ostream& os, unsigned char c) { return os << (char)c; }
++//ostream& operator<<(ostream &os, signed char c) { return os << (char)c; }
++extern ostream& operator<<(ostream&, const char *s);
++inline ostream& operator<<(ostream& os, const unsigned char *s)
++{ return os << (const char*)s; }
++//inline ostream& operator<<(ostream& os, const signed char *s)
++//{ return os << (const char*)s; }
++ostream& operator<<(ostream&, void *p);
++ostream& operator<<(ostream&, int n);
++ostream& operator<<(ostream&, long n);
++ostream& operator<<(ostream&, unsigned int n);
++ostream& operator<<(ostream&, unsigned long n);
++ostream& operator<<(ostream& os, short n) {return os << (int)n;}
++ostream& operator<<(ostream& os, unsigned short n)
++{return os << (unsigned int)n;}
++ostream& operator<<(ostream&, float n);
++ostream& operator<<(ostream&, double n);
++ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); }
++ostream& operator<<(ostream&, streambuf*);
++
++class istream : public ios
++{
++ size_t _gcount;
++ public:
++ istream();
++ istream(streambuf* sb, ostream*tied=(__null) );
++ ~istream();
++ streambuf* istreambuf() const { return _strbuf; }
++ istream& get(char& c);
++ istream& get(unsigned char& c);
++ istream& read(char *ptr, int n);
++ istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); }
++ istream& read(void *ptr, int n) { return read((char*)ptr, n); }
++ int get() { return _strbuf->sbumpc(); }
++ istream& getline(char* ptr, int len, char delim = '\n');
++ istream& get(char* ptr, int len, char delim = '\n');
++ istream& gets(char **s, char delim = '\n');
++ int ipfx(int need) {
++ if (!good()) { set(ios::failbit); return 0; }
++ if (_tie && (need == 0 || rdbuf()->in_avail())) ; //??? THIS LINE IS QUESTIONABLE */
++ if (!need && (flags() & ios::skipws) && !ws(*this)) return 0;
++ return 1;
++ }
++ int ipfx0() { // Optimized version of ipfx(0).
++ if (!good()) { set(ios::failbit); return 0; }
++ if (_tie) _tie->flush();
++ if ((flags() & ios::skipws) && !ws(*this)) return 0;
++ return 1;
++ }
++ int ipfx1() { // Optimized version of ipfx(1).
++ if (!good()) { set(ios::failbit); return 0; }
++ if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
++ return 1;
++ }
++ size_t gcount() { return _gcount; }
++ istream& seekg(streampos);
++ istream& seekg(streamoff, _seek_dir);
++ streampos tellg();
++ istream& putback(char ch) {
++ if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit);
++ return *this;}
++ istream& unget() {
++ if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit);
++ return *this;}
++
++ istream& unget(char ch) { return putback(ch); }
++ int skip(int i);
++
++};
++
++istream& operator>>(istream&, char*);
++istream& operator>>(istream& is, unsigned char* p) { return is >> (char*)p; }
++//istream& operator>>(istream& is, signed char* p) { return is >> (char*)p; }
++istream& operator>>(istream&, char& c);
++istream& operator>>(istream&, unsigned char& c);
++//istream& operator>>(istream&, signed char& c);
++istream& operator>>(istream&, int&);
++istream& operator>>(istream&, long&);
++istream& operator>>(istream&, short&);
++istream& operator>>(istream&, unsigned int&);
++istream& operator>>(istream&, unsigned long&);
++istream& operator>>(istream&, unsigned short&);
++istream& operator>>(istream&, float&);
++istream& operator>>(istream&, double&);
++istream& operator>>(istream& is, __imanip func) { return (*func)(is); }
++
++class iostream : public ios {
++ size_t _gcount;
++ public:
++ iostream();
++ operator istream&() { return *(istream*)this; }
++ operator ostream&() { return *(ostream*)this; }
++ ~iostream();
++ // NOTE: These duplicate istream methods.
++ istream& get(char& c) { return ((istream*)this)->get(c); }
++ istream& get(unsigned char& c) { return ((istream*)this)->get(c); }
++ istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); }
++ istream& read(unsigned char *ptr, int n)
++ { return ((istream*)this)->read((char*)ptr, n); }
++ istream& read(void *ptr, int n)
++ { return ((istream*)this)->read((char*)ptr, n); }
++ int get() { return _strbuf->sbumpc(); }
++ istream& getline(char* ptr, int len, char delim = '\n')
++ { return ((istream*)this)->getline(ptr, len, delim); }
++ istream& get(char* ptr, int len, char delim = '\n')
++ { return ((istream*)this)->get(ptr, len, delim); }
++ istream& gets(char **s, char delim = '\n')
++ { return ((istream*)this)->gets(s, delim); }
++ int ipfx(int need) { return ((istream*)this)->ipfx(need); }
++ int ipfx0() { return ((istream*)this)->ipfx0(); }
++ int ipfx1() { return ((istream*)this)->ipfx1(); }
++ size_t gcount() { return _gcount; }
++ istream& putback(char ch) { return ((istream*)this)->putback(ch); }
++ istream& unget() { return ((istream*)this)->unget(); }
++ istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); }
++ istream& seekg(streamoff off, _seek_dir dir)
++ { return ((istream*)this)->seekg(off, dir); }
++ streampos tellg() { return ((istream*)this)->tellg(); }
++
++ istream& unget(char ch) { return putback(ch); }
++
++
++ // NOTE: These duplicate ostream methods.
++ int opfx() { return ((ostream*)this)->opfx(); }
++ void osfx() { ((ostream*)this)->osfx(); }
++ ostream& flush() { return ((ostream*)this)->flush(); }
++ ostream& put(char c) { return ((ostream*)this)->put(c); }
++ ostream& write(const char *s, int n)
++ { return ((ostream*)this)->write(s, n); }
++ ostream& write(const unsigned char *s, int n)
++ { return ((ostream*)this)->write((char*)s, n); }
++ ostream& write(const void *s, int n)
++ { return ((ostream*)this)->write((char*)s, n); }
++ ostream& form(const char *format ...);
++ ostream& vform(const char *format, char* args)
++ { return ((ostream*)this)->vform(format, args); }
++ ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); }
++ ostream& seekp(streamoff off, _seek_dir dir)
++ { return ((ostream*)this)->seekp(off, dir); }
++ streampos tellp() { return ((ostream*)this)->tellp(); }
++};
++
++extern istream cin;
++extern ostream cout, cerr, clog; // clog->rdbuf() == cerr->rdbuf()
++
++inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; }
++
++struct Iostream_init { } ; // Compatibility hack for AT&T libraray.
++
++
++//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 2
++
++
++extern char* form(char*, ...);
++
++extern char* dec(long, int=0);
++extern char* dec(int, int=0);
++extern char* dec(unsigned long, int=0);
++extern char* dec(unsigned int, int=0);
++
++extern char* hex(long, int=0);
++extern char* hex(int, int=0);
++extern char* hex(unsigned long, int=0);
++extern char* hex(unsigned int, int=0);
++
++extern char* oct(long, int=0);
++extern char* oct(int, int=0);
++extern char* oct(unsigned long, int=0);
++extern char* oct(unsigned int, int=0);
++
++inline istream& WS(istream& str) { return ws(str); }
++
++
++//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Regex.h" 1
++// This may look like C code, but it is really -*- C++ -*-
++/*
++Copyright (C) 1988 Free Software Foundation
++ written by Doug Lea (dl@rocky.oswego.edu)
++
++This file is part of the GNU C++ Library. This library is free
++software; you can redistribute it and/or modify it under the terms of
++the GNU Library General Public License as published by the Free
++Software Foundation; either version 2 of the License, or (at your
++option) any later version. This library is distributed in the hope
++that it will be useful, but WITHOUT ANY WARRANTY; without even the
++implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
++PURPOSE. See the GNU Library General Public License for more details.
++You should have received a copy of the GNU Library General Public
++License along with this library; if not, write to the Free Software
++Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++
++
++
++//#pragma interface
++
++
++
++
++
++
++
++
++
++struct re_pattern_buffer; // defined elsewhere
++struct re_registers;
++
++class Regex
++{
++private:
++
++ Regex(const Regex&) {} // no X(X&)
++ void operator = (const Regex&) {} // no assignment
++
++protected:
++ re_pattern_buffer* buf;
++ re_registers* reg;
++
++public:
++ Regex(const char* t,
++ int fast = 0,
++ int bufsize = 40,
++ const char* transtable = 0);
++
++ ~Regex();
++
++ int match(const char* s, int len, int pos = 0) const;
++ int search(const char* s, int len,
++ int& matchlen, int startpos = 0) const;
++ int match_info(int& start, int& length, int nth = 0) const;
++
++ int OK() const; // representation invariant
++};
++
++// some built in regular expressions
++
++extern const Regex RXwhite; // = "[ \n\t\r\v\f]+"
++extern const Regex RXint; // = "-?[0-9]+"
++extern const Regex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\|
++ // \\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\)
++ // \\([eE][---+]?[0-9]+\\)?"
++extern const Regex RXalpha; // = "[A-Za-z]+"
++extern const Regex RXlowercase; // = "[a-z]+"
++extern const Regex RXuppercase; // = "[A-Z]+"
++extern const Regex RXalphanum; // = "[0-9A-Za-z]+"
++extern const Regex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*"
++
++
++
++//# 27 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2
++
++
++struct StrRep // internal String representations
++{
++ unsigned short len; // string length
++ unsigned short sz; // allocated space
++ char s[1]; // the string starts here
++ // (at least 1 char for trailing null)
++ // allocated & expanded via non-public fcts
++};
++
++// primitive ops on StrReps -- nearly all String fns go through these.
++
++StrRep* Salloc(StrRep*, const char*, int, int);
++StrRep* Scopy(StrRep*, StrRep*);
++StrRep* Sresize(StrRep*, int);
++StrRep* Scat(StrRep*, const char*, int, const char*, int);
++StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int);
++StrRep* Sprepend(StrRep*, const char*, int);
++StrRep* Sreverse(StrRep*, StrRep*);
++StrRep* Supcase(StrRep*, StrRep*);
++StrRep* Sdowncase(StrRep*, StrRep*);
++StrRep* Scapitalize(StrRep*, StrRep*);
++
++// These classes need to be defined in the order given
++
++class String;
++class SubString;
++
++class SubString
++{
++ friend class String;
++protected:
++
++ String& S; // The String I'm a substring of
++ unsigned short pos; // starting position in S's rep
++ unsigned short len; // length of substring
++
++ void assign(StrRep*, const char*, int = -1);
++ SubString(String& x, int p, int l);
++ SubString(const SubString& x);
++
++public:
++
++// Note there are no public constructors. SubStrings are always
++// created via String operations
++
++ ~SubString();
++
++ void operator = (const String& y);
++ void operator = (const SubString& y);
++ void operator = (const char* t);
++ void operator = (char c);
++
++// return 1 if target appears anywhere in SubString; else 0
++
++ int contains(char c) const;
++ int contains(const String& y) const;
++ int contains(const SubString& y) const;
++ int contains(const char* t) const;
++ int contains(const Regex& r) const;
++
++// return 1 if target matches entire SubString
++
++ int matches(const Regex& r) const;
++
++// IO
++
++ friend ostream& operator<<(ostream& s, const SubString& x);
++
++// status
++
++ unsigned int length() const;
++ int empty() const;
++ const char* chars() const;
++
++ int OK() const;
++
++};
++
++
++class String
++{
++ friend class SubString;
++
++protected:
++ StrRep* rep; // Strings are pointers to their representations
++
++// some helper functions
++
++ int search(int, int, const char*, int = -1) const;
++ int search(int, int, char) const;
++ int match(int, int, int, const char*, int = -1) const;
++ int _gsub(const char*, int, const char* ,int);
++ int _gsub(const Regex&, const char*, int);
++ SubString _substr(int, int);
++
++public:
++
++// constructors & assignment
++
++ String();
++ String(const String& x);
++ String(const SubString& x);
++ String(const char* t);
++ String(const char* t, int len);
++ String(char c);
++
++ ~String();
++
++ void operator = (const String& y);
++ void operator = (const char* y);
++ void operator = (char c);
++ void operator = (const SubString& y);
++
++// concatenation
++
++ void operator += (const String& y);
++ void operator += (const SubString& y);
++ void operator += (const char* t);
++ void operator += (char c);
++
++ void prepend(const String& y);
++ void prepend(const SubString& y);
++ void prepend(const char* t);
++ void prepend(char c);
++
++
++// procedural versions:
++// concatenate first 2 args, store result in last arg
++
++ friend void cat(const String&, const String&, String&);
++ friend void cat(const String&, const SubString&, String&);
++ friend void cat(const String&, const char*, String&);
++ friend void cat(const String&, char, String&);
++
++ friend void cat(const SubString&, const String&, String&);
++ friend void cat(const SubString&, const SubString&, String&);
++ friend void cat(const SubString&, const char*, String&);
++ friend void cat(const SubString&, char, String&);
++
++ friend void cat(const char*, const String&, String&);
++ friend void cat(const char*, const SubString&, String&);
++ friend void cat(const char*, const char*, String&);
++ friend void cat(const char*, char, String&);
++
++// double concatenation, by request. (yes, there are too many versions,
++// but if one is supported, then the others should be too...)
++// Concatenate first 3 args, store in last arg
++
++ friend void cat(const String&,const String&, const String&,String&);
++ friend void cat(const String&,const String&,const SubString&,String&);
++ friend void cat(const String&,const String&, const char*, String&);
++ friend void cat(const String&,const String&, char, String&);
++ friend void cat(const String&,const SubString&,const String&,String&);
++ friend void cat(const String&,const SubString&,const SubString&,String&);
++ friend void cat(const String&,const SubString&, const char*, String&);
++ friend void cat(const String&,const SubString&, char, String&);
++ friend void cat(const String&,const char*, const String&, String&);
++ friend void cat(const String&,const char*, const SubString&, String&);
++ friend void cat(const String&,const char*, const char*, String&);
++ friend void cat(const String&,const char*, char, String&);
++
++ friend void cat(const char*, const String&, const String&,String&);
++ friend void cat(const char*,const String&,const SubString&,String&);
++ friend void cat(const char*,const String&, const char*, String&);
++ friend void cat(const char*,const String&, char, String&);
++ friend void cat(const char*,const SubString&,const String&,String&);
++ friend void cat(const char*,const SubString&,const SubString&,String&);
++ friend void cat(const char*,const SubString&, const char*, String&);
++ friend void cat(const char*,const SubString&, char, String&);
++ friend void cat(const char*,const char*, const String&, String&);
++ friend void cat(const char*,const char*, const SubString&, String&);
++ friend void cat(const char*,const char*, const char*, String&);
++ friend void cat(const char*,const char*, char, String&);
++
++
++// searching & matching
++
++// return position of target in string or -1 for failure
++
++ int index(char c, int startpos = 0) const;
++ int index(const String& y, int startpos = 0) const;
++ int index(const SubString& y, int startpos = 0) const;
++ int index(const char* t, int startpos = 0) const;
++ int index(const Regex& r, int startpos = 0) const;
++
++// return 1 if target appears anyhere in String; else 0
++
++ int contains(char c) const;
++ int contains(const String& y) const;
++ int contains(const SubString& y) const;
++ int contains(const char* t) const;
++ int contains(const Regex& r) const;
++
++// return 1 if target appears anywhere after position pos
++// (or before, if pos is negative) in String; else 0
++
++ int contains(char c, int pos) const;
++ int contains(const String& y, int pos) const;
++ int contains(const SubString& y, int pos) const;
++ int contains(const char* t, int pos) const;
++ int contains(const Regex& r, int pos) const;
++
++// return 1 if target appears at position pos in String; else 0
++
++ int matches(char c, int pos = 0) const;
++ int matches(const String& y, int pos = 0) const;
++ int matches(const SubString& y, int pos = 0) const;
++ int matches(const char* t, int pos = 0) const;
++ int matches(const Regex& r, int pos = 0) const;
++
++// return number of occurences of target in String
++
++ int freq(char c) const;
++ int freq(const String& y) const;
++ int freq(const SubString& y) const;
++ int freq(const char* t) const;
++
++// SubString extraction
++
++// Note that you can't take a substring of a const String, since
++// this leaves open the possiblility of indirectly modifying the
++// String through the SubString
++
++ SubString at(int pos, int len);
++ SubString operator () (int pos, int len); // synonym for at
++
++ SubString at(const String& x, int startpos = 0);
++ SubString at(const SubString& x, int startpos = 0);
++ SubString at(const char* t, int startpos = 0);
++ SubString at(char c, int startpos = 0);
++ SubString at(const Regex& r, int startpos = 0);
++
++ SubString before(int pos);
++ SubString before(const String& x, int startpos = 0);
++ SubString before(const SubString& x, int startpos = 0);
++ SubString before(const char* t, int startpos = 0);
++ SubString before(char c, int startpos = 0);
++ SubString before(const Regex& r, int startpos = 0);
++
++ SubString through(int pos);
++ SubString through(const String& x, int startpos = 0);
++ SubString through(const SubString& x, int startpos = 0);
++ SubString through(const char* t, int startpos = 0);
++ SubString through(char c, int startpos = 0);
++ SubString through(const Regex& r, int startpos = 0);
++
++ SubString from(int pos);
++ SubString from(const String& x, int startpos = 0);
++ SubString from(const SubString& x, int startpos = 0);
++ SubString from(const char* t, int startpos = 0);
++ SubString from(char c, int startpos = 0);
++ SubString from(const Regex& r, int startpos = 0);
++
++ SubString after(int pos);
++ SubString after(const String& x, int startpos = 0);
++ SubString after(const SubString& x, int startpos = 0);
++ SubString after(const char* t, int startpos = 0);
++ SubString after(char c, int startpos = 0);
++ SubString after(const Regex& r, int startpos = 0);
++
++
++// deletion
++
++// delete len chars starting at pos
++ void del(int pos, int len);
++
++// delete the first occurrence of target after startpos
++
++ void del(const String& y, int startpos = 0);
++ void del(const SubString& y, int startpos = 0);
++ void del(const char* t, int startpos = 0);
++ void del(char c, int startpos = 0);
++ void del(const Regex& r, int startpos = 0);
++
++// global substitution: substitute all occurrences of pat with repl
++
++ int gsub(const String& pat, const String& repl);
++ int gsub(const SubString& pat, const String& repl);
++ int gsub(const char* pat, const String& repl);
++ int gsub(const char* pat, const char* repl);
++ int gsub(const Regex& pat, const String& repl);
++
++// friends & utilities
++
++// split string into array res at separators; return number of elements
++
++ friend int split(const String& x, String res[], int maxn,
++ const String& sep);
++ friend int split(const String& x, String res[], int maxn,
++ const Regex& sep);
++
++ friend String common_prefix(const String& x, const String& y,
++ int startpos = 0);
++ friend String common_suffix(const String& x, const String& y,
++ int startpos = -1);
++ friend String replicate(char c, int n);
++ friend String replicate(const String& y, int n);
++ friend String join(String src[], int n, const String& sep);
++
++// simple builtin transformations
++
++ friend String reverse(const String& x);
++ friend String upcase(const String& x);
++ friend String downcase(const String& x);
++ friend String capitalize(const String& x);
++
++// in-place versions of above
++
++ void reverse();
++ void upcase();
++ void downcase();
++ void capitalize();
++
++// element extraction
++
++ char& operator [] (int i);
++ char elem(int i) const;
++ char firstchar() const;
++ char lastchar() const;
++
++// conversion
++
++ operator const char*() const;
++ const char* chars() const;
++
++
++// IO
++
++ friend ostream& operator<<(ostream& s, const String& x);
++ friend ostream& operator<<(ostream& s, const SubString& x);
++ friend istream& operator>>(istream& s, String& x);
++
++ friend int readline(istream& s, String& x,
++ char terminator = '\n',
++ int discard_terminator = 1);
++
++// status
++
++ unsigned int length() const;
++ int empty() const;
++
++// preallocate some space for String
++ void alloc(int newsize);
++
++// report current allocation (not length!)
++
++ int allocation() const;
++
++
++ volatile void error(const char* msg) const;
++
++ int OK() const;
++};
++
++typedef String StrTmp; // for backward compatibility
++
++// other externs
++
++int compare(const String& x, const String& y);
++int compare(const String& x, const SubString& y);
++int compare(const String& x, const char* y);
++int compare(const SubString& x, const String& y);
++int compare(const SubString& x, const SubString& y);
++int compare(const SubString& x, const char* y);
++int fcompare(const String& x, const String& y); // ignore case
++
++extern StrRep _nilStrRep;
++extern String _nilString;
++
++// other inlines
++
++String operator + (const String& x, const String& y);
++String operator + (const String& x, const SubString& y);
++String operator + (const String& x, const char* y);
++String operator + (const String& x, char y);
++String operator + (const SubString& x, const String& y);
++String operator + (const SubString& x, const SubString& y);
++String operator + (const SubString& x, const char* y);
++String operator + (const SubString& x, char y);
++String operator + (const char* x, const String& y);
++String operator + (const char* x, const SubString& y);
++
++int operator==(const String& x, const String& y);
++int operator!=(const String& x, const String& y);
++int operator> (const String& x, const String& y);
++int operator>=(const String& x, const String& y);
++int operator< (const String& x, const String& y);
++int operator<=(const String& x, const String& y);
++int operator==(const String& x, const SubString& y);
++int operator!=(const String& x, const SubString& y);
++int operator> (const String& x, const SubString& y);
++int operator>=(const String& x, const SubString& y);
++int operator< (const String& x, const SubString& y);
++int operator<=(const String& x, const SubString& y);
++int operator==(const String& x, const char* t);
++int operator!=(const String& x, const char* t);
++int operator> (const String& x, const char* t);
++int operator>=(const String& x, const char* t);
++int operator< (const String& x, const char* t);
++int operator<=(const String& x, const char* t);
++int operator==(const SubString& x, const String& y);
++int operator!=(const SubString& x, const String& y);
++int operator> (const SubString& x, const String& y);
++int operator>=(const SubString& x, const String& y);
++int operator< (const SubString& x, const String& y);
++int operator<=(const SubString& x, const String& y);
++int operator==(const SubString& x, const SubString& y);
++int operator!=(const SubString& x, const SubString& y);
++int operator> (const SubString& x, const SubString& y);
++int operator>=(const SubString& x, const SubString& y);
++int operator< (const SubString& x, const SubString& y);
++int operator<=(const SubString& x, const SubString& y);
++int operator==(const SubString& x, const char* t);
++int operator!=(const SubString& x, const char* t);
++int operator> (const SubString& x, const char* t);
++int operator>=(const SubString& x, const char* t);
++int operator< (const SubString& x, const char* t);
++int operator<=(const SubString& x, const char* t);
++
++
++
++
++// status reports, needed before defining other things
++
++inline unsigned int String::length() const { return rep->len; }
++inline int String::empty() const { return rep->len == 0; }
++inline const char* String::chars() const { return &(rep->s[0]); }
++inline int String::allocation() const { return rep->sz; }
++inline void String::alloc(int newsize) { rep = Sresize(rep, newsize); }
++
++inline unsigned int SubString::length() const { return len; }
++inline int SubString::empty() const { return len == 0; }
++inline const char* SubString::chars() const { return &(S.rep->s[pos]); }
++
++
++// constructors
++
++inline String::String()
++ : rep(&_nilStrRep) {}
++inline String::String(const String& x)
++ : rep(Scopy(0, x.rep)) {}
++inline String::String(const char* t)
++ : rep(Salloc(0, t, -1, -1)) {}
++inline String::String(const char* t, int tlen)
++ : rep(Salloc(0, t, tlen, tlen)) {}
++inline String::String(const SubString& y)
++ : rep(Salloc(0, y.chars(), y.length(), y.length())) {}
++inline String::String(char c)
++ : rep(Salloc(0, &c, 1, 1)) {}
++
++inline String::~String() { if (rep != &_nilStrRep) delete rep; }
++
++inline SubString::SubString(const SubString& x)
++ :S(x.S), pos(x.pos), len(x.len) {}
++inline SubString::SubString(String& x, int first, int l)
++ :S(x), pos(first), len(l) {}
++
++inline SubString::~SubString() {}
++
++// assignment
++
++inline void String::operator = (const String& y)
++{
++ rep = Scopy(rep, y.rep);
++}
++
++inline void String::operator=(const char* t)
++{
++ rep = Salloc(rep, t, -1, -1);
++}
++
++inline void String::operator=(const SubString& y)
++{
++ rep = Salloc(rep, y.chars(), y.length(), y.length());
++}
++
++inline void String::operator=(char c)
++{
++ rep = Salloc(rep, &c, 1, 1);
++}
++
++
++inline void SubString::operator = (const char* ys)
++{
++ assign(0, ys);
++}
++
++inline void SubString::operator = (char ch)
++{
++ assign(0, &ch, 1);
++}
++
++inline void SubString::operator = (const String& y)
++{
++ assign(y.rep, y.chars(), y.length());
++}
++
++inline void SubString::operator = (const SubString& y)
++{
++ assign(y.S.rep, y.chars(), y.length());
++}
++
++// Zillions of cats...
++
++inline void cat(const String& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const String& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const SubString& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const SubString& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const SubString& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const SubString& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const char* x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, y, -1);
++}
++
++inline void cat(const char* x, char y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, &y, 1);
++}
++
++inline void cat(const String& a, const String& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const String& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const String& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const String& a, const String& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const String& a, const SubString& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const SubString& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const SubString& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const String& a, const SubString& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const String& a, const char* x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
++}
++
++inline void cat(const String& a, const char* x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
++}
++
++inline void cat(const String& a, const char* x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y, -1);
++}
++
++inline void cat(const String& a, const char* x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, &y, 1);
++}
++
++
++inline void cat(const char* a, const String& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const String& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const String& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const char* a, const String& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const char* a, const SubString& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const SubString& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const SubString& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const char* a, const SubString& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const char* a, const char* x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* a, const char* x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* a, const char* x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, y, -1);
++}
++
++inline void cat(const char* a, const char* x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, &y, 1);
++}
++
++
++// operator versions
++
++inline void String::operator +=(const String& y)
++{
++ cat(*this, y, *this);
++}
++
++inline void String::operator +=(const SubString& y)
++{
++ cat(*this, y, *this);
++}
++
++inline void String::operator += (const char* y)
++{
++ cat(*this, y, *this);
++}
++
++inline void String:: operator +=(char y)
++{
++ cat(*this, y, *this);
++}
++
++// constructive concatenation
++
++
++
++inline String operator + (const String& x, const String& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const String& x, const SubString& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const String& x, const char* y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const String& x, char y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, const String& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, const SubString& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, const char* y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, char y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const char* x, const String& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const char* x, const SubString& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String reverse(const String& x) return r;
++{
++ r.rep = Sreverse(x.rep, r.rep);
++}
++
++inline String upcase(const String& x) return r;
++{
++ r.rep = Supcase(x.rep, r.rep);
++}
++
++inline String downcase(const String& x) return r;
++{
++ r.rep = Sdowncase(x.rep, r.rep);
++}
++
++inline String capitalize(const String& x) return r;
++{
++ r.rep = Scapitalize(x.rep, r.rep);
++}
++
++//# 883 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h"
++
++
++// prepend
++
++inline void String::prepend(const String& y)
++{
++ rep = Sprepend(rep, y.chars(), y.length());
++}
++
++inline void String::prepend(const char* y)
++{
++ rep = Sprepend(rep, y, -1);
++}
++
++inline void String::prepend(char y)
++{
++ rep = Sprepend(rep, &y, 1);
++}
++
++inline void String::prepend(const SubString& y)
++{
++ rep = Sprepend(rep, y.chars(), y.length());
++}
++
++// misc transformations
++
++
++inline void String::reverse()
++{
++ rep = Sreverse(rep, rep);
++}
++
++
++inline void String::upcase()
++{
++ rep = Supcase(rep, rep);
++}
++
++
++inline void String::downcase()
++{
++ rep = Sdowncase(rep, rep);
++}
++
++
++inline void String::capitalize()
++{
++ rep = Scapitalize(rep, rep);
++}
++
++// element extraction
++
++inline char& String::operator [] (int i)
++{
++ if (((unsigned)i) >= length()) error("invalid index");
++ return rep->s[i];
++}
++
++inline char String::elem (int i) const
++{
++ if (((unsigned)i) >= length()) error("invalid index");
++ return rep->s[i];
++}
++
++inline char String::firstchar() const
++{
++ return elem(0);
++}
++
++inline char String::lastchar() const
++{
++ return elem(length() - 1);
++}
++
++// searching
++
++inline int String::index(char c, int startpos) const
++{
++ return search(startpos, length(), c);
++}
++
++inline int String::index(const char* t, int startpos) const
++{
++ return search(startpos, length(), t);
++}
++
++inline int String::index(const String& y, int startpos) const
++{
++ return search(startpos, length(), y.chars(), y.length());
++}
++
++inline int String::index(const SubString& y, int startpos) const
++{
++ return search(startpos, length(), y.chars(), y.length());
++}
++
++inline int String::index(const Regex& r, int startpos) const
++{
++ int unused; return r.search(chars(), length(), unused, startpos);
++}
++
++inline int String::contains(char c) const
++{
++ return search(0, length(), c) >= 0;
++}
++
++inline int String::contains(const char* t) const
++{
++ return search(0, length(), t) >= 0;
++}
++
++inline int String::contains(const String& y) const
++{
++ return search(0, length(), y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(const SubString& y) const
++{
++ return search(0, length(), y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(char c, int p) const
++{
++ return match(p, length(), 0, &c, 1) >= 0;
++}
++
++inline int String::contains(const char* t, int p) const
++{
++ return match(p, length(), 0, t) >= 0;
++}
++
++inline int String::contains(const String& y, int p) const
++{
++ return match(p, length(), 0, y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(const SubString& y, int p) const
++{
++ return match(p, length(), 0, y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(const Regex& r) const
++{
++ int unused; return r.search(chars(), length(), unused, 0) >= 0;
++}
++
++inline int String::contains(const Regex& r, int p) const
++{
++ return r.match(chars(), length(), p) >= 0;
++}
++
++
++inline int String::matches(const SubString& y, int p) const
++{
++ return match(p, length(), 1, y.chars(), y.length()) >= 0;
++}
++
++inline int String::matches(const String& y, int p) const
++{
++ return match(p, length(), 1, y.chars(), y.length()) >= 0;
++}
++
++inline int String::matches(const char* t, int p) const
++{
++ return match(p, length(), 1, t) >= 0;
++}
++
++inline int String::matches(char c, int p) const
++{
++ return match(p, length(), 1, &c, 1) >= 0;
++}
++
++inline int String::matches(const Regex& r, int p) const
++{
++ int l = (p < 0)? -p : length() - p;
++ return r.match(chars(), length(), p) == l;
++}
++
++
++inline int SubString::contains(const char* t) const
++{
++ return S.search(pos, pos+len, t) >= 0;
++}
++
++inline int SubString::contains(const String& y) const
++{
++ return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
++}
++
++inline int SubString::contains(const SubString& y) const
++{
++ return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
++}
++
++inline int SubString::contains(char c) const
++{
++ return S.search(pos, pos+len, 0, c) >= 0;
++}
++
++inline int SubString::contains(const Regex& r) const
++{
++ int unused; return r.search(chars(), len, unused, 0) >= 0;
++}
++
++inline int SubString::matches(const Regex& r) const
++{
++ return r.match(chars(), len, 0) == len;
++}
++
++
++inline int String::gsub(const String& pat, const String& r)
++{
++ return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
++}
++
++inline int String::gsub(const SubString& pat, const String& r)
++{
++ return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
++}
++
++inline int String::gsub(const Regex& pat, const String& r)
++{
++ return _gsub(pat, r.chars(), r.length());
++}
++
++inline int String::gsub(const char* pat, const String& r)
++{
++ return _gsub(pat, -1, r.chars(), r.length());
++}
++
++inline int String::gsub(const char* pat, const char* r)
++{
++ return _gsub(pat, -1, r, -1);
++}
++
++
++
++inline ostream& operator<<(ostream& s, const String& x)
++{
++ s << x.chars(); return s;
++}
++
++// a zillion comparison operators
++
++inline int operator==(const String& x, const String& y)
++{
++ return compare(x, y) == 0;
++}
++
++inline int operator!=(const String& x, const String& y)
++{
++ return compare(x, y) != 0;
++}
++
++inline int operator>(const String& x, const String& y)
++{
++ return compare(x, y) > 0;
++}
++
++inline int operator>=(const String& x, const String& y)
++{
++ return compare(x, y) >= 0;
++}
++
++inline int operator<(const String& x, const String& y)
++{
++ return compare(x, y) < 0;
++}
++
++inline int operator<=(const String& x, const String& y)
++{
++ return compare(x, y) <= 0;
++}
++
++inline int operator==(const String& x, const SubString& y)
++{
++ return compare(x, y) == 0;
++}
++
++inline int operator!=(const String& x, const SubString& y)
++{
++ return compare(x, y) != 0;
++}
++
++inline int operator>(const String& x, const SubString& y)
++{
++ return compare(x, y) > 0;
++}
++
++inline int operator>=(const String& x, const SubString& y)
++{
++ return compare(x, y) >= 0;
++}
++
++inline int operator<(const String& x, const SubString& y)
++{
++ return compare(x, y) < 0;
++}
++
++inline int operator<=(const String& x, const SubString& y)
++{
++ return compare(x, y) <= 0;
++}
++
++inline int operator==(const String& x, const char* t)
++{
++ return compare(x, t) == 0;
++}
++
++inline int operator!=(const String& x, const char* t)
++{
++ return compare(x, t) != 0;
++}
++
++inline int operator>(const String& x, const char* t)
++{
++ return compare(x, t) > 0;
++}
++
++inline int operator>=(const String& x, const char* t)
++{
++ return compare(x, t) >= 0;
++}
++
++inline int operator<(const String& x, const char* t)
++{
++ return compare(x, t) < 0;
++}
++
++inline int operator<=(const String& x, const char* t)
++{
++ return compare(x, t) <= 0;
++}
++
++inline int operator==(const SubString& x, const String& y)
++{
++ return compare(y, x) == 0;
++}
++
++inline int operator!=(const SubString& x, const String& y)
++{
++ return compare(y, x) != 0;
++}
++
++inline int operator>(const SubString& x, const String& y)
++{
++ return compare(y, x) < 0;
++}
++
++inline int operator>=(const SubString& x, const String& y)
++{
++ return compare(y, x) <= 0;
++}
++
++inline int operator<(const SubString& x, const String& y)
++{
++ return compare(y, x) > 0;
++}
++
++inline int operator<=(const SubString& x, const String& y)
++{
++ return compare(y, x) >= 0;
++}
++
++inline int operator==(const SubString& x, const SubString& y)
++{
++ return compare(x, y) == 0;
++}
++
++inline int operator!=(const SubString& x, const SubString& y)
++{
++ return compare(x, y) != 0;
++}
++
++inline int operator>(const SubString& x, const SubString& y)
++{
++ return compare(x, y) > 0;
++}
++
++inline int operator>=(const SubString& x, const SubString& y)
++{
++ return compare(x, y) >= 0;
++}
++
++inline int operator<(const SubString& x, const SubString& y)
++{
++ return compare(x, y) < 0;
++}
++
++inline int operator<=(const SubString& x, const SubString& y)
++{
++ return compare(x, y) <= 0;
++}
++
++inline int operator==(const SubString& x, const char* t)
++{
++ return compare(x, t) == 0;
++}
++
++inline int operator!=(const SubString& x, const char* t)
++{
++ return compare(x, t) != 0;
++}
++
++inline int operator>(const SubString& x, const char* t)
++{
++ return compare(x, t) > 0;
++}
++
++inline int operator>=(const SubString& x, const char* t)
++{
++ return compare(x, t) >= 0;
++}
++
++inline int operator<(const SubString& x, const char* t)
++{
++ return compare(x, t) < 0;
++}
++
++inline int operator<=(const SubString& x, const char* t)
++{
++ return compare(x, t) <= 0;
++}
++
++
++// a helper needed by at, before, etc.
++
++inline SubString String::_substr(int first, int l)
++{
++ if (first >= length() ) // ??? THIS LINE IS QUESTIONABLE
++ return SubString(_nilString, 0, 0) ;
++ else
++ return SubString(*this, first, l);
++}
++
++
++
++
++
++//# 26 "../../GctSymbol.h" 2
++
++
++//# 1 "../../../../../../mips/include/Gct/Object/GctHashObject.h" 1
++// -*- C++ -*-
++
++
++
++//
++// GctHashObject class (is abstract)
++//
++// Expects to be included by Object.h or where needed explicitly.
++//
++// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "../../../../../../mips/include/Gct/Object/GctObject.h" 1
++// -*- C++ -*-
++
++
++
++//
++// GctObject class (is abstract)
++//
++// Expects to be included by Object.h or where needed explicitly.
++//
++// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
++// -*- C++ -*-
++
++
++
++//
++// tostrstream class
++//
++// A terminated oststream - an ostsrstream that auto-terminates on str()
++//
++// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 1
++// This is part of the iostream library, providing input/output for C++.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++
++
++
++//#pragma interface
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
++
++//# 23 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 2
++
++
++class strstreambuf : public streambuf {
++ size_t *lenp; /* current (logical) length (i.e. valid data bytes) */
++ size_t *sizep; /* allocated (physical) buffer size */
++ char **bufp;
++ size_t _len;
++ size_t _size;
++ char *buf;
++ int _frozen;
++ protected:
++ virtual int overflow(int = (-1) );
++ public:
++ strstreambuf();
++ strstreambuf(int initial);
++ strstreambuf(char *ptr, int size, char *pstart = (__null) );
++ ~strstreambuf();
++ int frozen() { return _frozen; }
++ void freeze(int n=1) { _frozen = n != 0; }
++ size_t pcount();
++ char *str();
++};
++
++class istrstream : public istream {
++ public:
++ istrstream(char*);
++ istrstream(char*, int);
++ strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; }
++};
++
++class ostrstream : public ostream {
++ public:
++ ostrstream();
++ ostrstream(char *cp, int n, int mode=ios::out);
++ size_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); }
++ char *str() { return ((strstreambuf*)_strbuf)->str(); }
++ void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); }
++ int frozen() { return ((strstreambuf*)_strbuf)->frozen(); }
++ strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; }
++};
++
++
++//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 2
++
++
++//
++// tostrstream class
++//
++// An isteam class that doesn't have that nasty skipws parameter that
++// you have to remember to set. This class simply provides the istream
++// functionality with a set of constructors which defaults skipws to
++// FALSE (instead of defaulting to TRUE as is the case with plain istream).
++//
++class tostrstream: public ostrstream {
++public:
++ tostrstream(): ostrstream()
++ { }
++ // This constructor defines cp as the buffer to use for the
++ // stream (instead of one of its own devising); it does NOT
++ // initialize the ostrstream to contain cp (of length n).
++ tostrstream(char *cp, int n, int mode=ios::out): ostrtream(cp, n, mode) // ERROR -
++ { }
++ char *str()
++ {
++ char *s = ostrstream::str();
++ s[ostrstream::pcount()] = '\0';
++ return s;
++ }
++};
++
++
++//# 25 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
++
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1
++// -*- C++ -*-
++
++
++
++//
++// GttObject class (is abstract)
++//
++// Expects to be included where needed explicitly.
++//
++// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
++// -*- C++ -*-
++//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h"
++
++//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2
++
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 1
++// -*- C++ -*-
++
++
++
++//
++// GttErrorHandler class
++//
++// Expects to be included by Gtt.h
++//
++// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
++
++
++
++
++
++
++
++//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2
++
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1
++// -*- C++ -*-
++
++
++
++//
++// Fake up a libstuff++
++//
++// This is done as a complete and utter hack; this library has no function
++// at all being in the boot area; it is here solely in order to provide a
++// libstuff++ against which the Makefiles can resolve link lines.
++//
++// The only reason that this is done is to allow the STANDARD_C++_LIBRARIES
++// as provided by the Makefile templates in the boot area to be the same
++// ones that are used by the tools outside this hierarchy.
++//
++// The tools outside this hierarchy use a different libstuff++; one that is
++// written in C++. This one is not written in C++ in order to be simpler.
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++extern "C" {
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 1
++
++
++
++/*
++ * Useful stuff
++ */
++
++/*
++ */
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/ansi.h" 1
++
++
++
++
++/*
++ * ANSI Compiler Support
++ *
++ * David Harrison
++ * University of California, Berkeley
++ * 1988
++ *
++ * ANSI compatible compilers are supposed to define the preprocessor
++ * directive __STDC__. Based on this directive, this file defines
++ * certain ANSI specific macros.
++ *
++ * ARGS:
++ * Used in function prototypes. Example:
++ * extern int foo
++ * ARGS((char *blah, double threshold));
++ */
++
++/*
++ *
++ * Modifications
++ * Wendell C Baker
++ * University of California, Berkeley
++ */
++
++/* Function prototypes */
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 15 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2
++
++
++
++/*
++ * If g++, then we stub out part of this thing and let the C++ types take
++ * over and do the same job; some compatibility must be given however
++ */
++
++/*
++ * Use the GNU libg++ definition
++ */
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
++
++
++
++
++
++
++
++//# 26 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2
++
++//# 35 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h"
++
++
++/*
++ * Make various pieces of C code that use the old ``Boolean''
++ * be compatible by faking up the definition of Boolean using
++ * the new bool type.
++ */
++
++
++//# 58 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h"
++
++
++typedef long FitAny; /* can fit any integral type */
++
++/*
++ * typedef char *String; - DO NOT USE THIS - it conflicts with C++
++ * typedef char **Stringv; - just use char* and char** instead.
++ * - void* can be used for arbitrary pointers
++ */
++
++
++
++
++extern int nocase_strcmp (char *, char *) ;
++extern int nocase_strncmp (char *, char *, int) ;
++
++extern bool nocase_strequal (char *, char *) ;
++extern bool nocase_strnequal (char *, char *, int) ;
++
++extern bool lead_strequal (char *, char *) ;
++extern bool nocase_lead_strequal (char *, char *) ;
++
++extern int strhash (char *, int) ;
++extern int nocase_strhash (char *, int) ;
++
++extern int sign (int) ;
++
++/*
++ * Some useful macros.
++ */
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 33 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
++
++}
++
++//
++// This is here because we wish to provide externs for the two
++// functions btoa(bool, unsigned = 0) and operator<<(ostream&, bool)
++// because they are not provided in bool.h.
++//
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
++
++
++
++
++
++
++
++//# 41 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
++
++extern const char *stringify(bool b);
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
++
++//# 43 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
++
++extern ostream& operator<<(ostream&, bool);
++
++// Should this be kept separate? bool isn't, but then is
++// included here only to define ostream& operator<<(ostream&, bool)
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 1
++// -*- C++ -*-
++
++
++
++//
++// unit enum
++//
++// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU)
++//
++
++
++//
++// unit enum
++//
++// This _looks_ silly, but it has an important theoretical basis in category
++// theory. For the pragmatic reason for its existence, see the example below.
++//
++enum unit {
++ UNIT = 1,
++};
++
++extern const char *stringify(unit u);
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
++
++//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 2
++
++extern ostream& operator<<(ostream&, unit);
++
++//
++// A unit is used in cases where the type signature of an overloaded
++// function must be differentiated in some stronger way than can be
++// denoted unambiguously in the C++ syntax. This enum is used to give
++// one of the functions a different type signature, thereby allowing
++// the overloading.
++//
++// The use of ``unit'' instead of int or bool is important because a unit
++// has only one possible value; therefore it adds no more information to
++// the code. For example, say a bool was used instead, then in the testing
++// phase, would have to ask: what if TRUE was given, what if FALSE was given.
++// The problem is compounded if char or int is used.
++//
++// Example:
++//
++// class ID {
++// public:
++// ID(); // construct a null ID
++// ID(unit); // alloc a ID with a new id
++// private:
++// static unsigned high_water;
++// unsigned id;
++// };
++//
++// Try working this example save that ID implements all of the generic
++// features of the identifier object, but the high_water is stored
++// in the heir. That is what originally motivated the creation of unit.
++//
++
++
++//# 48 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
++
++
++//
++// In the spirit of the standard GNU error handler functions
++// as described in
++// typedef void (*one_arg_error_handler_t)(const char*);
++// a one argument error handler function pointer
++// typedef void (*two_arg_error_handler_t)(const char*, const char*);
++// a two argument error handler function pointer
++//
++// And now the NEW
++//
++// typedef void (*zero_arg_error_handler_t)();
++// a zero argument error handler function pointer
++//
++typedef void (*zero_arg_error_handler_t)();
++
++//
++// In the spirit of the default GNU error handler functions
++// as described in
++// extern void default_one_arg_error_handler(const char *message);
++// print out message on stderr, and do the default thing (abort)
++// extern void default_two_arg_error_handler(const char *kind, const char *message);
++// print out kind and message on stderr, and do the default thing (abort)
++//
++// And now the NEW
++//
++// extern void default_zero_arg_error_handler(const char *message);
++// do the default thing (abort)
++//
++extern void default_zero_arg_error_handler();
++
++// Guaranteed to exit (1)
++extern void exit_zero_arg_error_handler();
++extern void exit_one_arg_error_handler(const char *message);
++extern void exit_two_arg_error_handler(const char *kind, const char *message);
++
++// Guaranteed to abort()
++extern void abort_zero_arg_error_handler();
++extern void abort_one_arg_error_handler(const char *message);
++extern void abort_two_arg_error_handler(const char *kind, const char *message);
++
++//
++// In the spirit of the standard GNU error handlers
++// as described in
++// extern void verbose_File_error_handler(const char*);
++// perror and set errno = 0
++// extern void quiet_File_error_handler(const char*);
++// set errno = 0
++// extern void fatal_File_error_handler(const char*);
++// perror and exit 1
++//
++// And now the NEW
++//
++// extern void preserve_File_error_handler(const char *message);
++// no perror, no assignment to errno.
++//
++extern void preserve_File_error_handler(const char *message);
++
++
++//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
++// -*- C++ -*-
++//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h"
++
++//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2
++
++
++//
++// It is expected that this will be virtually multiply inherited
++// into all of the classes that need error reporting services.
++//
++// The typical way to have that done is by inheriting the GttObject
++// as a virtual base class.
++//
++
++//
++// GttErrorHandler class
++//
++class GttErrorHandler {
++public:
++ GttErrorHandler();
++ GttErrorHandler(const char *program);
++ virtual ~GttErrorHandler();
++
++ //
++ // Error messages
++ // - an unacceptable, but expected and recoverable condition
++ // was detected (but the test fails)
++ // - errors are for ``the expected environment was not found''
++ // rather than for ``file couldn't be opened''
++ // - these messages cannot be shut off
++ // - the error handler determines the recovery action
++ // TODO - one day exceptions will be used here
++ //
++ static void error(const char *message);
++ static void error(tostrstream& message);
++
++ static void error(const char *function, const char *message);
++ static void error(const char *function, tostrstream& message);
++
++ static void error(const char *class_name, const char *method, const char *message);
++ static void error(const char *class_name, const char *method, tostrstream& message);
++
++ //
++ // Fatal messages
++ // - an unacceptable and unexpected error was detected
++ // the data invariants were violated, there is no recovery
++ // - these messages cannot be shut off
++ // - the error handler determines the recovery action
++ // TODO - one day exceptions will be used here
++ //
++ static void fatal(const char *message);
++ static void fatal(tostrstream& message);
++
++ static void fatal(const char *function, const char *message);
++ static void fatal(const char *function, tostrstream& message);
++
++ static void fatal(const char *class_name, const char *method, const char *message);
++ static void fatal(const char *class_name, const char *method, tostrstream& message);
++private:
++ //
++ // Two underscores are used here in order to prevent confusion of these
++ // private variables with any of the heir's private variables. Note that
++ // access control is different than visibility in C++, so all the variable
++ // names in a class hierarchy must be unique.
++ //
++
++ static bool __partial_init;
++ static void __partial_initialize();
++ static bool __full_init;
++ static void __full_initialize(const char *program);
++ static char *__program;
++
++ static void __handle_error();
++ static void __handle_fatal();
++ static void __add_newline(const char *message);
++
++ static bool __output_valid();
++ static ostream *__output;
++};
++
++
++//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2
++
++
++//
++// GttObject class (is abstract)
++//
++class GttObject: virtual public GttErrorHandler {
++protected:
++ GttObject();
++ GttObject(const GttObject&);
++ virtual ~GttObject(); // ensure descendants have virtual destructors
++
++public:
++ //
++ // I/O Support
++ //
++ // The value typically persists only long enough for an i/o operation
++ // to be performed (see the defintion of output via operator<<(... ) below)
++ virtual const char *stringify();
++protected:
++ // This is the buffer into which the printed representation of this
++ // object will be put when the time comes. It is associated with the
++ // object so it will never go away (so long as the object exists).
++ // Use a pointer so that you only pay for the space when I/O is used
++ tostrstream *stringbuf;
++ void clear_stringbuf();
++
++public:
++ //
++ // Consistency
++ //
++ // The global data invariant for the whole object (heirs included).
++ // This OK function will call the local invariant function ok() if
++ // necessary and in addition the OK functions of the heirs
++ // This is expected to compute the data invariant of the object.
++ // It will execute GctErrorHandler::fatal if there is wrong.
++ virtual void OK() const;
++
++protected:
++ //
++ // consistency
++ //
++ // This function computes the invariant which is local to this object.
++ // It does not call any of the ancestor's OK() or ok() functions.
++ // It is not a virtual function so that it can be called from within a
++ // constructor with impunity. Thus this function MUST NOT call any
++ // virtual functions either; it should call them by their full name if
++ // that is necessary. The global OK() function will call this function
++ // as necessary.
++ //
++ // This function must NOT NEVER EVER be made virtual.
++ void ok() const;
++
++protected:
++ //
++ // Class Name
++ //
++ // This must return a static (constant) string which is the name
++ // of the class being declared. By convention, not all classes
++ // must have one of these, but the major root abstract class must
++ // have one in order to allow the stringify() to work approximately
++ // correctly.
++ virtual const char *class_name() const = 0;
++};
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
++
++//# 91 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2
++
++extern ostream& operator<<(ostream&, GttObject&);
++
++// There may be other X& operator<<(X&, GttObject&) defined in the
++// packages defining class X. For example see the definition of
++// GttUnitObject& operator<<(GttUnitObject&, GttObject&) in Unit.
++
++
++//# 27 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
++
++
++//# 1 "../../../../../../mips/include/Gct/GctErrorHandler.h" 1
++// -*- C++ -*-
++
++
++
++//
++// GctErrorHandler class
++//
++// Expects to be included by Gct.h
++//
++// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU)
++//
++
++
++
++
++
++//#pragma interface
++
++
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
++
++
++
++
++
++
++
++//# 25 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1
++// This may look like C code, but it is really -*- C++ -*-
++/*
++Copyright (C) 1988 Free Software Foundation
++ written by Doug Lea (dl@rocky.oswego.edu)
++
++This file is part of the GNU C++ Library. This library is free
++software; you can redistribute it and/or modify it under the terms of
++the GNU Library General Public License as published by the Free
++Software Foundation; either version 2 of the License, or (at your
++option) any later version. This library is distributed in the hope
++that it will be useful, but WITHOUT ANY WARRANTY; without even the
++implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
++PURPOSE. See the GNU Library General Public License for more details.
++You should have received a copy of the GNU Library General Public
++License along with this library; if not, write to the Free Software
++Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++
++//# 1321 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h"
++
++//# 26 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
++
++//# 27 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
++
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1
++// -*- C++ -*-
++//# 107 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h"
++
++//# 29 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
++// -*- C++ -*-
++//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h"
++
++//# 30 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
++
++
++//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1
++// -*- C++ -*-
++//# 98 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h"
++
++//# 32 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
++
++
++//
++// It is expected that this will be virtually multiply inherited
++// into all of the classes that need error reporting services.
++//
++// The typical way to have that done is by inheriting the GctObject
++// as a virtual base class.
++//
++
++//
++// GctErrorHandler class
++//
++// GPP_1_96_BUG
++// NOTE - virtual public GttObject should be MI into GctObject - but that
++// causes g++ 1.96 to segfault; so we must inherit GttObject here and use SI
++// GPP_1_96_BUG
++class GctErrorHandler: virtual public GttObject {
++public:
++ GctErrorHandler();
++ GctErrorHandler(const String& program);
++ virtual ~GctErrorHandler();
++
++ //
++ // Debugging messages
++ // - these are turned off for production code.
++ // - these messages can be shut off
++ //
++ static void debug(const char *message);
++ static void debug(tostrstream& message);
++
++ static void debug(const char *function, const char *message);
++ static void debug(const char *function, tostrstream& message);
++
++ static void debug(const char *class_name, const char *method, const char *message);
++ static void debug(const char *class_name, const char *method, tostrstream& message);
++
++ static bool debug(); // current debug switch
++ static void debug(bool value); // change the debug switch
++
++ //
++ // Informational messages
++ // - these correspond to a ``verbose'' mode
++ // - these are not errors, just chatty progress reports
++ // - these messages can be shut off
++ //
++ static void note(const char *message);
++ static void note(tostrstream& message);
++
++ static void note(const char *function, const char *message);
++ static void note(const char *function, tostrstream& message);
++
++ static void note(const char *class_name, const char *method, const char *message);
++ static void note(const char *class_name, const char *method, tostrstream& message);
++
++ static bool note(); // current note switch
++ static void note(bool value); // change the note switch
++
++ //
++ // Warning messages
++ // - warnings are system-recoverable errors
++ // - the system has noticed something and taken some
++ // corrective action
++ // - these messages can be shut off
++ //
++ static void warning(const char *message);
++ static void warning(tostrstream& message);
++
++ static void warning(const char *function, const char *message);
++ static void warning(const char *function, tostrstream& message);
++
++ static void warning(const char *class_name, const char *method, const char *message);
++ static void warning(const char *class_name, const char *method, tostrstream& message);
++
++ static bool warning(); // current warning switch
++ static void warning(bool value); // change the warning switch
++
++ //
++ // Error messages
++ // - an unacceptable, but expected and recoverable
++ // condition was detected
++ // - errors are for ``the expected environment was not found''
++ // rather than for ``file couldn't be opened''
++ // - these messages cannot be shut off
++ // - the error handler determines the recovery action
++ // TODO - one day exceptions will be used here
++ //
++ static void error(const char *message);
++ static void error(tostrstream& message);
++
++ static void error(const char *function, const char *message);
++ static void error(const char *function, tostrstream& message);
++
++ static void error(const char *class_name, const char *method, const char *message);
++ static void error(const char *class_name, const char *method, tostrstream& message);
++
++ // can't turn off errors - no ``static void error(bool value);''
++ static zero_arg_error_handler_t error(); // current error handler
++ static void error(zero_arg_error_handler_t handler);// change the error handler
++
++ static void error_is_lib_error_handler(); // change the error handler
++ static void error_is_exit(); // change the error handler
++
++ // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing
++ static const char *error_handler_description();
++
++ //
++ // Fatal messages
++ // - an unacceptable and unexpected error was detected
++ // the data invariants were violated, there is no recovery
++ // - these messages cannot be shut off
++ // - the error handler determines the recovery action
++ // TODO - one day exceptions will be used here
++ //
++ static void fatal(const char *message);
++ static void fatal(tostrstream& message);
++
++ static void fatal(const char *function, const char *message);
++ static void fatal(const char *function, tostrstream& message);
++
++ static void fatal(const char *class_name, const char *method, const char *message);
++ static void fatal(const char *class_name, const char *method, tostrstream& message);
++
++ // can't turn off fatals - no ``static void fatal(bool value);''
++ static zero_arg_error_handler_t fatal(); // return the fatal handler
++ static void fatal(zero_arg_error_handler_t handler); // change the fatal handler
++
++ static void fatal_is_exit(); // change the fatal handler
++ static void fatal_is_abort(); // change the fatal handler
++
++ // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing
++ static const char *fatal_handler_description();
++private:
++ //
++ // Two underscores are used here in order to prevent confusion of these
++ // private variables with any of the heir's private variables. Note that
++ // access control is different than visibility in C++, so all the variable
++ // names in a class hierarchy must be unique.
++ //
++ static bool __debug;
++ static bool __note;
++ static bool __warning;
++ static void (*__error_handler)(); // can't turn off errors
++ static void (*__fatal_handler)(); // can't turn off fatals
++
++ static bool __partial_init;
++ static void __partial_initialize();
++ static bool __full_init;
++ static void __full_initialize(const char *program);
++ static char *__program;
++
++ static void __handle_error();
++ static void __handle_fatal();
++ static void __add_newline(const char *message);
++ static void __message_switch(bool value, bool& flag, const char *description);
++ static void __message_switch(bool value, bool& flag);
++ static const char *__describe_handler(zero_arg_error_handler_t handler);
++
++ static bool __output_valid();
++ static ostream *__output;
++
++ // GPP_1_96_BUG
++ const char *class_name() const;
++ // GPP_1_96_BUG
++};
++
++
++//# 29 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
++
++
++//
++// GctObject class (is abstract)
++//
++class GctObject: virtual public GctErrorHandler /*, virtual public GttObject*/ {
++protected:
++ GctObject();
++ GctObject(const GctObject&);
++ virtual ~GctObject(); // ensure descendants have virtual destructors
++
++public:
++ //
++ // I/O Support
++ //
++ // The value typically persists only long enough for an i/o operation
++ // to be performed (see the defintion of output via operator<<(... ) below)
++ virtual const char *stringify();
++protected:
++ // This is the buffer into which the printed representation of this
++ // object will be put when the time comes. It is associated with the
++ // object so it will never go away (so long as the object exists).
++ // Use a pointer so that you only pay for the space when I/O is used
++ tostrstream *stringbuf;
++ void clear_stringbuf();
++
++public:
++ //
++ // Consistency (global consistency)
++ //
++ // The global data invariant for the whole object (heirs included).
++ // This OK function will call the local invariant function ok() if
++ // necessary and in addition the OK functions of the heirs
++ // This is expected to compute the data invariant of the object.
++ // It will execute GctErrorHandler::fatal if there is wrong.
++ virtual void OK() const;
++
++protected:
++ //
++ // consistency (local consistency)
++ //
++ // This function computes the invariant which is local to this object.
++ // It does not call any of the ancestor's OK() or ok() functions.
++ // It is not a virtual function so that it can be called from within a
++ // constructor with impunity. Thus this function MUST NOT call any
++ // virtual functions either; it should call them by their full name if
++ // that is necessary. The global OK() function will call this function
++ // as necessary.
++ //
++ // This function must NOT NEVER EVER be made virtual.
++ void ok() const;
++protected:
++ //
++ // Class Name
++ //
++ // This must return a static (constant) string which is the name
++ // of the class being declared. By convention, not all classes
++ // must have one of these, but the major root abstract class must
++ // have one in order to allow the stringify() to work approximately
++ // correctly.
++ virtual const char *class_name() const = 0;
++
++public:
++ //
++ // The ``id'' of this object
++ //
++ // NOTE - we explicitly allow the situation where this function
++ // can return the address of the object - the ``this'' pointer
++ // instead of a computed id field (the __object_id field below).
++ //
++ // This function is protected because we don't want too much dependence
++ // on this notion of object identity. I want to be able to rip it
++ // out if it becomes to cumbersome.
++ unsigned objectId() const;
++private:
++ //
++ // Symbolic ID
++ //
++ // NOTE - Normally this would be implemented by the `this' pointer.
++ // TODO - remove this for production code
++ //
++ // However, in order to make the test suites run on all machines, we
++ // make this into a symbolic id that is maintained with each object.
++ // Thus the valid outputs are always consistent across all machines.
++ unsigned __object_id;
++ static unsigned __next_id;
++};
++
++//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
++// This is part of the iostream library, providing -*- C++ -*- input/output.
++// Copyright (C) 1991 Per Bothner.
++//
++// This library is free software; you can redistribute it and/or
++// modify it under the terms of the GNU Library General Public
++// License as published by the Free Software Foundation; either
++// version 2 of the License, or (at your option) any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++// Library General Public License for more details.
++//
++// You should have received a copy of the GNU Library General Public
++// License along with this library; if not, write to the Free
++// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
++
++//# 117 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
++
++extern ostream& operator<<(ostream&, GctObject&);
++
++
++//# 25 "../../../../../../mips/include/Gct/Object/GctHashObject.h" 2
++
++
++//
++// GctHashObject class (is abstract)
++//
++class GctHashObject: virtual public GctObject {
++protected:
++ GctHashObject();
++ GctHashObject(const GctHashObject&);
++
++public:
++ //
++ // hash support
++ //
++ virtual unsigned hash() const;
++};
++
++
++//# 28 "../../GctSymbol.h" 2
++
++
++//
++// GctSymbol
++//
++class GctSymbol: virtual public GctHashObject, String {
++public:
++ GctSymbol(); // vacuous symbol required for genclass usage
++ GctSymbol(const char*);
++ GctSymbol(const String&);
++ GctSymbol(const GctSymbol&);
++
++ operator const char *() const;
++
++ bool operator==(const GctSymbol&) const;
++ bool operator!=(const GctSymbol&) const;
++
++ bool operator<=(const GctSymbol&) const;
++ bool operator<(const GctSymbol&) const;
++ bool operator>=(const GctSymbol&) const;
++ bool operator>(const GctSymbol&) const;
++
++ unsigned hash() const;
++
++ // I/O Support
++ const char *stringify();
++
++ // Consistency
++ void OK() const;
++private:
++ const char *class_name() const;
++};
++
++extern unsigned hash(GctSymbol&); // genclass support (no const)
++
++//
++// Inline functions
++//
++// Note - none of the String operators save for operator const char *()
++// are String member functions, instead, they are anonymous functions
++// which work by overloading.
++//
++
++
++
++
++
++GctSymbol::operator const char *() const
++{
++
++
++
++
++
++ return String::operator const char *();
++}
++
++bool
++GctSymbol::operator==(const GctSymbol& other) const
++{
++
++
++
++
++
++ return (bool)::operator==(*this, other);
++}
++
++bool
++GctSymbol::operator!=(const GctSymbol& other) const
++{
++
++
++
++
++
++ return (bool)::operator!=(*this, other);
++}
++
++bool
++GctSymbol::operator<=(const GctSymbol& other) const
++{
++
++
++
++
++
++ return (bool)::operator<=(*this, other);
++}
++
++bool
++GctSymbol::operator<(const GctSymbol& other) const
++{
++
++
++
++
++
++ return (bool)::operator<(*this, other);
++}
++
++bool
++GctSymbol::operator>=(const GctSymbol& other) const
++{
++
++
++
++
++
++ return (bool)::operator>=(*this, other);
++}
++
++bool
++GctSymbol::operator>(const GctSymbol& other) const
++{
++
++
++
++
++
++ return (bool)::operator>(*this, other);
++}
++
++
++//# 25 "GctSymbol.defs.h" 2
++
++
++// equality operator
++
++
++
++
++// less-than-or-equal
++
++
++
++
++// comparison : less-than -> 0
++
++
++
++
++// hash function
++
++extern unsigned int hash(GctSymbol&);
++
++
++
++// initial capacity for structures requiring one
++
++
++
++
++
++
++
++//# 27 "GctSymbol.GctSymbol.Map.h" 2
++
++
++class GctSymbolGctSymbolMap
++{
++protected:
++ int count;
++ GctSymbol def;
++
++public:
++ GctSymbolGctSymbolMap(GctSymbol& dflt);
++ virtual ~GctSymbolGctSymbolMap();
++
++ int length(); // current number of items
++ int empty();
++
++ virtual int contains(GctSymbol& key); // is key mapped?
++
++ virtual void clear(); // delete all items
++
++ virtual GctSymbol& operator [] (GctSymbol& key) = 0; // access contents by key
++
++ virtual void del(GctSymbol& key) = 0; // delete entry
++
++ virtual Pix first() = 0; // Pix of first item or 0
++ virtual void next(Pix& i) = 0; // advance to next or 0
++ virtual GctSymbol& key(Pix i) = 0; // access key at i
++ virtual GctSymbol& contents(Pix i) = 0; // access contents at i
++
++ virtual int owns(Pix i); // is i a valid Pix ?
++ virtual Pix seek(GctSymbol& key); // Pix of key
++
++ GctSymbol& dflt(); // access default val
++
++ void error(const char* msg);
++ virtual int OK() = 0; // rep invariant
++};
++
++
++
++inline GctSymbolGctSymbolMap::~GctSymbolGctSymbolMap() {}
++
++inline int GctSymbolGctSymbolMap::length()
++{
++ return count;
++}
++
++inline int GctSymbolGctSymbolMap::empty()
++{
++ return count == 0;
++}
++
++inline GctSymbol& GctSymbolGctSymbolMap::dflt()
++{
++ return def;
++}
++
++inline GctSymbolGctSymbolMap::GctSymbolGctSymbolMap(GctSymbol& dflt) :def(dflt)
++{
++ count = 0;
++}
++
++
++
++
++//# 26 "GctSymbol.GctSymbol.CHMap.h" 2
++
++
++
++
++
++struct GctSymbolGctSymbolCHNode
++{
++ GctSymbolGctSymbolCHNode* tl;
++ GctSymbol hd;
++ GctSymbol cont;
++ GctSymbolGctSymbolCHNode();
++ GctSymbolGctSymbolCHNode(GctSymbol& h, GctSymbol& c, GctSymbolGctSymbolCHNode* t = 0);
++ ~GctSymbolGctSymbolCHNode();
++};
++
++
++
++inline GctSymbolGctSymbolCHNode::GctSymbolGctSymbolCHNode() {}
++
++inline GctSymbolGctSymbolCHNode::GctSymbolGctSymbolCHNode(GctSymbol& h, GctSymbol& c, GctSymbolGctSymbolCHNode* t)
++ : hd(h), cont(c), tl(t) {}
++
++inline GctSymbolGctSymbolCHNode::~GctSymbolGctSymbolCHNode() {}
++
++
++
++
++typedef GctSymbolGctSymbolCHNode* GctSymbolGctSymbolCHNodePtr;
++
++
++
++
++class GctSymbolGctSymbolCHMap : public GctSymbolGctSymbolMap
++{
++protected:
++ GctSymbolGctSymbolCHNode** tab;
++ unsigned int size;
++
++public:
++ GctSymbolGctSymbolCHMap(GctSymbol& dflt,unsigned int sz=100 );
++ GctSymbolGctSymbolCHMap(GctSymbolGctSymbolCHMap& a);
++ ~GctSymbolGctSymbolCHMap();
++
++ GctSymbol& operator [] (GctSymbol& key);
++
++ void del(GctSymbol& key);
++
++ Pix first();
++ void next(Pix& i);
++ GctSymbol& key(Pix i);
++ GctSymbol& contents(Pix i);
++
++ Pix seek(GctSymbol& key);
++ int contains(GctSymbol& key);
++
++ void clear();
++ int OK();
++};
++
++
++
++inline GctSymbolGctSymbolCHMap::~GctSymbolGctSymbolCHMap()
++{
++ clear();
++ delete tab;
++}
++
++inline int GctSymbolGctSymbolCHMap::contains(GctSymbol& key)
++{
++ return seek(key) != 0;
++}
++
++inline GctSymbol& GctSymbolGctSymbolCHMap::key(Pix p)
++{
++ if (p == 0) error("null Pix");
++ return ((GctSymbolGctSymbolCHNode*)p)->hd;
++}
++
++inline GctSymbol& GctSymbolGctSymbolCHMap::contents(Pix p)
++{
++ if (p == 0) error("null Pix");
++ return ((GctSymbolGctSymbolCHNode*)p)->cont;
++}
++
++
++
++
++//# 22 "GctSymbol.GctSymbol.CHMap.cc" 2
++
++
++// The nodes are linked together serially via a version
++// of a trick used in some vtables: odd pointers are
++// actually links to the next table entry.
++// Not terrible, but not wonderful either
++
++static inline int goodCHptr(GctSymbolGctSymbolCHNode* t)
++{
++ return ((((unsigned)t) & 1) == 0);
++}
++
++static inline GctSymbolGctSymbolCHNode* index_to_CHptr(int i)
++{
++ return (GctSymbolGctSymbolCHNode*)((i << 1) + 1);
++}
++
++static inline int CHptr_to_index(GctSymbolGctSymbolCHNode* t)
++{
++ return ( ((unsigned) t) >> 1);
++}
++
++GctSymbolGctSymbolCHMap::GctSymbolGctSymbolCHMap(GctSymbol& dflt, unsigned int sz)
++ :GctSymbolGctSymbolMap(dflt)
++{
++ tab = (GctSymbolGctSymbolCHNode**)(new GctSymbolGctSymbolCHNodePtr[size = sz]);
++ for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
++ count = 0;
++}
++
++GctSymbolGctSymbolCHMap::GctSymbolGctSymbolCHMap(GctSymbolGctSymbolCHMap& a) :GctSymbolGctSymbolMap(a.def)
++{
++ tab = (GctSymbolGctSymbolCHNode**)(new GctSymbolGctSymbolCHNodePtr[size = a.size]);
++ for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
++ count = 0;
++ for (Pix p = a.first(); p; a.next(p)) (*this)[a.key(p)] = a.contents(p); // gets bogus error - type `GctSymbol' is derived from private `String'
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7865.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7865.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7865.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7865.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// prms-id: 7865
++
++int count;
++
++struct A {
++ A() { ++count; }
++ ~A() { --count; }
++};
++
++int foo() { return 1; }
++
++int bar()
++{
++ A a;
++ for (;;) {
++ A b;
++ if (foo())
++ return 0;
++ if (foo())
++ return 0;
++ }
++ return 0;
++}
++
++int main() {
++ bar();
++ return count;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7868.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7868.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7868.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7868.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// prms-id: 7868
++
++struct DIAGTYP {
++};
++struct DIAGTYP1 {
++ struct DIAGTYP; // ERROR - forward declaration
++ void bar() { new struct DIAGTYP; } // ERROR - undefined
++ void foo() { new struct DIAGTYP1; }
++};
++
++int main () {
++ struct DIAGTYP; // ERROR - forward declaration
++ struct DIAGTYP *lerror_desc;
++ lerror_desc= new struct DIAGTYP; // ERROR - undefined
++}
++
++void foo () {
++ struct DIAGTYP *lerror_desc;
++ lerror_desc= new struct DIAGTYP;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p786.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p786.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p786.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p786.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// prms-id: 786
++
++extern "C" void printf (char *, ...);
++extern "C" void exit(int);
++class C
++ {
++ int a;
++public:
++ C() {a = 1;}
++ };
++
++void func(const C& a, C& b)
++{
++ printf ("in const func\n");
++ exit(1);
++}
++
++void func(C& a, C& b)
++{
++ printf ("in non-const func\n");
++}
++
++void testit(const C& a, C& b)
++{
++ func(a,b);
++}
++
++int main()
++{
++ C a;
++ C b;
++
++ func(a,b);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p789a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p789a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p789a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p789a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// global and local multidimensional array objects are not getting
++// constructors called on any dimension, other than the first. Also,
++// the destructors are not being called. Seems odd, they probably
++// used to work. :-(
++// prms-id: 789
++
++extern "C" void printf (char *, ...);
++struct foo
++{
++ static int count;
++ void print (int i, int j) { printf ("foo[%d][%d] = %d\n", i, j, x); }
++ int x;
++ foo () {
++ x = count++;
++ printf("this %d = %x\n", x, (void *)this);
++ }
++ virtual ~foo () {
++ printf("this %d = %x\n", x, (void *)this);
++ --count;
++ }
++};
++int foo::count;
++
++
++int main ()
++{
++ {
++ foo array[3][3];
++ for (int i = 0; i < 3; i++)
++ {
++ for (int j = 0; j < 3; j++)
++ {
++ printf("&a[%d][%d] = %x\n", i, j, (void *)&array[i][j]);
++ }
++ }
++ // The count should be nine, if not, fail the test.
++ if (foo::count != 9)
++ return 1;
++ }
++ if (foo::count != 0)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p789.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p789.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p789.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p789.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// prms-id: 789
++
++extern "C" void printf (char *, ...);
++struct foo
++{
++ static int count;
++ virtual void print (int i, int j) { printf ("foo[%d][%d] = %d\n", i, j, x); }
++ int x;
++ foo () { x = count++; }
++};
++int foo::count;
++struct bar : virtual public foo
++{
++ virtual void print (int i, int j) { printf ("bar[%d][%d] = %d\n", i, j, x); }
++};
++
++// bar array[3][3];
++foo array[3][3];
++
++int main ()
++{
++ for (int i = 0; i < 3; i++)
++ for (int j = 0; j < 3; j++) {
++// printf("&a[%d][%d] = %x\n", i, j, (void *)&array[i][j]);
++ array[i][j].print (i, j);
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7912.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7912.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p7912.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p7912.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++// prms-id: 7912
++
++int count = 0;
++
++class Foo {
++public:
++ Foo() { ++count; };
++ Foo(const Foo&) { ++count; };
++ ~Foo() { --count; };
++};
++
++
++main()
++{
++ try {
++ throw Foo();
++ }
++ catch (Foo object) {
++ }
++ return count;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8009.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8009.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8009.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8009.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// prms-id: 8009
++
++class A {
++public:
++ int i;
++};
++
++class B : public A {
++ B();
++};
++
++B::B() : i (-1) {} // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8018.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8018.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8018.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8018.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,85 @@
++// prms-id: 8018
++
++class RefCount {
++private:
++ int nref;
++
++public:
++ RefCount() : nref(0) {}
++ ~RefCount() {}
++
++ int nrefs() const { return nref; }
++ int reference() {
++ nref++;
++ return nref;
++ }
++ int unreference() {
++ nref--;
++ return nref;
++ }
++};
++
++class A : public RefCount {
++public:
++ A() {}
++ ~A() {}
++};
++
++class RefA {
++private:
++ A *p;
++
++ void clear() {
++ if (p) {
++ p->unreference();
++ if (!p->nrefs())
++ delete p;
++ }
++ }
++
++public:
++ RefA(A* a) : p(a) { if (p) p->reference(); }
++ RefA(const RefA& a) : p(a.p) { if (p) p->reference(); }
++ ~RefA() { clear(); }
++
++ A* operator->() { return p; }
++
++ RefA& operator=(const RefA& a) {
++ clear();
++ p=a.p;
++ if (p)
++ p->reference();
++ return *this;
++ }
++
++ RefA& operator=(A* a) {
++ clear();
++ p=a;
++ if (p)
++ p->reference();
++ return *this;
++ }
++};
++
++class AccRefA {
++private:
++ RefA a;
++
++public:
++ AccRefA(A* ap) : a(ap) {}
++ AccRefA(const RefA& ar) : a(ar) {}
++ ~AccRefA() {}
++
++ operator RefA&() { return a; }
++ RefA& result() { return a; }
++};
++
++int
++main() {
++ RefA a1 = new A;
++ AccRefA aa1(a1);
++ RefA a3 = aa1;
++
++ if (a1->nrefs() != 3)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8039.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8039.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8039.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8039.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// prms-id: 8039
++
++class C {
++public:
++ int func ();
++};
++
++extern void bar(int*);
++
++int main()
++{
++ int (C::*mfp)() = &C::func;
++ bar((int*)mfp); // ERROR - no clear semantics
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p807a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p807a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p807a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p807a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// prms-id: 807
++
++// See ARM page 275 Section 12.3.2
++
++extern "C" void printf (char *, ...);
++extern "C" void exit(int);
++
++class B;
++
++class A {
++public:
++ A(B&); // ERROR - fn ref in err msg
++};
++
++class B {
++public:
++ operator A(); // ERROR - fn ref in err msg
++};
++
++B b;
++A a = b; // ERROR - should fail as it is ambigious.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p807.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p807.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p807.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p807.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// prms-id: 807
++
++extern "C" int printf(const char*, ...);
++
++class B;
++
++class AX
++{
++ protected:
++ int x;
++
++ public:
++ operator B();
++};
++
++
++class B
++{
++ private:
++ int x;
++ public:
++ B(const AX&);
++};
++
++
++int foo(B& b); // ERROR - referenced below
++
++
++int main()
++{
++ AX a;
++ foo(a); // ERROR - Ambiguous B(a) or a.operator B() // See ARM 12.3.2
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p811.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p811.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p811.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p811.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,549 @@
++// This test case caused the compiler to abort at one point in time.
++// Build don't link:
++// Special g++ Options:
++// prms-id: 811
++
++class ostream; class streambuf;
++
++typedef long streamoff, streampos;
++
++struct _ios_fields {
++ streambuf *_strbuf;
++ ostream* _tie;
++ int _width;
++ unsigned long _flags;
++ char _fill;
++ unsigned char _state;
++ unsigned short _precision;
++};
++
++
++enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 };
++enum open_mode { input=1, output=2, append=8 };
++
++
++class ios : public _ios_fields {
++ public:
++ enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 };
++ enum open_mode {
++ in=1,
++ out=2,
++ ate=4,
++ app=8,
++ trunc=16,
++ nocreate=32,
++ noreplace=64 };
++ enum seek_dir { beg, cur, end};
++ enum { skipws=01, left=02, right=04, internal=010,
++ dec=020, oct=040, hex=0100,
++ showbase=0200, showpoint=0400, uppercase=01000, showpos=02000,
++ scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000,
++ dont_close=0x80000000
++ };
++
++ ostream* tie() const { return _tie; }
++ ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }
++
++
++ char fill() const { return _fill; }
++ char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; }
++ unsigned long flags() const { return _flags; }
++ unsigned long flags(unsigned long new_val) {
++ unsigned long old_val = _flags; _flags = new_val; return old_val; }
++ unsigned short precision() const { return _precision; }
++ unsigned short precision(int newp) {
++ unsigned short oldp = _precision; _precision = (unsigned short)newp;
++ return oldp; }
++ unsigned long setf(unsigned long val) {
++ unsigned long oldbits = _flags;
++ _flags |= val; return oldbits; }
++ unsigned long setf(unsigned long val, unsigned long mask) {
++ unsigned long oldbits = _flags;
++ _flags = (_flags & ~mask) | (val & mask); return oldbits; }
++ unsigned long unsetf(unsigned long mask) {
++ unsigned long oldbits = _flags & mask;
++ _flags &= ~mask; return oldbits; }
++ int width() const { return _width; }
++ int width(long val) { long save = _width; _width = val; return save; }
++
++ static const unsigned long basefield;
++ static const unsigned long adjustfield;
++ static const unsigned long floatfield;
++
++ streambuf* rdbuf() const { return _strbuf; }
++ void clear(int state = 0) { _state = state; }
++ int good() const { return _state == 0; }
++ int eof() const { return _state & ios::eofbit; }
++ int fail() const { return _state & (ios::badbit|ios::failbit); }
++ int bad() const { return _state & ios::badbit; }
++ int rdstate() const { return _state; }
++ void set(int flag) { _state |= flag; }
++ operator void*() const { return fail() ? (void*)0 : (void*)this; }
++ int operator!() const { return fail(); }
++
++
++ void unset(state_value flag) { _state &= ~flag; }
++ void close();
++ int is_open();
++ int readable();
++ int writable();
++
++
++ protected:
++ ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' ';
++ _flags=ios::skipws; _precision=6; }
++};
++
++
++
++
++typedef ios::seek_dir _seek_dir;
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++//# 168 "/usr/latest/lib/g++-include/streambuf.h" 3
++
++
++struct __streambuf {
++
++ int _flags;
++ char* _gptr;
++ char* _egptr;
++ char* _eback;
++ char* _pbase;
++ char* _pptr;
++ char* _epptr;
++ char* _base;
++ char* _ebuf;
++ struct streambuf *_chain;
++
++
++
++
++};
++
++struct streambuf : private __streambuf {
++ friend class ios;
++ friend class istream;
++ friend class ostream;
++ protected:
++ static streambuf* _list_all;
++ streambuf*& xchain() { return _chain; }
++ void _un_link();
++ void _link_in();
++ char* gptr() const { return _gptr; }
++ char* pptr() const { return _pptr; }
++ char* egptr() const { return _egptr; }
++ char* epptr() const { return _epptr; }
++ char* pbase() const { return _pbase; }
++ char* eback() const { return _eback; }
++ char* ebuf() const { return _ebuf; }
++ char* base() const { return _base; }
++ void xput_char(char c) { *_pptr++ = c; }
++ int xflags() { return _flags; }
++ int xflags(int f) { int fl = _flags; _flags = f; return fl; }
++ void xsetflags(int f) { _flags |= f; }
++ void gbump(int n) { _gptr += n; }
++ void pbump(int n) { _pptr += n; }
++ void setb(char* b, char* eb, int a=0);
++ void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; }
++ void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; }
++ public:
++ static int flush_all();
++ static void flush_all_linebuffered();
++ virtual int underflow();
++ virtual int overflow(int c = (-1) );
++ virtual int doallocate();
++ virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
++ virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
++ int sputbackc(char c);
++ int sungetc();
++ streambuf();
++ virtual ~streambuf();
++ int unbuffered() { return _flags & 2 ? 1 : 0; }
++ int linebuffered() { return _flags & 0x4000 ? 1 : 0; }
++ void unbuffered(int i)
++ { if (i) _flags |= 2 ; else _flags &= ~2 ; }
++ void linebuffered(int i)
++ { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; }
++ int allocate() {
++ if (base() || unbuffered()) return 0;
++ else return doallocate(); }
++ virtual int sync();
++ virtual int pbackfail(int c);
++ virtual int ungetfail();
++ virtual streambuf* setbuf(char* p, int len);
++ int in_avail() { return _egptr - _gptr; }
++ int out_waiting() { return _pptr - _pbase; }
++ virtual int sputn(const char* s, int n);
++ virtual int sgetn(char* s, int n);
++ long sgetline(char* buf, int n, char delim, int putback_delim);
++ int sbumpc() {
++ if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
++ else return *(unsigned char*)_gptr++; }
++ int sgetc() {
++ if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
++ else return *(unsigned char*)_gptr; }
++ int snextc() {
++ if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
++ else return *(unsigned char*)_gptr; }
++ int sputc(int c) {
++ if (_pptr >= _epptr) return overflow(c);
++ return *_pptr++ = c, (unsigned char)c; }
++ int vscan(char const *fmt0, char* ap);
++ int vform(char const *fmt0, char* ap);
++
++
++
++
++
++
++};
++
++struct __file_fields {
++ char _fake;
++ char _shortbuf[1];
++ short _fileno;
++ int _blksize;
++ char* _save_gptr;
++ char* _save_egptr;
++ long _offset;
++};
++
++class filebuf : public streambuf {
++ struct __file_fields _fb;
++ void init();
++ public:
++ filebuf();
++ filebuf(int fd);
++ filebuf(int fd, char* p, int len);
++ ~filebuf();
++ filebuf* attach(int fd);
++ filebuf* open(const char *filename, const char *mode);
++ filebuf* open(const char *filename, int mode, int prot = 0664);
++ virtual int underflow();
++ virtual int overflow(int c = (-1) );
++ int is_open() { return _fb._fileno >= 0; }
++ int fd() { return is_open() ? _fb._fileno : (-1) ; }
++ filebuf* close();
++ virtual int doallocate();
++ virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
++ int sputn(const char* s, int n);
++ int sgetn(char* s, int n);
++ virtual int sync();
++ protected:
++ virtual int pbackfail(int c);
++ int is_reading() { return eback() != egptr(); }
++ char* cur_ptr() { return is_reading() ? gptr() : pptr(); }
++
++ char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); }
++ int do_flush();
++
++ virtual int sys_read(char* buf, int size);
++ virtual long sys_seek(long , _seek_dir);
++ virtual long sys_write(const void*, long);
++ virtual int sys_stat(void*);
++ virtual int sys_close();
++};
++
++
++inline int ios::readable() { return rdbuf()->_flags & 4 ; }
++inline int ios::writable() { return rdbuf()->_flags & 8 ; }
++inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;}
++
++
++
++
++//# 25 "/usr/latest/lib/g++-include/iostream.h" 2 3
++
++
++class istream; class ostream;
++typedef istream& (*__imanip)(istream&);
++typedef ostream& (*__omanip)(ostream&);
++
++extern istream& ws(istream& ins);
++extern ostream& flush(ostream& outs);
++extern ostream& endl(ostream& outs);
++extern ostream& ends(ostream& outs);
++
++class ostream : public ios
++{
++ void do_osfx();
++ public:
++ ostream();
++ ostream(streambuf* sb, ostream* tied=__null );
++ ~ostream();
++
++ int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; }
++ void osfx() { if (flags() & (ios::unitbuf|ios::stdio))
++ do_osfx(); }
++ streambuf* ostreambuf() const { return _strbuf; }
++ ostream& flush();
++ ostream& put(char c);
++ ostream& write(const char *s, int n);
++ ostream& write(const unsigned char *s, int n) { return write((char*)s, n);}
++ ostream& write(const void *s, int n) { return write((char*)s, n);}
++ ostream& seekp(streampos);
++ ostream& seekp(streamoff, _seek_dir);
++ streampos tellp();
++ ostream& form(const char *format ...);
++ ostream& vform(const char *format, char* args);
++};
++
++extern ostream& operator<<(ostream&, char c);
++inline ostream& operator<<(ostream& os, unsigned char c)
++{ return os << (char)c; }
++
++extern ostream& operator<<(ostream&, const char *s);
++inline ostream& operator<<(ostream& os, const unsigned char *s)
++{ return os << (const char*)s; }
++
++
++extern ostream& operator<<(ostream&, void *p);
++extern ostream& operator<<(ostream&, int n);
++extern ostream& operator<<(ostream&, long n);
++extern ostream& operator<<(ostream&, unsigned int n);
++extern ostream& operator<<(ostream&, unsigned long n);
++inline ostream& operator<<(ostream& os, short n) {return os << (int)n;}
++inline ostream& operator<<(ostream& os, unsigned short n)
++{return os << (unsigned int)n;}
++extern ostream& operator<<(ostream&, float n);
++extern ostream& operator<<(ostream&, double n);
++inline ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); }
++extern ostream& operator<<(ostream&, streambuf*);
++
++class istream : public ios
++{
++ int _gcount;
++ public:
++ istream();
++ istream(streambuf* sb, ostream*tied=__null );
++ ~istream();
++ streambuf* istreambuf() const { return _strbuf; }
++ istream& get(char& c);
++ istream& get(unsigned char& c);
++ istream& read(char *ptr, int n);
++ istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); }
++ istream& read(void *ptr, int n) { return read((char*)ptr, n); }
++
++ istream& getline(char* ptr, int len, char delim = '\n');
++ istream& get(char* ptr, int len, char delim = '\n');
++ istream& gets(char **s, char delim = '\n');
++ int ipfx(int need) {
++ if (!good()) { set(ios::failbit); return 0; }
++ if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush();
++ if (!need && (flags() & ios::skipws) && !ws(*this)) return 0;
++ return 1;
++ }
++ int ipfx0() {
++ if (!good()) { set(ios::failbit); return 0; }
++ if (_tie) _tie->flush();
++ if ((flags() & ios::skipws) && !ws(*this)) return 0;
++ return 1;
++ }
++ int ipfx1() {
++ if (!good()) { set(ios::failbit); return 0; }
++ if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
++ return 1;
++ }
++ int get() { if (!ipfx1()) return (-1) ;
++ int ch = _strbuf->sbumpc();
++ if (ch == (-1) ) set(ios::eofbit);
++ return ch; }
++ int peek() { if (!ipfx1()) return (-1) ;
++ int ch = _strbuf->sgetc();
++ if (ch == (-1) ) set(ios::eofbit);
++ return ch; }
++ int gcount() { return _gcount; }
++ istream& ignore(int n=1, int delim = (-1) );
++ istream& seekg(streampos);
++ istream& seekg(streamoff, _seek_dir);
++ streampos tellg();
++ istream& putback(char ch) {
++ if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit);
++ return *this;}
++ istream& unget() {
++ if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit);
++ return *this;}
++
++ istream& unget(char ch) { return putback(ch); }
++ int skip(int i);
++
++};
++
++extern istream& operator>>(istream&, char*);
++inline istream& operator>>(istream& is, unsigned char* p)
++{ return is >> (char*)p; }
++
++extern istream& operator>>(istream&, char& c);
++extern istream& operator>>(istream&, unsigned char& c);
++
++extern istream& operator>>(istream&, int&);
++extern istream& operator>>(istream&, long&);
++extern istream& operator>>(istream&, short&);
++extern istream& operator>>(istream&, unsigned int&);
++extern istream& operator>>(istream&, unsigned long&);
++extern istream& operator>>(istream&, unsigned short&);
++extern istream& operator>>(istream&, float&);
++extern istream& operator>>(istream&, double&);
++inline istream& operator>>(istream& is, __imanip func) { return (*func)(is); }
++
++inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; }
++
++class iostream : public ios {
++ int _gcount;
++ public:
++ iostream();
++ iostream(streambuf* sb, ostream*tied=__null );
++ operator istream&() { return *(istream*)this; }
++ operator ostream&() { return *(ostream*)this; }
++ ~iostream();
++
++ istream& get(char& c) { return ((istream*)this)->get(c); }
++ istream& get(unsigned char& c) { return ((istream*)this)->get(c); }
++ istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); }
++ istream& read(unsigned char *ptr, int n)
++ { return ((istream*)this)->read((char*)ptr, n); }
++ istream& read(void *ptr, int n)
++ { return ((istream*)this)->read((char*)ptr, n); }
++ istream& getline(char* ptr, int len, char delim = '\n')
++ { return ((istream*)this)->getline(ptr, len, delim); }
++ istream& get(char* ptr, int len, char delim = '\n')
++ { return ((istream*)this)->get(ptr, len, delim); }
++ istream& gets(char **s, char delim = '\n')
++ { return ((istream*)this)->gets(s, delim); }
++ istream& ignore(int n=1, int delim = (-1) )
++ { return ((istream*)this)->ignore(n, delim); }
++ int ipfx(int need) { return ((istream*)this)->ipfx(need); }
++ int ipfx0() { return ((istream*)this)->ipfx0(); }
++ int ipfx1() { return ((istream*)this)->ipfx1(); }
++ int get() { return _strbuf->sbumpc(); }
++ int peek() { return ipfx1() ? _strbuf->sgetc() : (-1) ; }
++ int gcount() { return _gcount; }
++ istream& putback(char ch) { return ((istream*)this)->putback(ch); }
++ istream& unget() { return ((istream*)this)->unget(); }
++ istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); }
++ istream& seekg(streamoff off, _seek_dir dir)
++ { return ((istream*)this)->seekg(off, dir); }
++ streampos tellg() { return ((istream*)this)->tellg(); }
++
++ istream& unget(char ch) { return putback(ch); }
++
++
++
++ int opfx() { return ((ostream*)this)->opfx(); }
++ void osfx() { ((ostream*)this)->osfx(); }
++ ostream& flush() { return ((ostream*)this)->flush(); }
++ ostream& put(char c) { return ((ostream*)this)->put(c); }
++ ostream& write(const char *s, int n)
++ { return ((ostream*)this)->write(s, n); }
++ ostream& write(const unsigned char *s, int n)
++ { return ((ostream*)this)->write((char*)s, n); }
++ ostream& write(const void *s, int n)
++ { return ((ostream*)this)->write((char*)s, n); }
++ ostream& form(const char *format ...);
++ ostream& vform(const char *format, char* args)
++ { return ((ostream*)this)->vform(format, args); }
++ ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); }
++ ostream& seekp(streamoff off, _seek_dir dir)
++ { return ((ostream*)this)->seekp(off, dir); }
++ streampos tellp() { return ((ostream*)this)->tellp(); }
++};
++
++extern istream cin;
++extern ostream cout, cerr, clog;
++
++struct Iostream_init { } ;
++
++inline ios& dec(ios& i)
++{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
++inline ios& hex(ios& i)
++{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; }
++inline ios& oct(ios& i)
++{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; }
++
++
++//# 7 "/usr/latest/lib/g++-include/stream.h" 2 3
++
++
++extern char* form(const char*, ...);
++
++extern char* dec(long, int=0);
++extern char* dec(int, int=0);
++extern char* dec(unsigned long, int=0);
++extern char* dec(unsigned int, int=0);
++
++extern char* hex(long, int=0);
++extern char* hex(int, int=0);
++extern char* hex(unsigned long, int=0);
++extern char* hex(unsigned int, int=0);
++
++extern char* oct(long, int=0);
++extern char* oct(int, int=0);
++extern char* oct(unsigned long, int=0);
++extern char* oct(unsigned int, int=0);
++
++inline istream& WS(istream& str) { return ws(str); }
++
++
++//# 9 "test.C" 2
++
++
++class Y {
++public:
++ Y() {}
++ virtual const char *stringify() = 0;
++ virtual char *stringify2() const = 0; // ERROR -
++};
++
++class X: public Y {
++public:
++ X(): Y() {}
++ char *stringify(); // ERROR - ok
++ const char *stringify2() const; // ERROR - ok
++};
++
++char *
++X::stringify() const
++{ // ERROR - ok
++ return "stringify";
++}
++
++const char *
++X::stringify2()
++{ // ERROR - ok
++ return "stringify2";
++}
++
++main()
++{
++ X x;
++ Y& y = x;
++
++ cout << "x\n";
++ cout << x.stringify() << '\n';
++ cout << x.stringify2() << '\n';
++
++ cout << "y\n";
++ cout << y.stringify() << '\n';
++ cout << y.stringify2() << '\n';
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8154.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8154.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8154.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8154.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options:
++// prms-id: 8154
++
++class QvFieldData;
++class QvNode {
++ QvFieldData *fieldData;
++};
++class QvGroup : public QvNode {
++ static QvFieldData *fieldData;
++};
++class QvUnknownNode : public QvGroup
++{
++public:
++ QvUnknownNode :: QvUnknownNode ();
++private:
++ static QvFieldData *fieldData;
++ virtual QvFieldData *getFieldData() { return fieldData; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8155.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8155.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8155.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8155.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,147 @@
++// prms-id: 8155
++
++int fail = 1;
++
++class CMainWindow;
++class CFrameWnd;
++class CWnd;
++class CCmdTarget;
++
++typedef void (CCmdTarget::*AFX_PMSG)( void);
++typedef void (CWnd::*AFX_PMSGW)( void);
++
++struct AFX_MSGMAP_ENTRY {
++ unsigned int nMessage;
++ AFX_PMSG pfn;
++};
++
++struct AFX_MSGMAP {
++ const AFX_MSGMAP* pBaseMap;
++ const AFX_MSGMAP_ENTRY* lpEntries;
++};
++
++class CCmdTarget {
++public:
++ CCmdTarget();
++private:
++ static AFX_MSGMAP_ENTRY _messageEntries[];
++protected:
++ static const AFX_MSGMAP messageMap;
++ virtual const AFX_MSGMAP* GetMessageMap() const;
++};
++
++const AFX_MSGMAP CCmdTarget::messageMap = {
++ 0, &CCmdTarget::_messageEntries[0]
++};
++
++const AFX_MSGMAP* CCmdTarget::GetMessageMap() const {
++ return &CCmdTarget::messageMap;
++}
++
++AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries[] =
++{
++ { 0, 0 }
++};
++
++CCmdTarget :: CCmdTarget() { }
++
++class CWnd : public CCmdTarget {
++public:
++ CWnd();
++
++protected:
++ void OnPaint();
++private:
++ static AFX_MSGMAP_ENTRY _messageEntries[];
++protected:
++ static const AFX_MSGMAP messageMap;
++ virtual const AFX_MSGMAP* GetMessageMap() const;
++};
++
++CWnd :: CWnd() {
++}
++
++void CWnd :: OnPaint() {
++}
++
++const AFX_MSGMAP* CWnd ::GetMessageMap() const {
++ return & CWnd ::messageMap;
++}
++const AFX_MSGMAP CWnd ::messageMap = {
++ & CCmdTarget ::messageMap, & CWnd ::_messageEntries[0]
++ };
++AFX_MSGMAP_ENTRY CWnd ::_messageEntries[] = {
++ {0, (AFX_PMSG)0 } };
++
++class CFrameWnd : public CWnd {
++public:
++ CFrameWnd();
++protected:
++private:
++ static AFX_MSGMAP_ENTRY _messageEntries[];
++protected:
++ static const AFX_MSGMAP messageMap;
++ virtual const AFX_MSGMAP* GetMessageMap() const;
++};
++
++CFrameWnd :: CFrameWnd() { }
++
++const AFX_MSGMAP* CFrameWnd ::GetMessageMap() const {
++ return & CFrameWnd ::messageMap;
++}
++const AFX_MSGMAP CFrameWnd ::messageMap = {
++ & CWnd ::messageMap, & CFrameWnd ::_messageEntries[0]
++ };
++AFX_MSGMAP_ENTRY CFrameWnd ::_messageEntries[] = {
++ {0, (AFX_PMSG)0 } };
++
++class CMainWindow : public CFrameWnd {
++public:
++ CMainWindow();
++ void OnPaint();
++ void callProc();
++private:
++ static AFX_MSGMAP_ENTRY _messageEntries[];
++protected:
++ static const AFX_MSGMAP messageMap;
++ virtual const AFX_MSGMAP* GetMessageMap() const;
++};
++
++CMainWindow :: CMainWindow()
++{
++}
++void CMainWindow :: OnPaint()
++{
++ fail = 0;
++}
++
++void CMainWindow :: callProc()
++{
++ const AFX_MSGMAP* pMessageMap;
++ const AFX_MSGMAP_ENTRY *lpEntry;
++
++ pMessageMap = GetMessageMap();
++ lpEntry = pMessageMap->lpEntries;
++
++ if( lpEntry->nMessage == 100) {
++ (this->*lpEntry->pfn)();
++ }
++}
++
++const AFX_MSGMAP* CMainWindow ::GetMessageMap() const {
++ return & CMainWindow ::messageMap;
++}
++const AFX_MSGMAP CMainWindow ::messageMap = {
++ & CFrameWnd ::messageMap, & CMainWindow ::_messageEntries[0]
++ };
++AFX_MSGMAP_ENTRY CMainWindow ::_messageEntries[] = {
++ { 100, (AFX_PMSG)(AFX_PMSGW)(void (CWnd::*)(void))&CMainWindow::OnPaint },
++ {0, (AFX_PMSG)0 }
++};
++
++int main( int argc, char **argv) {
++ CMainWindow myWindow;
++
++ myWindow.callProc();
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8175.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8175.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8175.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8175.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// prms-id: 8175
++
++class AtoBoolC {
++public:
++ AtoBoolC(const AtoBoolC& aBool);
++private:
++ int myValue;
++};
++
++struct TestCase {
++ AtoBoolC is_call_on_unack;
++};
++
++static TestCase the_cases[] = { { 0 } }; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8269.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8269.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8269.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8269.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// prms-id: 8269
++
++typedef char* const char_ptr;
++
++class Foo_Bar {
++public:
++ static char* const counter;
++};
++
++char_ptr Foo_Bar::counter = 0;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8460.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8460.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8460.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8460.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// prms-id: 8460
++
++class A {
++public:
++ A();
++ A(int) { }
++ A(const A&) { }
++private:
++};
++
++int main()
++{
++ A a;
++
++ a.A(1); // ERROR - cannot find name this way
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8483.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8483.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8483.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8483.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// prms-id: 8483
++
++int count;
++
++class A {
++public:
++ A() { ++count; }
++ ~A() { }
++};
++
++class B {
++private:
++ A b[2];
++};
++
++class C {
++public:
++private:
++ A c[2][2];
++};
++
++class D {
++public:
++private:
++ A d[2][2][2];
++};
++
++int main() {
++ { A a; }
++ { B b; }
++ { C c; }
++ { D d; }
++ if (count != 15)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8620.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8620.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8620.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8620.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// prms-id: 8620
++
++struct S {
++ long l;
++};
++
++typedef unsigned long l;
++
++void f() {
++ S* p;
++ if (p->l < 0)
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8785.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8785.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8785.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8785.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// prms-id: 8785
++
++class Outer {
++private:
++ int x; // ERROR - private
++public:
++ struct Inner {
++ int y;
++ void f( Outer * p, int i) {
++ p->x = i; // ERROR -
++ };
++ void f( Outer & p) {
++ p.x = y; // ERROR -
++ };
++ };
++};
++
++int main() {
++ Outer::Inner A;
++ Outer Thing;
++
++ A.f(Thing);
++ A.f(&Thing,2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8786.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8786.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8786.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8786.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++// Special g++ Options: -O
++// prms-id: 8786
++
++class B {
++public:
++ inline ~B();
++};
++
++class D : public B {
++public:
++ D(int);
++};
++
++int foo() {
++ D t(0);
++
++ bool h = 1;
++ if (h) {
++ D p(0);
++ return 0;
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8804.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8804.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8804.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8804.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// prms-id: 8804
++
++extern "C" int printf (const char *, ...);
++
++struct Fails {
++ int i;
++ union {
++ union {
++ int c;
++ };
++ };
++};
++
++Fails d;
++
++int main() {
++ return &d.i == &d.c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8825.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8825.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p8825.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p8825.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// prms-id: 8825
++
++class A {
++ typedef A x;
++};
++
++class B {
++ typedef B x;
++};
++
++class C : public A, public B {
++ typedef C x;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9068.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9068.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9068.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9068.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// prms-id: 9068
++
++struct ostream {
++ void operator<< (int); // ERROR - fn ref in err msg
++};
++
++class C {
++public:
++ static int& i ();
++ static int& i (int signatureDummy);
++};
++
++void foo (ostream& lhs, const C& rhs)
++{
++ lhs << rhs.i; // ERROR - no such i for any opr << ()
++}
++
++int& C::i () {
++ static int _i = 4711;
++ return _i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9129.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9129.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9129.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9129.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Special g++ Options: -ansi -pedantic-errors
++// prms-id: 9129
++
++class Foo {
++public:
++ int DoSomething();
++};
++
++int (Foo::*pA)() = { &Foo::DoSomething };
++int (Foo::*X[1])(int) = { { &Foo::DoSomething } }; // ERROR -
++int (Foo::*Y[])(int) = { { &Foo::DoSomething, &Foo::DoSomething, 0 } }; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9206.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9206.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9206.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9206.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// prms-id: 9206
++
++class X {
++public:
++ void xtest() { }
++};
++
++class Y { };
++
++typedef void (X::*Xptr)();
++typedef void (Y::*Yptr)();
++
++int main() {
++ X xx;
++
++ Xptr xp = &X::xtest;
++ Yptr yp = reinterpret_cast<Yptr>(xp);
++ xp = reinterpret_cast<Xptr>(yp);
++
++ (xx.*xp)();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9506.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9506.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9506.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9506.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// prms-id: 9506
++
++char * volatile p;
++void foo() {
++ --p = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9706.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9706.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9706.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9706.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Special g++ Options: -fexceptions
++// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-*
++// prms-id: 9706
++
++#include <stdlib.h>
++
++int count, acount;
++
++void *operator new(size_t sz) { ++count; return malloc (sz); }
++void operator delete(void *p) throw() { --count; free (p); }
++
++class A {
++public:
++ A() { ++acount; }
++ A(const A&) { ++acount; }
++ ~A() { --acount; }
++};
++
++int main() {
++ int i;
++
++ for( i = 0; i < 10; i++ ) {
++ try {
++ throw A();
++ }
++ catch (A& a) {
++ }
++ }
++ if (acount)
++ return 1;
++ if (count)
++ return 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9732a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9732a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9732a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9732a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// prms-id: 9732
++
++class A {
++ int i;
++public:
++ A() { i = 1; }
++ ~A() { }
++};
++
++struct value {
++ A x,y,z;
++};
++
++int crash(const value* capt, value* jet) {
++ return capt == jet;
++}
++
++class euler {
++public:
++ value number() const { return _value; }
++ int distance();
++
++private:
++ value _value;
++};
++
++int euler::distance() {
++ const value& capt = number();
++ value jet;
++ return crash (&capt, &jet);
++}
++
++int main() {
++ euler e;
++ return e.distance();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// prms-id: 9732
++
++int count;
++int bail = 0;
++
++extern "C" void _exit (int);
++
++struct base {
++ base () { ++count; }
++ ~base () { --count; }
++ base(const base&o) { ++count; }
++};
++
++class D {
++public:
++ ~D() {
++ if (bail++)
++ {
++ // On some Linux boxes, we run the dtor for d twice,
++ // once before exit, and once after!
++ abort ();
++ }
++ else
++ {
++ if (count != 0)
++ _exit (1);
++ _exit (0);
++ }
++ }
++} d;
++
++base base_object;
++
++base base_returning_function ();
++
++const base& base_ref = base_returning_function ();
++
++int main () {
++}
++
++base base_returning_function () {
++ base local_base_object;
++ return local_base_object;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// prms-id: 9732
++
++struct foo {};
++foo& x() { return foo(); } // WARNING -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p991.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p991.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/p991.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/p991.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// prms-id: 991
++
++class Complex {
++public:
++ double re;
++ double im;
++ Complex(double r,double i) : re(r), im(i) {}
++};
++
++Complex cos(const Complex&);
++
++extern "C" double cos (double); // not the same as the above
++extern "C" double cosh (double);
++extern "C" double sin (double);
++extern "C" double sinh (double);
++
++Complex cos(const Complex& arg) {
++ double nr = cos(arg.re)*cosh(arg.im);
++ double ni = -sin(arg.re)*sinh(arg.im);
++ return Complex(nr,ni);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/parse1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/parse1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/parse1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/parse1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++enum { name1 };
++struct name0 { };
++struct name1 { };
++struct derived1 : public name1 { };
++struct derived2 : public name0, public name1 { };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmd1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmd1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmd1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmd1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++class A;
++struct XX { int A::*py; };
++
++class A {
++public:
++ int p;
++ void setp(XX *xp);
++};
++
++void A::setp(XX *xp) { xp->py = &A::p; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,90 @@
++// extern "C" printf(const char *, ...);
++
++class X
++{
++public:
++ int a;
++ int f(int);
++};
++
++class Y
++{
++public:
++ int b;
++ int c;
++ int g(int);
++};
++
++class MD : public X, public Y
++{
++public:
++ int c;
++ int hf(int);
++};
++
++int MD::* pmi0 = &MD::a;
++int MD::* pmi1 = &MD::b;
++int MD::* pmi2 = &MD::c;
++
++int (MD::* pmf0)(int) = &MD::f;
++int (MD::* pmf1)(int) = &MD::g;
++int (MD::* pmf2)(int) = &MD::hf;
++
++int main()
++{
++ MD obj;
++ int fail = 0;
++
++ obj.a = 1;
++ obj.b = 2;
++ obj.c = 3;
++
++ obj.*pmi0 = 7;
++ obj.*pmi1 = 8;
++ obj.*pmi2 = 9;
++
++ fail += (obj.*pmf0)(7);
++ fail += (obj.*pmf1)(8);
++ fail += (obj.*pmf2)(9);
++
++#if 0
++ if (fail != 0)
++ printf ("failed %d tests\n", fail);
++ else
++ printf ("passed\n");
++
++ printf ("sizeof(X) = %d, sizeof(Y) = %d, sizeof(MD) = %d\n",
++ sizeof(X), sizeof(Y), sizeof(MD));
++#endif
++ return fail;
++}
++
++int X::f(int v)
++{
++ if (v != a)
++ {
++// printf ("failed in X::f, a = %d\n", a);
++ return 1;
++ }
++ return 0;
++}
++
++int Y::g(int v)
++{
++ if (v != b)
++ {
++// printf ("failed in Y::g, b = %d\n", b);
++ return 1;
++ }
++ return 0;
++}
++
++int MD::hf(int v)
++{
++ if (v != c)
++ {
++// printf ("failed in MD::hf, c = %d\n", c);
++ return 1;
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++extern "C" int printf(const char *, ...);
++
++class A_table {
++ int c;
++public:
++ A_table() { c = 3;}
++ virtual void func2(int &item) { printf("func2(%d,) c=%d\n",item,c);}
++};
++
++class B_table : private A_table {
++ typedef void (B_table::* B_ti_fn) (int &item);
++public:
++ B_table() { j = 0x4321;}
++ virtual void call_fn_fn1(int &item, void *pfn1);
++ void func1(int &item) { printf("func1(%d)\n",item);}
++ virtual void func2(int &item) { printf("func2(%d) j=%d\n",item,j);}
++ int j;
++};
++
++class foo : public A_table {
++public:
++ int i;
++ virtual ~foo();
++ virtual void func2(int &item) { printf("func2(%d) i=%d\n",item,i);}
++};
++foo::~foo() { i = 0;}
++
++class bar :public foo,public B_table {
++public:
++ int w;
++ virtual ~bar();
++ virtual void func2(int &item) { printf("func2(%d) w=%d\n",item,w);}
++};
++bar::~bar() { w = 0;}
++
++void B_table::call_fn_fn1(int &item, void *pfn1) {
++ (this->*(*(B_ti_fn*)pfn1))(item);
++}
++
++B_table b;
++bar jar;
++
++int main() {
++ printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b);
++ B_table::B_ti_fn z = &B_table::func1;
++ int j = 1;
++ jar.call_fn_fn1(j,(void *)&z);
++ j++;
++ z = &B_table::func2;
++ b.call_fn_fn1(j,(void *)&z);
++ j++;
++ jar.call_fn_fn1(j,(void *)&z);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++struct Fooey {
++ void f(char* pX);
++ void f(int in);
++ void f(float fx);
++ void h(double dx);
++};
++
++void Fooey::f(char*) { } // ERROR - candidate
++void Fooey::f(int) { } // ERROR - candidate
++void Fooey::f(float) { } // ERROR - candidate
++void Fooey::h(double zahl) { }
++
++int main() {
++ Fooey Blah;
++ void (Fooey::*pointer)(double);
++ pointer = &Fooey::f; // ERROR - don't call Fooey::h
++ (Blah.*pointer)(42.5);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++class NF { };
++
++struct QF {
++ NF nf;
++
++ typedef float(NF::* const NPF)() const;
++
++ void p (NPF npf) const {
++ float q = (nf.*npf)();
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Special g++ Options: -w
++
++class A {
++ int j;
++};
++
++class Space {
++ int j;
++};
++
++typedef int (A::*pma)();
++
++class B : public Space, virtual public A {
++public:
++ int i;
++ int foo () {
++ return i!=42;
++ }
++ B() {
++ i = 42;
++ }
++};
++
++int call_base (A* ap, pma pmf) {
++ return (ap->*pmf)();
++}
++
++int main() {
++ B b;
++ return call_base ((A*)&b, (pma)&B::foo);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Special g++ Options:
++
++class S {
++public:
++ void (S::*pmf)();
++ void foo() {
++ pmf(); // WARNING -
++ }
++ static void foo1(S* sp) {
++ (sp->pmf)(); // ERROR -
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++class A;
++typedef int (A::*f_ptr) (void);
++
++class B {
++public:
++ B() {}; ~B() {};
++ B& dummy(f_ptr cb) { return *this; };
++};
++
++template<class SP, class CB> SP& call_dummy(SP* sp, CB cb) {
++ sp->dummy(cb);
++ return *sp;
++};
++
++class A {
++public:
++ A() {}; ~A() {};
++ int ok() { return 0; };
++ A& call_it(B* s) {
++ call_dummy(s, &A::ok);
++ return *this;
++ };
++};
++
++int main() {
++ A a; B b;
++ a.call_it(&b);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++int fail;
++
++class A *ptr_a;
++
++class A {
++public:
++ char space1[24];
++ virtual void foo() {
++ if (this != ptr_a)
++ fail = 1;
++ }
++};
++
++class Space {
++ char space2[36];
++};
++
++class B : public Space, public A {
++} b;
++
++void (B::*pmf1)() = &A::foo;
++void (A::*pmf2)() = &A::foo;
++
++int main() {
++ ptr_a = &b;
++ (b .* (void (B::*) ()) &A::foo) ();
++ (b .* pmf1) ();
++ (b .* pmf2) ();
++ (b .* &A::foo) ();
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pmf9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pmf9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++class K {
++public:
++ int f(int i) { return i; }
++};
++
++class Q {
++public:
++ Q() { kp = new K; }
++ int g();
++private:
++ K * kp;
++};
++
++int Q::g() {
++ return (kp->f)(42);
++};
++
++
++int main () {
++ Q q;
++ if (q.g() != 42)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++template <class T, class V>
++class A {
++public:
++ A (T at, V av);
++ void print () { }
++protected:
++ T t;
++ V v;
++};
++
++template <class T, class V>
++A<T, V>::A (T at, V av) {
++ t = at;
++ v = av;
++}
++
++
++template <class T, class V>
++class B: public virtual A<T, V> {
++public:
++ B (T at, V av);
++ void print () { }
++};
++
++template <class T, class V>
++B<T, V>::B (T at, V av) : A<T, V> (at, av) { } // gets bogus error -
++
++int main () {
++ int i = 2;
++ double x = 2;
++
++ B<int, double> ab(i, x);
++ ab.print();
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++class A {
++public:
++};
++
++template <class T>
++class B: public virtual A {
++public:
++ B ();
++ ~B ();
++};
++
++template <class T>
++B<T>::B () { }
++
++template <class T>
++B<T>::~B () { }
++
++int main () {
++ B<int> ab;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++
++template<class Repr>
++class syHandle
++{
++protected:
++ syHandle();
++ ~syHandle();
++ Repr *_repr;
++};
++
++template<class Repr>
++syHandle<Repr>::~syHandle()
++{
++}
++
++typedef char * char_ptr_t;
++
++template <>
++syHandle<char_ptr_t>::syHandle()
++{
++ _repr = 0;
++}
++
++template <>
++syHandle<char_ptr_t>::~syHandle()
++{
++ _repr = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/pt4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/pt4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++
++template <char* c> struct B { B() { } };
++B<0> bnull; // ERROR - could not convert template argument
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ref1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ref1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/ref1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/ref1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++int count;
++
++struct base {
++ base () { ++count; }
++ ~base () { --count; }
++ base(const base&o) { ++count; }
++};
++
++base base_returning_function ();
++
++const base& base_ref = base_returning_function ();
++
++int main () {
++ if (count != 1)
++ return 1;
++}
++
++base base_returning_function () {
++ base local_base_object;
++ return local_base_object;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/rtti1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/rtti1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/rtti1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/rtti1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++
++#include <typeinfo>
++#include <iostream.h>
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/rtti2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/rtti2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/rtti2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/rtti2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++#include <typeinfo>
++
++int main() {
++ typeid(bool);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/rtti3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/rtti3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/rtti3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/rtti3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++class base {
++public:
++ virtual ~base() {}
++ virtual void m1() = 0;
++ virtual void m2() = 0;
++};
++
++class intermediate : public virtual base {
++public:
++ virtual ~intermediate() {}
++ virtual void m1() {}
++ virtual void m2() {}
++};
++
++class derived : public intermediate {
++public:
++ virtual int IwantedThisMethod() { return 0; }
++ virtual int ButIgotThisOne() { return 1; }
++};
++
++int main() {
++ return derived().IwantedThisMethod();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/s9959.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/s9959.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/s9959.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/s9959.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++class A {
++protected:
++ int aData;
++};
++
++class B : public A {
++public:
++ virtual void func1() {
++ A::aData = 1;
++ }
++};
++
++class C : virtual public B {
++public:
++ virtual void func1(void) {
++ A::aData = 2;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/scast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/scast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/scast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/scast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++class A {};
++class C {};
++
++int main() {
++ A* a = 0;
++ C* c = static_cast<C*>(a); // ERROR - bad static cast
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/temp.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/temp.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/temp.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/temp.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++extern "C" int printf(const char *, ...);
++extern "C" const char *getenv(const char *);
++
++class T {
++ int i;
++public:
++ T() {
++ i = 1;
++ printf("T() at %x\n", this);
++ }
++ T(const T& o) {
++ i = o.i;
++ printf("T(const T&) at %x <-- %x\n", this, &o);
++ }
++ T operator +(const T& o) {
++ T r;
++ r.i = this->i + o.i;
++ return r;
++ }
++ operator int () {
++ return i;
++ }
++ ~T() { printf("~T() at %x\n", this); }
++} s, b;
++
++int foo() { return getenv("TEST") == 0; }
++
++int main() {
++ int i = foo() ? s+b : s;
++ return i != 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/thunk1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/thunk1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/thunk1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/thunk1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options: -fvtable-thunks
++
++struct C1
++{
++ virtual ~C1();
++};
++
++struct C2 : public virtual C1
++{
++ virtual ~C2();
++};
++
++struct C3 : public virtual C2
++{
++ virtual ~C3();
++};
++
++C3::~C3() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/thunk2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/thunk2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/thunk2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/thunk2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// Special g++ Options: -fvtable-thunks
++
++#include <typeinfo>
++
++int state;
++int fail;
++
++class A {
++public:
++ A() {
++ if (++state != 1)
++ fail = 1;
++ }
++ virtual int foo() {
++ if (++state != 2)
++ fail = 1;
++ }
++ virtual ~A() {
++ if (++state != 3)
++ fail = 1;
++ }
++};
++
++A* bar() {
++ return new A;
++}
++
++main() {
++ A *aptr = bar();
++ aptr->foo();
++ if (dynamic_cast <void*> (aptr) != aptr)
++ fail = 1;
++ if (typeid (*aptr) != typeid (A))
++ fail = 1;
++ delete aptr;
++ if (++state != 4)
++ fail = 1;
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/thunk3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/thunk3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/thunk3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/thunk3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Special g++ Options: -fvtable-thunks
++
++int state;
++int fail;
++
++class A {
++public:
++ A() {
++ if (++state != 1)
++ fail = 1;
++ }
++ virtual int foo() {
++ if (++state != 2)
++ fail = 1;
++ }
++ virtual ~A() {
++ if (++state != 3)
++ fail = 1;
++ }
++};
++
++A* bar() {
++ return new A;
++}
++
++main() {
++ A *aptr = bar();
++ aptr->foo();
++ if (dynamic_cast <void*> (aptr) != aptr)
++ fail = 1;
++ delete aptr;
++ if (++state != 4)
++ fail = 1;
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/unroll1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/unroll1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/unroll1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/unroll1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Special g++ Options: -g -O -funroll-loops
++
++struct A {
++ inline ~A() { }
++};
++
++void foo (A) {
++ while (1)
++ A bar;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++struct S0 { virtual void f1 () { } };
++
++struct S1 : virtual public S0 { virtual void f1 () { } };
++
++struct S2 : public S1 { virtual void f1 () { } };
++
++struct S3 : virtual public S0 { virtual void f1 () { } };
++
++struct S4 : public S3 { };
++
++void creator () { new S4; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++struct S0 {
++ virtual int is_kind_of_S1 () const { return 0; }
++ virtual void dummy () { }
++};
++
++struct S1 : virtual public S0 {
++ virtual int is_kind_of_S1 () const { return 1; }
++ virtual void dummy () { }
++};
++
++struct S2 : virtual public S0 {
++ virtual void dummy () { }
++};
++
++struct S3 : public S2, public S1 {
++ virtual void dummy () { }
++};
++
++static struct S0 *var = new S3 ();
++
++int main () {
++ if (var->is_kind_of_S1() != 1)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++class B {
++public:
++ int Bi;
++ virtual int g() { };
++};
++
++class D : private B {
++ int Di;
++};
++
++class E : public virtual D, public B {
++ int Ei;
++}; // WARNING - direct base inaccessible due to ambiguity
++
++E e;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Special g++ Options:
++
++void Foo () {}
++
++class B {
++public:
++ virtual void foo() = 0;
++};
++
++class D: virtual public B {
++public:
++ void foo() { Foo(); }
++};
++
++class D1: public D {};
++
++class D2: public D {};
++
++class D1_2: public D1, public D2 {
++public:
++ void foo() { D1::foo(); D2::foo(); }
++};
++
++main() {
++ D1_2 h;
++ h.foo();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// Ensure that virtual base upcast and downcasting works on this
++// conversions during virtual function dispatch at ctor/dtor time
++// when dynamic vtable fixups for deltas are needed.
++
++int fail = 0;
++
++struct BASE1 {
++ virtual ~BASE1 () { }
++};
++
++class MID;
++
++class BASE2 {
++public:
++ virtual MID *VFN (){ return 0; }
++};
++
++class MIBASE : public BASE1, public BASE2 { };
++
++class VBB : public MIBASE {
++public:
++ virtual long get_STATE () const = 0;
++ void print_STATE() { if (get_STATE () != 87654321) fail = 1; }
++};
++
++class VBD : public virtual VBB {
++ long STATE;
++public:
++ long get_STATE() const { return STATE; }
++ VBD() { STATE = 87654321; }
++ ~VBD() { STATE = 87654321; }
++};
++
++class MID : public virtual VBD {
++public:
++ MID () { print_STATE(); }
++ ~MID () { print_STATE(); }
++ virtual MID *VFN() { return this; }
++};
++
++class LAST : public MID {
++public:
++ LAST () { print_STATE(); }
++ ~LAST () { print_STATE(); }
++};
++
++int main() {
++ MIBASE *o = new LAST;
++ MID *p = o->VFN();
++ p->print_STATE();
++ delete o;
++ return fail;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/virt6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/virt6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++// This testcase ensures that we can build vtable names for complex MI
++// classes.
++
++class C_A {
++public:
++ virtual int foo(void *) { }
++} a;
++
++class C_B : public C_A {
++} b;
++
++class C_C : public C_A {
++} c;
++
++class C_D : public C_A {
++} d;
++
++class C_E : public C_C, public C_B {
++public:
++ virtual int foo(void *) { }
++} e;
++
++class C_F : public C_D, public C_B {
++public:
++ virtual int foo(void *) { }
++} f;
++
++class C_G : public C_A {
++public:
++ virtual int foo(void *) { }
++} g;
++
++class C_H : public C_G, public C_E, public C_F {
++public:
++ virtual int foo(void *) { }
++} h;
++
++int main() {
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/vtable1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/vtable1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/vtable1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/vtable1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// Special g++ Options: -fno-implement-inlines
++struct type {
++ virtual void m1();
++ virtual void m2() { }
++};
++
++void type::m1() { }
++
++int main() {
++ type t;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options: -Wall
++
++typedef char * charptr;
++char c[]={'A','B','C','D'};
++int i=int(&c);
++int *pp=&i;
++void foo() { }
++int main()
++{
++ charptr(*pp)++; // WARNING -
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// Special g++ Options: -Wall
++
++enum Boolean {
++ Ok = 0,
++ NotOk = 1,
++};
++
++enum OpResult {
++ Succeeded = 0,
++ TempFail = 1,
++ PermFail = 2,
++};
++
++OpResult fn1() {
++ return TempFail;
++}
++
++extern void foo();
++
++int
++main () {
++ if (fn1() == Ok) { // WARNING -
++ foo();
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Special g++ Options: -Wall
++
++class B {
++public:
++ B(int) { }
++};
++
++class D : public B {
++ int member;
++ D() : member(0), B(member) { } // WARNING - reordered
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++void foo (int a, int a) { } // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Special g++ Options: -Wpointer-arith
++
++double X(const double x) { return x; }
++double Y() { return 1.0; }
++double Z() { return 2.0; }
++
++struct A {
++ void bar() { }
++ void foo() { }
++};
++
++typedef void (A::*pmf)();
++
++static int mememe = &A::foo - &A::bar; // WARNING -
++pmf b = &A::foo-1; // WARNING -
++
++int main() {
++ double y;
++ y=X(Y-Z); // WARNING -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Build don't link:
++// Special g++ Options: -Woverloaded-virtual
++
++struct B4 {
++ virtual void bothfardiff(float); // WARNING - was hidden
++};
++
++struct B3 : public B4 {
++};
++
++struct B2 {
++};
++
++struct B {
++ virtual void baseonly(int);
++
++ virtual void bothsame(int);
++
++ virtual void bothdiff(float); // WARNING - was hidden
++
++ virtual void both2same(int);
++ virtual void both2same(float);
++
++ virtual void both12diff(int);
++ virtual void both12diff(float); // WARNING - was hidden
++};
++
++struct D : public B, public B2, public B3 {
++ virtual void derivedonly(int);
++
++ virtual void bothsame(int);
++
++ virtual void bothdiff(int); // WARNING -
++
++ virtual void both2same(int);
++ virtual void both2same(float);
++
++ virtual void both12diff(int); // WARNING -
++
++ virtual void bothfardiff(int); // WARNING -
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -Wall
++
++const int& foo() {
++ extern int bar;
++
++ return bar;
++}
++
++const int* baz() {
++ extern int bar;
++
++ return &bar;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.mike/warn8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.mike/warn8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++struct foo {
++ bool test();
++};
++bool func();
++
++void test() {
++ foo A;
++ bool (foo::* pmf)() = &foo::test;
++ bool (*pf)() = func;
++
++ if (A.test) ; // WARNING -
++ if (func) ; // WARNING -
++ if (bool(A.test)) ; // WARNING -
++ if (bool(func)) ;
++ if (pmf) ;
++ if (pf) ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/configure.in gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/configure.in
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=t131.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++Makefile
++config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/README gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/README
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/README 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/README 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++Date: Fri, 22 Jan 93 15:20:55 +0100
++From: niklas@della.appli.se (Niklas Hallqvist)
++Message-Id: <9301221420.AA18489@della.appli.se>
++Subject: g++.niklas DejaGnu sharfile
++
++These are my test-cases in DejaGnu format.
++
++The tests which have "passed" in the groups variable do actually pass
++on my local G++ so if there is a specific "passed" test you'd like to
++see working in your version of G++ but it doesn't pass, contact me and
++I'll dig up the specific patches you'll need.
++
++I have about a hundred or so unsorted test-cases which are not
++included in this archive, due to lack of time and boredom stemming
++from writing .exp-files. But they will show up eventually.
++
++All these files, and this file are Copyright FSF 1993, and fall under
++the GPL version 2.0 or later.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t113.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t113.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t113.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t113.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed niklas explicit-construct virtual-base
++struct A {};
++struct B : virtual A { B(); };
++struct C : B {};
++struct D { D(C&); };
++D d(C());
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t114.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t114.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t114.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t114.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed niklas explicit-construct
++struct A { A(); };
++struct B { B(A&); };
++B b(A());
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t115.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t115.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t115.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t115.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed niklas virtual-base
++struct A { A(); virtual void f(); };
++struct B : virtual A { B(); };
++struct C : B {};
++C *c = new C;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t118.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t118.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t118.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t118.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS niklas pt
++template <class T> class C1 {};
++class C1<int> C1_int_object;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t119.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t119.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t119.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t119.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed niklas i386
++unsigned long foo(unsigned long x)
++{
++ return x & ~0104000;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t120.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t120.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t120.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t120.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed niklas ellipsis
++typedef void (*T) (...);
++void f ();
++struct S { void g (T); void h() { g(f); } };// ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t121.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t121.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t121.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t121.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed niklas ellipsis
++void f ();
++void g1 (void (*) (...)); void h1 () { g1 (f); }// ERROR - .*
++struct S { void g2 (void (*) (...)); void h2 () { g2 (f); } };// ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t122.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t122.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t122.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t122.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed niklas dwarf
++struct S { S(); };
++
++inline void
++foo (
++ S a,
++ S b
++ )
++{}
++
++void
++bar (S s1, S s2)
++{ foo (s1, s2); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t123.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t123.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t123.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t123.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed niklas dwarf
++struct S { S(); };
++void f(S) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t124.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t124.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t124.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t124.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed niklas nested-types static-members
++struct A
++{
++ static void f ();
++ struct B
++ {
++ static void g () { f (); }
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t125.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t125.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t125.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t125.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed niklas nested-types static-members
++struct A
++{
++ static void f ();
++ struct B
++ {
++ void h () { f (); }
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t126.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t126.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t126.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t126.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed niklas nested-types static-members
++struct A
++{
++ static void f ();
++ struct B
++ {
++ void g () {}
++ void h () {}
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t127.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t127.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t127.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t127.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed niklas nested-types
++struct A { struct B { ~B (); }; };
++A::B::~B () {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t128.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t128.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t128.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t128.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS niklas uncaught default-construct
++struct A { A (int); };
++struct B : A {}; // ERROR -
++void f () { B (0); }// ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t129.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t129.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t129.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t129.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed niklas nested-types
++struct X {
++struct A { A (int); };
++struct B : A { B (int a) : A (a) {} };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t130.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t130.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t130.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t130.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed niklas nested-types
++struct A;
++struct B { struct A { A(int); }; struct C : A { C() : A (0) {} }; };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t131.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t131.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t131.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t131.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed niklas static-members
++struct A { static A a; };
++A f () { return A::a; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t132.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t132.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t132.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t132.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// GROUPS passed niklas construct-destruct
++struct S { S (); ~S (); };
++void f () { while (1) S s; }
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t133.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t133.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t133.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t133.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed niklas nested-types
++struct A { struct B { void operator = (const B&); }; };
++void A::B::operator = (const B&) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t134.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t134.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t134.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t134.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS passed niklas static-members
++extern "C" int f ();
++struct A { static void f () {} };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t135.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t135.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t135.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t135.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS niklas pt friend
++// excess errors test - XFAIL *-*-*
++template <class T> class C1
++{
++public:
++ void diddle_C2 ();
++};
++
++class C2
++{
++ int data_member;
++ friend class C1;
++};
++
++class C2 C2_object;
++
++template <class T> void C1<T>::diddle_C2 ()
++{
++ C2_object.data_member = 99;
++}
++
++C1<int> C1_int_object;
++
++void foobar ()
++{
++ C1_int_object.diddle_C2 ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t136.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t136.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t136.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t136.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++// GROUPS niklas overloading
++extern "C" void f (char*);
++void f (const char*) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t137.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t137.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t137.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t137.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed niklas nested-types
++struct A {
++ struct B { void f (); };
++ struct C : B { void f () { B::f (); } };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t138.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t138.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t138.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t138.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// GROUPS passed niklas hiding
++struct A;
++void f (A*);
++A* A;
++void g () { f (A); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t139.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t139.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t139.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t139.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// GROUPS passed niklas hiding ARM
++// Build don't link:
++// Special g++ Options: -w
++struct stat {};
++stat gstat;
++int stat (struct stat*);
++void f () { struct stat* ps; stat (ps); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t140.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t140.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t140.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t140.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// GROUPS passed niklas hiding local-types
++extern "C" int printf (const char*, ...);
++int val = 1;
++void S () { printf ("FAIL\n"); }
++void f () { printf ("PASS\n"); val = 0; }
++int main ()
++{
++ struct S { S () { f (); } };
++ S ();
++ return val;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t141.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t141.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.niklas/t141.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.niklas/t141.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++// Special g++ Options: -Wshadow
++// GROUPS passed niklas scoping ARM
++class X { X (int); };
++void X (int);// ERROR - .*hides constructor.*
++void f () { X (1); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++namespace foo{
++ int eine_funktion(int)
++ {
++ return 0;
++ }
++}
++
++namespace foo{
++ void eine_funktion(int,int)
++ {}
++}
++
++namespace bar = foo;
++
++int main()
++{
++ return bar::eine_funktion(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++//Build don't link:
++namespace NS1
++{
++ int a;
++}
++
++namespace NS2 = NonExistant; //ERROR -
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++namespace A{
++ struct X{};
++ void f(X&);
++ extern int i;
++ namespace a_very_long_namespace_name{
++ int k;
++ }
++}
++
++namespace B = A;
++namespace B = A;
++namespace B = B;
++
++namespace avl = A::a_very_long_namespace_name;
++
++void B::f(A::X& x)
++{
++ B::f(x);
++ f(x);
++ avl::k = 1;
++}
++
++int B::i = 0;
++
++int main()
++{
++ B::X x;
++ if (B::i)
++ A::f(x);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++namespace A = B; // ERROR - unknown namespace
++
++namespace C{}
++namespace D = C;
++namespace D { // ERROR - reopening namespace with alias
++ void f();
++}
++
++void C::f(){} // ERROR - previous definition
++
++void D::f(){} // ERROR - redefinition
++
++namespace E = C::F; // ERROR - unknown namespace
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++namespace foo{
++ int eine_funktion(int)
++ {
++ return 0;
++ }
++}
++
++namespace foo{
++ void eine_funktion(int,int)
++ {}
++}
++
++namespace bar = foo;
++
++int main()
++{
++ return bar::eine_funktion(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Check namespace aliases inside blocks
++namespace A {
++ int i;
++ void f(){
++ i = 0;
++ }
++}
++
++int g();
++
++int main ()
++{
++ namespace B = A;
++ B::i=42;
++ B::f();
++ using namespace B;
++ f();
++ // A::i is now 0, B::i is 1
++ return g();
++}
++
++namespace B {
++ int i = 1;
++}
++
++int g()
++{
++ namespace x = A;
++ if (x::i)
++ {
++ namespace x = B;
++ return x::i;
++ }
++ return x::i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/alias7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/alias7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++//Build don't link:
++namespace A{
++ namespace B{int i;}
++ using namespace B;
++}
++
++namespace C=A;
++
++void f(){
++ C::i = 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/anon1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/anon1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/anon1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/anon1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++namespace{
++ void f();
++}
++
++int main()
++{
++ f();
++}
++
++namespace{
++ void f(){}
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/bogus1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/bogus1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/bogus1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/bogus1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++namespace N {}
++
++void f(int N::k); // ERROR - cannot use `::' in parameter declaration
++
++class Foo
++{
++ int N::j; // ERROR - invalid use of `::'
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/crash1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/crash1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/crash1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/crash1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class T>
++struct S1 {};
++
++namespace N {
++}
++
++struct S2
++{
++ typedef N::S1<int> S2_T; // ERROR - parse error
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/crash2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/crash2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/crash2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/crash2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++// Submitted by bjornw@fairplay.no
++
++// crash test - XFAIL *-*-*
++
++namespace hei {
++ class CSomeClass {};
++ extern CSomeClass SomeClass;
++};
++
++hei::CSomeClass hei::CSomeClass; // ERROR - should be hei::SomeClass
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/crash3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/crash3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/crash3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/crash3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++namespace N {
++ template <class T> struct S;
++};
++
++void f()
++{
++ N::S(); // ERROR - invalid use of template
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/extern1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/extern1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/extern1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/extern1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't run:
++
++// Based on a testcase by eyal.ben-david@aks.com
++
++// An extern declaration of an undeclared object within a function
++// introduces the object into the enclosing namespace [basic.link]/7
++
++namespace {
++ void foo() {
++ extern int xx;
++ xx = 0;
++ }
++ int xx = 1;
++}
++
++int main() {
++ xx = 2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/friend1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/friend1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/friend1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/friend1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++namespace A{
++ void f(int);
++}
++
++class X{
++ friend void A::f(int);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/friend2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/friend2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/friend2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/friend2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++//Build don't link:
++namespace A{
++ void foo();
++}
++
++
++namespace B{
++class B{
++ friend void A::foo();
++};
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/invalid1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/invalid1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/invalid1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/invalid1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++//Build don't link:
++namespace x { };
++
++void f(int);
++
++int main()
++{
++ x(); // ERROR - calling a namespace
++ x=4; // ERROR - assigning to a namespace
++ f(x); // ERROR - passing a namespace as parameter
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++class ostream;
++extern ostream cout;
++namespace foo
++{
++ struct S
++ {
++ int i;
++ };
++
++ extern ostream &operator<<(ostream &, const S &);
++}
++
++
++void bar(foo::S s)
++{
++ cout << s ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Check association of {error} for Koenig lookup
++// Special g++ Options:
++
++struct QString { operator void * (); };
++int foo()
++{
++ QString bar;
++ return (bar == __null );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++//Check association of member pointer in overload resolution.
++struct A {
++ int m_val;
++ friend int operator ->* (A & other, int A::*pm)
++ { return 31; }
++};
++
++int A::*pi = & A::m_val;
++
++int
++main(void)
++{
++ A c;
++ c.m_val = 42;
++ int j = c ->* pi;
++
++ if (j == 31)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++void f();
++void f(int);
++
++namespace A{
++ struct S{
++ void f();
++ void f(S);
++ };
++ void f(S&){}
++ void h(S&){}
++}
++
++template<class T>
++void g(T t){
++ f(t);
++}
++
++int main()
++{
++ A::S s;
++ f(s);
++ g(s);
++ h(s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// To find function pointers in Koenig lookup is ok as long as we only find one.
++namespace A{
++ void foo(); // ERROR -
++ struct X{};
++ void (*bar)(X*)=0;
++}
++using A::X;
++
++void (*foo)(X*)=0; // ERROR -
++
++void g()
++{
++ foo(new X); // ERROR - both objects and functions found
++ bar(new X); // ok
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++namespace A{
++ struct X{};
++
++ X foo(X a){return a;}
++ void bar(X*){}
++}
++
++int main()
++{
++ A::X x;
++ bar(&foo(x)); // WARNING - address of temporary
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/koenig7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/koenig7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Test for Koenig lookup involving overloaded functions.
++
++namespace N1 {
++ struct A { };
++ void f1(A) {}
++ void f2(float) {}
++ void g(void (*)(float)) {}
++}
++
++using N1::f1;
++void f1(float) {}
++
++using N1::f2;
++template <class T>
++void f2(N1::A, T) {}
++
++void g(void (*)(int)) {}
++
++int main() {
++ g(&f1); // Works?
++ g(f2); // Works?
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++typedef int __quad_t;
++typedef __quad_t __qaddr_t;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++template <class charT>
++struct basic_string
++{
++ charT append (charT c)
++ { return c; }
++};
++typedef char c;
++template class basic_string <char>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++namespace A{
++ int i;
++ int f();
++}
++
++int A::f()
++{
++ return i;
++}
++
++int main()
++{
++ return A::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++//Build don't link:
++namespace X{
++ typedef int foo;
++ const int bar=2;
++ namespace Y{
++ void f(foo);
++ extern int g;
++ extern int g1;
++ struct h{
++ void i(foo);
++ };
++ }
++}
++
++void X::Y::f(foo)
++{
++}
++
++int X::Y::g = bar;
++int X::Y::g1(bar);
++
++void X::Y::h::i(foo)
++{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/lookup5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/lookup5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++namespace A{
++ void f();
++}
++
++namespace B{
++ using namespace A;
++ void f(int); // ERROR - referenced below
++}
++
++using namespace B;
++
++void g()
++{
++ ::f(); // ERROR - A::f is not found
++}
++
++using namespace A;
++
++void g1()
++{
++ ::f(); // ok, it is found now
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/main1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/main1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/main1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/main1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++// main is only reserved in the global namespace [basic.start.main]/3
++
++// submitted by Gerald Gutierrez <gutier@intergate.bc.ca>
++
++namespace A { void main () { } }
++namespace B { void main () { } }
++namespace C {
++ void main () { }
++ namespace D {
++ void main () { }
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++//Build don't link:
++namespace bb
++{
++ int f(int);
++
++ namespace k
++ {
++ void foo(int bar)
++ {
++ int i=bb:f(bar); // ERROR - namespace
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link
++// Check [namespace.memdef]/2
++
++namespace A{
++ void f(int);
++ void f(int,int);
++ int i; // ERROR - .*
++}
++
++void A::f(){} // ERROR - should have been declared before
++
++namespace B{
++ void A::f(int){} // ERROR - B does not surround A
++}
++
++int A::i; // ERROR - redefinition
++
++void A::f(int,int){} // ok
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++namespace fred
++{
++ int barney();
++ extern int wilma;
++}
++
++int fred::barney()
++{
++ return fred::wilma;
++}
++
++int fred::wilma;
++
++int barney()
++{
++ return 1;
++}
++
++int main()
++{
++ return fred::barney();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++namespace std{
++ void f(){}
++ void g();
++ int i=5;
++}
++
++void std::g()
++{}
++
++int main()
++{
++ return std::i-5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++//Special g++ Options: -fhonor-std
++namespace std{
++ int f(){
++ return 0;
++ }
++}
++
++int f()
++{
++ return 1;
++}
++
++int main()
++{
++ return std::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++//Build don't link:
++namespace std {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++class Y {
++public:
++ void operator +(int) const;
++};
++
++namespace X {
++ extern Y const& z;
++}
++
++void f(void) {
++ X::z + 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++//Build don't link:
++namespace foo
++{
++ class c
++ {
++ };
++};
++
++int
++foo::c:fn () // ERROR - syntax error
++{
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++namespace foo{
++ int eine_funktion(int)
++ {
++ return 0;
++ }
++
++ int eine_funktion(int,int)
++ {
++ return 1;
++ }
++}
++
++int main(int,char**)
++{
++ return foo::eine_funktion(1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++namespace foo{
++ struct X{
++ int i;
++ void f();
++ static int k1,k2;
++ };
++ void X::f(){}
++ int var;
++ int X::k1;
++}
++
++using namespace foo;
++X zzz;
++int X::k2;
++
++void andere_funktion()
++{
++ zzz.f();
++ var=4;
++}
++
++int main(int,char**)
++{
++ andere_funktion();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++namespace foo{
++ void eine_funktion(int)
++ {}
++}
++
++using namespace foo;
++
++namespace foo{
++ void eine_funktion(int,int)
++ {}
++}
++
++void andere_funktion()
++{
++ eine_funktion(3,4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++namespace A{
++ enum foo{a,b,c};
++}
++using A::foo;
++using A::b;
++void g()
++{
++ foo x;
++ x=b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++namespace X{
++ class Y{};
++}
++
++X::Y z;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++namespace A{
++ int i;
++ namespace B{
++ void f(){i++;}
++ int i;
++ void g(){i++;}
++ }
++}
++
++int main()
++{
++ return A::i-A::B::i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++namespace A{
++ struct X{
++ int i;
++ X(){}
++ X(int j);
++ void operator=(const X&);
++ virtual ~X(){}
++ };
++ void X::operator=(const X&o)
++ {
++ i=o.i;
++ }
++}
++
++A::X::X(int j):i(j){}
++
++namespace A{
++ struct Y:public X{
++ int j;
++ Y(int,int);
++ };
++}
++
++A::Y::Y(int a,int b):X(a),j(b)
++{}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++namespace B{
++ void f();
++}
++
++using namespace B;
++
++void g()
++{
++ ::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/ns9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/ns9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++namespace bb
++{
++ int f(int);
++
++ namespace k
++ {
++ void foo(int bar)
++ {
++ return bb:f(bar); //ERROR - syntax error
++ }
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Unqualified lookup should find all functions.
++// Duplicates are ignored as long as they lose during overload resolution.
++namespace A{
++ int f(){
++ return 1;
++ }
++ int f(double);
++}
++namespace B{
++ int f(int){
++ return 2;
++ }
++ int f(double);
++}
++
++int f(int,int)
++{
++ return 3;
++}
++
++using namespace A;
++using namespace B;
++
++int main()
++{
++ if(f() != 1)
++ return 1;
++ if(f(1) != 2)
++ return 1;
++ if(f(0,0) != 3)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++namespace A{
++ void f(); // ERROR - .*
++}
++
++using namespace A;
++
++void f(); // ERROR - .*
++
++void g()
++{
++ f(); // ERROR - ambiguous, ::f or A::f ?
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Declarations after the first one don't affect the set of used decls.
++
++namespace A{
++ void f(); // ERROR - .*
++}
++
++using A::f;
++
++namespace A{
++ void f(int);
++}
++
++using A::f;
++
++void g()
++{
++ f(4); // ERROR - too many arguments
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++namespace A{
++ void f();
++}
++
++using A::f;
++void f(); // ERROR - duplicate declaration
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/overload5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/overload5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++namespace A{
++ void f(){}
++}
++
++using A::f;
++
++void f(int);
++void f(){} // ERROR - conflict
++
++void g()
++{
++ f(4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++namespace foo {
++
++ template <class T>
++ class x {};
++
++}
++
++foo::x<int> y;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++//Build don't link:
++//Inheritance from templates which are namespace members
++namespace foo {
++
++ template <class T>
++ struct x {
++ x(){}
++ };
++
++}
++
++class y : public foo::x<int> {};
++
++y r;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++//Check instantiation of templates outside their namespace
++namespace A{
++template <class T>void g(){}
++template <class T> struct B {
++ B(){
++ f();
++ }
++ void f()
++ {
++ g<T>();
++ }
++};
++}
++
++template class A::B<int>;
++A::B<int> s;
++
++int main()
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++namespace NS
++{
++template <typename T>
++void solver (){}
++
++}
++
++template<typename T>
++void solver(){}
++
++int main()
++{
++ solver<double>();
++ NS::solver<double>();
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++//Check whether namespace-scoped template instantiations
++//are mangled differently.
++
++namespace X{
++ template<class T>
++ struct Y{
++ int f(T){
++ return 1;
++ }
++ template<class X>void g(){}
++ };
++}
++
++template<class T>
++struct Y{
++ int f(T){
++ return 2;
++ }
++};
++
++int main()
++{
++ X::Y<int> z;
++ if (z.f(4) != 1)
++ return 1;
++ z.template g<long>();
++
++ Y<int> z1;
++ if (z1.f(5) != 2)
++ return 1;
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++//Build don't link:
++//reported by Theodore Papadopoulo (Theodore.Papadopoulo@sophia.inria.fr)
++
++namespace A {
++
++ namespace B {
++
++ template <class T1,class T2>
++ struct B {
++ static const unsigned count = 0;
++ template <class ForwardIter>
++ void SetError(ForwardIter it,const T1& p1,const T2& p2) const { }
++ };
++
++ template <>
++ const unsigned B<int,int>::count = 2; // ERROR - duplicate init
++ }
++};
++
++int
++main()
++{
++ unsigned kk = A::B<int,int>::count; // ERROR - not a template: syntax error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++// crash test - XFAIL *-*-*
++
++// Based on bug report by Eric NICOLAS <nicolas@bnp-eng.remcomp.com>
++
++namespace foo {
++ template<class F> struct bar {};
++}
++
++void baz() {
++ foo::bar(); // ERROR - template used as expression
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++namespace X {
++ template <class T> class foo;
++}
++
++template <class T>
++class X::foo {
++ T worthless;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/template9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/template9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Produces ICE 980519.
++// Test case from Dirk Engelmann <Dirk.Engelmann@IWR.Uni-Heidelberg.De>
++
++namespace vector {
++
++ // allocate memory for vector
++
++ template <class T>
++ inline T* alloc(const int aWidth)
++ {
++ // allocate memory
++ return new T[aWidth];
++ }
++
++}
++
++namespace matrix {
++
++ // allocate memory for matrix
++ template <class T>
++ T** alloc(const int aWidth,const int aHeight)
++ {
++ // allocate memory
++ T **mat = vector::alloc<T*>(aHeight);
++ T *data = vector::alloc<T> (aWidth*aHeight);
++ // set pointer
++ for (int i=0; i<aHeight; i++)
++ mat[i] = &data[aWidth*i];
++ // ok
++ return mat;
++ }
++
++}
++
++int main(void)
++{
++ // sample
++ double **m=matrix::alloc<double>(10,20);
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/undef1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/undef1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/undef1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/undef1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++//Build don't link:
++namespace A{
++}
++
++struct Y: A::S<int>{}; //ERROR - no such type
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++//Build don't link:
++//Based on a report by Helmut Jarausch <jarausch@IGPM.Rwth-Aachen.DE>
++template<class>
++class foo{};
++
++namespace ABC
++{
++ using ::foo;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++class joey {
++public:
++ typedef int SVec;
++};
++
++using joey::SVec; // ERROR - joey is not a namespace
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Origin: Brendan Kehoe <brendan@cygnus.com>
++
++namespace foo
++{
++ void x (bool); // ERROR - candidates
++ void x (char); // ERROR - candidates
++ void x (int); // ERROR - candidates
++ void x (double); // ERROR - candidates
++}
++
++namespace baz { void x (int); } // ERROR - candidates
++
++void fn (int i)
++{
++ using foo::x;
++ using baz::x;
++ x(i); // ERROR - ambiguous
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++namespace A{
++ void foo(int){}
++}
++namespace B{
++ void foo(bool){}
++}
++
++void bar()
++{
++ using B::foo;
++ using A::foo;
++ foo(true);
++}
++
++namespace Foo {
++ template<class N> void Hello(N) {}
++}
++
++int main() {
++ using Foo::Hello;
++ Hello(4);
++ bar();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++using namespace bb; // ERROR - .*
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++void f();
++namespace A{
++ using ::f;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++typedef unsigned int atypedef;
++struct astruct{};
++void afunction();
++void aovlfunction();
++void aovlfunction(int);
++int avariable;
++
++namespace foo {
++ using ::atypedef;
++ using ::astruct;
++ using ::afunction;
++ using ::aovlfunction;
++ using ::avariable;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++//Build don't link
++#include <vector>
++namespace csp {
++using namespace std::vector; // ERROR - vector is not a namespace
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++namespace a {
++ class b {
++ using std::c; //ERROR - namespace using on class level
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++//Build don't link:
++#include <vector>
++
++namespace csp {
++ using namespace std;
++ struct X {
++ vector<int> v;
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++namespace X{
++ void f(int){}
++}
++
++void f();
++
++int main()
++{
++ using X::f;
++ f(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++namespace M {
++ int i;
++}
++namespace N {
++ using namespace M;
++}
++
++using namespace N;
++int j = i;
++
++namespace O{
++ int k;
++}
++
++namespace N {
++ using namespace O;
++}
++
++int l = k;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.ns/using9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.ns/using9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Test for proper merging of functions from multiple using directives.
++
++// Build don't link:
++
++namespace standard
++{ void print(int) {};
++ void dump(int) {};
++}
++namespace A { using standard::print; }
++namespace B { using namespace standard; }
++namespace User
++{ using namespace standard;
++ using namespace A;
++ void test()
++ { print(1); }
++ // egcs-1.1: call of overloaded `print (int)' is ambiguous
++}
++namespace User2
++{ using namespace standard;
++ using namespace B;
++ void test()
++ { print(1); } // egcs has no problems here
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/900403_04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/900403_04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/900403_04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/900403_04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// GROUPS passed abort
++// Build don't link:
++// g++ 1.37.1 bug 900403_04
++
++// The following erroneous code causes g++ to abort.
++
++// keywords: abort, bit-fields, zero length
++
++struct s {
++ unsigned int foo:0; // ERROR - causes abort
++ unsigned int field;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/900519_12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/900519_12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/900519_12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/900519_12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// GROUPS abort
++// Build don't link:
++// g++ 1.37.1 bug 900519_12
++
++// The following erroneous code causes g++ to segfault.
++
++// cfront 2.0 passes this test.
++
++// keywords: segfault, typedef, pointer type, function type
++
++typedef eek void (*)(); // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++class X{
++ unsigned int i;
++ public:
++ void f();
++};
++
++void X::f()
++{
++ union {
++ int foo[sizeof (i)];
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Based on a test-case in the Standard, submitted by several people
++
++class Outer {
++ typedef int T;
++ struct Inner {
++ T i; // ERROR - not accessible - XFAIL *-*-*
++ void f() {
++ T j; // ERROR - not accessible - XFAIL *-*-*
++ }
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// The standard sez that a use of a name gets the most access it can through
++// the various paths that can reach it. Here, the access decl in B gives
++// us access.
++
++struct A
++{
++ void f ();
++};
++
++struct B: private virtual A
++{
++ A::f;
++};
++
++struct C: private virtual A, public B
++{
++};
++
++int
++main ()
++{
++ C c;
++
++ c.f ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++struct A {
++ static int i;
++};
++
++struct B : private A { };
++
++struct C : public B {
++ int f () { return A::i; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++class A
++{
++protected:
++ int i;
++};
++
++class B : private A
++{
++protected:
++ A::i;
++};
++
++struct C : public B {
++ friend int f(C *p);
++};
++
++int f(C *p) {
++ return p->i;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/access6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/access6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++template <int I>
++struct S {
++ void g();
++};
++
++class C {
++ static const int i = 3; // gets bogus error - private - XFAIL *-*-*
++public:
++ S<C::i>* f(); // gets bogus error - redeclared - XFAIL *-*-*
++};
++
++S<C::i>* C::f() { // gets bogus error - private - XFAIL *-*-*
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/addrof1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/addrof1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/addrof1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/addrof1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++typedef struct st {
++ unsigned char a;
++ unsigned char b;
++ unsigned char c;
++ unsigned char d;
++} __attribute__((aligned(4))) st;
++
++void testme(int, int, int);
++
++static inline void
++stupid_func(st s)
++{
++ testme(s.a, s.b, s.c);
++}
++
++int main()
++{
++ st s;
++
++ s.a = s.b = s.c = 216;
++ stupid_func(s);
++
++ return 0;
++}
++
++void testme(int a, int b, int c)
++{
++ if (a != 216 || b != 216 || c != 216)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ambig1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ambig1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ambig1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ambig1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++
++struct A {
++ int operator ++(); // ERROR - candidates
++ void operator ()(); // ERROR - candidates
++ void operator delete(void*); // ERROR - candidates
++};
++
++struct B {
++ int operator ++(int); // ERROR - candidates
++ void operator ()(); // ERROR - candidates
++ void operator delete(void*); // ERROR - candidates
++ void f();
++};
++
++struct C : public A, public B {
++};
++
++void f()
++{
++ C c;
++ C* cp;
++
++ delete cp; // ERROR - ambiguous
++ c(); // ERROR - ambiguous
++ c++; // ERROR - ambiguous
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/anon1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/anon1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/anon1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/anon1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++static union {
++ union {
++ };
++}; // ERROR - anonymous union with no members
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/anon2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/anon2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/anon2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/anon2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++extern "C" void abort (void);
++
++static union {
++ int x1;
++ long x2;
++ short x3;
++ long x4;
++};
++
++static union {
++ union {
++ union {
++ int z;
++ };
++ };
++ union {
++ union {
++ double d;
++ int i;
++ };
++ };
++};
++
++
++int main()
++{
++ z = 3;
++ if (i != 3)
++ abort ();
++ d = 2.5;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/array1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/array1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/array1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/array1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++int i;
++
++struct S {
++ S (int) {
++ ++i;
++ if (i == 3)
++ throw 3;
++ };
++
++ S () {}
++
++ ~S() {
++ --i;
++ }
++};
++
++int main()
++{
++ try {
++ S s[5] = { 0, 1, 2, 3, 4 };
++ } catch (...) {
++ }
++
++ if (i != 1)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/array2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/array2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/array2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/array2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++int i;
++
++struct S {
++ S () {
++ ++i;
++ };
++
++ S (int) {
++ };
++};
++
++int main()
++{
++ S s[3][3] = { 2 };
++
++ if (i != 8)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/badarrow.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/badarrow.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/badarrow.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/badarrow.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++struct S {
++ int i;
++} s;
++
++void f()
++{
++ s->i = 3; // ERROR - base operand
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/badopt1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/badopt1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/badopt1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/badopt1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Based on a testcase by Bryan Weston <bryanw@bluemoon.sps.mot.com>
++// egcs 1.1 fails to increment count
++
++#include <cstdlib>
++
++struct Base { Base() {} }; // removing the constructor fixes the problem
++struct Derived : Base {}; // so does removing the base class
++
++int main() {
++ int count = 0;
++ Derived* array[1]; // making this Base*[1] does not fix the problem
++ array[count++] = new Derived (); // but then new Base() does
++ if (count!=1)
++ std::abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/bitfld1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/bitfld1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/bitfld1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/bitfld1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Based on a bug report by Stephen Vavasis <vavasis@CS.Cornell.EDU>
++
++// excess errors test - XFAIL *-*-*
++
++// declares template operator!=
++#include <utility>
++
++struct foo {
++ enum e { bar } baz:1;
++ void test() {
++ baz != bar;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++struct S0 { };
++struct S1 : virtual public S0 { };
++struct S2 : virtual public S0 { };
++
++struct S3 : public S1, public S2, virtual public S0
++{
++};
++
++void f(const S0*) {}
++
++void g()
++{
++ f(static_cast<S3*>(0));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cast2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cast2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cast2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cast2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++struct A {
++};
++
++int main()
++{
++ A a;
++ typedef void (A::*F)();
++ F p;
++
++ const_cast<const A>(a); // ERROR - const_cast requires pointer/ref types
++ const_cast<F>(p); // ERROR - const_cast requires pointer/ref types
++ const_cast<int (*)()>(&main); // ERROR - function type in const_cast
++ const_cast<int (&)()>(main); // ERROR - function type in const_cast
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cleanup1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cleanup1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cleanup1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cleanup1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Bug: fold is too eager about pushing down CLEANUP_POINT_EXPR.
++
++int d;
++
++struct A {
++ A() { }
++ ~A() { d = 1; }
++};
++
++int f (const A& a)
++{
++ return 1;
++}
++
++int main ()
++{
++ if (f (A()) && d == 0)
++ return 0;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cleanup2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cleanup2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cleanup2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cleanup2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Origin: Bryan Scattergood <bryan@fsel.com>
++// Special g++ Options: -O -fno-exceptions
++
++extern "C" void abort();
++
++class A
++{
++public:
++ A();
++ ~A();
++ int foo();
++};
++
++A::A() {}
++A::~A() { abort (); }
++int A::foo() {}
++
++extern int f()
++{
++ return 0;
++}
++
++int main()
++{
++ return ((f() != 0) ? A().foo() : 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/configure.in gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/configure.in
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/configure.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++# This file is a shell script fragment that supplies the information
++# necessary to tailor a template configure script into the configure
++# script appropriate for this directory. For more information, check
++# any existing configure script.
++
++srctrigger=g++-03.exp
++srcname="DejaGnu"
++
++# per-host:
++
++# per-target:
++
++target_makefile_frag=../config/mt-${target_alias}
++
++# post-target:
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/const1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/const1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/const1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/const1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct S
++{
++ void f()
++ {
++ const int i; // ERROR - uninitialized const
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/const2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/const2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/const2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/const2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++struct S {
++ static const char* cp = "abc"; // ERROR - initialization of non-const
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++class X {
++public:
++ const operator int (); // ERROR - invalid declaration.
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options: -pedantic-errors
++
++void cheat( int* i ) { ++(*i); }
++
++struct t {
++ void cheat( int& i ) { ++i; }
++};
++
++int main()
++{
++ void (t::*member)( const int& ) = &t::cheat; // ERROR - conversion
++ void (*cheater)( const int* ) = &cheat; // ERROR - converting
++ t t2;
++ const int i=1;
++ int j=1;
++ (t2.*member)( i );
++ (t2.*member)( j );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++// submitted by David C Binderman <dcb@pncl.co.uk>
++
++typedef const int ci;
++typedef ci aci[ 10];
++aci var = { 2, 3, 5, 7, 11, 13 };
++
++void
++f()
++{
++ int * ip = var; // ERROR - requires const_cast
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Testcase for proper hiding of base conversion ops.
++
++struct A
++{
++ operator const char *();
++};
++
++struct B : public A
++{
++ operator const char *() { return 0; }
++};
++
++int main( void )
++{
++ B b;
++ const char *p = b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++// Based on bug report by Thomas Kunert <kunert@physik.tu-dresden.de>
++
++// Special g++ Options:
++
++int foo();
++const int (*bar)() = foo; // ERROR - adding const - XFAIL *-*-*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/conv6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/conv6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Test for composite pointer types, as defined in [expr.rel],
++// and common pointer to member types, as defined in [expr.eq].
++
++struct A { int i; };
++struct B : public A { };
++
++int main ()
++{
++ B b;
++
++ // The composite type is `A const *'
++ A* ap = &b;
++ const B* bp = &b;
++ if (ap != bp) // gets bogus error - distinct types XFAIL *-*-*
++ return 1;
++
++ // The composite type is `B const *const *'
++ B *const * p = 0;
++ B const * * q = 0;
++ if (p != q) // gets bogus error - distinct types XFAIL *-*-*
++ return 1;
++
++ // The common type is `int const B::*'
++ const int A::*apm = &A::i;
++ int B::*bpm = &A::i;
++ if (apm != bpm) // gets bogus error - distinct types XFAIL *-*-*
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/copy1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/copy1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/copy1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/copy1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Bug: expand_vec_init doesn't copy arrays of builtin types.
++
++struct B {
++ B() { }
++ B(const B&) { }
++};
++
++struct A
++{
++ B b;
++ int ar[5];
++};
++
++int main()
++{
++ A a;
++ for (int i = 0; i < 5; ++i)
++ a.ar[i] = i;
++
++ A a2 = a;
++
++ for (int i = 0; i < 5; ++i)
++ if (a2.ar[i] != a.ar[i])
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++class A
++{
++ enum B { ONE, TWO, THREE };
++};
++
++class A::B; // ERROR - A::B is not a class type
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct A {
++ int rep;
++ static const A a(0); // ERROR - initialization
++ static const A b = 3; // ERROR - initialization
++ static const A& c = 2; // ERROR - initialization
++ A(int x) : rep(x) {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -g -O2
++
++inline void f() {
++ struct S {};
++ S s;
++}
++
++int g()
++{
++ for (int i = 0; i < 2; ++i)
++ f();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++struct T {
++ struct S __attribute__ ((packed)) { // ERROR - parse error
++ int i;
++ };
++}; // ERROR - parse error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++class TecMesh {};
++
++extern TecMesh& m;
++
++struct X {
++ X(TecMesh&);
++};
++
++struct D {
++ D();
++ TecMesh& Mesh;
++};
++
++
++D::D ()
++ : Mesh(m)
++{
++ X x(D::Mesh);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options: -O2
++
++struct E
++{
++ int f(int);
++};
++
++int ha()
++{
++ enum {X = 0};
++
++ int A, C;
++
++ E vList[10];
++
++ A = (C + 1) % 3;
++ vList[1].f(A);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++void f()
++{
++ union {
++ private:
++ int i; // ERROR - private
++ } u;
++
++ u.i = 3; // ERROR - within this context
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++int main()
++{
++ void f();
++ class A {
++ friend void f();
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/crash9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/crash9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++struct A { };
++struct B : public A
++{
++ int A;
++};
++struct C : public B { };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/.cvsignore gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/.cvsignore
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/.cvsignore 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/.cvsignore 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++Makefile
++config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cvt1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cvt1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/cvt1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/cvt1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++
++typedef int Array_T[2];
++
++struct S1 {
++ S1(const Array_T&);
++};
++
++struct S2 {
++ S1 g();
++ Array_T a;
++};
++
++S1 S2::g()
++{
++ return S1(a);
++}
++
++void h()
++{
++ S2 s2;
++ s2.g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dcast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dcast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dcast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dcast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++class C {
++public:
++ virtual void f();
++};
++
++extern volatile C* cp;
++extern volatile C& cr;
++
++void f ()
++{
++ dynamic_cast<void*>(cp); // ERROR - cannot dynamic_cast
++ dynamic_cast<C&>(cr); // ERROR - cannot dynamic_cast
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dcast2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dcast2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dcast2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dcast2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++// Based on a testcase by Ruslan Shevchenko <Ruslan@Shevchenko.Kiev.UA>
++
++struct B {
++ virtual ~B();
++};
++
++struct D : public B {
++};
++
++void foo() {
++ B x;
++ dynamic_cast<D*>(&x); // WARNING - will never succeed
++ B* p = &x;
++ dynamic_cast<D*>(p);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/debug1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/debug1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/debug1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/debug1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// Build don't link:
++// Special g++ Options: -g
++
++typedef unsigned int size_t;
++
++
++struct dummy { };
++
++struct arrrrrgh { };
++
++
++template<class Par,class Rand = arrrrrgh>
++struct whyyyyyyy { };
++
++
++
++
++template<class T, class S =dummy>
++struct grrrrrrrr { };
++
++
++template<class Par, class Par2 =Par, class Rand =arrrrrgh>
++class no_future
++{
++public:
++
++
++ template<class S>
++ no_future(const grrrrrrrr<whyyyyyyy<Par,Rand>*,S>& man ) { }
++
++ ~no_future( ) { }
++
++private:
++
++
++ no_future(const no_future&);
++ no_future& operator=(const no_future&);
++};
++
++
++int main( )
++{
++ grrrrrrrr<whyyyyyyy<double>*> man;
++
++ no_future<double> here(man);
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/debug2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/debug2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/debug2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/debug2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++// Special g++ Options: -funroll-loops -O2 -g
++
++inline void f()
++{
++ typedef int T;
++}
++
++inline void g()
++{
++ typedef double U;
++}
++
++int n;
++
++struct B
++{
++ ~B() {
++ for (int i = 0; i < n; ++i)
++ g();
++ }
++};
++
++struct D : public B {
++ ~D() {
++ for (int j = 0; j < n; ++j)
++ f();
++ }
++};
++
++D d;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/decl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/decl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/decl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/decl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Based on a test case by Phil Blecker <tmwg@inxservices.com>
++
++// excess errors test - XFAIL *-*-*
++
++int foo(int);
++int bar() {
++ int baz(int(foo(0)));
++ int foo = baz;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/decl2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/decl2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/decl2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/decl2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Based on a test-case by Maciej Radziejewski <maciejr@iws.uni-stuttgart.de>
++
++int i(0)(1); // ERROR - multiple initialization
++int j(2) = 3; // ERROR - multiple initialization
++int k(4)(5)(6); // ERROR - multiple initialization
++int m, n(7)(8); // ERROR - multiple initialization
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/decl3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/decl3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/decl3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/decl3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++// Origin: Adapted by Nathan Sidwell 29 Apr 1999 <nathan@acm.org>
++// from a test case submitted by Corey Kosak <kosak@cs.cmu.edu>
++// http://egcs.cygnus.com/ml/egcs-bugs/1999-04/msg00502.html
++
++// We should not allow arrays of abstract type. [class.abstract/2]
++
++struct cow_t {
++ virtual void f()=0; // ERROR - abstract
++};
++
++
++int main()
++{
++ cow_t cow[2]; // ERROR - abstract class
++ cow[0].f();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/defarg1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/defarg1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/defarg1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/defarg1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++
++int f (int x)
++{
++ extern void g (int i = f (x)); // ERROR - default argument uses local
++
++ g();
++
++ return 0;
++}
++
++int f (void);
++
++int h1 (int (*)(int) = f);
++int h2 (int (*)(double) = f); // ERROR - no matching f
++
++template <class T>
++int j (T t)
++{
++ extern void k (int i = j (t)); // ERROR - default argument uses local
++
++ k ();
++
++ return 0;
++}
++
++template int j (double); // ERROR - instantiated from here
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/defarg2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/defarg2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/defarg2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/defarg2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Test that default args don't mess up pmf type comparisons.
++// Contributed by Jason Merrill <jason@cygnus.com>.
++
++struct A {
++ void f (int = 0) { }
++};
++
++int
++main ()
++{
++ void (A::*p)(int) = 0;
++ p = &A::f;
++ if (p != &A::f)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++//Build don't link:
++struct cl_heap_ring{
++ void operator delete (void* ptr) { }
++ cl_heap_ring ()
++ { }
++};
++
++struct cl_heap_null_ring : public cl_heap_ring {
++ void operator delete (void* ptr) { }
++};
++
++void f()
++{
++ new cl_heap_null_ring();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++struct foo {
++ operator char*() const;
++};
++
++void bar(foo a) {
++ delete a; // should be accepted
++ delete[] a; // should be accepted
++ char b[1];
++ delete b; // ERROR - expecting pointer type
++ delete[] b; // ERROR - expecting pointer type
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#include <new>
++
++int i;
++
++extern "C" void printf(const char*, ...);
++
++template <class T, class U>
++struct map {
++ ~map ();
++};
++
++template <class T, class U>
++map<T, U>::~map ()
++{}
++
++struct SomeClass { };
++
++void* operator new(size_t numBytes, SomeClass&, const nothrow_t&) throw()
++{
++ return operator new(numBytes, nothrow);
++}
++
++void operator delete(void* pMemory, SomeClass&, const nothrow_t&) throw()
++{
++ i = 7;
++ return operator delete(pMemory);
++}
++
++int
++main()
++{
++ map< int, int>* pMap = new map< int, int>;
++
++ delete pMap;
++
++ if (i == 7)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,53 @@
++// Build don't link:
++
++// Copyright (C) 1999 Free Software Foundation, Inc.
++// Contributed by Nathan Sidwell 15 Apr 1999 <nathan@acm.org>
++
++// delete (void *)e and delete[] (void *)e result in undefined behaviour
++// [expr.delete/3]. Check we warn about them
++// operator new functions can only return NULL, if their exceptions
++// specification is `throw()'. All other cases must return a non-null pointer
++// [expr.new/13].
++
++typedef __SIZE_TYPE__ size_t;
++
++void *operator new(size_t)
++{
++ return 0; // ERROR - cannot return NULL
++}
++void *operator new[](size_t)
++{
++ return 0; // ERROR - cannot return NULL
++}
++
++struct X
++{
++ void *operator new(size_t)
++ {
++ return 0; // ERROR - cannot return NULL
++ }
++ void *operator new[](size_t)
++ {
++ return 0; // ERROR - cannot return NULL
++ }
++};
++
++struct Y
++{
++ void *operator new(size_t) throw()
++ {
++ return 0; // ok
++ }
++ void *operator new[](size_t) throw()
++ {
++ return 0; // ok
++ }
++};
++
++void fn(double *d, void *v)
++{
++ delete d; // ok
++ delete v; // WARNING - deleting void
++ delete[] d; // ok
++ delete[] v; // WARNING - deleting void
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/delete5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/delete5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// Copyright (C) 1999 Free Software Foundation, Inc.
++// Contributed by Nathan Sidwell 15 Apr 1999 <nathan@acm.org>
++
++typedef __SIZE_TYPE__ size_t;
++
++struct X
++{
++ int i;
++
++ X():i(){}
++ void *operator new(size_t)
++ {
++ return 0; // WARNING - cannot return NULL
++ }
++ void *operator new[](size_t)
++ {
++ return 0; // WARNING - cannot return NULL
++ }
++};
++
++struct Y
++{
++ int i;
++
++ Y():i(){}
++ void *operator new(size_t) throw()
++ {
++ return 0; // ok
++ }
++ void *operator new[](size_t) throw()
++ {
++ return 0; // ok
++ }
++};
++
++int main()
++{
++ Y *yp = new Y;
++
++ return yp != 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Special g++ Options: -mno-nop-fun-dllimport
++// Skip if not target: arm-*pe
++// declspec test #1
++// set compiler_result "__imp_imp.*\.section${spaces}.drectve\n\[^\n\]*-export:exp"
++// set not_compiler_result "__imp_exp"
++
++__declspec (dllimport) void imp ();
++
++__declspec (dllexport) void exp () { imp (); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Skip if not target: arm-*pe
++// Build don't link:
++// Microsoft's MSVC 2.0 allows dllimport followed by dllexport for variables,
++// but does not allow dllexport followed by dllimport.
++//
++// Switching between dll{export,import} works for functions.
++// We test for that too (by ensuring no error is produced).
++
++__declspec (dllimport) int foo1 ();
++__declspec (dllexport) int foo1 ();
++
++__declspec (dllexport) int foo2 ();
++__declspec (dllimport) int foo2 ();
++
++__declspec (dllimport) int bar1;
++__declspec (dllexport) int bar1;
++
++__declspec (dllexport) int bar2; // ERROR - previously declared
++__declspec (dllimport) int bar2; // ERROR - redefinition
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// Skip if not target: arm-*pe
++// Special g++ Options: -mno-nop-fun-dllimport
++// set compiler_result "__imp_f1.*\.section${spaces}.drectve\n\[^\n\]*-export:f2"
++// set not_compiler_result "__imp_f2"
++
++class aClass
++{
++public:
++ __declspec(dllimport) int f1();
++ __declspec(dllexport) int f2();
++};
++
++__declspec(dllexport) int aClass::f2()
++{
++ return f1();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Skip if not target: arm-*pe
++// Ensure dllexport overrides dllimport.
++// set compiler_result "\.section${spaces}\.drectve\n\[^\n\]*-export:foo1.*\.section${spaces}\.drectve\n\[^\n\]*-export:foo2"
++// set not_compiler_result "(__imp_foo1|__imp_foo2)"
++
++__declspec (dllimport) int foo1 ();
++__declspec (dllexport) int foo1 ();
++
++__declspec (dllexport) int foo2 ();
++__declspec (dllimport) int foo2 ();
++
++__declspec (dllexport) int foo1 () { return foo2 (); }
++__declspec (dllexport) int foo2 () { return foo1 (); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Skip if not target: arm-*pe
++// dllimport is "sorta like" to "extern".
++// set compiler_result "(\nfoo1:.*\nfoo2:|\nfoo2:.*\nfoo1:)"
++// set not_compiler_result "__imp_"
++
++__declspec (dllimport) int foo1;
++int foo1;
++
++__declspec (dllimport) int foo2;
++int foo2 = 5;
++
++int f () { return foo1 + foo2; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dll-6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dll-6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Skip if not target: arm-*pe
++// set not_compiler_result "__imp_"
++// dll.h
++class aClass
++ {
++public:
++ __declspec(dllimport) aClass();
++ };
++
++// dll.cpp
++
++__declspec(dllexport) aClass::aClass()
++ {
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Test for use of typedef in explicit destructor call.
++
++#include <new>
++
++struct X {
++ typedef X foo;
++};
++
++X x;
++unsigned char bar[sizeof (X)];
++
++int
++main ()
++{
++ X* p = new (bar) X;
++ p->~foo();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++class K {
++public:
++ friend class C;
++
++private:
++ static K qwe;
++ K();
++ ~K();
++};
++
++K K::qwe;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,51 @@
++// Build don't link:
++
++struct S1
++{
++ ~S1(int); // ERROR - destructors may not have parameters
++};
++
++
++template <class T>
++struct S2
++{
++ ~S2(int); // ERROR - destructors may not have parameters
++};
++
++
++struct S3
++{
++ ~S3(double) {} // ERROR - destructors may not have parameters
++};
++
++
++template <class T>
++struct S4
++{
++ ~S4(double) {} // ERROR - destructors may not have parameters
++};
++
++
++struct S5
++{
++ ~S5();
++};
++
++S5::~S5(float)
++{ // ERROR - destructors may not have parameters
++}
++
++
++template <class T>
++struct S6
++{
++ ~S6();
++};
++
++template <class T>
++S6<T>::~S6(float)
++{ // ERROR - destructors may not have parameters
++}
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/dtor4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/dtor4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++
++struct S1 {
++ ~S1(); // ERROR - candidate
++};
++
++S1::~S1() const
++{ // ERROR - prototype does not match
++}
++
++
++struct S2 {
++ ~S2() volatile; // ERROR - destructors may not be volatile
++};
++
++
++template <class T>
++struct S3 {
++ ~S3(); // ERROR - candidate
++};
++
++template <class T>
++S3<T>::~S3() volatile
++{ // ERROR - prototype does not match
++}
++
++
++template <class T>
++struct S4 {
++ ~S4() const; // ERROR - destructors may not be const
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/elab1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/elab1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/elab1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/elab1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++typedef struct {} S;
++
++S s1;
++struct S* s2; // ERROR - S is a typedef name
++
++template <class T>
++struct X {
++ friend class T; // ERROR - T is a template type parameter
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/empty1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/empty1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/empty1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/empty1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++extern "C" void abort();
++extern "C" void printf(const char*, ...);
++
++int i;
++
++struct A;
++
++struct A* as[10];
++
++struct A {
++ A () { as[i++] = this; }
++ A (const A&) { as[i++] = this; }
++ ~A() { if (i == 0 || as[--i] != this) abort(); }
++};
++
++A f() { return A(); }
++
++int main ()
++{
++ A a (f ());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/enum1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/enum1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/enum1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/enum1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++extern "C" void abort();
++
++struct A
++{
++ enum { a = 3}* p;
++ int f() { return (int) a; }
++};
++
++int main()
++{
++ A a;
++
++ if (a.f() != 3)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/expr1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/expr1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/expr1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/expr1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++// Simplified from bug report by Trevor Taylor <ttaylor@powerup.com.au>
++
++struct T {
++ int operator()(int) { } // ERROR - candidate
++};
++
++int main() {
++ T()(); // ERROR - no such operator
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/field1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/field1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/field1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/field1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++struct X
++{
++ static const bool b = true;
++ static const int i = b ? 1 : 2;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/field2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/field2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/field2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/field2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Test for proper handling of field calls.
++// Contributed by Jason Merrill <jason@cygnus.com>
++
++struct A {
++ inline A* operator()() { return this; }
++};
++
++struct B {
++ int i;
++ union { A a; };
++};
++
++int
++main ()
++{
++ B b;
++ A* ap = &b.a;
++ A* ap2 = b.a();
++ return (ap != ap2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/for1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/for1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/for1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/for1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// Build don't link:
++
++int i;
++int j;
++
++struct S {
++ int operator()(int)
++ {
++ i = 1;
++ }
++
++ typedef int I;
++
++ void f() {
++ for (S I; false; )
++ ;
++ int k = I(3);
++ }
++};
++
++typedef int J;
++
++struct T {
++ int operator()(int)
++ {
++ j = 1;
++ }
++
++ void f() {
++ for (T J; false; )
++ ;
++ int k = J(3);
++ }
++};
++
++int main()
++{
++ S s;
++ s.f();
++ return 2 * i + j;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,85 @@
++// Build don't link:
++// f() should be able to access B::j, as of FDIS [class.protected]/1
++
++// Subject: Re: [bug] Inheritance and friend access control broken
++// References: <199803032141.WAA09332@piano.dptmaths.ens-cachan.fr>
++// <orhg5ff544.fsf@iguacu.dcc.unicamp.br>
++// <199803041125.MAA06937@cor.dptmaths.ens-cachan.fr>
++// <orn2f6ek92.fsf@iguacu.dcc.unicamp.br> <19980304102900.46897@dgii.com>
++// From: Alexandre Oliva <oliva@dcc.unicamp.br>
++// Date: 06 Mar 1998 01:43:18 -0300
++
++template <int*>
++class X {};
++
++template <typename T>
++void g();
++
++struct S;
++
++template <typename T>
++struct R;
++
++class B {
++protected:
++ int i; // ERROR - in this context
++ static int j;
++};
++
++class D : public B {
++ friend void f();
++ template <typename T>
++ friend void g();
++ friend struct S;
++ template <typename T>
++ friend struct R;
++};
++
++struct S {
++ void h();
++ X<&B::j> x;
++};
++
++template <typename T>
++struct R {
++ void h();
++ X<&B::j> x;
++};
++
++void f()
++{
++ ((B*)0)->i = 3; // ERROR - protected
++ ((D*)0)->i = 4;
++ B::j = 5;
++ D::j = 6;
++}
++
++template <typename T>
++void g()
++{
++ ((B*)0)->i = 3; // ERROR - protected
++ ((D*)0)->i = 4;
++ B::j = 5;
++ D::j = 6;
++}
++
++template void g<int>();
++
++void S::h()
++{
++ ((B*)0)->i = 3; // ERROR - protected
++ ((D*)0)->i = 4;
++ B::j = 5;
++ D::j = 6;
++}
++
++template <typename T>
++void R<T>::h()
++{
++ ((B*)0)->i = 3; // ERROR - protected
++ ((D*)0)->i = 4;
++ B::j = 5;
++ D::j = 6;
++}
++
++template struct R<double>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++void
++f()
++{
++ class Local_2 {
++ friend class Friend;
++
++ int i;
++ };
++
++ class Friend {
++ public:
++ void g() {
++ Local_2 l2;
++ l2.i = 3;
++ }
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++
++class foo {
++public:
++ class bar;
++ void func(bar *);
++ class bar {
++ int st;
++ friend void foo::func(bar *);
++ };
++};
++
++
++void foo::func(bar *obj) {
++ obj->st++;
++}
++
++void test02() {
++ foo obj_f;
++ foo::bar obj_b;
++
++ obj_f.func( &obj_b);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++
++// by Alexandre Oliva <oliva@dcc.unicamp.br>
++
++// I'm not 100% sure this program is correct, but g++ shouldn't just
++// crash.
++
++// The idea is to give privileged access to bar<A> only to
++// specializations foo<A,B>, for all B.
++
++template <class A, class B> void foo();
++template <class C> class bar {
++ int i; // ERROR - private
++ template <class B> friend void foo<C,B>(); // ERROR - bogus declaration
++};
++template <class A, class B> void foo() {
++ bar<A> baz; baz.i = 1; // ERROR - foo cannot access bar<int>::i
++ bar<int> buz; buz.i = 1; // ERROR - foo cannot access bar<int>::i
++}
++int main() {
++ foo<void,void>();
++ foo<int,void>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/friend5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/friend5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// submitted by David C Binderman <dcb@pncl.co.uk>
++
++struct A {
++ friend bool(); // ERROR - invalid declaration
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/incomplete.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/incomplete.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/incomplete.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/incomplete.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++struct S;
++
++void f(S s) {} // ERROR - incomplete type
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++int i;
++
++struct D {
++ D () {
++ i++;
++ }
++};
++
++struct C {
++ C() {}
++
++ D d[1];
++};
++
++
++int main ()
++{
++ C c;
++
++ if (i != 1)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Check that elements for which no explicit initializer was given are
++// default-initialized properly.
++
++extern "C" int printf (const char *, ...);
++
++struct A
++{
++ int i;
++ A(): i (42) { }
++ A(int j): i(j) { }
++};
++
++A ar[4] = { 1, 2 };
++
++struct B
++{
++ A a1, a2, a3, a4;
++};
++
++B b = { 1, 2 };
++
++struct C
++{
++ A ar[4];
++};
++
++C c = { 1, 2 };
++
++int
++main ()
++{
++ printf ("%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n",
++ ar[0].i, ar[1].i, ar[2].i, ar[3].i,
++ b.a1.i, b.a2.i, b.a3.i, b.a4.i,
++ c.ar[1-1].i, c.ar[2-1].i, c.ar[3-1].i, c.ar[4-1].i);
++
++ return (b.a4.i != 42 || c.ar[3].i != 42);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't run:
++// Special g++ Options: -O3
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++typedef int (*fp)();
++
++struct S
++{
++ fp f;
++};
++
++struct T
++{
++ static int f() {}
++};
++
++static const S s = { &T::f };
++
++int main()
++{
++ return (*s.f)();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't run:
++// Special g++ Options: -O3
++// Origin: Gabriel Dos_Reis <Gabriel.Dos_Reis@sophia.inria.fr>
++
++void f() {}
++
++struct X {
++ ~X() { f (); }
++};
++
++X x;
++
++int main () {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++extern "C" void abort();
++
++int i;
++int j = i++;
++
++int main()
++{
++ if (i != 1)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Special g++ Options: -O3
++
++typedef int (*fp)();
++
++struct S
++{
++ fp f;
++};
++
++static int f()
++{
++ return 0;
++}
++
++static const S s = { &f };
++
++int main()
++{
++ return (*s.f)();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++struct X
++{
++ static const bool is_signed = true ;
++ static const int digits = is_signed ? 8 *sizeof(wchar_t)-1 : 0;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++class error {
++public:
++ error(int) {}
++};
++
++class foo {
++ const error x = 1; // ERROR - initialization of non-static data member
++};
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Objects must be destructed in decreasing cnt order
++// Original test attributed to James Kanze <jkanze@otelo.ibmmail.com>
++// execution test - XFAIL *-*-*
++
++static int cnt;
++
++class A {
++ int myCnt;
++public:
++ A() : myCnt(cnt++) {}
++ ~A() { if (--cnt != myCnt) abort(); }
++};
++
++void f() { static A a; /* a.myCnt == 1 */ }
++
++class B {
++ int myCnt;
++public:
++ B() : myCnt(cnt+1) { f(); ++cnt; }
++ ~B() { if (--cnt != myCnt) abort(); }
++};
++
++static A a1; // a1.myCnt == 0
++static B b1; // b1.myCnt == 2
++static A a2; // a2.myCnt == 3
++
++int main() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Test for default-initialization of POD-structs in functional cast notation.
++
++struct foo { int a[10]; };
++
++int main()
++{
++ foo f = foo();
++ int r = 0;
++ for (int i = 0; i < 10; ++i)
++ r |= f.a[i];
++ return r;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// simplified from testcase in Windows Developer Journal,
++// submitted by eyal.ben-david@aks.com
++
++// The initialization of a static local variable must be retried if a
++// previous try finished by throwing an exception [stmt.dcl]/4
++
++struct foo {
++ foo() { throw true; }
++};
++
++void bar() {
++ static foo baz;
++}
++
++int main() {
++ try {
++ bar(); // must throw
++ }
++ catch (bool) {
++ try {
++ bar(); // must throw again!
++ }
++ catch (bool) {
++ return 0;
++ }
++ }
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++// submitted by David C Binderman <dcb@pncl.co.uk>
++
++// According to [dcl.init]/9, this should be ill-formed
++
++void
++f()
++{
++ const int var [ 10 ]; // ERROR - missing initializer
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/init9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/init9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++// Build don't link:
++
++// Based on a testcase submitted by Tudor Hulubei <tudor@cs.unh.edu>
++
++// X is not a POD because it has a user-defined destructor.
++// Therefore, we can't cross its initialization.
++
++// vector<int> is not even an aggregate; nevertheless, no error is
++// reported...
++
++struct A {
++ A() {}
++};
++
++void a() {
++ goto bar; // ERROR - jump from here
++ A x; // ERROR - jump crosses initialization
++ bar: // ERROR - jump to here
++ ;
++}
++
++struct X {
++ ~X() {}
++};
++
++void b() {
++ goto bar; // ERROR - jump from here
++ X x; // ERROR - jump crosses initialization
++ bar: // ERROR - jump to here
++ ;
++}
++
++#include <vector>
++
++void c() {
++ goto bar; // ERROR - jump from here
++ vector<int> x; // ERROR - jump crosses initialization
++ bar: // ERROR - jump to here
++ ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lineno1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lineno1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lineno1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lineno1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Submitted by Nathan Sidwell <nathan@acm.org>
++// Bug: g++ was giving the wrong line number for statics.
++// Special g++ Options: -w
++
++class A
++{
++ A(); // ERROR - private
++ ~A(); // ERROR - private
++};
++
++static A a; // ERROR - here
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lineno2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lineno2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lineno2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lineno2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Submitted by Nathan Sidwell <nathan@acm.org>
++// Bug: g++ wasn't listing candidates for a failed conversion.
++
++void f(int, double); // ERROR - candidate
++void f(double, int); // ERROR - candidate
++void f(int); // ERROR - candidate
++
++int
++main ()
++{
++ void (*ptr)(int, int);
++
++ ptr = &f; // ERROR - no match
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/linkage1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/linkage1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/linkage1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/linkage1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++typedef struct {
++ int i;
++} *p;
++
++void f (p) { } // ERROR - function uses anonymous type
++p q;
++
++int main()
++{
++ extern p j;
++ struct A { int j; };
++ extern A a; // ERROR - extern uses local type
++ extern void f (A); // ERROR - extern uses local type
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/linkage2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/linkage2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/linkage2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/linkage2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// From: Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++extern "C"
++{
++typedef struct {int dummy[10];} *GDBM_FILE;
++extern GDBM_FILE gdbm_open();
++}
++
++typedef struct { int dummy[10]; } *FAIL_FILE;
++extern FAIL_FILE fail_open(); // ERROR - non-local function
++
++typedef struct { int dummy[10]; } *SUCCESS_FILE, S;
++extern SUCCESS_FILE success_open();
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/local1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/local1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/local1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/local1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't run:
++
++struct Outer {
++ virtual ~Outer() {}
++};
++
++int
++main()
++{
++ { struct Inner : virtual public Outer {} inner; }
++ { struct Inner : virtual public Outer {} inner; }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/local2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/local2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/local2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/local2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Special g++ Options: -O2
++
++void f ()
++{
++ struct Init {
++ Init () {
++ }
++ };
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++struct A {
++ struct B {
++ static int i;
++ };
++ enum { a };
++};
++
++int A::B::i = a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++namespace A {
++ int i;
++}
++using namespace A;
++namespace B {
++ int i;
++}
++using namespace B;
++
++int i;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++struct B {
++ struct X {};
++};
++
++
++struct D : public B {
++ void X();
++
++ struct X x;
++
++ void f();
++};
++
++
++void D::f()
++{
++ struct X y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++int main()
++{
++ typedef double I;
++
++ struct S1 {
++ typedef char I;
++
++ struct S2;
++ };
++
++ struct S1::S2 {
++ typedef I J;
++ };
++
++ return !(sizeof (S1::S2::J) == 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++union U {
++ typedef int I;
++
++ struct S {
++ void f();
++ };
++};
++
++void U::S::f() {
++ I i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Build don't link:
++// Origin: Benjamin Kosnik <bkoz@cygnus.com>
++
++class b
++{
++ int j;
++public:
++ b(int a = 6): j(a) {}
++ void imbue(int a) {++j;}
++};
++
++class d: public b
++{
++ int k;
++public:
++ d(int a = 7): b(a), k(a) {}
++ void imbue(int a) {++k;}
++};
++
++//virtual public kills, public ok
++class mostd: virtual public d
++{
++ int l;
++public:
++ mostd(int a = 9): d(a), l(a) {}
++};
++
++int main() {
++
++ d dobj;
++ dobj.imbue(5);
++
++ mostd mobj;
++ mobj.imbue(5);
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// simple test for id from base class during class defn
++// Build don't link:
++
++struct foo {
++ enum { blah = 1 };
++};
++struct bar : public foo {
++ char cache[blah];
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++struct B {
++ int i;
++};
++
++struct D: virtual public B {
++ int i;
++};
++
++struct D2 : public D {
++ void f() { i = 3; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Test to make sure that the use of __typeof__ in WIFEXITED works.
++
++int main ()
++{
++ int stat_loc = 0;
++ (__extension__
++ ({
++ union
++ {
++ __typeof__ (stat_loc) __in;
++ int __i;
++ } __u;
++ __u.__in = (stat_loc);
++ __u.__i;
++ })
++ );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Test for proper handling of references to overloaded member functions.
++
++struct A {
++ static void f (int) { }
++ void f ();
++};
++
++void (*p)(int) = &A::f;
++
++void A::f ()
++{
++ p = f;
++}
++
++int main()
++{
++ A a;
++ p = &a.f;
++ (a.f)();
++ (a.f)(42);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Simplified from bug report by Paris Smaragdis <paris@media.mit.edu>
++
++// crash test - XFAIL *-*-*
++
++template <class T> class vector {};
++class foo {};
++int main() {
++ foo f;
++ f.vector(); // ERROR - not a method
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++int f(int i)
++{
++ struct C {
++ int i;
++ C () : i(1) {}
++ int f() {
++ struct D {
++ int i;
++ D () : i(2) {}
++ int g() { return i; }
++ } d;
++
++ return d.g();
++ }
++ } c;
++
++ return c.f();
++}
++
++
++int main()
++{
++ if (f(0) != 2)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Test for handling of type shadowing in function scope.
++
++int main()
++{
++ int A = 42;
++ struct A
++ {
++ enum { a };
++ };
++ A = A::a;
++ return A;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++struct S {
++ int A;
++ struct A {
++ enum { a = 0 };
++ };
++
++ void f();
++};
++
++void S::f() {
++ A = A::a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/lookup9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/lookup9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct S {
++ typedef long I;
++};
++
++struct D : virtual public S {
++ I i;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/loop1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/loop1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/loop1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/loop1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Test for bad loop optimization of goto fixups.
++// Special g++ Options: -O2
++
++typedef bool (*ftype) ();
++
++int c, d;
++struct A {
++ A() { ++c; }
++ A(const A&) { ++c; }
++ ~A() { ++d; }
++};
++
++void f (ftype func)
++{
++ A a;
++ do {
++ if ((*func)()) return;
++ } while (true);
++}
++
++bool test ()
++{
++ return true;
++}
++
++main ()
++{
++ f (test);
++ return (c != d);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/main1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/main1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/main1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/main1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't linK:
++
++int main()
++{ // ERROR - invalid redeclaration of
++ return 0;
++}
++
++
++int main(int, const char**)
++{ // ERROR - as
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/Makefile.in gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/mangle1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/mangle1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/mangle1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/mangle1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Test for proper mangling by setting up name clashes.
++// Special g++ Options: -fno-squangle
++
++class A { };
++typedef A A2;
++typedef int I;
++typedef void V;
++typedef I I2;
++
++void f (const A2&, int, const A2&, const A&) { } // ERROR - name clash
++int f__FRC1AiT0T0 = 0; // ERROR - name clash
++
++void f (int, long, int, I) { } // ERROR - name clash
++int f__Filii = 0; // ERROR - name clash
++
++void f (I, float, I, I2) { } // ERROR - name clash
++int f__Fifii = 0; // ERROR - name clash
++
++void f (void*, float, void*, V*) { } // ERROR - name clash
++int f__FPvfT0T0 = 0; // ERROR - name clash
++
++void f (wchar_t) { } // ERROR - name clash
++int f__Fw = 0; // ERROR - name clash
++
++void f(int, A, A2, A) { } // ERROR - name clash
++int f__FiG1AN21 = 0; // ERROR - name clash
++
++void f(const A2&, const A2&, const A2&, const A2&,
++ int&) { } // ERROR - name clash
++int f__FRC1AN30Ri = 0; // ERROR - name clash
++
++void f(const A2&, int, const A2&, const A2&, const A2&,
++ int&) { } // ERROR - name clash
++int f__FRC1AiT0N20Ri = 0; // ERROR - name clash
++
++void f(const A2&, int, const A2&, const A2&, const A2&, int&, int&,
++ int&) { } // ERROR - name clash
++int f__FRC1AiT0N20RiN25 = 0; // ERROR - name clash
++
++void f(const A2&, int, const A2&, const A2&, const A2&, int, int,
++ int) { } // ERROR - name clash
++int f__FRC1AiT0N20iii = 0; // ERROR - name clash
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/mangle2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/mangle2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/mangle2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/mangle2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Test for proper mangling by setting up name clashes.
++// Special g++ Options: -fsquangle
++
++class A;
++typedef A A2;
++typedef int I;
++typedef void V;
++typedef I I2;
++
++void f (const A2&, int, const A2&, const A&) { } // ERROR - name clash
++int f__FRC1AiRCB0n1 = 0; // ERROR - name clash
++
++void f (int, long, int, I) { } // ERROR - name clash
++int f__Filii = 0; // ERROR - name clash
++
++void f (I, float, I, I2) { } // ERROR - name clash
++int f__Fifii = 0; // ERROR - name clash
++
++void f (void*, float, void*, V*) { } // ERROR - name clash
++int f__FPvfPvn1 = 0; // ERROR - name clash
++
++void f (wchar_t) { } // ERROR - name clash
++int f__Fw = 0; // ERROR - name clash
++
++void f(int, A, A2, A) { } // ERROR - name clash
++int f__FiG1An2 = 0; // ERROR - name clash
++
++void f(const A2&, const A2&, const A2&, const A2&,
++ int&) { } // ERROR - name clash
++int f__FRC1An3Ri = 0; // ERROR - name clash
++
++void f(const A2&, int, const A2&, const A2&, const A2&,
++ int&) { } // ERROR - name clash
++int f__FRC1AiRCB0n2Ri = 0; // ERROR - name clash
++
++void f(const A2&, int, const A2&, const A2&, const A2&, int&, int&,
++ int&) { } // ERROR - name clash
++int f__FRC1AiRCB0n2Rin2 = 0; // ERROR - name clash
++
++void f(const A2&, int, const A2&, const A2&, const A2&, int, int,
++ int) { } // ERROR - name clash
++int f__FRC1AiRCB0n2in2 = 0; // ERROR - name clash
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/mutable1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/mutable1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/mutable1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/mutable1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Copyright (C) 1999 Free Software Foundation, Inc.
++// Contributed by Nathan Sidwell 14 Jan 1999 <nathan@acm.org>
++
++// Make sure objects with mutable members are never placed in a read only
++// section.
++
++// All these are POD structs, and hence do not need ctors
++struct A { mutable int i; };
++struct B { A a; };
++struct C { A a[1]; };
++struct D { static A const a; };
++
++// all these are static consts and hence naively suitable for a read only
++// section. But they contain a mutable, so must be in a writable section.
++static int const i = 0;
++static A const a = {0};
++static B const b = {{0}};
++static C const c = {{{0}}};
++static A const aa[] = {{0}};
++static B const bb[] = {{{0}}};
++static C const cc[] = {{{{0}}}};
++A const D::a = {0};
++
++int main()
++{
++ a.i = 05;
++ b.a.i = 05;
++ c.a[0].i = 05;
++ aa[0].i = 05;
++ bb[0].a.i = 05;
++ cc[0].a[0].i = 05;
++ D::a.i = 05;
++
++ if(!a.i) return 1;
++ if(!b.a.i) return 1;
++ if(!c.a[0].i) return 1;
++ if(!aa[0].i) return 1;
++ if(!bb[0].a.i) return 1;
++ if(!cc[0].a[0].i) return 1;
++ if(!D::a.i) return 1;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/nested1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/nested1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/nested1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/nested1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++struct C
++{
++ struct D
++ {
++ };
++};
++
++struct E
++{
++ C& c;
++ void g();
++};
++
++void E::g()
++{
++ c.D().f(); // ERROR - no matching function
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/nested2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/nested2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/nested2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/nested2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// by Bert Bril <bert@dgb.nl>
++
++struct M1 {
++ struct I {};
++};
++
++struct M2 {
++ struct I {};
++ struct J : virtual public M2::I,
++ virtual public M1::I {};
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/nested3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/nested3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/nested3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/nested3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Origin: Chip Salzenberg <chip@perlsupport.com>
++
++class Foo {
++ public:
++ class Bar;
++};
++
++class Foo::Bar {
++ public:
++ Bar() {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/new2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/new2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/new2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/new2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++//Build don't link:
++typedef __SIZE_TYPE__ size_t;
++void *operator new(size_t, unsigned int);
++
++struct X{
++ X();
++ X(int);
++};
++
++
++void f(X *x = new X); // ERROR -
++
++void f(X *x = new X(4)); // ERROR -
++
++void f(X *x = new X[4]); // ERROR -
++
++void f(X *x = new (3) X(6)); // ERROR -
++
++void f(X *x = new (2) X[10]); // ERROR -
++
++void f(X *x = new X[10][5]); // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/new3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/new3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/new3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/new3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++typedef __SIZE_TYPE__ size_t;
++
++template <class T>
++struct A
++{
++ int size;
++ A ()
++ {
++ T *p;
++ p = new T[size];
++ int foo;
++ foo = 5 * size;
++ };
++};
++
++struct B
++{
++ virtual ~B() { }
++ void operator delete [] (void *ptr, size_t size) { }
++};
++
++int main ()
++{
++ A<B> *p = new A<B>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/new.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/new.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/new.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/new.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,57 @@
++// Build don't link:
++
++typedef __SIZE_TYPE__ size_t;
++inline void *
++operator new(size_t alloc_sz, const char *fname, unsigned lineno)
++{
++}
++inline void *
++operator new[](size_t alloc_sz, const char *fname, unsigned lineno)
++{
++}
++inline void
++operator delete(void *ptr, const char *fname, unsigned lineno)
++{
++}
++inline void
++operator delete[](void *ptr, const char *fname, unsigned lineno)
++{
++}
++
++class DEF {
++public:
++ DEF( DEF *parent=0, const char *name=0 );
++};
++
++class ABC
++{
++public:
++ enum stuff { ID0, ID1 };
++ ABC( stuff, DEF *parent=0, const char *name=0 );
++};
++
++class GHI : public DEF
++{
++};
++
++class LMNFrame;
++class LMN : public DEF
++{
++ friend class LMNFrame;
++ public:
++public:
++ LMN();
++private:
++ LMNFrame *draw_area;
++
++ ABC *scroll_h;
++};
++class LMNFrame : public GHI {
++};
++LMN::LMN()
++{
++ draw_area = new ("abc", 69) LMNFrame;
++
++ scroll_h = new ("def", 71) ABC(ABC::ID0, this);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/null1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/null1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/null1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/null1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++// Build don't run:
++
++#include <cstddef>
++
++void g(int) {}
++void g(long) {}
++extern void g(void*);
++
++template <int I>
++void h() {}
++
++void k(int) {}
++
++template <class T>
++void l(T);
++
++template <>
++void l(int) {}
++
++int main()
++{
++ int i = NULL; // WARNING - converting NULL to non-pointer type
++ float z = NULL; // WARNING - converting NULL to non-pointer type
++ int a[2];
++
++ i != NULL; // WARNING - NULL used in arithmetic
++ NULL != z; // WARNING - NULL used in arithmetic
++ k != NULL; // No warning: decay conversion
++ NULL != a; // Likewise.
++ -NULL; // WARNING - converting NULL to non-pointer type
++ +NULL; // WARNING - converting NULL to non-pointer type
++ ~NULL; // WARNING - converting NULL to non-pointer type
++ a[NULL] = 3; // WARNING - converting NULL to non-pointer-type
++ i = NULL; // WARNING - converting NULL to non-pointer type
++ z = NULL; // WARNING - converting NULL to non-pointer type
++ k(NULL); // WARNING - converting NULL to int
++ g(NULL); // WARNING - converting NULL to int
++ h<NULL>(); // WARNING - NULL bound to integer template parameter
++ l(NULL); // WARNING - converting NULL to int
++ NULL && NULL; // No warning: converting NULL to bool is OK
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/null2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/null2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/null2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/null2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Based on a testcase by Eric Dumazet <Eric.Dumazet@COSMOSBAY.COM>
++
++#include <cstdlib>
++
++const char * const foo = ""; // foo is not NULL
++
++int main() {
++ if ((foo == 0) ? 0 : foo) // so this should evaluate to `foo'
++ return 0;
++ else
++ std::abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/null3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/null3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/null3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/null3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++void x()
++{
++ int* p = 1==0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overcnv1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overcnv1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overcnv1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overcnv1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++class A {
++public:
++ void f(const char * const * );
++};
++void f(const char * const *) {}
++
++void g()
++{
++ char *ar[10];
++ A a;
++ f(ar);
++ a.f(ar);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overcnv2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overcnv2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overcnv2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overcnv2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Test that we resolve this case as mandated by the standard, but also
++// warn about it. We choose op char* not because it is a member of B --
++// the standard says that all conversion ops are treated as coming from
++// the type of the argument -- but because it is non-const.
++
++struct A {
++ operator const char *() const;
++};
++
++struct B : public A {
++ operator char *() { return 0; }
++};
++
++int main()
++{
++ B b;
++ (const char *)b; // WARNING - surprising overload resolution
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++struct A {
++ A operator+ (int) const { return *this; }
++};
++
++A operator+ (A, float);
++
++int main ()
++{
++ A a;
++ a + 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't run:
++
++template <class T>
++class ConstArray {
++};
++
++template <class T1, class T2>
++void operator+(const ConstArray<T1>&, const ConstArray<T2>&)
++{
++}
++
++template <class T1, class T2>
++void operator+(const ConstArray<T1>&, T2);
++
++template <class T1, class T2>
++void operator+(T1, const ConstArray<T2>&);
++
++const ConstArray<int> cai() { return ConstArray<int>(); }
++const ConstArray<double> cad() { return ConstArray<double>(); }
++
++int main()
++{
++ cai () + cad ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't run:
++
++void f(const int *);
++void f(int *) {}
++
++void f2(const volatile int *);
++void f2(volatile int *) {}
++
++int i;
++
++int main()
++{
++ f(&i);
++ f2(&i);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't run:
++
++void f(int* const volatile * const * const*);
++void f(int* const * const * const*) {}
++
++int main()
++{
++ int*** ip;
++ f(&ip);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't run:
++
++struct S {};
++
++struct T : public S {};
++
++struct U : public T {};
++
++void f(int T::*) {}
++void f(int U::*);
++
++void g(void (T::*)(int)) {}
++void g(void (U::*)(int));
++
++int main()
++{
++ int S::*ip;
++ void (S::*fp)(int);
++
++ f(ip);
++ g(fp);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++extern "C" void abort();
++
++struct S1
++{
++ int f() { return 0; }
++ int f() const { return 1; }
++};
++
++struct S2 : public S1
++{
++};
++
++int main()
++{
++ S2 s2;
++ if (s2.f() != 0)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Check that object call works when there are multiple conversion ops
++// returning the same type.
++
++typedef int (*pfn)();
++
++int zero () { return 0; }
++int one () { return 1; }
++int two () { return 2; }
++
++struct A {
++ A() { }
++ operator pfn () { return one; }
++ operator pfn () const { return zero; }
++ operator pfn () volatile { return two; }
++};
++
++int
++main ()
++{
++ const A a;
++ return a();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++class a {
++public:
++ int f() { return 0; }
++ int f() const { return 1; }
++};
++
++class b : public a {
++};
++
++int main()
++{
++ int (b::* ptr1)() = &b::f;
++ int (b::* ptr2)() const = &b::f;
++
++ b ao;
++
++ if ((ao.*ptr1)() != 0)
++ return 1;
++ if ((ao.*ptr2)() != 1)
++ return 1;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/overload9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/overload9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++struct T { ~T() {}; };
++
++int g ()
++{
++ foo:
++ T t;
++ int f(int);
++ bar:
++ T t2;
++ int f(double);
++ return f(3);
++}
++
++
++int f(int)
++{
++ return 0;
++}
++
++
++int f(double)
++{
++ return 1;
++}
++
++
++int main()
++{
++ return g();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/parse1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/parse1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/parse1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/parse1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Test that we save declspecs before a class defn properly.
++// Build don't link:
++
++static volatile union {
++ void f() { }
++} u;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/pmf1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/pmf1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/pmf1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/pmf1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++struct foo {};
++typedef long unsigned int & (foo::*pmf)(void);
++void fn (...) {}
++int main ()
++{
++ pmf y = 0;
++ fn (y);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/pmf2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/pmf2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/pmf2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/pmf2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++// submitted by David C Binderman <dcb@pncl.co.uk>
++
++struct S
++{
++ void f();
++};
++
++void (S ::* pmf) ();
++
++S * pf;
++
++void
++f()
++{
++ pmf = & pf->f; // ERROR - not a valid pmf expression
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/pmf3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/pmf3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/pmf3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/pmf3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Submitted by Nathan Sidwell <nathan@acm.org>
++// Bug: g++ was crashing after giving errors.
++
++template<class T>
++ void connect_to_method(
++ T *receiver,
++ void (T::*method)())
++ {}
++
++class Gtk_Base
++{
++public:
++ void expose();
++ void show();
++ void show(int);
++ Gtk_Base();
++};
++
++
++Gtk_Base::Gtk_Base()
++{
++ connect_to_method(this,&show); // ERROR - invalid pmf expression
++ connect_to_method(this,&expose); // ERROR - invalid pmf expression
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/printf1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/printf1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/printf1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/printf1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -Wall
++
++struct a
++{
++ void x(char *f,...) __attribute__((format(printf,2,3)));
++};
++
++int main()
++{
++ a A;
++ A.x("%d"); // WARNING - too few arguments for format
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++class x
++{
++public:
++ virtual int is_constant();
++};
++
++void foo()
++{
++ x* y;
++ if (y->is_constant) // ERROR - assuming &
++ {
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++class cow {
++public:
++ void moo (char *);
++};
++
++void f()
++{
++ cow* c;
++
++ void (cow::*fp0)(char*) = &cow::moo; // OK
++ void (cow::*fp1)(int) = &cow::moo; // ERROR - conversion
++ int (cow::*fp2)(char*) = &cow::moo; // ERROR - conversion
++ int (cow::*fp3)(char*, void*) = fp2; // ERROR - conversion
++ int (cow::*fp4)(double) = (int (cow::*)(double)) fp2; // OK
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++class c {
++ void (c::*x)();
++public:
++ void f() { this->x(); } // ERROR - pointer-to-member
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Test to make sure g++ can handle target types that aren't identical
++// with pointers to members.
++
++struct A { int i; };
++struct B : public A { };
++
++int main ()
++{
++ int A::*p = &A::i;
++ const int B::*q = &A::i;
++ return p != q;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/realloc.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/realloc.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/realloc.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/realloc.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++extern "C" void realloc();
++
++class bug {
++public:
++ void realloc(int foo,int bar);
++};
++
++void f() {
++ bug c;
++ c.realloc(50,50);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/redecl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/redecl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/redecl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/redecl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++//Build don't link:
++struct X{
++ void i();
++ void i(int); // ERROR -
++ int i; // ERROR - conflict
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/redecl2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/redecl2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/redecl2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/redecl2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct S {
++ S(int);
++ S(int); // ERROR - already declared
++
++ ~S();
++ ~S(); // ERROR - already declared
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ref1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ref1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/ref1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/ref1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++int f();
++
++void g()
++{
++ const int& i = f(); // OK
++ int& j = f(); // ERROR - initialization of non-const reference
++ const volatile int& k = f(); // ERROR - initialization of volatile ref
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,121 @@
++// test of rtti of non-class types
++// Special g++ Options: -frtti
++
++#include <typeinfo>
++
++extern "C" {
++ int printf(const char *, ...);
++ void exit(int);
++}
++
++int i;
++short s;
++char c;
++long l;
++
++unsigned int ui;
++unsigned short us;
++unsigned char uc;
++unsigned long ul;
++
++float f;
++double d;
++
++int& ri = i;
++const volatile int cvi = 10;
++volatile const int vci = 20;
++const int ci = 100;
++
++int *pi;
++int ai[10];
++
++enum color { red, blue, green, yellow};
++
++int (*fp)();
++int (*gp)();
++int (*hp)(int);
++
++class XX {
++public:
++ int xxi;
++ float xxf;
++ int xxf1 () {};
++ int xxf2 (int k) {};
++};
++
++class YY {
++public:
++ int yyi;
++ double yyd;
++ int yyf1 (float f) {};
++ double yyf2 () {return yyd;};
++};
++
++int XX::*ptmd1;
++int XX::*ptmd2;
++float XX::*ptmd3;
++int YY::*ptmd4;
++
++int (XX::*ptmf1) ();
++int (XX::*ptmf2) ();
++int (XX::*ptmf3) (int);
++int (YY::*ptmf4) ();
++
++int func1 ()
++{ return 0;}
++
++int func2 ()
++{ return 1;}
++
++int func3 (int i)
++{ return i;}
++
++short func4 ()
++{ return 99;}
++
++void error (int i)
++{
++ exit(i);
++}
++
++int main ()
++{
++ if (typeid(i) != typeid(int)) error(1);
++ if (typeid(s) != typeid(short)) error(2);
++ if (typeid(c) != typeid(char)) error(3);
++ if (typeid(l) != typeid(long)) error(4);
++ if (typeid(ui) != typeid(unsigned int)) error(5);
++ if (typeid(us) != typeid(unsigned short)) error(6);
++ if (typeid(uc) != typeid(unsigned char)) error(7);
++ if (typeid(ul) != typeid(unsigned long)) error(8);
++ if (typeid(f) != typeid(float)) error(9);
++ if (typeid(d) != typeid(double)) error(10);
++
++ if (typeid(*pi) != typeid(int)) error(51);
++ if (typeid(pi) == typeid(ai)) error(52);
++ if (typeid(ri) != typeid(i)) error(53);
++ if (typeid(cvi) != typeid(vci)) error (54);
++ if (typeid(vci) != typeid(i)) error(55);
++ if (typeid(ci) != typeid(cvi)) error (56);
++ if (typeid(ci) != typeid(const int)) error(57);
++
++ if (typeid(func1) != typeid(func2)) error (81);
++ if (typeid(func2) == typeid(func3)) error (82);
++ if (typeid(func1) == typeid(func4)) error (83);
++ if (typeid(func3) == typeid(func4)) error (84);
++
++ if (typeid(red) != typeid(color)) error (101);
++ if (typeid(green) != typeid(blue)) error (102);
++
++ if (typeid(fp) != typeid(gp)) error (103);
++ if (typeid(gp) == typeid(hp)) error (104);
++
++ if (typeid(ptmd1) != typeid(ptmd2)) error (105);
++ if (typeid(ptmd1) == typeid(ptmd3)) error (106);
++ if (typeid(ptmd2) == typeid(ptmd4)) error (107);
++
++ if (typeid(ptmf1) != typeid(ptmf2)) error (108);
++ if (typeid(ptmf2) == typeid(ptmf3)) error (109);
++ if (typeid(ptmf1) == typeid(ptmf4)) error (110);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,88 @@
++// test of rtti of single inheritance and multiple inheritance classes
++// Special g++ Options: -frtti
++
++#include <typeinfo>
++
++extern "C" {
++ int printf(const char *, ...);
++ void exit(int);
++}
++
++class X {
++ public:
++ int xi;
++};
++
++class Y : public X {
++ short ys;
++};
++
++class Z : public Y {
++ int zi;
++};
++
++Z z;
++Y y;
++Y *yp = &z;
++X *xp = &z;
++Z *zp = &z;
++
++class A {
++ public:
++ int Ai;
++};
++
++class B {
++ public:
++ int Bi;
++};
++
++class D : public A, public B {
++ int Di;
++};
++
++/*
++class E : public D, public B {
++ int Ei;
++};
++*/
++class E {
++ int Ei;
++};
++
++class F : public E, public D {
++ int Fi;
++};
++
++D d;
++A *ap = &d;
++B *bp = &d;
++F f;
++A *aap = &f;
++D *dp = &f;
++B *bbp = dp;
++
++void *vp = zp;
++
++void error (int i)
++{
++ exit(i);
++}
++
++int main ()
++{
++ if (typeid(z) != typeid(Z)) error(1);
++ if (typeid(*yp) == typeid(Z)) error(2);
++ if (typeid(*yp) == typeid(*zp)) error(3);
++ if (typeid(xp) == typeid(yp)) error(4);
++
++ xp = (X *)&y;
++ if (typeid(*xp) == typeid(*yp)) error(5);
++ if (typeid(*xp) == typeid(Y)) error(6);
++
++ if (typeid(*ap) == typeid(*bp)) error (31);
++ if (typeid(*ap) == typeid(D)) error(32);
++
++ if (typeid(*aap) == typeid(*bbp)) error(33);
++ if (typeid(*dp) == typeid(*aap)) error(34);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,96 @@
++// test of rtti of single inheritance and multiple inheritance with
++// virtual functions
++// Special g++ Options: -frtti
++
++#include <typeinfo>
++
++extern "C" {
++ int printf(const char *, ...);
++ void exit(int);
++}
++
++class X {
++ public:
++ int xi;
++ virtual int f() {};
++};
++
++class Y : public X {
++ short ys;
++};
++
++class Z : public Y {
++ int zi;
++};
++
++Z z;
++Y y;
++Y *yp = &z;
++X *xp = &z;
++Z *zp = &z;
++
++class A {
++ public:
++ int Ai;
++ virtual int a() {};
++};
++
++class B {
++ public:
++ int Bi;
++ virtual int g() {};
++};
++
++class D : public A, public B {
++ int Di;
++};
++
++/*
++class E : public D, public B {
++ int Ei;
++};
++*/
++class E {
++ int Ei;
++};
++
++class F : public E, public D {
++ int Fi;
++};
++
++D d;
++A *ap = &d;
++B *bp = &d;
++D *dp = &d;
++F f;
++A *aap = &f;
++B *bbp = &f;
++
++void *vp = zp;
++
++void error (int i)
++{
++ exit(i);
++}
++
++int main ()
++{
++ if (typeid(z) != typeid(Z)) error(1);
++ if (typeid(*yp) != typeid(Z)) error(2);
++ if (typeid(*yp) != typeid(*zp)) error(3);
++ if (typeid(xp) == typeid(yp)) error(4);
++
++ xp = (X *)&y;
++ if (typeid(*xp) == typeid(*yp)) error(5);
++ if (typeid(*xp) != typeid(Y)) error(6);
++
++ if (typeid(*ap) != typeid(*bp)) error (31);
++ if (typeid(*ap) != typeid(D)) error(32);
++ vp = dp;
++ vp = dynamic_cast<void*> ((B *)vp);
++ if (dp != (D *)vp) error(35);
++
++ dp = (D *)&f;
++ if (typeid(*aap) != typeid(*bbp)) error(37);
++ if (typeid(*dp) != typeid(*aap)) error(38);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,86 @@
++// test of rtti of single inheritance and multiple inheritance with
++// virtual inheritance
++// Special g++ Options: -frtti -w
++
++#include <typeinfo>
++
++extern "C" {
++ int printf(const char *, ...);
++ void exit(int);
++}
++
++class X {
++ public:
++ int xi;
++ virtual int f() {};
++};
++
++class Y : public virtual X {
++ short ys;
++};
++
++class Z : public virtual Y {
++ int zi;
++};
++
++Z z;
++Y y;
++Y *yp = &z;
++X *xp = &z;
++Z *zp = &z;
++
++class A {
++public:
++ int Ai;
++ virtual int a() {};
++};
++
++class B {
++public:
++ int Bi;
++ virtual int g() {};
++};
++
++class D : public virtual A, private B {
++ int Di;
++};
++
++class E : public virtual D, public B {
++ int Ei;
++};
++
++class F : public E, public virtual D {
++ int Fi;
++};
++
++D d;
++A *ap = &d;
++B *bp = (B *)&d;
++F f;
++A *aap = &f;
++D *dp = &f;
++B *bbp = (B *)dp;
++
++void *vp = zp;
++
++void error (int i)
++{
++ exit(i);
++}
++
++int main ()
++{
++ if (typeid(z) != typeid(Z)) error(1);
++ if (typeid(*yp) != typeid(Z)) error(2);
++ if (typeid(*yp) != typeid(*zp)) error(3);
++ if (typeid(xp) == typeid(yp)) error(4);
++
++ xp = (X *)&y;
++ if (typeid(*xp) == typeid(*yp)) error(5);
++ if (typeid(*xp) != typeid(Y)) error(6);
++
++ if (typeid(*ap) != typeid(*bp)) error (31);
++ if (typeid(*ap) != typeid(D)) error(32);
++ if (typeid(*aap) != typeid(*bbp)) error(33);
++ if (typeid(*dp) != typeid(*aap)) error(34);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rtti5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rtti5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options: -fno-rtti
++
++// Copyright (C) 1999 Free Software Foundation, Inc.
++// Contributed by Nathan Sidwell 9 Apr 1999 <nathan@acm.org>
++// derrived from bug report from Alexander Zvyagin <zvyagin@mx.ihep.su>
++
++// check we don't die with disabled rtti
++
++
++int main(void) {
++ int i;
++ typeid(i); // ERROR - rtti disabled
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rttid2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rttid2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rttid2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rttid2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,100 @@
++// test of rtti of single inheritance and multiple inheritance classes
++// dynamic casting
++// Special g++ Options: -frtti
++
++#include <typeinfo>
++
++extern "C" {
++ int printf(const char *, ...);
++ void exit(int);
++}
++
++class X {
++ public:
++ int xi;
++};
++
++class Y : public X {
++ short ys;
++};
++
++class Z : public Y {
++ int zi;
++};
++
++Z z;
++Y y;
++Y *yp = &z;
++X *xp = &z;
++Z *zp = &z;
++
++class A {
++ public:
++ int Ai;
++};
++
++class B {
++ public:
++ int Bi;
++};
++
++class D : public A, public B {
++ int Di;
++};
++
++/*
++class E : public D, public B {
++ int Ei;
++};
++*/
++class E {
++ int Ei;
++};
++
++class F : public E, public D {
++ int Fi;
++};
++
++D d;
++A *ap = &d;
++B *bp = &d;
++F f;
++F *fp = &f;
++A *aap = &f;
++D *dp = &f;
++B *bbp = dp;
++
++void *vp = zp;
++
++/*
++void error (int i)
++{
++ printf("FAIL\n");
++ exit(i);
++}
++*/
++
++void error (int i)
++{
++ exit(i);
++}
++
++int main ()
++{
++
++ vp = (void *)0;
++
++ vp = dynamic_cast<Y *> (&z);
++ if (vp == 0) error(11);
++
++ vp = dynamic_cast<X *> (yp);
++ if (vp == 0) error(12);
++
++ vp = dynamic_cast<D *> (dp);
++ if (vp != (void *)dp) error(21);
++
++ vp = dynamic_cast<B *> (fp);
++ if (vp != (void *)bbp) error(22);
++
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rttid3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rttid3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rttid3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rttid3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,115 @@
++// test of rtti of single inheritance and multiple inheritance with
++// virtual functions
++// dynamic casting
++// Special g++ Options: -frtti
++
++#include <typeinfo>
++
++extern "C" {
++ int printf(const char *, ...);
++ void exit(int);
++}
++
++class X {
++ public:
++ int xi;
++ virtual int f() {};
++};
++
++class Y : public X {
++ short ys;
++};
++
++class Z : public Y {
++ int zi;
++};
++
++Z z;
++Y y;
++Y *yp = &z;
++X *xp = &z;
++Z *zp = &z;
++
++class A {
++ public:
++ int Ai;
++ virtual int a() {};
++};
++
++class B {
++ public:
++ int Bi;
++ virtual int g() {};
++};
++
++class D : public A, public B {
++ int Di;
++};
++
++/*
++class E : public D, public B {
++ int Ei;
++};
++*/
++class E {
++ int Ei;
++};
++
++class F : public E, public D {
++ int Fi;
++};
++
++D d;
++A *ap = &d;
++B *bp = &d;
++D *dp = &d;
++F f;
++F *fp = &f;
++A *aap = &f;
++B *bbp = &f;
++
++void *vp = zp;
++
++/*
++void error (int i)
++{
++ printf("FAIL\n");
++ exit(i);
++}
++*/
++
++void error (int i)
++{
++ exit(i);
++}
++
++int main ()
++{
++ vp = (void *)0;
++
++ vp = dynamic_cast<Y *> (&z);
++ if (vp == 0) error(11);
++
++ vp = dynamic_cast<Z *> (yp);
++ if (vp == 0) error(11);
++
++ vp = dynamic_cast<X *> (yp);
++ if (vp == 0) error(12);
++
++ vp = dynamic_cast<D *> (dp);
++ if (vp != (void *)dp) error(21);
++
++ vp = dynamic_cast<B *> (dp);
++ if (vp == (void *)dp) error(21);
++
++ vp = dynamic_cast<B *> (fp);
++ if (vp != (void *)bbp) error(22);
++
++ vp = dynamic_cast<void *> (aap);
++ if (vp != (void *)fp) error(23);
++
++ vp = dynamic_cast<B *> (aap);
++ if (vp != (void *)bbp) error(24);
++
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rttid4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rttid4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/rttid4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/rttid4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,111 @@
++// test of rtti of single inheritance and multiple inheritance with
++// virtual inheritance
++// dynamic casting
++// Special g++ Options: -w
++
++#include <typeinfo>
++
++extern "C" {
++ int printf(const char *, ...);
++ void exit(int);
++}
++
++class X {
++ public:
++ int xi;
++ virtual int f() {};
++};
++
++class Y : public virtual X {
++ short ys;
++};
++
++class Z : public virtual Y {
++ int zi;
++};
++
++Z z;
++Y y;
++Y *yp = &z;
++X *xp = &z;
++Z *zp = &z;
++
++class A {
++public:
++ int Ai;
++ virtual int a() {};
++};
++
++class B {
++public:
++ int Bi;
++ virtual int g() {};
++};
++
++class D : public virtual A, private B {
++ int Di;
++};
++
++class E : public virtual D, public B {
++ int Ei;
++};
++
++class F : public E, public virtual D {
++ int Fi;
++};
++
++D d;
++A *ap = &d;
++B *bp = (B *)&d;
++F f;
++F *fp = &f;
++A *aap = &f;
++D *dp = &f;
++E *ep = &f;
++B *bbp = (B *)dp;
++
++void *vp = zp;
++
++/*
++void error (int i)
++{
++ printf("FAIL\n");
++ exit(i);
++}
++*/
++
++void error (int i)
++{
++ exit(i);
++}
++
++int main ()
++{
++ vp = (void *)0;
++
++ vp = dynamic_cast<Y *> (&z);
++ if (vp == 0) error(11);
++
++ vp = dynamic_cast<Z *> (yp);
++ if (vp == 0) error(11);
++
++ vp = dynamic_cast<X *> (yp);
++ if (vp == 0) error(12);
++
++ vp = dynamic_cast<D *> (dp);
++ if (vp != (void *)dp) error(21);
++
++ // Ill-formed: dynamic_cast to private or ambiguous base
++ // vp = dynamic_cast<B *> (dp);
++ // if (vp == (void *)dp) error(21);
++
++ // vp = dynamic_cast<B *> (fp);
++ // if (vp == (void *)bbp) error(22);
++
++ vp = dynamic_cast<void *> (aap);
++ if (vp != (void *)fp) error(23);
++
++ vp = dynamic_cast<B *> (aap);
++ if (vp == (void *)bbp) error(24);
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/signed.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/signed.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/signed.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/signed.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++// Copyright (C) 1999 Free Software Foundation, Inc.
++// Contributed by Nathan Sidwell 24 Mar 1999 <nathan@acm.org>
++
++// Determine that function style casts are groked
++
++void fn()
++{
++ +char(5);
++ +short(5);
++ +int(5);
++ +long(5);
++ +signed(5);
++ +unsigned(5);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/singleton.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/singleton.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/singleton.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/singleton.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// This tests two things:
++// 1. there is an annoying warning.
++// singleton.C:26: warning: `class singleton' only defines private constructors and has no friends
++// egcs fails to see that there is a public static accessor function.
++// 2. the program crashes, because apparently the static variable s in
++// singleton::instance() is considered constructed although the ctor
++// exited via an exception. (crash changed to non-zero return here)
++
++class singleton {
++public:
++ static singleton& instance() {
++ static singleton s;
++ return s;
++ }
++ int check() {return initialized;}
++
++private:
++ singleton() : initialized(1) {
++ if ( counter++ == 0 ) throw "just for the heck of it";
++ initialized = 2;
++ }
++ singleton( const singleton& rhs );
++ void operator=( const singleton& rhs );
++ int initialized;
++ static int counter;
++};
++
++int singleton::counter;
++
++int main()
++{
++ while (1) {
++ try {
++ return singleton::instance().check()-2;
++ } catch (...) { }
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/sizeof1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/sizeof1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/sizeof1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/sizeof1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++struct X {
++ int f ();
++ int f (int);
++};
++
++void f(int i)
++{
++ i = sizeof(X::f); // ERROR - cannot take sizeof a member function
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++extern "C" void abort();
++
++struct S
++{
++ static const int i = 3;
++};
++
++const int S::i = 2; // ERROR - duplicate initialization
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Based on a test case by Koos Vriezen <koos@polder.ubc.kun.nl>
++
++struct foo {
++ static void (*mystatic) ();
++};
++
++void bar(foo& t) {
++ t.mystatic ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++class S
++{
++ ~S();
++public:
++ friend void f();
++};
++
++
++S::~S()
++{
++ static S s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/static4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/static4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Origin: Andrew Pollard <andrew@odie.demon.co.uk>
++// Special g++ Options: -O
++
++struct A {
++ A(int, int);
++};
++A::A(int, int) {}
++static A _A(0, 0);
++int main() { return(0); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/string1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/string1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/string1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/string1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// Origin: mrs@wrs.com (Mike Stump)
++
++class Wrapper {
++public:
++ static const char msgPtr[];
++ static const char *JunkFunc() {
++ return &msgPtr[0];
++ }
++};
++
++const char Wrapper::msgPtr[] = "Hello world.";
++
++int main() {
++ const char *p1 = &Wrapper::msgPtr[0];
++ const char *p2 = Wrapper::JunkFunc();
++
++ if (p1 != p2)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/temporary1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/temporary1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/temporary1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/temporary1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,40 @@
++extern "C" int printf(char*, ...);
++
++int c, d;
++class Foo
++{
++public:
++ Foo() { printf("Foo() 0x%08lx\n", (unsigned long)this); ++c; }
++ Foo(Foo const &) { printf("Foo(Foo const &) 0x%08lx\n", (unsigned long)this); }
++ ~Foo() { printf("~Foo() 0x%08lx\n", (unsigned long)this); ++d; }
++};
++
++// Bar creates constructs a temporary Foo() as a default
++class Bar
++{
++public:
++ Bar(Foo const & = Foo()) { printf("Bar(Foo const &) 0x%08lx\n", (unsigned long)this); }
++};
++
++void fakeRef(Bar *)
++{
++}
++
++int main()
++{
++ // Create array of Bar. Will use default argument on constructor.
++ // The old compiler will loop constructing Bar. Each loop will
++ // construct a temporary Foo() but will not destruct the Foo().
++ // The Foo() temporary is destructed only once after the loop
++ // completes. This could lead to a memory leak if the constructor
++ // of Foo() allocates memory.
++ Bar bar[2];
++
++ fakeRef(bar);
++
++ printf("Done\n");
++
++ if (c == d && c == 2)
++ return 0;
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typeck1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typeck1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typeck1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typeck1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++extern int a[][]; // ERROR - invalid multidimensional array
++extern int b[7][]; // ERROR - invalid multidimensional array
++extern int c[][7]; // OK
++
++extern int (*i)[]; // ERROR - previous declaration
++extern int (*i)[7]; // ERROR - conflicting types for `i'
++
++extern int m[];
++extern int m[7]; // OK
++
++void f(int (*j)[3])
++{
++ extern int (*k)[];
++ f(k); // ERROR - passing wrong type
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++typedef const struct {
++ int x;
++} Test;
++
++void foo(Test);
++
++void foo(Test t)
++{
++ t.x = 0; // ERROR - assignment of read-only member
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++//Build don't link:
++struct S{
++
++ static const int i;
++ static const int j;
++};
++
++typedef S T;
++const int T::i = 4;
++const int T::j = 4;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++//Build don't link:
++template<class T>
++struct X{
++ T v;
++ X(){}
++ virtual ~X(){}
++ virtual inline T f(T x){return x;}
++};
++
++void f()
++{
++ typedef int H;
++ X<H> y;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct A {
++ void f ();
++};
++
++typedef A foo;
++
++void foo::f() { }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++// by Alexandre Oliva <oliva@dcc.unicamp.br>
++
++typedef int t;
++typedef t* u;
++typedef u v;
++typedef v* (*w)(t);
++typedef int t;
++typedef t* u;
++typedef u v;
++typedef v* (*w)(t const); // this is ok
++typedef v* (*w)(t); // ERROR - covers message `previously declared here'
++typedef v* (*const w)(t); // ERROR - invalid redeclaration
++typedef v const* (*w)(t); // ERROR - invalid redeclaration
++typedef v* const (*w)(t); // ERROR - invalid redeclaration
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typedef6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typedef6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Submitted by Jason Merrill <jason@cygnus.com>.
++// Bug: g++ fails to see through the T typedef in the C ctor.
++// Build don't link:
++
++struct A {
++ A (int) { }
++};
++
++typedef A T;
++
++struct B: public virtual T {
++ B (): T(1) { }
++};
++
++struct C: public B {
++ C (): T(1) { }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++#include <typeinfo>
++
++struct S {
++ S (const char*);
++};
++
++void f(S s);
++void f(type_info);
++
++void g()
++{
++ f("abc");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typename1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typename1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/typename1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/typename1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// This code snippet should be rejected with -pedantic
++// Based on a test case by Louidor Erez <s3824888@techst02.technion.ac.il>
++
++// Build don't link:
++// Special g++ Options: -pedantic
++
++template<class T>
++class Vector {
++public:
++ typedef T* iterator;
++};
++
++template<class T>
++void f()
++{
++ Vector<T>::iterator i = 0; // ERROR - missing typename - XFAIL *-*-*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/union1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/union1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/union1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/union1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++class A
++{
++ private:
++ int myInt;
++
++ public:
++ A& operator = (int right) {myInt = right; return *this;}
++};
++
++union B
++{
++ char f1;
++ A f2; // gets bogus error - non-copy assignment op is OK
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++class D2;
++
++class B {
++private:
++ int a; // ERROR - B::a is private
++protected:
++ int b;
++
++ friend class D2;
++};
++
++class D : public B {
++public:
++ using B::a;
++ using B::b;
++}; // ERROR - within this context
++
++class D2 : public B {
++public:
++ using B::a;
++ using B::b;
++
++private:
++ using B::b;
++}; // ERROR - conflicting access specifications
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++struct X{
++ void f();
++};
++
++struct Y:X{
++ void f(int);
++ void f(); // ERROR - conflict
++ using X::f;
++}; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++struct A{
++ A();
++};
++
++typedef struct {
++ A i;
++} S;
++
++struct B: S{
++ using S::S; // ERROR - no such field
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++// Based on a testcase by Martin Bachtold <martinb@coyotesystems.com>
++
++// excess errors test - XFAIL *-*-*
++
++struct foo {
++ void m();
++};
++
++struct bar : foo {
++ using foo::m;
++ void m(int);
++};
++
++void f() {
++ bar b;
++ b.m();
++ b.m(1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/using5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/using5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++// Based on bug report by Klaus-Georg Adams
++// <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++
++struct bar {
++ typedef bar t;
++};
++
++struct foo : bar {
++ using bar::t;
++ t field;
++ t meth();
++ void baz(t arg);
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++struct S0 { virtual void f1 () { } };
++
++struct S1 : virtual public S0 { virtual void f1 () { } };
++
++struct S2 : public S1 { virtual void f1 () { } };
++
++struct S3 : virtual public S0 { virtual void f1 () { } };
++
++struct S4 : public S3 { };
++
++void creator () { new S4; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++struct B
++{
++ virtual int f() volatile
++ { return 0; }
++};
++
++
++struct D : public B
++{
++ virtual int f()
++ { return 1; }
++};
++
++int main()
++{
++ volatile D d;
++ volatile B& b = d;
++ return b.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++struct B
++{
++ virtual int f() volatile
++ { return 1; }
++};
++
++struct D : public B
++{
++ int f()
++ { return 0; }
++};
++
++struct D2 : public D
++{
++ int f()
++ { return 2; }
++};
++
++int main()
++{
++ D2 d2;
++ D& d = d2;
++ return d.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/virtual4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/virtual4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++class A {
++public:
++ virtual int foo() = 0; // ERROR - original definition
++};
++
++class B {
++public:
++ virtual double foo() = 0;
++};
++
++class C
++ : public A, public B
++{
++public:
++ virtual double foo() { return 2; } // ERROR - conflicting return type
++};
++
++class D
++ : public B, public A
++{
++public:
++ virtual double foo() { return 2; } // ERROR - conflicting return type
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/vtbl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/vtbl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/vtbl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/vtbl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't run:
++// Origin: DJ Delorie <dj@delorie.com>
++
++class X {
++public:
++ int i;
++ X() { i = 0; }
++ ~X();
++ virtual int foo() { return i; }
++ virtual void bar();
++};
++
++int main()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/warn01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/warn01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/warn01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/warn01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options: -W -Wall
++
++typedef unsigned long size_t;
++extern void* malloc (size_t);
++extern void free (void*);
++extern void* realloc (void*, size_t);
++
++struct vtable {
++ void* (* _malloc) (size_t);
++ void (* _free) (void*);
++ void* (* _realloc) (void*, size_t);
++};
++
++struct vtable mtable = { malloc, free }; // WARNING - _realloc
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/warn3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/warn3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.other/warn3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.other/warn3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++// Build don't link:
++
++class A {
++};
++
++
++class B {
++public:
++ void f();
++
++private:
++ B ();
++ B (const B&);
++}; // WARNING - only private constructors
++
++
++class C {
++public:
++ void f();
++
++private:
++ ~C ();
++}; // WARNING - only private destructors
++
++
++class D {
++private:
++ void f();
++}; // WARNING - all member functions are private
++
++
++template <class T>
++class X {
++private:
++ ~X ();
++}; // WARNING - only private destructors
++
++template class X<int>;
++template class X<double>;
++
++
++template <class T>
++class Y {
++private:
++ Y ();
++ Y (const Y&);
++}; // WARNING - only private constructors
++
++
++template <class T>
++class Z {
++private:
++ void f();
++}; // WARNING - all member functions are private
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/alignof.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/alignof.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/alignof.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/alignof.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++extern "C" void abort();
++
++struct S
++{
++ char c;
++ double d;
++};
++
++
++template <class T>
++void foo(T)
++{
++ if (__alignof__(T) != __alignof__(S))
++ abort();
++}
++
++
++int main()
++{
++ foo(S());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++template <class T, unsigned N>
++ unsigned size(T (&)[N]) { return N; }
++template <class T, unsigned N>
++ unsigned size(T const (&)[N]) { return N; }
++
++int main() {
++ short iarray[] = { 1, 2, 3, 4, 5 };
++ const short carray[] = { 1, 2, 3, 4, 5 };
++ return size(iarray) - size(carray);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template<int N, class C>
++class Bar {};
++
++template<class C>
++class Huh {};
++
++template<int N>
++void foo(const Bar<N,Huh<float[1]> > &x) {}
++
++int main() {
++ foo(Bar<3,Huh<float[1]> >());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++// Origin: Brendan Kehoe <brendan@cygnus.com>
++
++ template <int x> int foo(char[4][x]) { return x; }
++ int (*bar)(char[4][3]) = &foo;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/array4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/array4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Test to make sure that the array bounds are treated as an expression
++// in template parm substitution.
++
++// Written by Jason Merrill <jason@cygnus.com>
++
++// Build don't link:
++
++template <class T> void f (T t) { int ar[sizeof (T)]; }
++
++int
++main ()
++{
++ f (1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/assign1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/assign1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/assign1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/assign1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++struct S {
++ S();
++ T t;
++};
++
++void f()
++{
++ S<const int> s;
++ s = s; // ERROR - generated assignment operator is illegal
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,54 @@
++template <typename Y> struct auto_ptr_ref {
++ Y* py;
++ auto_ptr_ref(Y* p) : py(p) {}
++};
++template<typename X> struct auto_ptr {
++ X* px;
++ public:
++ typedef X element_type;
++
++ explicit auto_ptr(X* p =0) throw() : px(p) {}
++ auto_ptr(auto_ptr& r) throw() : px(r.release()) {}
++ template<typename Y>
++ auto_ptr(auto_ptr<Y>& r) throw() : px(r.release()) {}
++
++ auto_ptr& operator=(auto_ptr& r) throw() {
++ reset(r.release());
++ return *this;
++ }
++ template<typename Y> auto_ptr& operator=(auto_ptr<Y>& r) throw() {
++ reset(r.release());
++ return *this;
++ }
++
++ ~auto_ptr() { delete px; }
++
++ X& operator*() const throw() { return *px; }
++ X* operator->() const throw() { return px; }
++ X* get() const throw() { return px; }
++ X* release() throw() { X* p=px; px=0; return p; }
++ void reset(X* p=0) throw() { if (px != p) delete px, px = p; }
++
++ auto_ptr(auto_ptr_ref<X> r) throw() : px(r.py) {}
++ template<typename Y> operator auto_ptr_ref<Y>() throw() {
++ return auto_ptr_ref<Y>(release());
++ }
++ template<typename Y> operator auto_ptr<Y>() throw() {
++ return auto_ptr<Y>(release());
++ }
++};
++
++struct Base { Base() {} virtual ~Base() {} };
++struct Derived : Base { Derived() {}; };
++
++auto_ptr<Derived> f() { auto_ptr<Derived> null(0); return null; }
++void g(auto_ptr<Derived>) { }
++void h(auto_ptr<Base>) { }
++
++int main() {
++ auto_ptr<Base> x(f());
++ auto_ptr<Derived> y(f());
++ x = y;
++ g(f());
++ h(f());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/bad-type.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/bad-type.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/bad-type.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/bad-type.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++template<class Type>
++class A
++{
++public:
++ Type m;
++};
++
++template<class Type>
++void f(A<Type>& a, Type d)
++{
++ A.m=d; // ERROR - invalid use of template
++}
++
++int main()
++{
++ A<int> a;
++ f(a,2);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/call1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/call1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/call1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/call1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++struct IsCompressed { };
++struct Field {
++ bool IsCompressed() const { return true; }
++};
++
++template<class C>
++inline bool
++for_each(const Field& p, IsCompressed, C)
++{
++ return p.IsCompressed();
++}
++
++template bool for_each<int>(const Field& p, IsCompressed, int);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/call2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/call2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/call2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/call2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++struct IsCompressed { };
++struct Field {
++};
++
++template<class C>
++inline bool
++for_each(const Field& p, IsCompressed, C)
++{
++ return p.IsCompressed(); // ERROR - calling type like a method
++}
++
++template bool for_each<int>(const Field& p, IsCompressed, int); // ERROR - instantiated from here
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/cast1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/cast1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/cast1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/cast1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++void f (T t) {
++ const_cast<T>(t);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/const1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/const1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/const1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/const1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++template <class T> struct B { static const int i = 3; };
++template <class T> struct A { static const int i = B<T>::i; };
++enum { i = A<int>::i };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/conv1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/conv1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/conv1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/conv1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++template <class T>
++struct S1 {};
++
++struct S2
++{
++ template <class T>
++ operator S1<T>*();
++};
++
++struct D: public S1<int> {
++};
++
++void f()
++{
++ S2 s;
++ (D*) s; // ERROR - cannot convert
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/conv2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/conv2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/conv2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/conv2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template<class T>
++class A {
++public:
++ operator const T*() const;
++ const T* cast() const;
++};
++
++template<class T>
++const T* A<T>::cast() const {
++ return operator const T*();
++}
++
++template class A<char>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/copy1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/copy1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/copy1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/copy1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++int i = 0;
++
++template <class T>
++class F
++{
++public:
++ F() {}
++
++ template <class T2> F(F<T2>)
++ {
++ i = 1;
++ }
++};
++
++
++F<int>
++foo()
++{
++ F<int> f1;
++ F<int> f2(f1);
++ return f1;
++}
++
++int
++main()
++{
++ return i;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++template<int M, int N>
++class GCD {
++public:
++ enum { val = (N == 0) ? M : GCD<N, M % N>::val };
++};
++
++int main() {
++ GCD< 1, 0 >::val; // ERROR - division
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++class A
++{
++ class A_impl;
++ public:
++ A(){}
++};
++
++
++template <class j> class A::A_impl
++{ // ERROR - does not declare a template
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Special g++ Options: -g
++
++template <class C>
++class CenteringTag {
++};
++
++struct S {
++ template <class B, class C>
++ static void f() {
++ CenteringTag<C> ctag;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++template <class T> struct A {};
++template <class T> struct A<T>; // ERROR - does not specialize args
++template <class T> const struct A; // ERROR - parse error
++template <class T> template A<int>; // ERROR - .*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++template <class T> struct A {};
++template <class T> struct A<T*>;
++A<int*> ai; // ERROR - incomplete type
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T>
++template <class U>
++struct A { // ERROR - too many template parameter lists
++public:
++ A() {}
++
++ A(const A<T>& b) {} // ERROR - invalid use of template
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// Special g++ Options:
++
++extern "C" void qsort();
++
++struct R {
++ int count;
++ int state1;
++ int state2;
++};
++
++int cmp_d(const R* a, const R* b) {
++ return a->count > b->count;
++}
++
++namespace CXX {
++ template<class T, int i1, int i2>
++ inline void qsort (T b[i1][i2], int (*cmp)(const T*, const T*)) {
++ ::qsort ((void*)b, i1*i2, sizeof(T), (int (*)(const void *, const void *))cmp);
++ }
++}
++
++using namespace CXX;
++
++void sort_machine() {
++ struct R d[256][256];
++ qsort<R,256> (d, cmp_d);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <int B>
++class foo;
++
++template <class U>
++class bar
++{
++ typedef foo<(U::id > 0)> foobar;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't run:
++
++template<class T>
++class foo {
++ T deft;
++
++ template<class U> int priv (U u, T t) { return u - t; }
++public:
++ foo (T t) : deft (t) {}
++
++ template<class U> int pub (U u) {
++ int (foo::*fn) (U, T);
++ fn = &foo<T>::template priv<U>;
++ return (this->*fn) (u, deft);
++ }
++};
++
++int
++main ()
++{
++ foo<long> fff (5);
++ return fff.pub (3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++template <int I>
++void f()
++{
++ class C { public: int c; };
++
++ struct S {
++ void g() {
++ C e;
++ e.c = 3;
++ };
++ };
++
++ S s;
++ s.g();
++}
++
++template void f<7>();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++template<class T> class A {
++ public:
++ class subA {};
++};
++
++
++template<class T> class B : public A<T> {
++ public:
++ class subB : public A::subA {}; // ERROR - not a class or namespace
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class T = int>
++struct A { const T x; A() : x(0) { } A(T x) : x(x) { } };
++
++template <class B>
++void func () { B y; y = B(); } // ERROR - can't use default assignment
++
++int main (void) { func< A<> >(); } // ERROR - instantiated from here
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++// Special g++ Options:
++
++class Pooled
++{
++};
++
++class RefCounted
++{
++};
++
++class BrickExpressionBase : public RefCounted, public Pooled
++{
++};
++
++template<unsigned Dim, class LHS, class RHS, class OP>
++class BrickExpression : public BrickExpressionBase
++{
++};
++
++template <unsigned Dim, class T>
++void f()
++{
++ typedef BrickExpression<Dim, T, T, T> ExprT;
++ ExprT(3).apply;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class T>
++struct S1 {};
++
++template <class T, class U = S1<T> >
++struct S2 {};
++
++template struct S2<100>; // ERROR - type/value mismatch
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class A, class B> void foo();
++template <class C> class bar {
++public:
++ int i;
++ template <class B> friend void foo<C,B>(); // ERROR - template-id
++};
++template <class A, class B> void foo() {
++ bar<A> baz; baz.i = 1;
++ bar<int> buz; buz.i = 1;
++}
++int main() {
++ foo<void,void>();
++ foo<int,void>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++template<typename T, template <class> class U> void template_fn (T);
++template<typename T> void callme ( void (*)(T));
++
++template<typename T> struct S1;
++
++int main()
++{
++ callme(&template_fn<double, S1>);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++template <class T>
++void f()
++{
++ int i[1 << 3];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Origin: Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
++
++double f(double);
++typedef double (*M)(double);
++
++class A {
++public:
++ template <const M n> void g();
++};
++
++class B: public A {
++public:
++ void g() { A::g<f>(); }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++template<int i> int f (void)
++{
++ if (__extension__ ({ 1; }))
++ return 0;
++ return 1;
++}
++
++void g (void)
++{
++ f<1> ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class ARRY>
++inline unsigned int asize(ARRY &a)
++{
++ return sizeof(a) / sizeof(a[0]);
++}
++
++int f(unsigned int n) {
++ int x[n];
++
++ asize(x); // ERROR - no matching function
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,69 @@
++// Build don't link:
++// Origin: Steven Parkes <parkes@sierravista.com>
++
++typedef __SIZE_TYPE__ size_t;
++
++class UUId {};
++
++template <class T> class MetaClass;
++
++class TypeInfo;
++
++struct MetaClassGeneric
++{
++ MetaClassGeneric( TypeInfo& );
++};
++
++struct TypeInfo
++{
++ void (*constructor)( void* );
++ void initialize( void* );
++};
++
++template <class T>
++class TypeIDInit {
++public:
++ TypeIDInit();
++ static void initialize();
++ static TypeInfo info;
++ static int storage[];
++ static void metaclassConstructor( void* );
++};
++
++template <class T>
++TypeInfo TypeIDInit<T>::info =
++{
++ TypeIDInit<T>::metaclassConstructor
++};
++
++template <class T>
++inline
++TypeIDInit<T>::TypeIDInit()
++{
++ info.initialize(storage);
++}
++
++template <class T>
++class NameInfo : public MetaClassGeneric {
++public:
++ NameInfo()
++ : MetaClassGeneric( TypeIDInit<T>::info ) {}
++};
++
++class MetaClass<UUId>
++: public NameInfo<UUId>
++{
++};
++
++extern "C++"
++inline void *operator new(size_t, void *place) throw() { return place; }
++
++template <class T>
++void
++TypeIDInit<T>::metaclassConstructor( void* place )
++{
++ new ( place ) MetaClass<T>;
++}
++
++template class TypeIDInit<UUId> ;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template <class T>
++struct S1
++{
++ T* t;
++ static int foo;
++};
++
++
++struct S2 : public S1<S2>
++{
++ S2* s;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++extern "C" int printf(const char *, ...);
++template <class T> struct A {
++ typedef typename T::X B; // ERROR - not a class
++ A(double);
++};
++
++template <class T> void xxx(typename A<T>::B);
++
++template <class T> struct B {
++ friend void xxx<T>(T); // ERROR - does not match any template
++};
++
++template struct B<double>; // ERROR -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Origin: Corey Kosak
++
++struct cow_t {
++ template<bool Q>
++ static void tfunc(cow_t *cowp) {}
++
++ void moo() {
++ cow_t *cowp;
++ cow_t::tfunc<true>(cowp);
++ }
++};
++
++
++int main()
++{
++ cow_t *cowp;
++ cow_t::tfunc<true>(cowp);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++template <class T> struct A
++{
++ struct B;
++};
++
++template<class T> struct C
++{
++ friend typename A<T>::B;
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// Origin: Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
++
++class A {
++public:
++ template <class T> T& f(T& t) const;
++};
++
++class B {
++public:
++ template <class T> T& f(T& t) const;
++};
++
++class C: public A,B {
++public:
++ template <class T> T& f(T& t) const;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// Origin: Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
++
++template <class T>
++class A {
++public:
++ class B { };
++ class C: public B {
++ public:
++ C(A&):B() { }
++ };
++ C f() { return C(*this); }
++};
++
++int
++main()
++{
++ A<int> a;
++ a.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Origin: Miniussi <miniussi@ilog.fr>
++
++template <class O>
++struct Str {
++ Str(int& val= (*new int()));
++};
++
++template<class O>
++Str<O>::Str(int& val) {}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// Origin: Andreas Kloeckner <ak@ixion.net>
++
++template<class Iterator> struct iterator_traits {
++ typedef typename Iterator::iterator_category
++ iterator_category; // ERROR - no type iterator_category
++};
++
++template<class Category>
++struct iterator {
++ typedef Category iterator_category;
++};
++
++
++template <class Iterator>
++struct reverse_iterator : public
++iterator<typename iterator_traits<Iterator>::iterator_category> {
++ protected:
++ Iterator current;
++
++};
++class tag { };
++
++template <class T>
++struct list {
++ template <class Item>
++ struct list_iterator {
++ };
++
++ reverse_iterator<list_iterator<T> > rbegin()
++ { return reverse_iterator<list_iterator<T> > // ERROR - no type
++ (list_iterator<T>(Head->next())); } // ERROR - instantiated here
++};
++
++template class list<int>; // ERROR - instantiated from here
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// Origin: Jens Maurer <jmaurer@menuett.rhein-main.de>
++
++template<class T, void (T::*f)(int)>
++class C { };
++
++template<class T>
++C<T, &T::output> call(T& obj)
++{ return C<T, &T::output>();
++}
++
++class Test {
++public:
++ void output(int);
++};
++
++void sub()
++{
++ Test t;
++ call(t);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++struct S {
++ typedef typename T::Y<T>::Z X; // ERROR - No Y in A
++ X x; // ERROR - No Y in A
++};
++
++struct A {
++ struct Y {
++ typedef A Z;
++ };
++};
++
++template struct S<A>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Origin: Ian Nixon <ian@tharas.com>
++
++class Action {
++public:
++ virtual void action () = 0;
++};
++
++class Var {
++public:
++
++ template<class Base> void Add() {
++ struct tmp : public Action {
++ void action () {}
++ };
++ tmp *tp = new tmp;
++ }
++
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class Type>
++class CVector {
++public:
++ CVector<int> f() const
++ {
++ CVector<int> v(n);
++ return v;
++ }
++ CVector<long> g() const
++ {
++ CVector<long> v(n);
++ return v;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Origin: rch@larissa.sd.bi.ruhr-uni-bochum.de
++
++template< class X >
++struct VB: public virtual X
++{};
++
++template< class MOPTerm1, class MOPTerm2 >
++struct MOPTermUnify
++{
++ struct MO:
++ public VB<MOPTerm1>,
++ public VB<MOPTerm2>
++ {
++ void fix()
++ {
++ }
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++template <unsigned rank>
++class Tensor
++{
++};
++
++template <unsigned rank>
++class Tensor<2> : Tensor<rank> { // ERROR - template parameters not used
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class T, int i>
++struct K {
++ void f();
++}; // ERROR - forward declaration
++
++template <class T>
++void
++K<T, i>::f()
++{ // ERROR - template parameters
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++
++template <class T> class List;
++
++template <class T>
++struct ListIterator
++{
++ ListIterator ();
++ ListIterator (const ListIterator<T>& rhs);
++};
++
++template <class T>
++struct List
++{
++ void length () const {
++ for (ListIterator<T> li; li; ); // ERROR - used where a `bool'
++ }
++};
++
++void test(List<int>& vals)
++{
++ vals.length(); // ERROR - instantiated from here
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++class foo
++{
++};
++
++template <class T : public foo> // ERROR - base clause
++struct bar
++{
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Build don't link:
++
++template<class T>
++class TestClass1 {
++public:
++ TestClass1() { }
++};
++
++template<class T>
++class TestClass2 {
++public:
++ TestClass2() { }
++ T operator()(int) { }
++};
++
++template<class T>
++void doit(T x) {
++ TestClass1<T> q1;
++ q1 = TestClass1<T>();
++ TestClass2<T> q2;
++ q2 = TestClass2<T>();
++
++ TestClass1<T> p1;
++ p1 = TestClass1(); // ERROR - template used as expression
++
++ TestClass2<T> p2;
++ p2 = TestClass2(); // ERROR - template used as expression
++}
++
++int main() {
++ double x;
++ doit(x);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/crash9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/crash9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++template <class T>
++void f(T) {} // ERROR - parameter has incomplete type
++
++class C;
++
++void g(const C& c)
++{
++ f(c); // ERROR - invalid use of undefined type
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ctor1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ctor1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ctor1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ctor1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <typename _CharT>
++ struct moneypunct
++{
++ moneypunct ();
++};
++
++template <>
++ moneypunct<char>::moneypunct ();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Test for use of template parms in constructor name.
++// Submitted by Jason Merrill <jason@cygnus.com>
++// Build don't link:
++
++template <class T>
++struct A {
++ A<T>();
++};
++
++template <class T>
++A<T>::A<T>()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/decl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/decl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/decl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/decl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++struct S {
++ template <class T>
++ int f(T), g(T); // ERROR - more than one declarator
++};
++
++template <class T>
++void x(T), y(T); // ERROR - more than one declarator
++
++template <class T>
++struct S2
++{
++ static int i, j; // OK.
++};
++
++template <class T>
++int S2<T>::i, S2<T>::j; // ERROR - more than one declarator
++
++template <>
++int S2<int>::i, S2<double>::i; // ERROR - more than one declarator
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/decl2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/decl2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/decl2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/decl2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// crash test - XFAIL *-*-*
++
++// Simplified from testcase by Christophe Boyanique <boyan@imac.u-paris2.fr>
++
++template <class T> struct foo { foo(); };
++template<class T> foo<T>::foo() {}
++T; // ERROR - ICE - XFAIL *-*-*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/deduct1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/deduct1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/deduct1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/deduct1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++template<class CoordinateSystem, class MeshTag>
++struct Mesh { };
++
++struct RectGrid { };
++
++struct RectMesh { };
++
++struct Cartesian { };
++
++template<class CS>
++struct Mesh<CS, RectGrid> { };
++
++template<class CS>
++struct Mesh<CS, RectMesh> : public Mesh<CS, RectGrid> { };
++
++template<class CS>
++void foo(const Mesh<CS, RectGrid> &)
++{
++}
++
++int main()
++{
++ Mesh<Cartesian, RectMesh> m;
++ foo(m);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++template <int S=0, class T=int>
++struct X
++{};
++
++template <>
++struct X<0,int>
++{};
++
++template <int S>
++struct X<S,int>
++: X<>
++{};
++
++int main()
++{
++ X<1,int> x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class T>
++struct S;
++
++template <class T = int>
++struct S {};
++
++template <class T>
++struct S;
++
++void f()
++{
++ S<> s;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++
++template <class T>
++struct S1
++{
++ void foo(T = t());
++
++ static T t();
++};
++
++
++template <class T>
++struct S2
++{
++ void bar();
++};
++
++
++template <class T>
++void S2<T>::bar ()
++{
++ S1<T> st;
++ st.foo();
++}
++
++
++int main()
++{
++ S2<int> s2i;
++ s2i.bar();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++template <int dim>
++class Point {
++ public:
++ Point (Point<dim> &);
++ Point<dim> & operator = (Point<dim> &);
++};
++
++
++
++template <int dim>
++class bar{
++ public:
++ void foo (Point<dim> p = Point<dim>());
++};
++
++
++
++template <>
++void bar<2>::foo (Point<2> p) {
++ const int dim = 2;
++ Point<dim> q = p;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++template <class T>
++struct C {
++ template <class U>
++ void f(U); // OK
++
++ template <class V = int>
++ struct I {}; // OK
++
++ template <class W = int>
++ void h(W); // ERROR - default argument
++
++ template <class Y>
++ void k(Y);
++};
++
++template <class T>
++template <class U = double>
++void C<T>::f(U) {} // ERROR - default argument
++
++template <class X = void*>
++void g(X); // ERROR - default argument
++
++template <class T = double>
++template <class Y>
++void C<T>::k(Y) {} // ERROR - default argument
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++template <int Dim, class T, class EngineTag>
++class Engine {};
++
++struct Brick;
++
++template<int Dim, class T = double , class EngineTag = Brick >
++struct ConstArray {
++ static const int dimensions = Engine<Dim, T, EngineTag>::dimensions;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++// Default arguments containing more than one non-nested explicit
++// template argument leads to parse error
++
++template <class T> class foo1;
++template <class T, class U> class foo2;
++
++struct bar {
++ template <class T, class U>
++ bar(int i = foo1<T>::baz, // ok
++ int j = int(foo2<T, U>::baz), // ok
++ int k = foo2<T, U>::baz) {} // gets bogus error - before > - XFAIL *-*-*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/defarg.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/defarg.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++template <class T>
++void f(T t, int i = 10);
++
++template <class T>
++void f(T t, int i) {}
++
++int main()
++{
++ f(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/derived1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/derived1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/derived1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/derived1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++class A
++{
++public:
++ typedef int Info;
++};
++
++template <class T>
++class B : public A
++{
++public:
++ typedef struct{
++ int a;
++ int b;
++ } Info;
++};
++
++void f()
++{
++ B<A>::Info ie;
++ ie.a=1;
++ ie.b=2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/derived2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/derived2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/derived2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/derived2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++// Special g++ Options:
++
++template <typename T>
++void f(T);
++template <>
++void f(int) {}
++
++struct B {
++ typedef int I;
++};
++
++template <typename T>
++struct D1 : virtual public B {
++ typedef T I;
++};
++
++
++template <typename T>
++struct D : virtual public B, public D1<T>
++{
++ void g()
++ {
++ I i;
++ f(i);
++ }
++};
++
++int
++main()
++{
++ D<double> d;
++ d.g();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++template <class X> class TC {
++public:
++ X aaa;
++ static X sss;
++ TC(X a) {aaa = a; }
++ TC(X a, X s) {aaa = a; sss = s; }
++ void sz(X s) { sss = s; }
++};
++
++
++long TC<long>::sss;
++float TC<float>::sss;
++
++TC<long> xjj(1,2);
++
++int main(int,char*) {
++ TC<float> xff(9.9,3.14);
++ xjj.sz(123);
++ xff.sz(2.71828);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++template <class X> class TC {
++public:
++ X aaa;
++ static X sss;
++ TC(X a) {aaa = a; }
++ TC(X a, X s) {aaa = a; sss = s; }
++ void sz(X s) { sss = s; }
++ void syy(X syarg) { sss = syarg; }
++};
++
++long TC<long>::sss;
++float TC<float>::sss;
++
++TC<long> xjj(1,2);
++
++int main(int,char*) {
++ TC<float> xff(9.9,3.14);
++ xjj.sz(123);
++ xff.sz(2.71828);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/eichin01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/eichin01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/eichin01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/eichin01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't run:
++
++/*
++
++
++*/
++
++
++template <class X> class TC {
++public:
++ X aaa;
++ static X sss;
++ TC(X a) { aaa = a; }
++ TC(X a, X s) { aaa = a; sss = s; }
++ void sz(X s) { sss = s; }
++};
++
++float TC<float>::sss;
++long TC<long>::sss;
++
++TC<long> xjj(1,2);
++
++int main(int,char*) {
++ TC<float> xff(9.9,3.14);
++ xjj.sz(123);
++ xff.sz(2.71828);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class T>
++struct S {
++ enum E { a = (int) T::b };
++};
++
++struct S2 {
++ enum E2 { b };
++};
++
++template class S<S2>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T> void f1()
++{
++ struct foo { enum T2 {
++ un, du, toi };
++ };
++}
++
++void f2() { f1<int>(); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <int I>
++struct S1 { };
++
++template <class T>
++struct S2 {
++ enum { x = 3 };
++
++ void f(S1<x>&);
++};
++
++template <class T>
++void S2<T>::f(S1<x>&)
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++struct U {
++ static int STATIC;
++};
++
++template <int* x> class FOO {
++public:
++ enum { n = 0 };
++};
++
++template <class A> class BAR {
++public:
++ enum { n = FOO<&A::STATIC>::n };
++};
++
++int n = BAR<U>::n;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++struct S { enum en { s0, s1, s2 }; };
++
++template<typename S::en e>
++int val( )
++{
++ return e;
++}
++
++
++int main()
++{
++ return val<S::s0>( );
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class T>
++struct U
++{
++ T mT;
++};
++
++template <class H>
++struct M
++{
++ enum FLAG {On, Off};
++ U<FLAG> mUF;
++};
++
++M<char> gm;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++
++template <>
++enum E {e}; // ERROR - template declaration of enum
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template <class T>
++struct vector {};
++
++template<class T>
++void fn(T)
++{
++ enum tern { H, L, X, U };
++
++ vector<tern> ternvec; // ERROR - composed from a local type
++}
++
++template void fn(int);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++template <int I>
++int f()
++{
++ enum E { a = I };
++
++ struct S {
++ int g() {
++ E e;
++ e = a;
++ return (int) e;
++ };
++ };
++
++ S s;
++
++ return s.g();
++}
++
++
++int main()
++{
++ if (f<7>() != 7)
++ return 1;
++ if (f<-3>() != -3)
++ return 1;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template <int I>
++void f();
++
++template <>
++void f<4>() {}
++
++template <class T>
++struct S
++{
++ enum E { a = 1, b = a + 3 };
++};
++
++int main()
++{
++ f<S<int>::b>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++template <typename _CharT>
++class _Format_cache
++{
++public:
++ enum {
++ _S_digits, _S_digits_end = _S_digits+10,
++ _S_xdigits = _S_digits_end
++ };
++};
++
++template class _Format_cache<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/enum.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/enum.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// GROUPS passed enums
++template<class T>
++struct templ
++{
++ enum { val = 0 };
++};
++struct Foo
++{
++ enum {
++ bar = 0,
++ len = templ<int>::val
++ };
++};
++void func()
++{
++ int s = Foo::bar; // Ensure that expansion of templ did not erase bar
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t);
++
++int main()
++{
++ foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t);
++
++template <class T>
++struct S {};
++
++int main()
++{
++ S<int> si;
++
++ foo<S<int> >(si);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't run:
++// GROUPS passed templates
++template <class U>
++struct S
++{
++ template <class T>
++ void foo(T t);
++};
++
++
++template <>
++template <>
++void S<char*>::foo<int>(int) {}
++
++int main()
++{
++ S<char*> s;
++ s.template foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't run:
++// GROUPS passed templates
++
++template <class U>
++struct S
++{
++ template <class T>
++ void foo(T t);
++
++ template <class T>
++ void bar(T t) { this->template foo<U>(3.74); }
++};
++
++template <>
++template <>
++void S<int>::foo(int) { }
++
++int main()
++{
++ S<int> s;
++ s.bar(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++struct S
++{
++ template <class U>
++ typename U::R foo(U u);
++};
++
++
++void bar()
++{
++ S<int> si;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed templates
++template<int N_rank>
++class Array;
++
++
++template<class T>
++class ArraySectionInfo {
++public:
++ enum { rank = 0 };
++};
++
++
++template<class T1>
++class SliceInfo {
++public:
++ enum {
++ rank = ArraySectionInfo<T1>::rank
++ };
++
++ typedef Array<rank> T_slice;
++};
++
++template<class T2>
++typename SliceInfo<T2>::T_slice
++foo(T2 r2)
++{
++ return SliceInfo<T2>::T_slice();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// GROUPS passed templates
++template<int N_rank>
++class Array;
++
++
++template<class T>
++class ArraySectionInfo {
++public:
++ enum { rank = 0 };
++};
++
++
++template<class T1>
++class SliceInfo {
++public:
++ static const int rank = ArraySectionInfo<T1>::rank;
++
++ typedef Array<rank> T_slice;
++};
++
++template<class T2>
++typename SliceInfo<T2>::T_slice
++foo(T2 r2)
++{
++ return SliceInfo<T2>::T_slice();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T, class U>
++void foo(U u, T t);
++
++template <class T>
++void foo(T t);
++
++template <class T>
++struct S {};
++
++template <class T>
++void foo(const S<T>&);
++
++void bar()
++{
++ void (*fn)(double, int) =
++ (void (*)(double, int)) &foo<int>;
++ void (*fn2)(double) = foo<double>;
++ foo<int>(3, 3.0);
++ foo<int>(S<int>());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++int foo(T t) { return 0; }
++
++int foo(int i);
++
++int main()
++{
++ return foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++int foo(T t);
++
++template <>
++int foo<int>(int i) { return 0; }
++
++int main()
++{
++ return foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t) {}
++
++void bar()
++{
++ (void (*)(double)) &foo<double>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++T foo(T t);
++
++template <>
++int foo<char>(char c); // ERROR - does not match any template declaration
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++T foo(T* t);
++
++template <>
++int foo<char>(char c); // ERROR - does not match declaration.
++
++template <>
++int bar<char>(); // ERROR - no template bar.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T, class U>
++T foo(T t, U* u);
++
++template <class T>
++T foo(T t, T* u);
++
++template <>
++int foo<int>(int, int*);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++int foo(T t) { return 1; }
++
++template <>
++int foo<int>(int i) { return 0; }
++
++int main()
++{
++ return foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++int foo(T t);
++
++int foo<int>(int i) { return 0; } // ERROR - missing template <>
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed templates
++template <int I>
++class S {};
++
++template <int I, class T>
++void foo(T t, S<I>);
++
++void bar()
++{
++ S<3> s3;
++ foo<3>("abc", s3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++int foo(T t) { return 1; }
++
++template <>
++int foo(int i) { return 0; }
++
++int main()
++{
++ (int (*)(int)) &foo<int>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++void foo(T t);
++
++template <>
++void foo(int i) {}
++
++int main()
++{
++ (void (*)(int)) &foo<int>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++int foo(T t) { return 1; }
++
++template <>
++int foo(int i) { return 0; }
++
++int main()
++{
++ return (*((int (*)(int)) &foo<int>))(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++int foo(T) { return 0; }
++
++int foo(int);
++
++int main()
++{
++ return foo<int>(3);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t) {}
++
++void bar()
++{
++ (void (*)(int)) (void (*)(double)) &foo<double>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T, T*);
++
++
++void bar()
++{
++ double d;
++ (*((void (*)(int, double*)) (void (*)(int, int*)) &foo<int>))(3, &d);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++struct S
++{
++ template <class U>
++ static double foo(U u) { return (double) u; }
++};
++
++
++int main()
++{
++ double d = S<int>::template foo<char>(3.3);
++
++ return (d >= 3.1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++struct S
++{
++};
++
++
++template <>
++struct S<int>
++{
++ void foo();
++};
++
++
++void S<int>::foo()
++{
++}
++
++
++void bar()
++{
++ S<int> si;
++ si.foo();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t);
++
++template <>
++void foo(int) {};
++
++void foo(int) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t);
++
++template <>
++void foo(int) {}; // ERROR - previously defined here.
++
++template <>
++void foo<int>(int) {} // ERROR - duplicate specialization.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't run:
++// GROUPS passed templates
++struct S
++{
++ template <class T>
++ void foo(T t);
++};
++
++template <>
++void S::foo<int>(int i) { }
++
++int main()
++{
++ S s;
++ s.template foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++void foo(T);
++
++class S {
++ friend void foo<>(int);
++
++ int i;
++};
++
++
++template <>
++void foo(int)
++{
++ S s;
++ s.i = 3;
++}
++
++
++int main()
++{
++ foo(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't run:
++// GROUPS passed templates
++class ostream {};
++
++template <class T>
++class S;
++
++template <class T>
++void operator<<(ostream&, S<T>) {}
++
++template <class T>
++class S
++{
++ friend void operator<<<>(ostream&, const S<T>);
++};
++
++
++int main()
++{
++ ostream o;
++
++ o << S<int>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++template <int I>
++void f(int j);
++
++void g()
++{
++ f<7, 12>(3); // ERROR - no matching function.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++template <class T>
++void f(int i);
++
++void g()
++{
++ f<7>(3); // ERROR - no matching function.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T, class U>
++void foo(T t, U u) {}
++
++void bar()
++{
++ (void (*)(double, int)) &foo<double>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++extern "C" void abort();
++
++template <void* P>
++void f(int j);
++
++template <unsigned int I>
++void f(int j);
++
++
++template <void* P>
++void f(int j)
++{
++ abort();
++}
++
++
++template <unsigned int I>
++void f(int j)
++{
++}
++
++
++int main()
++{
++ f<3>(7);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++template <int I>
++void f(int i);
++
++void g()
++{
++ int i;
++ f<i>(7); // ERROR - template argument 1 is invalid.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++extern "C" void abort(void);
++
++template <int I>
++void f(int i)
++{
++}
++
++template <void*>
++void f(int i)
++{
++ abort();
++}
++
++int main()
++{
++ f<0>(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit43.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit43.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit43.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit43.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++extern "C" void abort(void);
++
++void F(int)
++{
++}
++
++
++void F(double)
++{
++ abort();
++}
++
++template <void (*F)(int)>
++void g()
++{
++ (*F)(3);
++}
++
++
++int main()
++{
++ g<&F>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t);
++
++template <class T>
++struct S {};
++
++template <class T>
++void bar(T t)
++{
++ void (*f)(S<T> ) = &foo<S<T> >;
++}
++
++
++void baz()
++{
++ bar(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit50.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit50.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit50.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit50.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++extern "C" void abort ();
++
++template <class T> int f ()
++{
++ return sizeof(T);
++}
++
++int main ()
++{
++ if (f<long> () != sizeof(long)
++ || f<char> () != sizeof(char)
++ || f<long> () != sizeof(long)
++ || f<long int> () != sizeof(long int))
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit51.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit51.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit51.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit51.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++extern "C" void abort ();
++
++template <int a> int fact ()
++{
++ return 0;
++}
++
++template <> int fact<1> ()
++{
++ return 1;
++}
++
++int main()
++{
++ if (fact<3> () != 0 || fact<1> () != 1
++ || fact<3> () != 0 || fact<1> () != 1 || fact<1+0> () != 1)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit52.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit52.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit52.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit52.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++extern "C" void abort ();
++
++template <int a> inline int fact ()
++{
++ return a * fact<a-1> ();
++}
++
++template <> inline int fact<1> ()
++{
++ return 1;
++}
++
++int main()
++{
++ if (fact<3> () != 6 || fact<1> () != 1
++ || fact<3> () != 6 || fact<1> () != 1 || fact<1+0> () != 1)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit53.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit53.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit53.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit53.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++extern "C" void abort ();
++
++template <int a> inline int fact ();
++template <> inline int fact<1> ();
++
++template <int a> inline int fact ()
++{
++ return a * fact<a-1> ();
++}
++
++template <> inline int fact<1> ()
++{
++ return 1;
++}
++
++int main()
++{
++ if (fact<3> () != 6 || fact<1> () != 1
++ || fact<3> () != 6 || fact<1> () != 1 || fact<1+0> () != 1)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit54.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit54.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit54.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit54.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++extern "C" void abort ();
++
++template <int a> inline int fact2 ();
++
++template <int a> inline int fact ()
++{
++ return a * fact2<a-1> ();
++}
++
++template <> inline int fact<1> ()
++{
++ return 1;
++}
++
++template <int a> inline int fact2 ()
++{
++ return a*fact<a-1>();
++}
++
++template <> inline int fact2<1> ()
++{
++ return 1;
++}
++
++int main()
++{
++ if (fact<3> () != 6 || fact<1> () != 1
++ || fact<3> () != 6 || fact<1> () != 1 || fact<1+0> () != 1)
++ abort ();
++ if (fact2<3> () != 6 || fact2<1> () != 1
++ || fact2<3> () != 6 || fact2<1> () != 1 || fact2<1+0> () != 1)
++ abort ();
++ if (fact2<4> () != 24 || fact<4> () != 24)
++ abort ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit55.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit55.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit55.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit55.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++template <class T> T* create ()
++{
++ return new T;
++}
++
++template <class T> T* create2()
++{
++ return create<T>();
++}
++
++int main()
++{
++ int *p = create2<int>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit56.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit56.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit56.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit56.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++template <class T> T* create ();
++
++template <class T> T* create2()
++{
++ return create<T>();
++}
++
++template <class T> T* create ()
++{
++ return new T;
++}
++
++int main()
++{
++ int *p = create2<int>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit57.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit57.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit57.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit57.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++extern "C" void abort ();
++
++int a = 0;
++
++template <class T> void f ();
++template <class T> void g ()
++{
++ if (a)
++ abort ();
++}
++
++template <> void g<char> ()
++{
++}
++
++template <class T> class C
++{
++ public:
++ void ff () { f<T> (); }
++ void gg () { g<T> (); }
++};
++
++template <class T> void f ()
++{
++ if (a)
++ abort ();
++}
++
++template <> void f<char> ()
++{
++}
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++ c.gg();
++ a = 1;
++ C<char> d;
++ d.ff();
++ d.gg();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit58.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit58.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit58.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit58.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++extern "C" void abort ();
++
++template <class T> void f ();
++template <class T> void g ()
++{
++ abort ();
++}
++
++template <> void g<char> ()
++{
++ abort ();
++}
++
++template <class T> class C
++{
++ public:
++ template <class U> void f () {}
++ template <class U> void g () {}
++ void ff () { f<T> (); }
++ void gg () { g<T> (); }
++};
++
++template <class T> void f ()
++{
++ abort ();
++}
++
++template <> void f<char> ()
++{
++ abort ();
++}
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++ c.gg();
++ C<char> d;
++ d.ff();
++ d.gg();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit59.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit59.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit59.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit59.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++extern "C" void abort ();
++
++template <class T> void f ();
++template <class T> void g ()
++{
++ abort ();
++}
++
++template <> void g<char> ()
++{
++ abort ();
++}
++
++template <class T> class C
++{
++ public:
++ void ff () { f<T> (); }
++ void gg () { g<T> (); }
++ template <class U> void f () {}
++ template <class U> void g () {}
++};
++
++template <class T> void f ()
++{
++ abort ();
++}
++
++template <> void f<char> ()
++{
++ abort ();
++}
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++ c.gg();
++ C<char> d;
++ d.ff();
++ d.gg();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T>
++void foo(T t) {}
++
++template <class T>
++struct S {};
++
++template <class T>
++void bar(T t)
++{
++ void (*f)(S<T> ) = &foo<S<T> >;
++}
++
++
++void baz()
++{
++ bar(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit60.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit60.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit60.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit60.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++extern "C" void abort ();
++
++template <class T> void f ();
++template <class T> void g ()
++{
++ abort ();
++}
++
++template <> void g<char> ()
++{
++ abort ();
++}
++
++template <class T> class C
++{
++ public:
++ void ff () { f<T> (); }
++ void gg () { g<T> (); }
++ template <class U> void f () {}
++ template <class U> void g () {}
++ template <class U> void f (int) { abort(); }
++ template <class U> void g (int) { abort(); }
++};
++
++template <class T> void f ()
++{
++ abort ();
++}
++
++template <> void f<char> ()
++{
++ abort ();
++}
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++ c.gg();
++ C<char> d;
++ d.ff();
++ d.gg();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit61.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit61.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit61.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit61.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++extern "C" void abort ();
++
++template <class T> void f ();
++template <class T> void g ()
++{
++ abort ();
++}
++
++template <> void g<char> ()
++{
++ abort ();
++}
++
++template <class T> class C
++{
++ public:
++ void ff () { f<T> (0); }
++ void gg () { g<T> (1); }
++ template <class U> void f () { abort(); }
++ template <class U> void g () { abort(); }
++ template <class U> void f (int) {}
++ template <class U> void g (int) {}
++};
++
++template <class T> void f ()
++{
++ abort ();
++}
++
++template <> void f<char> ()
++{
++ abort ();
++}
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++ c.gg();
++ C<char> d;
++ d.ff();
++ d.gg();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit62.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit62.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit62.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit62.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++extern "C" void abort ();
++
++template <class T> void f ()
++{
++}
++
++
++template <class T> class C
++{
++ friend void f<char> ();
++ public:
++ void ff () { f<char> (); }
++};
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit63.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit63.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit63.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit63.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++extern "C" void abort ();
++
++template <class T> void f ()
++{
++}
++
++
++template <class T> class C
++{
++ friend void f<T> ();
++ public:
++ void ff () { f<T> (); }
++};
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit64.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit64.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit64.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit64.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++extern "C" void abort ();
++
++template <class T> void f ()
++{
++ abort ();
++}
++
++template <> void f<char> ()
++{
++}
++
++template <class T> class C
++{
++ friend void f<char> ();
++ public:
++ void ff () { f<char> (); }
++};
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit65.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit65.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit65.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit65.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++extern "C" void abort ();
++
++template <class T> void f ()
++{
++ abort ();
++}
++
++template <> void f<char> ()
++{
++ abort ();
++}
++
++template <class T> void f (int)
++{
++ abort ();
++}
++
++template <> void f<char> (int)
++{
++}
++
++template <class T> class C
++{
++ friend void f<char> (int);
++ public:
++ void ff () { f<char> (0); }
++};
++
++int main ()
++{
++ C<int> c;
++ c.ff();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit66.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit66.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit66.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit66.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++void f(int) {}
++void f(double);
++
++template <void (*fn)(int)>
++void foo() {}
++
++int main()
++{
++ foo<f>();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit67.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit67.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit67.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit67.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++struct S
++{
++ void f(int);
++ void f(double);
++};
++
++void g(int);
++void g(double);
++
++template <int* IP>
++void foo();
++template <long l>
++void foo();
++
++void bar()
++{
++ foo<S::f>(); // ERROR - no matching function
++ foo<g>(); // ERROR - no matching function
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit68.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit68.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit68.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit68.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++template <bool B>
++struct S
++{
++ static void g();
++};
++
++template <bool B>
++void g();
++
++template<unsigned Length>
++void f()
++{
++ const bool b = true;
++ g<b>();
++ const bool b1 = (Length == 2);
++ S<b1>::g();
++}
++
++void h()
++{
++ f<3>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit69.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit69.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit69.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit69.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++//Build don't link:
++template class x {}; // ERROR - not a template instantiation
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't run:
++// GROUPS passed templates
++template <class T>
++int foo(T t);
++
++template <>
++int foo(int i) { return 0; }
++
++int main()
++{
++ return foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit70.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit70.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit70.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit70.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Build don't link:
++
++template <class T>
++void f(T) {}
++
++template <class T>
++struct S {
++ static T t;
++};
++
++template <class T>
++T S<T>::t;
++
++template void f(int);
++template void f(int); // ERROR - duplicate explicit instantiation
++template int S<int>::t;
++template int S<int>::t; // ERROR - duplicate explicit instantiation
++template class S<double>;
++template class S<double>; // ERROR - duplicate explicit instantiation
++
++extern template void f(double); // WARNING - extern not allowed
++inline template class S<float>; // WARNING - inline not allowed
++
++template <class T>
++struct S<T*> {};
++
++template class S<void*>; // OK - explicit instantiation of partial
++ // specialization
++
++template <>
++struct S<long double> {}; // ERROR - explicit specialization
++
++template class S<long double>; // ERROR - explicit instantiation after
++
++template <>
++void f(long double) {} // ERROR - explicit specialization
++
++template void f(long double); // ERROR - explicit instantiation after
++
++template <class T>
++void g(T);
++
++template void g(int); // ERROR - no definition of g.
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit71.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit71.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit71.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit71.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// by Alexandre Oliva <oliva@dcc.unicamp.br>
++// Based on a testcase by Reid M. Pinchback <reidmp@MIT.EDU>
++// According to the C++ Standard [temp.expl.spec]/17-18, explicit
++// specializations are only valid if all enclosing template classes
++// of the specialized template are fully specialized too
++
++template <class X>
++class bug {
++ template <class Y>
++ class a {};
++};
++template <class X>
++template <> // ERROR - invalid specialization
++class bug<X>::a<char> {}; // ERROR - ""
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit72.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit72.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit72.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit72.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Contributed by Reid M. Pinchback <reidmp@MIT.EDU>
++// Adapted by Alexandre Oliva <oliva@dcc.unicamp.br>
++// plain char, signed char and unsigned char are distinct types
++
++template <class X, class Y> class bug {};
++template <class X> class bug<X,char> { typedef char t; };
++template <class X> class bug<X,unsigned char> { typedef unsigned char t; };
++template <class X> class bug<X,signed char> { typedef signed char t; };
++template <class X> class bug<char,X> { typedef char t; };
++template <class X> class bug<unsigned char,X> { typedef unsigned char t; };
++template <class X> class bug<signed char,X> { typedef signed char t; };
++
++void foo() {
++ bug<int,char>::t();
++ bug<int,signed char>::t();
++ bug<int,unsigned char>::t();
++ bug<char,int>::t();
++ bug<signed char,int>::t();
++ bug<unsigned char,int>::t();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit73.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit73.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit73.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit73.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++// by Alexandre Oliva <oliva@dcc.unicamp.br>
++
++// According to [temp.expl.spec]/2, a template explicit specialization
++// must be declared in the namespace that contains the declaration of
++// the template
++
++namespace N {
++ template <class T> class foo; // ERROR - referenced below
++}
++
++using namespace N;
++
++template <> class foo<void>; // ERROR - invalid specialization
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit74.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit74.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit74.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit74.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Reduced from a testcase by Yotam Medini <yotam@avanticorp.com>
++
++// egcs 1.1 seems to generate code that deletes a NULL pointer.
++
++template <class bar> struct foo { void fuz(); ~foo(); };
++struct baz { int i; foo<baz> j; } *p = 0;
++template <class bar> void foo<bar>::fuz() { delete p; }
++template <class bar> foo<bar>::~foo() { delete p; }
++template class foo<baz>;
++int main() { foo<baz>(); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit75.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit75.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit75.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit75.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Test for not complaining about mismatches during unification.
++// Build don't link:
++
++template <void (*F)(int)> void f();
++template <void (*F)(double)> void f();
++extern void g(double);
++
++void h ()
++{
++ f<g>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit76.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit76.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit76.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit76.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++// Based on bug report by Simon A. Crase <s.crase@ieee.org>
++
++// crash test - XFAIL *-*-*
++
++struct foo {
++ template <class T> void bar();
++};
++
++template void foo::bar<void>(); // gets bogus error - ICE - XFAIL *-*-*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit77.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit77.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit77.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit77.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template <int I, int J, int K>
++struct S {};
++
++template <int I, int J>
++struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
++
++template <int I, int J, int K>
++void f(S<I, J, K>, S<I, I, I>);
++
++void g() {
++ S<0, 0, 0> s0;
++ S<0, 1, 2> s2;
++
++ f<0>(s0, s2);
++ f(s0, s2); // ERROR - no matching function
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit78.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit78.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit78.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit78.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++
++template <int I>
++struct A {
++};
++
++template <int I, int J>
++struct B {
++ operator A<3> ();
++ operator B<3, 7> ();
++};
++
++
++template <int I, int J>
++void f(B<I, J>);
++
++template <int I>
++void f(A<I>)
++{
++}
++
++int main()
++{
++ // Deduction fails with the first `f'. Since `3' is explicitly
++ // specified, we don't try any deduction with the second `f'. So,
++ // we call the second `f'.
++ f<3>(B<2, 7>());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit79.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit79.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit79.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit79.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <int I>
++void f(int (*)[I] = 0);
++
++template <int J>
++void f();
++
++void g()
++{
++ f<-1>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed templates
++template <class T, class U>
++void foo(T t, U u);
++
++template <class U>
++void foo(double, U) {}
++
++void baz()
++{
++ foo<char*>(3.0, "abc");
++ foo<char*, double>("abc", 3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/explicit9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/explicit9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// GROUPS passed templates
++void foo(int);
++
++void bar()
++{
++ foo<int>(3); // ERROR - foo is not a template.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template <int n> class vec {
++ double x[n];
++
++ public:
++ vec() {
++ for (int i=0; i<n-1; ++i) x[i]=0;
++ }
++
++ vec(const vec<n>& v) {
++ for (int i=0; i<n; ++i) x[i]=v(i);
++ }
++
++ vec(const vec<n-1>& v, const double& y) {
++ for (int i=0; i<n-1; ++i) x[i]=v(i);
++ x[n-1]=y;
++ }
++
++ inline double operator()(const int i) const {
++ return x[i];
++ }
++};
++
++
++template <int n> vec<n + 1>& operator,(const vec<n>& v, const double& y) {
++ return *(new vec<n + 1>(v, y));
++}
++
++
++int main() {
++ vec<4> v;
++ vec<5> w;
++ w=(v,3.);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <int I>
++struct S {};
++
++template <int J>
++void foo(S<J + 2>);
++
++void bar()
++{
++ foo(S<3>()); // ERROR - no way to deduce J from this.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++template <int I>
++struct S {};
++
++template <int J>
++void foo(S<J - 1>);
++
++template <class T>
++void baz(S<sizeof(T)>);
++
++template <int J>
++void fun(S<J>, S<J * 2>);
++
++void bar()
++{
++ foo<5>(S<4>()); // OK - 4 is 5 - 1.
++ baz<int>(S<sizeof(int)>()); // OK
++ fun(S<4>(), S<8>()); // OK - deduce J from first argument.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T, int i>
++struct S1;
++
++template <class T, int i, int j>
++struct S2
++{
++ typedef typename S1<T, (i >= j ? 0 : 1) >::type type;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++// Based on a bug report by tveldhui <tveldhui@extreme.indiana.edu>
++
++// excess errors test - XFAIL *-*-*
++
++template <int X> class foo {};
++
++foo< true ? 1 : 0 > bar;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/expr7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/expr7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template<int I> struct A { };
++template<int I, int J> int f(A<I+J>);
++int g() {
++ A<3> a;
++ return f<1,2>(a);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++template <class T>
++void f(T);
++
++template <class U>
++class C
++{
++ template <class T>
++ friend void f(T)
++ {
++ C<U> c;
++ c.i = 3;
++ }
++
++public:
++
++ void g()
++ {
++ f(3.0);
++ }
++
++ int i;
++};
++
++int main()
++{
++ f(7);
++ C<double> c;
++ c.g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++template <class T>
++class C;
++
++template <class T>
++struct S
++{
++ template <class U>
++ void f(U u)
++ {
++ C<U> cu;
++ cu.i = 3; // ERROR - S<double>::f<U> is a friend, but this is
++ // S<int>::f<double>.
++ }
++};
++
++
++template <class T>
++class C
++{
++ template <class U>
++ friend void S<T>::f(U);
++
++ int i; // ERROR - private
++};
++
++
++int main()
++{
++ S<int> si;
++ si.f(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template <class T>
++class C;
++
++template <class T>
++struct S
++{
++ template <class U>
++ void f(U u1, U u2) {}
++
++ template <class U>
++ void f(U u)
++ {
++ C<T> ct;
++ ct.i = 3;
++ }
++};
++
++
++template <class T>
++class C
++{
++ template <class U>
++ friend void S<T>::f(U);
++
++ int i;
++};
++
++
++int main()
++{
++ S<int> si;
++ si.f(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template <class T>
++class C;
++
++template <class U>
++struct S
++{
++ template <class V>
++ void f(V v)
++ {
++ C<V> cv;
++ cv.i = 3;
++ }
++};
++
++
++template <class T>
++class C
++{
++ template <class U>
++ template <class V>
++ friend void S<U>::f(V);
++
++ int i;
++};
++
++
++int main()
++{
++ S<int> si;
++ si.f(3.0);
++ S<long> sl;
++ sl.f('c');
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++template <class U>
++class S1
++{
++ template <class T>
++ friend class S2;
++
++ static int i;
++};
++
++
++template <class T>
++class S2
++{
++public:
++ static void f() { S1<T>::i = 3; }
++};
++
++
++void g()
++{
++ S2<double>::f();
++ S2<long>::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++class S1
++{
++ template <class T>
++ friend class S2;
++
++ static int i;
++};
++
++
++template <class T>
++class S2
++{
++public:
++ static void f() { S1::i = 3; }
++};
++
++
++void g()
++{
++ S2<double>::f();
++ S2<char>::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++
++template <class T>
++class S2
++{
++public:
++ static void f();
++};
++
++
++template <class U>
++class S1
++{
++ template <class T>
++ friend class S2;
++
++ static int i;
++};
++
++
++template <class T>
++void S2<T>::f()
++{
++ S1<T>::i = 3;
++}
++
++void g()
++{
++ S2<double>::f();
++ S2<char>::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++
++template <class T>
++class S2
++{
++public:
++ static void f();
++};
++
++class S1
++{
++ template <class T>
++ friend class S2;
++
++ static int i;
++};
++
++template <class T>
++void S2<T>::f()
++{
++ S1::i = 3;
++}
++
++void g()
++{
++ S2<double>::f();
++ S2<char>::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++
++template <class U>
++class S1
++{
++ template <class T>
++ friend class S2;
++
++ static int i;
++};
++
++
++template <class T>
++class S2
++{
++public:
++ static void f() { S1<T>::i = 3; }
++};
++
++
++void g()
++{
++ S2<double>::f();
++ S2<long>::f();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++
++template <class U>
++class S1
++{
++ template <class T>
++ friend class S2;
++
++ static int i;
++};
++
++
++template <class T>
++class S2
++{
++public:
++ static void f() { S1<T>::i = 3; }
++};
++
++
++void g()
++{
++ S2<double>::f();
++ S2<long>::f();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++template <class T>
++void f(T);
++
++class C
++{
++ template <class T>
++ friend void f(T);
++
++ int i;
++};
++
++
++template <class T>
++void f(T)
++{
++ C c;
++ c.i = 3;
++}
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T = int> struct A;
++
++template <class T> struct B
++{
++ friend class A<T>;
++};
++
++template class B<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++
++template <class T> struct A {
++ static void f();
++};
++
++template <class T> class B
++{
++ friend class A<T>;
++ static int i; // ERROR - private
++};
++
++template <class T> class C
++{
++ template <class U>
++ friend class A;
++
++ static int i;
++};
++
++template <class T>
++void A<T>::f()
++{
++ B<T>::i = 3;
++ C<T>::i = 3;
++ C<double>::i = 3;
++ B<double>::i = 3; // ERROR - member `i' is private
++}
++
++template void A<int>::f(); // ERROR - instantiated from here
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T = int>
++struct S
++{
++ template <class U>
++ friend class S;
++};
++
++template struct S<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T = int> // ERROR - original definition
++struct S
++{ // ERROR - redefinition of default arg
++ template <class U = int>
++ friend class S;
++};
++
++template struct S<int>; // ERROR - instantiated from here
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template <class T>
++struct S
++{
++ template <class U = T>
++ friend class S;
++
++ void f(T);
++};
++
++template struct S<int>;
++
++void g()
++{
++ S<> s;
++ s.f(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template <class T> struct A;
++
++struct B
++{
++ template <class U>
++ friend class A<U>; // ERROR - does not specialize any args
++};
++
++struct C
++{
++ template <class U>
++ friend class A<U*>; // ERROR - partial specialization
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++struct S
++{
++ friend void f<>(int); // ERROR - does not match any template
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++class S
++{
++ friend void f<>(int); // ERROR - does not match any template
++ int i;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++class mystream;
++
++template <class T> class a {
++public:
++ friend mystream& operator>> <>( mystream&, a<T>& thea );
++private:
++ T amember;
++};
++
++template <class T> mystream& operator>>( mystream& s, a<T>& thea );
++
++template<> mystream& operator>> <int>( mystream& s, a<int>& thea );
++
++template class a<int>;
++
++template<> mystream& operator>> <int>( mystream& s, a<int>& thea )
++{
++ thea.amember = 0;
++ return s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class T> class a {
++public:
++ friend void foo<>( a<T>& thea );
++private:
++ T amember;
++};
++
++template <class T> void foo( a<T>& thea )
++{
++ thea.amember = 0;
++}
++
++template class a<int>;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template <class T, class U>
++struct S {
++ template <class X, class Y, class Z>
++ friend X f(X, Y, Z);
++};
++
++template <class X, class Y, class Z>
++X f(X x, Y, Z) {
++ return x;
++}
++
++template char f(char, long, short);
++template char* f(char*, long*, short*);
++template class S<int, double>;
++template class S<void*, double>;
++template double* f(double*, long*, short*);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class T>
++struct S1 {
++};
++
++template <>
++struct S1<int> {};
++
++struct S2 {
++ friend class S1<int>;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class T, class U>
++struct S {
++ template <class X, class Y, class Z>
++ friend X f(X, Y, Z);
++};
++
++template class S<int, double>;
++template char f(char, long, short);
++template char* f(char*, long*, short*);
++
++template <class X, class Y, class Z>
++X f(X x, Y, Z) {
++ return x;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't run:
++// Special g++ Options: -g
++
++template <class P1>
++struct S1
++{
++ struct SS1
++ {
++ };
++ friend void Foo (const SS1& ss1)
++ {
++ }
++};
++
++template <class P1>
++void Foo(const S1<P1>& s1)
++{
++ typedef typename S1<P1>::SS1 TYPE;
++ TYPE t;
++ Foo(t);
++}
++
++int main ()
++{
++ S1<double> obj;
++ Foo(obj);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// excess errors test
++
++// This testcase won't fail if class ::foo is forward-declared in the
++// global namespace, nor if class bar is not a template class.
++
++template <typename T = void>
++class bar {
++public:
++ friend class foo; // this is not bar::foo, it forward-declares ::foo
++ class foo {};
++ bar() { foo(); } // but this should refer to bar::foo
++};
++
++bar<> baz;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++class foo {
++ friend void bar<int>(int); // ERROR - must be declared first
++};
++
++template <typename T> void bar(T);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class T>
++void f(T) {} // ERROR - previously defined here
++
++template <class U>
++struct S {
++ template <class T>
++ friend void f(T) {} // ERROR - redeclaration
++};
++
++S<int> si;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// Simplified from report by Volker Dobler <volker@hugo.physik.uni-konstanz.de>
++
++template <class T> class A {
++ friend int ice<>( int k=0 ); // ERROR - default argument
++ friend inline int f<>(double); // ERROR - inline
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++// Overly simplified from testcase by "B. K. Oxley" <binkley@bigfoot.com>
++
++template<class P> struct foo {
++ typedef P parent_type;
++ friend parent_type; // ERROR - template parameters cannot be friends - XFAIL *-*-*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++
++template <class T>
++struct S;
++
++template <class T>
++class C
++{
++ friend void S<T>::f();
++
++ int i;
++};
++
++template <class T>
++struct S
++{
++ void f() {
++ C<T> c;
++ c.i = 3;
++ }
++};
++
++template void S<int>::f();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++template <class T>
++void f(T);
++
++class C
++{
++ friend void f<>(double);
++
++ int i; // ERROR - private
++};
++
++
++template <class T>
++void f(T)
++{
++ C c;
++ c.i = 3; // ERROR - f<double> is a friend, this is f<int>.
++}
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++// Special g++ Options: -Wno-non-template-friend
++
++template<class T> struct A
++{
++ friend void f ();
++};
++
++A<short> a;
++A<int> b;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++class S {
++public:
++ template <class U>
++ class C {
++ public:
++ void f() { S::i = 3; }
++ };
++
++ template <class U>
++ friend class C;
++
++private:
++ static int i;
++};
++
++
++template void S<int>::C<double>::f();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++struct S {
++ template <class U>
++ friend struct S2;
++};
++
++template struct S<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++class C
++{
++ template <class T>
++ friend void f(T);
++
++ int i;
++};
++
++
++template <class T>
++void f(T)
++{
++ C c;
++ c.i = 3;
++}
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++class C
++{
++ template <class T>
++ friend void f(T)
++ {
++ C c;
++ c.i = 3;
++ }
++
++ int i;
++};
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++template <class T>
++void f(T);
++
++class C
++{
++ template <class T>
++ friend void f(T)
++ {
++ C c;
++ c.i = 3;
++ }
++
++public:
++
++ void g()
++ {
++ f(3.0);
++ }
++
++ int i;
++};
++
++int main()
++{
++ f(7);
++ C c;
++ c.g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++template <class T>
++void f(T);
++
++template <class U>
++class C
++{
++ template <class T>
++ friend void f(T);
++
++ int i;
++};
++
++
++template <class T>
++void f(T)
++{
++ C<T> c;
++ c.i = 3;
++}
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++template <class T>
++class C
++{
++ friend void f (C<T> c)
++ {
++ c.i = 3;
++ }
++
++ int i;
++};
++
++
++int main()
++{
++ C<int> ci;
++
++ f(ci);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/friend9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/friend9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++template <class U>
++class C
++{
++ template <class T>
++ friend void f(T);
++
++ int i;
++};
++
++
++template <class T>
++void f(T)
++{
++ C<int> c;
++ c.i = 3;
++}
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/goto.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/goto.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/goto.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/goto.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template<class T>
++void compute(T) {
++ goto Exit;
++Exit: ;
++ }
++
++int main()
++{
++ compute(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/inherit1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/inherit1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/inherit1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/inherit1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Origin: Wolfgang Bangerth <wolf@gaia.iwr.uni-heidelberg.de>
++
++int i = 1;
++
++struct Base1 { int local1; };
++struct Base2 { int local2; };
++
++template <int dim> class Derived;
++
++template <>
++class Derived<1> : public Base1, public Base2 {};
++
++template <int dim>
++class FinalClass : public Derived<dim> {
++public:
++ FinalClass () {
++ if (&local1 != &local2)
++ i = 0;
++ }
++};
++
++int main () {
++ FinalClass<1> a1;
++ return i;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++template <class T>
++void f(T t) {}
++
++template void f<int>(int);
++template void f<>(long);
++
++template <class T>
++struct S
++{
++ void bar(int) {}
++
++ template <class U>
++ void baz(U u) {}
++};
++
++
++template S<char>;
++template void S<int>::bar(int);
++template void S<double>::baz<short>(short);
++template void S<long>::baz<>(char);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template<class T>
++struct X_two {
++ template <class T2> T2 conv_compare_ge(T2 test) {
++ T2 tmp_value = T2 (0);
++ return (tmp_value > test ? tmp_value : test);
++ }
++};
++
++template int X_two<double>::conv_compare_ge(int);
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class T>
++struct S
++{
++ S(const T&) {}
++ S(int, long);
++};
++
++template S<double>::S(const double&);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build then link:
++
++// Special g++ Options: -frepo -Werror
++
++// Submitted by Melissa O'Neill <oneill@cs.sfu.ca>
++// the vtable of Foo<int> wouldn't be generated
++
++template <typename A>
++struct Foo {
++ virtual void foo() {}
++};
++
++template <typename A>
++struct Bar {
++ void bar();
++};
++
++template <typename A>
++void Bar<A>::bar() {
++ Foo<A> oof;
++}
++
++int main () {
++ Bar<int> rab;
++
++ rab.bar();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't run:
++
++// Additional sources: instantiate5.cc instantiate5-main.cc
++
++// `global constructors' are given the same name, based on foo(), on
++// both translation units, which is wrong, because it must be possible
++// to define template functions in multiple translation units, as long
++// as they're given the same definition
++
++// simplified from test case submitted by Daniel X. Pape <dpape@canis.uiuc.edu>
++
++template <class T> void foo() { }
++inline int bar() { foo<void>(); return 1; }
++static int i = bar();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.cc gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.cc
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.cc 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate5.cc 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// this file is part of testcase instantiate5.C
++
++template <class T> void foo() { }
++inline int bar() { foo<void>(); return 1; }
++static int i = bar();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate5-main.cc gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate5-main.cc
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate5-main.cc 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate5-main.cc 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// this file is part of testcase instantiate5.C
++
++int main() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/instantiate6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/instantiate6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build then link:
++// Special g++ Options: -frepo
++
++// Simplified from testcase by Erez Louidor Lior <s3824888@techst02.technion.ac.il>
++// excess errors test - XFAIL *-*-*
++
++template <class T>
++class foo{
++public:
++ void g();
++ void h();
++};
++
++template <class T>
++void foo<T>::g() {
++ h();
++}
++
++template <class T>
++void foo<T>::h() {
++}
++
++int main() {
++ foo<int> f;
++ f.g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/label1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/label1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/label1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/label1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++template <class T>
++struct S {};
++
++template <class T>
++inline void g(T t)
++{
++ here:
++ S<T> st;
++ goto here;
++}
++
++template <class T>
++void f(T t)
++{
++ here:
++ g(t);
++ goto here;
++}
++
++void h()
++{
++ f(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/link1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/link1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/link1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/link1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't run:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++int f(T);
++
++template <class T>
++struct S {
++ template <class U>
++ friend int f(U) { return 0; }
++};
++
++int k = f(2);
++
++template <class T>
++int g(T);
++
++int h = g(7);
++
++template <class T>
++int g(T) {
++ S<T> si;
++ return 0;
++}
++
++int main()
++{
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++template <class STRUCT, class MEMBER> inline STRUCT *
++setback(MEMBER *bp, MEMBER STRUCT::*offset)
++{
++ if(!bp) return 0;
++ union { int i; MEMBER STRUCT::*of; } u;
++ u.of = offset;
++ return (STRUCT *) ((int) bp - u.i);
++}
++
++
++struct S
++{
++ int i;
++};
++
++int main()
++{
++ S s;
++
++ S* sp = setback (&s.i, &S::i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++extern "C" void abort();
++
++template <class T>
++void f(T)
++{
++ struct S {
++ int i;
++ } s;
++
++ s.i = 3;
++
++ if (s.i != 3)
++ abort();
++}
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++extern "C" void abort();
++
++template <class T>
++void f(T)
++{
++ int j;
++
++ j = 6;
++
++ struct S {
++ int i;
++ };
++
++ S s;
++
++ s.i = j;
++
++ if (s.i != 6)
++ abort();
++}
++
++
++int main()
++{
++ f(7);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++extern "C" void abort();
++
++template <class T>
++struct S {};
++
++S<int> si;
++
++template <class T>
++int f(T t)
++{
++ struct S {
++ int g(int i) { return i + 2; }
++ };
++
++ S s;
++
++ return s.g(t) + s.g(t);
++}
++
++
++int main()
++{
++ if (f(3) != 10)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++template <class INT>
++class b
++{
++private:
++ char a(int x)
++ {
++ union {
++ int i;
++ char c;
++ } val;
++ val.i = x;
++ return val.c;
++ };
++
++public:
++ b() {
++ }
++};
++
++int main() {
++ b<int> n;
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/local6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/local6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++extern "C" void abort();
++
++template <class T>
++int f(T)
++{
++ struct S1 {
++ virtual int foo() { return 1; }
++ };
++
++ struct S2 : public S1 {
++ int foo() { return 2; }
++ };
++
++ S1* s2 = new S2;
++
++ return s2->foo();
++}
++
++
++int main()
++{
++ if (f(3) != 2)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template <class T, class Allocator>
++ struct __vector_alloc_base
++{
++ typedef int allocator_type;
++};
++
++template <class T>
++ struct vector : __vector_alloc_base<T,int>
++{
++ typedef short allocator_type;
++ explicit vector(const allocator_type& a = allocator_type()) {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// Special g++ Options:
++
++class A
++{
++protected:
++ void f1() {};
++};
++
++template <class T> class B : private A {
++protected:
++ using A::f1;
++};
++
++template <class T> class D : private B<T>
++{
++public:
++ void f2() { f1(); };
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++template<class T>
++class A {
++public:
++ void f() { }
++};
++
++class B : public A<int> {
++public:
++ void f();
++};
++
++int main()
++{
++ B b;
++ B& b1 = b;
++ b1.A<int>::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++void h(int);
++
++template <class T>
++class i {};
++
++struct B
++{
++ int i;
++};
++
++template <class T>
++struct D : public B
++{
++ void f();
++ void g() { h(i); }
++};
++
++template <class T>
++void D<T>::f()
++{
++ h(i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++struct B {
++ int i;
++};
++
++struct D: public B {
++ int i;
++};
++
++template <class T>
++struct D2 : public D {
++ void f() { i = 3; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++// Based on bug report by Miniussi <miniussi@ilog.fr>
++
++class t {};
++
++template <class T> struct A { typedef T t; typedef T u; };
++
++template <class T> struct B : public A<T> {
++ // according to [temp.dep.type], `t' and `u' cannot be dependent types,
++ // and so there's no reason to delay lookup to specialization time.
++ void f(t p); // this is ::t [temp.dep]/3
++ void f(typename A<T>::t p); // gets bogus error - redefinition
++ void g(u p); // ERROR - unknown type name
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++struct A { typedef int B; };
++template <int B> struct C : public A {
++ B b;
++ void f();
++};
++
++
++template <int B>
++void C<B>::f() {
++ B b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++class X{};
++
++class Y : public X<int>
++{
++ void f();
++};
++
++void Y::f()
++{
++ X x; // ERROR - X is not a type.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/lookup9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/lookup9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Origin: "Artem Hodyush" <artem@duma.gov.ru>
++
++struct B { int m; };
++
++template< class T >
++void
++q( T& t ) {
++ t.T::m=1;
++}
++
++void f() {
++ B b;
++ b.B::m=1;
++ q( b );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++int f1 () {
++ struct A {
++ A() : b (2) { }
++ int fred () { return b.hi_mom; }
++ struct B {
++ int hi_mom;
++ B (int a) { hi_mom = a; }
++ };
++ B b;
++ };
++ A aa;
++ return aa.fred();
++}
++/* crashes with signal 11 */
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct A { A() { a = 2; } int a; };
++
++int f1 () {
++ struct A { A() { a = 2; } int a; };
++ A aa;
++ return aa.a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++struct A { A() { a = 2; } int a; };
++
++struct B {
++ struct A { A() { a = 2; } int a; };
++ A aa;
++};
++char xx[]="../tests/m3.cc:4: redefinition of `struct A'";
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++struct A1 { struct B { B(); } b; };
++struct A2 { struct B { ~B(); } b; };
++char xx[] ="../tests/m4.cc:1: warning: return type specification for constructor invalid";
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++struct B { struct A { A(); int a; } aa; };
++struct A { A(); int a; };
++B::A::A () { a = 37; }
++char xx[]="../tests/m5.cc:3: Segmentation violation";
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++struct B { struct A { A(); int a; } aa; };
++B::A::A () { a = 37; }
++char* xx[] = {
++"../tests/m6.cc:1: warning: return type specification for constructor invalid",
++"../tests/m6.cc:2: semicolon missing after declaration of `A'",
++"../tests/m6.cc:2: warning: empty declaration",
++"../tests/m6.cc: In function int A ():",
++"../tests/m6.cc:2: `a' undeclared (first use this function)",
++"../tests/m6.cc:2: (Each undeclared identifier is reported only once",
++"../tests/m6.cc:2: for each function it appears in.)",
++"../tests/m6.cc:2: warning: control reaches end of non-void function" };
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++struct B { struct A { A(); int a; }; A aa; };
++B::A::A () { a = 37; }
++char *xx[]= {"/*",
++"../tests/m7.cc:1: warning: return type specification for constructor invalid",
++"../tests/m7.cc: In function struct A A ():",
++"../tests/m7.cc:2: `a' undeclared (first use this function)",
++"../tests/m7.cc:2: (Each undeclared identifier is reported only once",
++"../tests/m7.cc:2: for each function it appears in.)",
++"../tests/m7.cc:2: warning: control reaches end of non-void function",
++ "*/" };
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++class A {
++ int a;
++ public:
++ A (int aa = 3);
++};
++
++class B {
++ class A {
++ public:
++ A (int, int);
++ };
++ A aa;
++ public:
++ B (int);
++};
++
++extern void foo();
++B::B (int z) : aa (1, z) {
++ foo ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m9a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m9a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m9a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m9a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++struct A { A() { a = 1; } int a; }; // ERROR -
++struct A { A() { a = 2; } int a; }; // ERROR -
++A aavv;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/m9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/m9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++struct A { A() { a = 1; } int a; };
++struct Q {
++ struct A { A() { a = 2; } int a; };
++ struct R {
++ struct A { A() { a = 3; } int a; };
++ A aaz;
++ };
++ R rrr;
++ A aay;
++}
++;
++
++Q qqq;
++A aav;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++struct S1
++{
++ template <class T>
++ struct S2 {}; // ERROR - previous definition
++
++ template <class T>
++ struct S2 {}; // ERROR - redefinition
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++struct S1
++{
++ template <class T>
++ struct S2;
++
++ template <class T>
++ struct S2 {
++ enum E { a };
++ };
++};
++
++int i = (int) S1::S2<double>::a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++struct outer {
++ template <class T> struct inner;
++} o;
++template <class T> struct outer::inner {};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class X, class Y>
++struct Inner;
++
++template <class T>
++struct S
++{
++ template <class U>
++ struct Inner
++ {
++ };
++};
++
++
++S<double>::Inner<int> si;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template <class X, class Y>
++struct Inner;
++
++struct S
++{
++ template <class U>
++ struct Inner
++ {
++ };
++};
++
++
++S::Inner<int> si;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++template <class T>
++struct S1
++{
++ template <class U>
++ struct S2 {};
++
++ template <class X, class Y, class Z>
++ void f(X, Y, Z)
++ {
++ S2<Z> s2z;
++ }
++
++ template <class X, class Z>
++ void g(X, Z)
++ {
++ S2<Z> s2z;
++ }
++};
++
++
++void h()
++{
++ S1<int> si;
++ si.g(3, 4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++template <class Q>
++class A {
++public:
++
++ typedef enum { X, Y } B;
++ template <B c> class Traits{ };
++};
++
++
++template class A<int>;
++template class A<double>::Traits<A<double>::X>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++template <class T> struct S
++{
++ template <class U> struct I
++ {
++ };
++
++ S();
++ S(S& s);
++ S(I<T>);
++
++ template <class U> operator I<U>();
++};
++
++S<int> f();
++void g(S<int>);
++
++void h()
++{
++ g(f());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class T> struct A {
++ template <class U> struct B;
++};
++
++template <class T> template <class U> struct A<T>::B { };
++
++A<int>::B<int> b;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class T> struct A {
++ template <class U> struct B;
++};
++
++template <class T> template <class U> struct A<T>::B<U*> { };
++
++A<int>::B<int*> b;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++template <class T> struct A {
++ template <class U> struct B {
++ template <class V> void f (V) { }
++ void g () { }
++ };
++};
++
++int main ()
++{
++ A<int>::B<char> b;
++ b.f (42);
++ b.g ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class X, class Y>
++struct S{};
++
++template <class X>
++struct S<int, X> {
++ template <class W>
++ struct I {};
++};
++
++template <class T>
++void f() {
++ typename S<T, T>::I<T> si;
++}
++
++template void f<int>();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++template <class T> struct A {
++ template <class U> struct B {
++ template <class V> void f (V) { }
++ void g () { }
++ };
++ template <class W> struct B<W*> {
++ void h () { }
++ };
++};
++
++int main ()
++{
++ A<int>::B<char> b;
++ b.f (42);
++ b.g ();
++ A<double>::B<void*> b2;
++ b2.h ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++template <class T> struct A {
++ template <class U> struct B {
++ template <class V> struct C {
++ template <class W> struct D {
++ template <class X> struct E {
++ template <class Y> struct F {
++ template <class Z> void f (Z) { }
++ void g () { }
++ };
++ };
++ };
++ };
++ };
++};
++
++int main ()
++{
++ A<int>::B<int>::C<int>::D<int>::E<int>::F<int> b;
++ b.f (42);
++ b.g ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++#include <typeinfo>
++
++template <class T>
++struct allocator {
++ typedef T* pointer;
++
++ template <class U> struct rebind {
++ typedef allocator<U> other;
++ };
++};
++
++template <class T, class Allocator>
++struct alloc_traits
++{
++ typedef typename Allocator::template rebind<T>::other allocator_type;
++};
++
++int main ()
++{
++ typedef alloc_traits<int, allocator<void> >::allocator_type at;
++
++ return typeid (at) != typeid (allocator <int>);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++template <class T> struct A {
++ template <class U> struct B {
++ template <class V> static void f () { }
++ void g () { }
++ };
++};
++
++template <class T, class U>
++void f ()
++{
++ A<T>::template B<U>::template f<T> ();
++ typename A<T>::B<U> b;
++ typename A<T>::template B<U> b2;
++ b.A<T>::template B<U>::~B();
++}
++
++template <class T> struct C: public A<T>::B<T> { };
++
++int main ()
++{
++ f<int, char>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Compiler: egcs-2.91.12 980302
++// Error: compiler error in ctor of 'foo::bar<T>::bar(T const &)'
++
++struct foo
++{
++ template <typename T>
++ struct bar
++ {
++ bar(T const &t) : tt(t) {}
++ T tt;
++ };
++};
++
++int main()
++{
++ foo::bar<int> fb(3);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++struct S
++{
++ template <class U>
++ struct Y {
++ template <class T>
++ void foo(T t);
++ };
++};
++
++template <>
++template <>
++void S::Y<char>::foo<int>(int i) { }
++
++int main()
++{
++ S::Y<char> s;
++ s.template foo<int>(3.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++template <class T>
++class S
++{
++ template <class U>
++ struct S2 {
++ S2(const S2<U>& s2u) {}
++ };
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memclass9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memclass9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++
++template <class T>
++struct S1
++{
++ template <class U>
++ struct S2
++ {
++ S2(U);
++
++ void g()
++ {
++ S2<U> s2u (u);
++ }
++
++ U& u;
++ };
++
++ template <class U>
++ void f(U u)
++ {
++ S2<U> s2u(u);
++ s2u.g();
++ }
++};
++
++void g()
++{
++ S1<int> s1;
++ s1.f(3.0);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S {
++ template <class T>
++ operator T*();
++};
++
++
++template <class T>
++S::operator T*()
++{
++ printf("Hello, world.\n");
++ return 0;
++}
++
++
++int main()
++{
++ S s;
++
++ char* cp = s.operator char*();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S
++{
++ template <class U>
++ S(U u, int i) {}
++
++ template <class T>
++ T foo(T t)
++ {
++ printf("Hello, world.\n");
++ return t;
++ }
++};
++
++
++int main()
++{
++ S s(3, 4);
++ int i = s.foo(3);
++ s.foo("hello");
++ s.foo(s);
++
++ S s2("hello", 5);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class T>
++struct S
++{
++ template <class U>
++ void foo(U);
++};
++
++void f()
++{
++ S<int> s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class T>
++struct S
++{
++ template <class U>
++ void foo(U);
++};
++
++void f()
++{
++ S<int> s;
++ s.foo(3);
++ s.foo("hello");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" const char* printf(const char*, ...);
++
++template <class T>
++struct S
++{
++ template <class U, class V>
++ void foo(U, V);
++};
++
++
++template <class T>
++template <class U, class V>
++void S<T>::foo(U, V)
++{
++ printf("Hello, world.\n");
++}
++
++
++int main()
++{
++ S<int> s;
++ s.foo(3, 3);
++ s.foo("hello", s);
++
++ S<char*> s2;
++ s2.foo(3, 3);
++ s2.foo("hello", s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class T>
++struct S
++{
++ template <class U>
++ void foo(U) {}
++};
++
++
++void f()
++{
++ S<int> s;
++ s.foo(3);
++ s.foo("hello");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class U>
++struct S {
++ template <class T>
++ void operator+(T);
++};
++
++template <class U>
++template <class T>
++void S<U>::operator+(T)
++{
++ printf("Hello, world.\n");
++}
++
++
++int main()
++{
++ S<int> s;
++ s + 3;
++ s + s;
++ s.operator+("Hi");
++
++ S<S<int> > s2;
++ s2 + 3;
++ s2 + s;
++ s2.operator+("Hi");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class V>
++struct S {
++ template <class T, class U>
++ S(T, U, T);
++};
++
++
++template <class V>
++template <class T, class U>
++S<V>::S(T t1, U u1, T t2)
++{
++ printf("Hello, world.\n");
++}
++
++
++int main()
++{
++ S<int> s1(3, "abc", 3);
++ S<int> s2('a', s1, 'a');
++
++ S<char> s3("abc", 3, "abc");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++struct S
++{
++ template <class T>
++ void foo(T) {}
++};
++
++template void S::foo(int);
++
++int main()
++{
++ S s;
++ s.foo(3);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S {
++ template <class T>
++ operator T();
++};
++
++template <class T>
++S::operator T()
++{
++ printf("Hello, world.\n");
++ return T();
++}
++
++
++template S::operator int();
++
++int main()
++{
++ S s;
++
++ int i = s.operator int();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++struct S {
++ template <class T>
++ void foo(T&);
++};
++
++
++template <class T>
++void S::foo(T&)
++{
++}
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S
++{
++ template <class T, class U>
++ void foo(T t, U u);
++
++ template <class U>
++ void foo(char*, U);
++
++ void foo(int i);
++};
++
++template <class T, class U>
++void S::foo(T t, U u)
++{
++ printf ("T,U version\n");
++}
++
++
++template <class U>
++void S::foo(char*, U u)
++{
++ printf ("char*,U version\n");
++}
++
++
++void S::foo(int i)
++{
++ printf ("int version\n");
++}
++
++
++int main()
++{
++ S s;
++ s.foo(3);
++ s.foo(3, 3);
++ s.foo("abc", s);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ S()
++ { printf ("In S::S()\n"); f(3); }
++
++ S(char)
++ { printf ("In S::S(char)\n"); f(*this); }
++
++ template <class U>
++ void f(U u)
++ { printf ("In S::f(U)\nsizeof(U) == %d\n", sizeof(u)); }
++
++ int c[16];
++};
++
++int main()
++{
++ S<char*> s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ S()
++ { printf ("In S::S()\n"); f(3); }
++
++ S(char)
++ { printf ("In S::S(char)\n"); f(*this); }
++
++ template <class U>
++ void f(U u)
++ { printf ("In S::f(U)\nsizeof(U) == %d\n", sizeof(u)); }
++
++ int c[16];
++};
++
++int main()
++{
++ S<char*> s;
++ S<char*> s2('a');
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ template <class U>
++ void f(U u) { printf ("%d\n", sizeof (U)); }
++
++ int i[4];
++};
++
++
++int main()
++{
++ S<char*> s;
++ s.f(3);
++ s.f(s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ template <class U>
++ void f(U u);
++
++ int i[4];
++};
++
++
++template <class X>
++template <class U>
++void S<X>::f(U u)
++{
++ printf ("%d\n", sizeof (U));
++}
++
++
++int main()
++{
++ S<char*> s;
++ s.f(3);
++ s.f(s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ S()
++ { printf ("In S::S()\n"); f(3); }
++
++ S(char)
++ { printf ("In S::S(char)\n"); f(*this); }
++
++ template <class U>
++ void f(U u)
++ { printf ("In S::f(U)\nsizeof(U) == %d\n", sizeof(u)); }
++
++ int c[16];
++};
++
++int main()
++{
++ S<char*> s;
++ S<char*> s2('a');
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++extern "C" void abort();
++
++int k;
++
++template <class X>
++struct S
++{
++ template <class U>
++ void f(U u)
++ { ++k; g(u); }
++
++ template <class U>
++ void g(U u)
++ { ++k; }
++
++ int c[16];
++};
++
++int main()
++{
++ S<char*> s;
++ s.f(3);
++ s.f("adf");
++
++ if (k != 4)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ template <class U>
++ void f(U u);
++
++ template <class U>
++ void g(U U);
++
++ int c[16];
++};
++
++template <class X>
++template <class U>
++void S<X>::f(U u)
++ { printf ("In S::f(U)\n"); g(u); }
++
++template <class X>
++template <class U>
++void S<X>::g(U u)
++ { printf ("In S::g(U)\n"); }
++
++int main()
++{
++ S<char*> s;
++ s.f(3);
++ s.f("adf");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++struct S {
++ template <class T>
++ void foo(T&);
++};
++
++
++template <class U>
++void S::foo(U&)
++{
++}
++
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ template <class U>
++ void g(U u) { this; }
++};
++
++
++int main()
++{
++ S<char*> s;
++ s.g(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S
++{
++ template <class U>
++ void g(U u)
++ { this; }
++};
++
++int main()
++{
++ S s;
++ s.g(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S
++{
++ template <class U>
++ void g(U u)
++ { i = 3; }
++
++ int i;
++};
++
++int main()
++{
++ S s;
++ s.g(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class T>
++struct S
++{
++ template <class U>
++ void g(U u)
++ { i; }
++
++ int i;
++};
++
++int main()
++{
++ S<char> s;
++ s.g(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++template <class T>
++struct S
++{
++ template <class U>
++ static void f(U u)
++ {}
++};
++
++int main()
++{
++ S<int>::f(3);
++ S<char>::f("abc");
++ S<int>::f("abc");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class T>
++struct S
++{
++ S(const S& s) {}
++
++ template <class U>
++ S(S<U>& s)
++ {
++ S<U> s2(s);
++ }
++};
++
++
++extern S<int>& si;
++
++void foo()
++{
++ S<char*> sc(si);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class X>
++struct R
++{
++};
++
++
++template <class T>
++struct S
++{
++ template <class U>
++ S(R<U> r);
++};
++
++
++void foo()
++{
++ R<int> r;
++ S<char*> s(r);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class T>
++struct S
++{
++ template <class U>
++ void f(U u);
++};
++
++
++template <class T>
++template <class U>
++void S<T>::f(U)
++{
++}
++
++enum
++{
++ a = 3
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class T>
++struct S
++{
++ template <class U>
++ void f(U u) { g(u); }
++
++ template <class U>
++ void g(U u) { f(u); }
++};
++
++void foo()
++{
++ S<int> si;
++ si.f(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S {
++ template <class T>
++ void foo(T);
++};
++
++
++template <class T>
++void S::foo(T)
++{
++ printf("Hello, world.\n");
++}
++
++
++
++int main()
++{
++ S s;
++ s.foo(3);
++ s.foo(s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class T>
++struct R
++{
++ template <class U>
++ void g(U u) {}
++};
++
++template <class T>
++struct S
++{
++ template <class U>
++ void f(U u) { R<T> r; r.g(u); }
++};
++
++void foo()
++{
++ S<int> si;
++ si.f("abc");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <int i>
++struct S
++{
++ static void foo() {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++template<class T, int N>
++class Foo {
++
++public:
++ template<int N2>
++ Foo<T,N> operator=(const Foo<T,N2>& z)
++ {
++ return Foo<T,N>();
++ }
++};
++
++int main()
++{
++ Foo<double,4> x;
++ Foo<double,7> y;
++ x = y;
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp43.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp43.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp43.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp43.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++template<class T, int N>
++class A
++{
++public:
++ template<class U>
++ void operator=(A<U, N> const & a) { return; }
++};
++
++int main()
++{
++ A<float, 3> a;
++ A<double, 3> b;
++ a = b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp44.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp44.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp44.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp44.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++template<class T>
++class A
++{
++};
++
++template<>
++class A<float>
++{
++public:
++ template<class U>
++ void func(U v1) {}
++};
++
++int main()
++{
++ A<float> a;
++ a.func(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp45.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp45.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp45.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp45.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++template<class T>
++class A
++{
++};
++
++template<>
++class A<float>
++{
++public:
++ template<class U>
++ void func(U v1 = 0) {}
++};
++
++int main()
++{
++ A<float> a;
++ a.func(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp46.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp46.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp46.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp46.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++template<class T, class U>
++class A
++{
++};
++
++template<class U>
++class A<float, U>
++{
++public:
++ template <class V>
++ void func(V v1 = 0) {}
++};
++
++int main()
++{
++ A<float, int> a;
++ a.func("abc");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp47.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp47.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp47.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp47.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++template <class X>
++struct S
++{
++ template <class U>
++ void g(U u)
++ { printf ("In S::g(U)\n"); }
++
++ int c[16];
++};
++
++
++template <class X>
++struct T : public S<X>
++{
++ template <class U>
++ void f(U u)
++ { printf ("In T::f(U)\n"); g(u); }
++};
++
++int main()
++{
++ T<char*> t;
++ t.f(3);
++ t.f("adf");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp48.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp48.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp48.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp48.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++struct S
++{
++ template <class T>
++ void f(T t1, T t = T())
++ {}
++};
++
++
++void foo()
++{
++ S si;
++ si.f(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp49.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp49.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp49.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp49.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <class X>
++struct S
++{
++ template <class T>
++ void f(T t1, T t = T())
++ {}
++};
++
++
++void foo()
++{
++ S<int> si;
++ si.f(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++struct S {
++ template <class T>
++ void operator+(T);
++};
++
++
++template <class T>
++void S::operator+(T)
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp52.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp52.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp52.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp52.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template<class T, int N>
++class A { };
++
++template<int N>
++struct X {
++ template<class T2, int N2>
++ void f(A<T2,N>&, A<int,N2>&)
++ { }
++};
++
++
++void foo()
++{
++ X<3> x;
++ A<char*, 3> a1;
++ A<int, 2> a2;
++ x.f(a1, a2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp53.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp53.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp53.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp53.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++template<int N>
++struct I {
++};
++
++template<class T>
++struct A {
++
++ int r;
++
++ template<class T1, class T2>
++ void operator()(T1, T2)
++ { r = 0; }
++
++ template<int N1, int N2>
++ void operator()(I<N1>, I<N2>)
++ { r = 1; }
++};
++
++int main()
++{
++ A<float> x;
++ I<0> a;
++ I<1> b;
++
++ x(a,b);
++ if (x.r != 1)
++ return 1;
++
++ x(float(), double());
++ if (x.r != 0)
++ return 1;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp55.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp55.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp55.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp55.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template<class X> class _bz_update { };
++
++template<class T>
++struct S {
++template<int N_destRank>
++void foo() { _bz_update<int>(); }
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp56.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp56.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp56.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp56.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template<class P_numtype, int N_length>
++class TinyVector {};
++
++template<class P_numtype, int N_rank>
++struct Array
++{
++ template<int N_rank2>
++ Array() {}
++
++ template<int N_rank2>
++ P_numtype operator()(const TinyVector<int,N_rank2>& index) const {}
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp58.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp58.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp58.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp58.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template<int N, class T>
++struct B {
++};
++
++template<int N1, int N2, int N3>
++struct D {
++ struct E {
++ template<int N4, class T>
++ static void f(B<N4,T>)
++ { }
++ };
++};
++
++template<int N>
++struct A {
++ template<int N2, class T, int N3>
++ static void f(B<N2,T>, B<N3,T> b)
++ {
++ typedef typename D<N2,N3,N>::E E;
++ E::f(b);
++ }
++};
++
++void foo()
++{
++ A<5>::f(B<5,float>(),B<3,float>());
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp59.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp59.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp59.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp59.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++template <int N>
++struct IndexPlaceholder {};
++
++template <int N1, int N2, int N3>
++struct ArrayIndexMapping {};
++
++template <class T_numtype, int N_rank>
++struct Array
++{
++ template<int N0, int N1>
++ ArrayIndexMapping<N_rank, N0, N1>
++ f(IndexPlaceholder<N0>, IndexPlaceholder<N1>);
++};
++
++
++template <class T_numtype>
++void foo(T_numtype)
++{
++ Array<T_numtype, 1> t;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S {
++ template <class T>
++ void operator+(T);
++};
++
++
++template <class T>
++void S::operator+(T)
++{
++ printf("Hello, world.\n");
++}
++
++
++
++int main()
++{
++ S s;
++ s + 3;
++ s + s;
++ s.operator+("Hi");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp60.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp60.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp60.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp60.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// GROUPS passed membertemplates
++template <class T>
++struct S
++{
++ S(const S<T>& x) {}
++
++ template <class U>
++ S(const S<U>& x) {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp61.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp61.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp61.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp61.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't run:
++// GROUPS passed membertemplates
++struct S
++{
++ template <class T>
++ void foo(T t);
++};
++
++
++template <>
++void S::foo(int i)
++{
++}
++
++
++int main()
++{
++ S s;
++ s.foo(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp62.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp62.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp62.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp62.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't run:
++// GROUPS passed membertemplates
++struct S
++{
++ template <class T>
++ void foo(T t);
++};
++
++
++template <>
++void S::foo<int>(int i)
++{
++}
++
++
++int main()
++{
++ S s;
++ s.foo(3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp63.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp63.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp63.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp63.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++template <class T> struct A {
++ template <class U> void f (U u);
++};
++
++A<int> a;
++
++template <class T> template <class U> void A<T>::f (U u) { }
++
++int main()
++{
++ a.f (24);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++template <class T>
++struct S1 {};
++
++template <class T>
++void f(T);
++
++template <class C>
++struct S2
++{
++ template <class T>
++ void f<S1<T> >(T) {} // ERROR - bad specialization.
++};
++
++
++template <class T>
++struct S3
++{
++ friend class S2<T>;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp65.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp65.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp65.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp65.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++
++template<unsigned int n> struct PartialDotProduct {
++ template<class T>
++ static T Expand(T* a, T* b) { return T(); }
++};
++
++const int N = 10;
++
++template<class In1, class In2>
++void
++dot(In1 f1, In2 f2)
++{
++ PartialDotProduct<N>::Expand(f1, f2);
++
++}
++
++int main()
++{
++ double a[N], b[N];
++
++ dot(&a[0], &b[0]);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp66.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp66.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp66.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp66.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template <class T>
++struct S
++{
++ template <class U>
++ void f(U u) { this->template f<>(3); }
++};
++
++
++void g()
++{
++ S<char> s;
++ s.f(1.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp67.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp67.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp67.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp67.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++template <class T>
++struct A
++{
++ template <class T2>
++ operator A<T2>() const { return A<T2>(); }
++};
++
++int main()
++{
++ A<int> a1;
++ A<long> a2;
++ A<double> a3;
++ A<char> a4;
++
++ a2 = a1.operator A<long>();
++ a3 = (A<double>) a1;
++ a4 = a1;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp68.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp68.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp68.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp68.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++ struct locale
++ {
++ template<class _Facet>
++ locale (const locale&, _Facet*);
++ locale(int*) throw();
++ };
++ void f(int* p) { locale keep (p); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp69.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp69.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp69.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp69.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++struct S
++{
++ template <class T>
++ void f(T (&i)[7])
++ {}
++
++ void g()
++ {
++ int i[] = {1, 2, 3, 4, 5, 6, 7};
++ f(i);
++ int j[7];
++ f(j);
++ }
++};
++
++struct foo {
++ template <typename T, int N>
++ static T* array_end(T(&array)[N]) { return &array[N]; }
++};
++
++struct X
++{
++ template <class T1>
++ void f(const T1&) {}
++};
++
++int main(int ac, char* av[]) {
++ S s;
++ s.g();
++ int i[] = {1,2,3,4,5};
++ int* e = foo::array_end(i);
++ X x;
++ x.f("hello");
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++struct S {
++ template <class T, class U>
++ S(T, U, T);
++};
++
++
++template <class T, class U>
++S::S(T, U, T)
++{
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp70.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp70.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp70.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp70.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++template <class T>
++class X {
++public:
++ T x;
++};
++
++class Y {
++public:
++ template <class T> static void f(X<T>& a) {}
++
++ void g(void);
++};
++
++void
++Y::g(void)
++{
++ X<int> a;
++
++ f(a);
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++class A
++{
++ template<class T>T epsilon; // ERROR - invalid member template
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp72.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp72.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp72.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp72.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++template<class P> struct B
++{
++ template<class T> void f(T& t) { t = T(); }
++};
++
++enum ptype { t1, t2};
++
++struct D : public B<ptype>
++{
++ void g(double& d) { f(d); }
++};
++
++
++D d;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp73.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp73.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp73.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp73.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++template <class T> struct A {
++ template <class U> void f(U);
++};
++
++template <int i> struct B { };
++
++template <class T> template <class U>
++void A<T>::f (U)
++{
++ enum { foo };
++ B<foo> b;
++}
++
++int main ()
++{
++ A<char> a;
++ a.f (42);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp74.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp74.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp74.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp74.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++template <class T>
++class S
++{
++protected:
++ template <class U>
++ void f(U); // ERROR - is protected
++
++private:
++ template <class U>
++ void g(U); // ERROR - is private
++};
++
++
++void f()
++{
++ S<double> s;
++ s.f(3); // ERROR - within this context
++ s.g(2.0); // ERROR - within this context
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp75.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp75.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp75.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp75.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++void
++print(const int& i)
++{
++}
++
++template<class A>
++class bar
++{
++public:
++ template<void (*B)(const A& a)>
++ void doit(const A& a)
++ {
++ B(a);
++ }
++};
++
++
++int
++main()
++{
++ bar<int> b;
++ b.template doit<print>(2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp76.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp76.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp76.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp76.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++class base
++{
++public:
++ virtual void method()=0;
++};
++
++class der: public base
++{
++public:
++ template<class C>
++ void method()
++ {
++ C foo;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp77.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp77.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp77.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp77.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++extern "C" int strcmp(const char*, const char*);
++
++template <class T>
++struct S3
++{
++ template <class U>
++ static char* h(U);
++};
++
++template <>
++template <>
++char* S3<double>::h(int) { return __PRETTY_FUNCTION__; }
++
++template <>
++template <>
++char* S3<char>::h(int) { return __PRETTY_FUNCTION__; }
++
++int main()
++{
++ if (strcmp (S3<double>::h(7),
++ "static char * S3<double>::h<int>(int)") == 0)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp78.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp78.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp78.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp78.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++// Build don't link:
++
++struct A
++{
++ void f() {}
++
++ template <class U>
++ void f() {}
++};
++
++
++template <class T>
++struct B
++{
++ void f() {}
++
++ template <class U>
++ void f() {}
++};
++
++template struct B<int>;
++
++struct C
++{
++ template <class U>
++ void f() {}
++
++ template <class U>
++ void f() {} // ERROR - redeclaration
++};
++
++
++template <class T, class U>
++struct D
++{
++ void f(T);
++ void f(U);
++};
++
++template struct D<int, double>;
++
++template <class T, class U>
++struct D2
++{
++ void f(T);
++ void f(U); // ERROR - redeclaration
++};
++
++template struct D2<int, int>;
++
++struct E
++{
++ void f();
++ void f(); // ERROR - redeclaration
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp79.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp79.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp79.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp79.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++struct foo {
++ template<typename T> static void bar( foo* );
++ template<typename T> void bar() const; // gets bogus error - quals XFAIL *-*-*
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S {
++ template <class T, class U>
++ S(T, U, T);
++};
++
++
++template <class T, class U>
++S::S(T t1, U u1, T t2)
++{
++ printf("Hello, world.\n");
++}
++
++
++int main()
++{
++ S s1(3, "abc", 3);
++ S s2('a', s1, 'a');
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp80.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp80.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp80.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp80.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template<typename T> T baz() { return 0; }
++
++struct foo {
++ template<typename T> static T staticbar() { return 0; }
++ template<typename T> T bar() { return 0; }
++};
++
++void f()
++{
++ foo t;
++ int i = baz<int>();
++ int j = foo::staticbar<int>();
++ int k = t.bar<int>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp81.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp81.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp81.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp81.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++template <int i> class a
++{
++public :
++int k;
++
++template <int j> int f() const { return this->f<j-1>(); }
++
++int g() const { return f<i>(); };
++};
++
++template <>
++template <>
++int a<2>::f<0>() const {
++ return 0;
++}
++
++int main()
++{
++a<2> x;
++return x.g();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// excess errors test
++
++struct foo {
++ template<typename T> T bar() { return staticbar<T>( this ); }
++ template<typename T> static T staticbar( foo* ) { return 0; }
++};
++
++void f()
++{
++ foo t;
++ int k = t.bar<int>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp83.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp83.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp83.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp83.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Origin: Corey Kosak <kosak@cs.cmu.edu>
++
++struct cow_t {
++ template<bool Q>
++ static void tfunc(cow_t *cowp) {}
++
++ void moo() {
++ cow_t *cowp;
++ tfunc<true>(cowp);
++ }
++};
++
++
++int main()
++{
++ cow_t *cowp;
++ cow_t::tfunc<true>(cowp);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++// GROUPS passed templates membertemplates
++struct S {
++ template <class T>
++ operator T();
++};
++
++
++template <class T>
++S::operator T()
++{
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/memtemp9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/memtemp9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't run:
++// GROUPS passed templates membertemplates
++extern "C" int printf(const char*, ...);
++
++struct S {
++ template <class T>
++ operator T();
++};
++
++template <class T>
++S::operator T()
++{
++ printf("Hello, world.\n");
++ return T();
++}
++
++int main()
++{
++ S s;
++
++ int i = s.operator int();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/mi1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/mi1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/mi1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/mi1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,75 @@
++// Test that binfos aren't erroneously shared between instantiations.
++
++class PK_CryptoSystem
++{
++};
++class PK_Encryptor : public virtual PK_CryptoSystem
++{
++};
++class PK_FixedLengthCryptoSystem : public virtual PK_CryptoSystem
++{
++public:
++ virtual unsigned int CipherTextLength() const =0;
++};
++class PK_FixedLengthEncryptor : public virtual PK_Encryptor, public virtual PK_FixedLengthCryptoSystem
++{
++};
++class PK_SignatureSystem
++{
++public:
++ virtual ~PK_SignatureSystem() {};
++};
++class PK_Signer : public virtual PK_SignatureSystem
++{
++public:
++ virtual void Sign() = 0;
++};
++class PK_Verifier : public virtual PK_SignatureSystem
++{
++};
++class PK_Precomputation
++{
++};
++template <class T> class
++PK_WithPrecomputation : public T, public virtual PK_Precomputation
++{
++};
++typedef PK_WithPrecomputation<PK_FixedLengthEncryptor> PKWPFLE;
++typedef PK_WithPrecomputation<PK_Signer> PKWPS;
++template <class EC> class
++ECPublicKey : public PKWPFLE
++{
++public:
++ unsigned int CipherTextLength() const { return 1; }
++ EC ec;
++};
++template <class EC>
++class ECPrivateKey : public ECPublicKey<EC>, public PKWPS
++{
++ void Sign() {}
++ int d;
++};
++template <class EC>
++class ECKEP : public ECPrivateKey<EC>
++{
++};
++class GF2NT : public PK_CryptoSystem
++{
++ int t1;
++};
++class EC2N : public PK_CryptoSystem
++{
++ GF2NT field;
++ int a;
++};
++template class ECKEP<EC2N>;
++template class ECKEP<int>;
++
++int
++main ()
++{
++ ECKEP<EC2N> foo;
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nested1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nested1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nested1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nested1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,47 @@
++// Build don't link:
++
++template <class T1,class T2>
++struct X
++{
++ T1 a;
++
++ struct Y
++ {
++ T2 x;
++ Y (T2 _x) { x=_x; }
++ };
++
++};
++
++template <class T1>
++struct X<T1,int>
++{
++ T1 a;
++
++ struct Y
++ {
++ int x;
++ Y (int _x) { x=_x; }
++ };
++
++};
++
++template <>
++struct X<int,int>
++{
++ int a;
++
++ struct Y
++ {
++ int x;
++ Y (int _x) { x=_x; }
++ };
++
++};
++
++void f ()
++{
++ X<char,char> t1;
++ X<char,int> t2;
++ X<int,int> t3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nested2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nested2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nested2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nested2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Origin: Mathias Doreille <Mathias.Doreille@imag.fr>
++
++template<class T>
++struct a {
++ struct b {
++ T operator()();
++ };
++};
++
++
++template<class T>
++T a<T>::b::operator()() { return T(0); }
++
++template<> int a<int>::b::operator()() { return 1; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++struct A {
++ friend struct B : A { // ERROR -
++ int x;
++ };
++ int y;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++template <class T> struct A { T *t; inline A() { t = 0; } };
++template <class T> struct B : A<B<T> > { int x; inline B() { x = 3; } };
++
++B<int> x;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++template <class T> struct A {};
++template <class T> struct B : A<B<T> > {};
++
++B<int> x;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas02.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas02.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas02.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas02.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++struct B { int foo (); };
++int B::foo() { return 37; }
++
++template <class A> struct X {
++ void f(int);
++};
++
++template <class A> void X<A>::f (int jj)
++{}
++
++X<int> x;
++
++void xxx () { x.f (1); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/niklas03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/niklas03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class A> struct X {
++ A operator[] (int);
++};
++
++template <class A> A X<A>::operator[] (int i)
++{
++ return A(); // gets bogus error
++}
++
++X<int> x;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++template<int N_length>
++struct B
++{
++ B();
++ ~B();
++};
++template<class P, int N>
++struct D
++{
++ D(int r0);
++ D(B<N-1> &, int);
++};
++template<class T>
++void func()
++{
++ D<T,1> tmp;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++enum E { };
++
++template <const E* ep>
++struct S1
++{
++};
++
++
++struct S2
++{
++ static E es[1];
++};
++
++
++struct S3
++{
++ typedef S1<S2::es> S3_Type;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++
++enum E { e };
++
++template <const E* ep>
++struct S1
++{
++ static char* s;
++};
++
++template <int D>
++struct S2 {};
++
++template <>
++struct S2<1>
++{
++ static E es[1];
++};
++
++struct S3
++{
++ typedef S1<S2<1>::es> S3_Type;
++};
++
++E S2<1>::es[1] = {e};
++
++template <>
++char* S1<S2<1>::es>::s = "abc";
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nontype4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nontype4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++
++template <class R, void (R::* A) (void)>
++class s
++{
++public:
++ s (R &r) : _r (r) {}
++
++ void e (void) { (_r.*A) (); }
++
++private:
++ R &_r;
++};
++
++class x
++{
++public:
++ void test1 (void) { int j = 0; }
++ void test2 (void) { int j = 1; }
++};
++
++int
++main (void)
++{
++ x r;
++
++ s<x, &x::test1> c4 (r);
++ s<x, &x::test2> c5 (r);
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nttp1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nttp1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nttp1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nttp1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Test for nested template template parameter feature
++
++template <template<template <class> class> class TTT> struct C
++{
++ int f();
++};
++
++template <template<template <class> class> class TTT> int C<TTT>::f()
++{
++ return 0;
++}
++
++template <template <class> class TT> struct D
++{
++};
++
++int main()
++{
++ C<D> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nttp2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nttp2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/nttp2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/nttp2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Test for nested template template parameter feature
++
++template <template<template <class> class> class TTT> struct C
++{
++ int f() { return 0; }
++};
++
++template <template <class> class TT> struct D
++{
++ int a;
++};
++
++template <template <class> class TT> struct E
++{
++ int a;
++ int b;
++};
++
++template <template <template <template<class> class> class> class TTT>
++int g(TTT<E> t)
++{
++ TTT<D> tt;
++ return tt.f();
++}
++
++int main()
++{
++ C<E> c;
++ g(c);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++struct B {
++ int f(int) { return 1; }
++};
++
++struct D {
++ template <class T>
++ int f(T) { return 0; }
++};
++
++int main()
++{
++ int (D::*g)(int) = &D::f;
++
++ D d;
++ return (d.*g)(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't run:
++
++template <class T>
++int f(int (*fn)(T))
++{
++ return (*fn)(3);
++}
++
++struct S {
++ static int g(int) { return 1; }
++ static void g();
++
++ int h();
++};
++
++int S::h()
++{
++ return f(&g);
++}
++
++
++int main()
++{
++ S s;
++ if (s.h () != 1)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Testcase for not trying a candidate that would generate an ill-formed
++// instantiation.
++
++template <int N> struct A {
++ int ar[N];
++};
++
++template <int N> struct B {
++ B () { };
++ B (const A<N> &) { };
++ B (const A<N-1> &, int);
++};
++
++int
++main ()
++{
++ A<1> a;
++ B<1> b1;
++ B<1> b2 (a);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++template <class T> struct B { };
++
++template <class T> struct A {
++ template <class U, class V> int operator () (U u, V v);
++ template <class U, class V> void operator () (B<U> u, B<V> v) { }
++};
++
++int
++main ()
++{
++ A<int> a;
++ B<char> b1;
++ B<short> b2;
++ a (b1, b2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++//Build don't link:
++template<class T>
++class C
++{
++public:
++ C<T*> O();
++ C<T*> O() const;
++};
++
++
++int
++main()
++{
++ C<char*> c;
++ char* p = Z(c.O); //ERROR - ambiguous c.O
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template <class T>
++void g(T, T);
++
++template <class T>
++void g(int*, T);
++
++struct S
++{
++ void f() const
++ {
++ g(X, X+3);
++ }
++
++ double X[3];
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class T> void foo(T);
++
++template <class T> void bar(void (*)(T), T);
++
++void baz() {
++ bar<int>(foo, 1);
++ bar(foo<int>, 1);
++ bar<int>(foo<int>, 1);
++ bar(foo, 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++template <class T> void foo(); // ERROR - candidate
++
++void (*bar)() = foo<void>;
++void (*baz)() = foo; // ERROR - can't deduce T
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Check that foo<int> isn't resolved too early.
++
++template <class T> void foo(T*);
++template <class T, class U> void foo(T*, U) { }
++
++template <class T, class U> void bar(void (*)(T, U), U) { }
++
++int main() {
++ bar<int*>(&foo, 1);
++ bar<int*>(&foo<int>, 1);
++ bar<int*>(foo, 1);
++ bar<int*>(foo<int>, 1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++// Adapted from testcase by Corey Kosak <kosak@cs.cmu.edu>
++
++template<class T>
++struct moo_t {
++ struct cow_t {};
++};
++
++template<class T> void foo(typename moo_t<T>::cow_t) {}
++
++template<class T> void foo(moo_t<T>) {
++ typename moo_t<T>::cow_t p;
++ foo(p); // gets bogus error - no matching function for call - XFAIL *-*-*
++}
++
++int main() {
++ moo_t<int> x;
++ foo(x); // gets bogus error - instantiated from here - XFAIL *-*-*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++// Simplified from bug report by Tim Rowley <tor@cs.brown.edu>
++
++struct baz;
++
++void operator*(baz&, double);
++
++template <class T> inline T operator*(double s, const T &p)
++ ; // gets bogus error - must have argument of class type - XFAIL *-*-*
++
++void m(baz& a) { a * .5; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/overload9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/overload9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++template <class T>
++int f(T)
++{
++ return 1;
++}
++
++
++template <class T>
++int f(T*)
++{
++ return 0;
++}
++
++
++int main()
++{
++ int (*h)(int*) = &f;
++ int (&k)(int*) = f;
++
++ return (*h)(0) || (*k)(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/parse2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/parse2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/parse2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/parse2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++template <class T> struct A {
++ A (const A&) { }
++};
++
++template A<int>::A (const A&);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/partial1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/partial1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/partial1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/partial1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++template<class T_type, int N>
++class foo {
++public:
++ enum bar { z = 0 };
++};
++
++template<int N>
++class foo<double, N> {
++public:
++ enum bar { z = 1 };
++};
++
++template<class T_type>
++class foo<T_type, 2> {
++public:
++ enum bar { z = 2 };
++};
++
++int main()
++{
++ if ((foo<int,3>::z == 0) && (foo<double,3>::z == 1)
++ && (foo<float,2>::z == 2))
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/partial2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/partial2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/partial2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/partial2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++// Tests partial specialization
++template<class T> struct foo1 {};
++template<class T, int n> struct foo1<T[n]>;
++foo1<char> bar1;
++foo1<char[10]> baz1; // ERROR - incomplete type
++
++template<class T> struct foo2 {};
++template<class T, unsigned n> struct foo2<T[n]>;
++foo2<char> bar2;
++foo2<char[10]> baz2; // ERROR - incomplete type
++
++typedef unsigned int other1_t;
++template<class T> struct foo3 {};
++template<class T, other1_t n> struct foo3<T[n]>;
++foo3<char> bar3;
++foo3<char[10]> baz3; // ERROR - incomplete type -
++
++typedef int other2_t;
++template<class T> struct foo4 {};
++template<class T, other1_t n> struct foo4<T[n]>;
++foo4<char> bar4;
++foo4<char[10]> baz4; // ERROR - incomplete type -
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/partial3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/partial3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/partial3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/partial3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Test that partial ordering works between conversion ops from different
++// classes.
++// From Jason Merrill <jason@cygnus.com>
++
++struct A {
++ template <class T> operator T*() { return 0; }
++};
++struct B : public A {
++ template <class T> operator T();
++};
++
++int main()
++{
++ B b;
++ (void*) b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/pointer1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/pointer1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/pointer1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/pointer1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++template <class T>
++struct S1
++{
++};
++
++template <class T>
++struct S2
++{
++ typedef T* pointer_t;
++};
++
++int f(S2<S1<int> >::pointer_t p1, S2<S1<int> >::pointer_t p2)
++{
++ return (int) (p1 - p2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++class foo
++{
++public:
++ template<class T>
++ T bar() { return 7; }
++};
++
++int
++main()
++{
++ foo f;
++
++ int (foo::*s)() = &foo::template bar<int>;
++ if ((f.*s)() == 7)
++ return 0;
++ else
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++struct S;
++
++template <S* (S::*p)()>
++struct F {
++ S* f (S& s)
++ {
++ return (s.*p)();
++ }
++};
++
++template <int S::*p>
++struct D {
++ void d (S& s)
++ {
++ (s.*p) = 3;
++ }
++};
++
++struct S {
++ S* g ();
++ int i;
++ F<&S::g> fg;
++ D<&S::i> di;
++ S* h(), k(F<&S::h>);
++ F<&S::g> fg2;
++ D<&S::i> di2;
++};
++
++S* S::g()
++{
++ return this;
++}
++
++int main()
++{
++ S s;
++ s.i = 2;
++ s.di.d (s);
++ if (s.i != 3)
++ return 1;
++ if (s.fg2.f(s) != &s)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++template <class T>
++struct S : public S<T*> {};
++template <>
++struct S<int**> {};
++
++void g()
++{
++ int S<int*>::*p;
++ int S<int>::*q = p;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't run:
++
++template<class T,class T1>
++int connect_to_method(T* receiver,
++ int (T1::*method)())
++{
++ return (receiver->*method)();
++}
++
++class Gtk_Container
++{
++public:
++ int remove_callback() { return 1; }
++ void remove_callback(int);
++ int f();
++};
++
++int Gtk_Container::f()
++{
++ return connect_to_method(this, &Gtk_Container::remove_callback);
++}
++
++int main()
++{
++ Gtk_Container gc;
++ if (gc.f () != 1)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++// Based on testcase by adriang@campbellsoft.com
++
++struct Null {
++ template <typename T> operator T*() { return 0; }
++ template <typename C, typename T> operator T C::*() { return 0; }
++#if WORK_AROUND
++ typedef int pmf();
++ template <typename C> operator pmf C::* () { return 0; }
++#endif
++} NULL;
++
++int *pd = NULL;
++int (*pf)() = NULL;
++int Null::*pmd = NULL;
++int (Null::*pmf)() = NULL; // gets bogus error - cannot convert - XFAIL *-*-*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Build don't link:
++
++class A {
++public:
++ virtual void f();
++ int i;
++};
++
++class B : public A {
++public:
++ void f();
++ int j;
++};
++
++template <void (A::*)() >
++void g() {}
++template <int A::*>
++void h() {}
++
++
++int main() {
++ g<&A::f>();
++ h<&A::i>();
++ g<&B::f>(); // ERROR -
++ h<&B::j>(); // ERROR -
++ g<(void (A::*)()) &A::f>(); // ERROR - XFAIL *-*-*
++ h<(int A::*) &A::i>(); // ERROR -
++ g<(void (A::*)()) &B::f>(); // ERROR -
++ h<(int A::*) &B::j>(); // ERROR -
++ g<(void (A::*)()) 0>(); // ERROR -
++ h<(int A::*) 0>(); // ERROR -
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++struct A {
++ int i;
++};
++
++template<const int A::* P>
++struct B { };
++
++int main()
++{
++ B<&A::i> b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/recursion2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/recursion2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/recursion2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/recursion2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++template< int i > struct T :
++public T< i-1 >
++{
++};
++
++template<> struct T< 0 >
++{
++};
++
++template< class F > struct T1 :
++public T< F::dim >
++{
++};
++
++template< int i > struct S
++{
++ enum { dim = i } ;
++};
++
++int main()
++{
++ T1< S< 4 > > t ;
++ return( 0 ) ;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/recursion.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/recursion.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/recursion.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/recursion.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++
++const double M_PI=3.14159265358979323846;
++
++template<int N,int I,int J,int K>
++inline double SineSeries()
++{
++ const double x=I*2*M_PI/N;
++ const bool go=K+1!=J;
++ return 1.0-x*x/(2*K+2)/(2*K+3)*SineSeries<N*go,I*go,J*go,(K+1)*go>();
++}
++
++template<>
++inline double SineSeries<0,0,0,0>()
++{
++ return 1.0;
++}
++
++template<int N,int I>
++inline double Sine()
++{
++ const double x=(I*2*M_PI/N);
++ return x * SineSeries<N,I,10,0>();
++}
++
++int main()
++{
++ double f=Sine<32,5>();
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++template <class T>
++struct S1; // ERROR - previous declaration
++
++template <class T, class U>
++struct S1 {}; // ERROR - used 1 template parameter
++
++template <class T = int> // ERROR - original def of default
++struct S2;
++
++template <class T = int>
++struct S2; // ERROR - redefinition of default
++
++template <class T> // ERROR - template parameter
++struct S3;
++
++template <int I>
++struct S3; // ERROR - redeclared here
++
++template <template <class T> class C>
++struct S3; // ERROR - redeclared here
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/redecl2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/redecl2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/redecl2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/redecl2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++struct A
++{
++ template <class A>
++ void f(A) {}
++};
++
++void g()
++{
++ A a;
++ a.f(3);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ref1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ref1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ref1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ref1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++int i;
++
++template <void (&FN)()>
++void g ()
++{
++ FN ();
++}
++
++void h ()
++{
++ i = 7;
++}
++
++template void g<h>();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/scope1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/scope1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/scope1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/scope1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++
++template<class X, class Z>
++class foo
++{
++public:
++ typedef X y;
++
++ class bar {
++ public:
++ void blah () { y Y; }
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/shadow1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/shadow1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/shadow1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/shadow1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++template <class T>
++struct S {
++ typedef T X;
++
++ class C {
++ typedef T X;
++ };
++};
++
++template <int I>
++struct S2 {
++ enum { A = I };
++
++ void f() {
++ int A;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/shadow2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/shadow2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/shadow2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/shadow2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Origin: Jason Merrill <jason@cygnus.com>
++
++template <class T> struct A { // ERROR - shadowed parameter
++ struct B {
++ void T(); // ERROR - shadows template parameter
++ };
++};
++A<int> a;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Although template class B is not used at all, it causes the
++// incorrect specialization of A to be selected
++
++// Adapted from testcase by Oskar Enoksson <osken393@student.liu.se>
++
++extern "C" void abort();
++
++template<int N, class T> // Base class
++class A { public: static int n() { return sizeof(T); } };
++
++template<int N> // Derived #1
++class B: public A<N,char[N]> {};
++
++template<int N, int M> // Derived #2 (wrong!)
++class C: public A<N,char[M]> {};
++
++int main() {
++ if (C<1,2>::n() != 2)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/sizeof3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/sizeof3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/sizeof3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/sizeof3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Adapted from testcase by Oskar Enoksson <osken393@student.liu.se>
++
++extern "C" void abort();
++
++template<class T0>
++class A {
++public:
++ typedef T0 T;
++};
++
++template<int K>
++class B {
++ typedef A<char[K]> BC;
++};
++
++template<int N, int M>
++class C {
++public:
++ typedef A<char[M]> AC;
++};
++
++int main() {
++ if (sizeof(C<3,7>::AC::T) != 7)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/sizeof.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/sizeof.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/sizeof.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/sizeof.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++extern "C" void abort();
++
++template <int I>
++int bar() { return I; }
++
++template <class T>
++int foo(T)
++{
++ return bar<sizeof(T) + 4>() + bar<sizeof(long) + 7>();
++}
++
++
++int main()
++{
++ if (foo(2) != sizeof(int) + 4 + sizeof(long) + 7)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++extern "C" void abort();
++
++template <class T>
++struct S
++{
++ template <int i>
++ int f(int j) { abort(); return 0; }
++};
++
++template <>
++template <>
++int S<double>::f<7>(int j) { return j + 7; }
++
++template <>
++template <>
++int S<double>::f<8>(int j) { return j + 8; }
++
++int main()
++{
++ S<double> s;
++
++ if (s.template f<7>(3) != 10)
++ abort();
++
++ if (s.template f<8>(3) != 11)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++extern "C" void abort();
++
++template <class T>
++struct S
++{
++ template <class U>
++ int f(U u);
++};
++
++template <>
++template <>
++int S<char>::f(int i) { return 1; }
++
++int main()
++{
++ S<char> sc;
++
++ if (sc.f(3) != 1)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++extern "C" void abort();
++
++template <class T>
++struct S
++{
++ template <class U>
++ int f(U u);
++};
++
++
++template <>
++template <>
++int S<char>::f<int>(int i) { return 1; }
++
++int main()
++{
++ S<char> sc;
++
++ if (sc.f(3) != 1)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++template <class T>
++void f(T t);
++
++template <class T>
++void f(T* t);
++
++template <>
++void f(int* ip) {}
++
++struct S1
++{
++ template <class T>
++ void f(T t);
++
++ template <class T>
++ void f(T* t);
++};
++
++template <>
++void S1::f(int* ip) {}
++
++template <class U>
++struct S2
++{
++ template <class T>
++ void f(T t);
++
++ template <class T>
++ void f(T* t);
++};
++
++template <>
++template <>
++void S2<double>::f(int* ip) {}
++
++int main()
++{
++ int* ip;
++ S1 s1;
++ s1.f(ip);
++ S2<double> s2;
++ s2.f(ip);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++class X
++{
++public:
++ template <typename A, typename B, typename C>
++ X() {}
++
++ template <typename A, typename B>
++ X::X<A, void, B>() {} // ERROR - non-template type used as a template
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++extern "C" void abort();
++
++template <class T>
++struct S1
++{
++ static void f();
++};
++
++template <>
++void S1<int>::f() {}
++
++struct S2
++{
++ template <class T>
++ static void g(T);
++};
++
++template <>
++void S2::g(double) {}
++
++template <>
++void S2::g<int>(int) {}
++
++template <class T>
++struct S3
++{
++ template <class U>
++ static int h(U);
++};
++
++template <>
++template <>
++int S3<double>::h(int) { return 0; }
++
++template <>
++template <>
++int S3<char>::h(int) { return 1; }
++
++int main()
++{
++ S1<int>::f();
++ S2::g(3.0);
++ S2::g(7);
++
++ if (S3<double>::h(7) != 0)
++ abort();
++ if (S3<char>::h(7) != 1)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++template<class K>
++struct A {
++ int foo(const K&);
++ int bar(const K&);
++};
++
++template<class K>
++int
++A<K>::bar(const K& k)
++{
++ return(foo(k));
++}
++
++template<>
++int
++A<const char*>::foo(const char*const& k)
++{
++ return((int)k);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,44 @@
++// Build don't link:
++
++template<class T>
++struct Foo { };
++
++template<class T1, class T2>
++struct BT { };
++
++template<class T1, class T2>
++struct BT< Foo<T1>, Foo<T2> > { static const int i = 1; };
++
++template<class T1, class T2>
++struct BT< T1, Foo<T2> > { static const int i = 2; };
++
++template<class T1, class T2>
++struct BT< Foo<T1>, T2 > { static const int i = 3; };
++
++template<class T1, class T2>
++int foo(Foo<T1>, Foo<T2>)
++{
++ return 1;
++}
++
++template<class T1, class T2>
++int foo(T1, Foo<T2>)
++{
++ return 2;
++}
++
++template<class T1, class T2>
++int foo(Foo<T1>, T2)
++{
++ return 3;
++}
++
++void f()
++{
++ BT< double, Foo<int> >::i;
++ BT< Foo<int>, Foo<int> >::i;
++ BT< Foo<int>, float >::i;
++ foo(1.0, Foo<int>());
++ foo(Foo<int>(), Foo<int>());
++ foo(Foo<int>(), 1.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++
++template<class A, class B>
++void foo(const A& a, const B& b)
++{
++}
++
++template<class A, class B>
++void foo(const A& a, const int& b)
++{
++}
++
++template<class A*, class B>
++void foo(const A*& a, const B& b)
++{
++}
++
++template<>
++void foo(const int&, const double&)
++{
++}
++
++
++int
++main()
++{
++ foo("98239", 23);
++ foo(232, 1.022);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++template<class T> T f(T o) { return o; }
++template<> int f(int o) { return o; } // ERROR - after specialization
++template int f(int); // ERROR - explicit instantiation
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++template <class S, class T>
++class mem_fun1_t {
++public:
++ mem_fun1_t(S (T::*pf)(double)) {}
++};
++
++template <class T>
++class mem_fun1_t<void, T> {
++public:
++ mem_fun1_t(void (T::*pf)(double)) {}
++};
++
++struct Operation {
++ double eval(double) {}
++};
++
++int main() {
++ mem_fun1_t<double, Operation> m(&Operation::eval);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++// According to the non-normative example in
++// [temp.class.spec.mfunc]/2, these should be valid, but the grammar
++// in the Standard does not allow partial nor full specializations as
++// member-declarations, so we'd better not support them.
++
++template <class T>
++struct S {
++ template <class U> void f(U);
++ template <> void f<int>(int); // ERROR - invalid specialization
++
++ template <class V> struct I {};
++ template <class V> struct I<V*> {};
++ template <> struct I<int>; // ERROR - invalid specialization
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class T> struct S {};
++template <class T = int> struct S<T*> {}; // ERROR - default argument
++
++template <int I, int J> struct A {};
++template <int I> struct A<I+5, I*2> {}; // ERROR - argument involves parameter
++
++template <class T, T t> struct C {};
++template <class T> struct C<T, 1>; // ERROR - type depends on parameter
++int i;
++template <class T> struct C<T*, &i>; // ERROR - type depends on parameter
++
++template< int X, int (*array_ptr)[X] > class B {};
++int array[5];
++template< int X > class B<X,&array> { }; // ERROR - type depends on parameter
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template <class T>
++struct S
++{
++ template <class U>
++ void f();
++};
++
++
++template <class T>
++template <> // ERROR - enclosing classes not specialized
++void S<T>::f<int> ()
++{ // ERROR - template does not match any declaration
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++/* [temp.expl.spec] p18. */
++
++template<class T>
++struct A {
++ template <class U> class B { };
++};
++
++template<class T>
++class A<T>::B<void> { // ERROR - only one template header
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++template <class T> class A;
++// template <>
++class A<int>; // ERROR - missing template header - XFAIL *-*-*
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template <class T, int I>
++struct S {
++};
++
++template <int I>
++struct S <double, I> {
++};
++
++template <class T>
++void f ()
++{
++ S<double, T::x> s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// From: lat@iki.fi (Lassi A. Tuura)
++// Test that a specialization without an initializer is not a definition,
++// as specified in [temp.expl.spec].
++
++// Build don't link:
++
++struct X;
++template <class T> struct Y { static const X array[]; };
++template <> const X Y<int>::array [];
++struct X { int i; };
++template <> const X Y<int>::array [] = { 0, 1, 2, 3 };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template <class T, class U>
++struct Y {};
++
++template <class T>
++struct X {};
++
++template <class T, class U>
++void f()
++{
++ typename X<Y<T, U> >::A a;
++}
++
++template <class T, class U>
++struct X<Y<T, U> >
++{
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++template <class T>
++struct S1 {
++ friend bool f<>(const S1&);
++ typedef T X;
++};
++
++template <class T>
++struct S2 {
++};
++
++template <class T>
++struct S2<S1<T> > {
++ typedef typename S1<T>::X Y;
++};
++
++template <class T>
++bool f(T);
++
++template <class T>
++typename S2<S1<T> >::Y
++f(const S1<T>&);
++
++template struct S1<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++char c;
++
++struct S {
++ template <typename T>
++ operator T*();
++
++ template <typename T>
++ operator T();
++};
++
++template <>
++S::operator int()
++{
++ return 2;
++}
++
++template <>
++S::operator char*()
++{
++ return &c;
++}
++
++int main()
++{
++ S s;
++ int i = s;
++ char* cp = s;
++
++ if (i != 2 || cp != &c)
++ return 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++class X
++{
++ public:
++ virtual void f() const = 0;
++};
++
++template <class T>
++class Y: public X
++{
++ public:
++ virtual void f() const;
++};
++
++template <class T>
++void Y<T>::f() const
++{
++}
++
++template <>
++void Y<bool>::f() const;
++
++template <>
++void Y<bool>::f() const
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,41 @@
++#include <cstddef>
++
++template <class T>
++struct S {
++ void *operator new (size_t);
++ void *operator new (size_t, int);
++ void operator delete (void*);
++};
++
++static void* s[2];
++
++template <>
++void* S<int>::operator new (size_t b)
++{
++ s[0] = ::operator new(b);
++ return s[0];
++}
++
++template <>
++void* S<int>::operator new (size_t b, int)
++{
++ s[1] = ::operator new(b);
++ return s[1];
++}
++
++template <>
++void S<int>::operator delete (void*)
++{
++}
++
++int main()
++{
++ S<int>* s1 = new S<int>;
++ S<int>* s2 = new(3) S<int>;
++
++ if (s1 != s[0] || s2 != s[1])
++ return 1;
++
++ delete s1;
++ delete s2;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,2 @@
++template <> struct A {}; // ERROR - not a specialization
++template <> void f (); // ERROR - not a specialization
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++extern "C" void abort();
++
++class X
++{
++ public:
++ virtual int f() const = 0;
++};
++
++template <class T>
++class Y: public X
++{
++ public:
++ virtual int f() const;
++};
++
++template <class T>
++int Y<T>::f() const
++{
++ abort();
++ return 0;
++}
++
++template <>
++int Y<bool>::f() const;
++
++template <>
++int Y<bool>::f() const
++{
++ return 0;
++}
++
++int main()
++{
++ Y<bool> yb;
++
++ yb.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++template <class T>
++struct S {};
++
++template <>
++struct S<int>
++{
++ void f();
++ void g();
++};
++
++void S<int>::f() {}
++
++template <>
++void S<int>::g() {} // ERROR - does not match any template declaration
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++template <class T>
++void f(T t1, T t2);
++
++template <>
++void f(int i, int j);
++
++template <class T>
++void g(T t1, T t2) {}
++
++template void g(int i, int j);
++
++void h()
++{
++ f(3, 'c'); // ERROR - no matching function
++ g(3, 'c'); // ERROR - no matching function
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't link:
++
++struct S1
++{
++ template <class T>
++ void f(T t1, T t2);
++};
++
++
++template <>
++void S1::f(int i1, int i2);
++
++template <class U>
++struct S2
++{
++ template <class T>
++ void f(T t1, T t2);
++};
++
++template <>
++template <>
++void S2<char>::f(int i1, int i2);
++
++void h()
++{
++ S1 s1;
++ s1.f(3, 'c'); // ERROR - no matching function
++
++ S2<char> s2;
++ s2.f(3, 'c'); // ERROR - no matching function
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++extern "C" void abort();
++
++template <class T>
++void f(T t1, T t2);
++
++template <>
++void f(int i, int j)
++{
++ abort();
++}
++
++void f(short s, char c)
++{
++}
++
++int main()
++{
++ f(3, 'c');
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++extern "C" void abort();
++
++template <void* P>
++void f(int j);
++
++template <int I>
++void f(int j);
++
++
++template <void* P>
++void f(int j)
++{
++ abort();
++}
++
++
++template <int I>
++void f(int j)
++{
++}
++
++
++int main()
++{
++ f<3>(7);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/spec9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/spec9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++extern "C" void abort();
++
++template <class T>
++inline int f(T t)
++{
++ return 0;
++}
++
++int main()
++{
++ if (!f(3))
++ abort();
++}
++
++template <>
++int f(int i)
++{ // ERROR - specialization of f<int>(int) after instantiation
++ return 1;
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++extern "C" void abort();
++
++template <class T>
++class A
++{
++ public:
++ static int foo(int);
++};
++
++template <>
++int A<int>::foo(int i)
++{
++ return i;
++}
++
++
++int main()
++{
++ if (A<int>::foo(22) != 22)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++template <class A>
++class TEST
++{
++public:
++ TEST (A) {}
++};
++
++template <class A>
++class TEST2
++{
++ static A i;
++};
++
++template <class A>
++A TEST2 <A>::i (0);
++
++TEST2 <TEST <int> > a;
++
++template class TEST2 <TEST <int> >;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// On targets that don't support weak symbols, we require an explicit
++// instantiation of arr.
++// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux*
++
++template<class T>
++struct A {
++ static T arr[5];
++};
++
++template <class T>
++T A<T>::arr[5] = { 0, 1, 2, 3, 4 };
++
++int main ()
++{
++ return A<int>::arr[0];
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class T>
++struct S
++{
++ static const T t = 3;
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class T>
++struct S
++{
++ static const T t = 3; // ERROR - initializing non-integral type
++};
++
++double d = S<double>::t;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't run:
++
++// Simplified from testcase by Erez Louidor Lior <s3824888@techst02.technion.ac.il>
++
++template <class T> struct A {
++ static const int l[1];
++};
++
++template<class T>
++const int A<T>::l[1] = {1};
++
++int i = A<int>::l[0];
++
++int main(){}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++struct S {
++ S() {}
++
++ static S s;
++};
++
++template <class T>
++S<T> S<T>::s;
++
++S<int> si;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++int i;
++
++template <class T>
++struct S {
++ S() { ++i; }
++
++ virtual void g() {}
++ virtual void f();
++
++ static S s;
++};
++
++template <class T>
++void S<T>::f() {
++ s.f();
++}
++
++S<int> si;
++
++template <class T>
++S<T> S<T>::s;
++
++int main ()
++{
++ si.g();
++ if (i != 2)
++ return 1;
++ else
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static_cast.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static_cast.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/static_cast.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/static_cast.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++template <class InputIterator, class BinaryOperation>
++void accumulate(InputIterator first,
++ BinaryOperation binary_op) {
++}
++
++
++template<class R> int p( int val, R& r )
++{
++ return val + r;
++}
++
++template<class R> void f(R)
++{
++ accumulate(0, static_cast<int (*)(int, R&)>(p) );
++}
++
++int main()
++{
++ f(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++extern "C" void abort();
++
++int i;
++
++void g()
++{
++ i++;
++}
++
++template <class T>
++void f(T)
++{
++ __extension__ ({g();});
++}
++
++int main()
++{
++ f(3.0);
++ if (i != 1)
++ abort();
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/stmtexpr.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++extern "C" void abort();
++
++template <class T>
++T f(T)
++{
++ T t = __extension__ ({ T j = 4; j + 3; });
++ return t;
++}
++
++
++int main()
++{
++ if (f(3) != 7)
++ abort();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t00.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t00.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t00.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t00.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++
++int f1 () {
++ struct A { A() { a = 2; } int a; } ;
++ A aa;
++ return aa.a;
++}
++int f2 () {
++ struct A { A() { a = 2; } int a; } ;
++ A ab;
++ return ab.a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t01.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t01.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t01.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t01.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++template <class A> class B { public: A a; };
++static B<int> b_int;
++
++int foo () { return b_int.a; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t03.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t03.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t03.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t03.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++template <class A> class B { public: A a; };
++static B<int> b_int;
++static B<char> b_char;
++
++int foo () { return b_int.a + b_char.a; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t04.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t04.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t04.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t04.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class A> class B { public: A a; };
++static B<int> b_int;
++static B<char> b_char;
++static B<unsigned char> b_uchar;
++
++int foo () { return b_int.a + b_char.a + b_uchar.a; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t05.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t05.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t05.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t05.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class A> class B {
++ A a;
++ public:
++ B(A&aa); // ERROR - near match
++ ~B();
++}; // ERROR - candidates
++static B<int> b_int (3); // ERROR - no matching function
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t06.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t06.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t06.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t06.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++typedef int I;
++int i;
++
++template <class A> class B {
++ A a;
++ public:
++ B(A&aa);
++ B();
++ ~B();
++};
++
++template <class B> class C { public: B b; };
++
++template <class I, class i> class D : I { public: i ii; };
++
++typedef B<int> b_int;
++typedef C<int> c_int;
++typedef C<b_int> c_b_int2;
++
++c_b_int2 x2;
++int z;
++D<c_b_int2,b_int> d;
++int q;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t07.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t07.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t07.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t07.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class A> class B {
++ A a;
++ public:
++ const A& value () { return a; }
++};
++static B<int> b_int;
++
++int foo () { return b_int.value(); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t08.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t08.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t08.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t08.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class A> class B {
++ A a;
++ public:
++ B ();
++ ~B ();
++};
++B<int> b_int;
++B<int> *bp = &b_int;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t09.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t09.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t09.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t09.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++struct bs_1 {
++ typedef int (*pfi) (void);
++};
++static bs_1::pfi fp;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++template <class A> class B { public: A a; B(); };
++class B<char> { public: int y[10]; };
++static B<int> bi;
++static B<char> bc;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t11a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t11a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t11a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t11a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class A>
++class B {
++public:
++ A a;
++ B() { a = 2; }
++};
++static B<int> bi;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <class A>
++class B {
++public:
++ A a;
++ B() { x = 2; } // ERROR - no x
++};
++static B<int> bi;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t12a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t12a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t12a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t12a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++int a (void * x) { return 1; }
++typedef void *T;
++int b (T x) { return 2; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++class OBJECT {int a;};
++class STDFILE {int b;};
++
++template <class T> class VECTOR {
++ T *v;
++ int sz;
++public:
++ T& elem(int i) { return v[i]; }
++ T& operator[] (int i);
++};
++
++template <class T>
++class PVECTOR : VECTOR<void *> {
++public:
++ T*& elem(int i)
++ {return (T*&) VECTOR<void *>::elem(i); }
++ T*& operator[] (int i)
++ {return (T*&) VECTOR<void *>::operator[](i);}
++};
++
++PVECTOR<OBJECT *> *foo;
++
++PVECTOR<STDFILE *> *goo;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++template <class A> class B {
++public:
++ B();
++ A a;
++ int i;
++};
++
++void *f () {
++ return new B<char *>;
++}
++
++struct foo { int i[10]; };
++extern B<foo> *foop;
++
++void f2 () {
++ foop = new B<foo>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t14a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t14a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t14a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t14a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++class OBJECT
++{
++ int a;
++};
++
++
++
++template <class T> class TESTA
++{
++public:
++ TESTA();
++ T foo(int i) {T t = 0; return t;}
++};
++
++
++
++void foo()
++{
++ TESTA<OBJECT *> *foo;
++
++ foo = new TESTA<OBJECT *>;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Build don't link:
++
++class OBJECT
++{
++ int a;
++};
++
++
++
++template <class T> class TESTA
++{
++public:
++ TESTA();
++ T foo(int i) {T t = 0; return t}; // ERROR - no semi
++};
++
++
++
++void foo()
++{
++ TESTA<OBJECT *> *foo;
++
++ foo = new TESTA<OBJECT *>;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++extern "C" void printf (char *, ...);
++template <class T> T max (const T&x, const T&y)
++{
++ return (x>y)?x:y;
++}
++int min (const float&, const float&);
++int min (const int& i1, const int& i2) {
++ return (i1 < i2) ? i1 : i2;
++}
++
++class complex
++{
++ double re, im;
++ public:
++ complex (double r, double i=0) { re = r; im = i; }
++ friend int operator > (const complex& x, const complex &y) { return 0; }
++ void print () { }
++};
++
++int main ()
++{
++ complex c1 (1, 0);
++ complex c2 (2, 0);
++
++ int j = max (1, 37);
++ complex m1 = max (c1, c2);
++ m1.print ();
++ printf ("j=%d\n", j);
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++
++extern void byebye ();
++template <class T1, class T2>
++struct A
++{
++ T1 t1;
++ T2 t2;
++ A() { t1 = 0; t2 = 0; }
++ ~A() { byebye(); }
++};
++
++template <class Q>
++int f (A<int, Q> a) {
++ return a.t1;
++}
++
++extern A<int,double*> aa;
++int foop () { return f(aa); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template <class X> class A {
++public:
++ X aaa;
++ int foo();
++};
++
++template <class X> A<X> f(X);
++
++void frep() {
++ int x;
++ x = f(6.4).foo();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class X> class A { public: int a; X x; };
++template <class X> X f (A<X> a) { return a.x; }
++
++extern A<double> a_dbl;
++
++double fred () { return f (a_dbl); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++class AA { public: static int xx; };
++template <class X> class A {
++ public:
++ static int x;
++};
++
++int AA::xx;
++template <class Y> int A<Y>::x; // gets bogus error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template <class T> class temp1
++{
++public:
++ T tvar;
++};
++
++
++template <class T2> class temp2
++{
++public :
++ temp1<T2> t1var;
++};
++
++
++temp1<int> temp1var;
++temp2<int> temp2var;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class X> int f (X x, X y) { return 23; }
++
++int foo () {
++ return f (7); // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class X> int f (X x, X y) { return 23; }
++template <class X> int f (X x, int j = 3) { return 29; }
++
++int foo () {
++ return f (7); // gets bogus error -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class X> int f (X x, unsigned int j = 3) { return 29; }
++template <class X> int f (X x, X y) { return 23; }
++
++int foo () {
++ return f (7.0, 9.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class X> int f (X x, int * j) { return 29; }
++template <class X> int f (X x, ...) { return 23; }
++
++int foo () {
++ return f (7.0, 9.0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++template <class X> class B;
++template <class X> int f (B<X> b) { return 37; }
++template <class Y> class B { public: Y y; B() { y = 1; } };
++
++int foo () {
++ B<double> bd;
++ return f(bd);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class X, int n> X f (auto X (*x)[n]) { return (*x)[n/2]; }
++extern int i[30];
++extern double d[99];
++
++int foo (int ii) { return f (&i); } // causes abort
++double foo (double dd) { return f (&d); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class X, int n> X f (auto X (*x)[n]) { return (*x)[n/2]; }
++extern int i[30], i2[33];
++extern double d[99];
++
++int foo (int ii) { return f (&i) + f(&i2); } // causes abort
++double foo (double dd) { return f (&d); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++struct B { int foo (); };
++int B::foo() { return 37; }
++
++template <class A> struct X {
++ void f();
++};
++
++template <class A> void X<A>::f ()
++{}
++
++X<int> x;
++
++void xyzzy () {
++ x.f ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t32a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t32a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t32a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t32a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++
++struct A {
++ int x;
++ int y ();
++ int z ();
++ int foo (int j);
++};
++
++int A::foo (int q) { return q + (this->*(x ? &A::y : &A::z)) (); } // gets bogus error
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template <class X> struct A {
++ int fooo (int x);
++ int x;
++ inline int y () { return 3; }
++ inline int z () { return 5; }
++};
++
++template <class Y> int A<Y>::fooo (int t) { return (this->*(x?&A<Y>::y : &A<Y>::z))() + t; }; // gets bogus error
++
++A<int> ai;
++
++int frop () { return ai.fooo (100); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t34a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t34a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t34a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t34a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++struct A {
++ int operator[] (int);
++};
++
++//int A::operator[] (int);
++
++int A::operator[] (int j)
++{
++ return j * j;
++}
++
++extern A a;
++
++int q () { return a[99]; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++template <class X> struct A { int operator [] (int); };
++template <class Y> int A<Y>::operator[] (int j) { return j * j; }
++
++extern A<void **> avpp;
++
++int q () { return avpp[99]; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t35a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t35a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t35a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t35a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++
++template <class X> struct A { };
++struct A<int> { int foo (); };
++int A<int>::foo () { return 37; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Special g++ Options:
++template<class X> struct A {
++ A ();
++ ~A();
++ int x, y, z;
++};
++
++template <class Y> inline A<Y>::A () { x = y = 3; z = 99; }
++template <class Z> inline A<Z>::~A() { y = 9999; }
++
++A<int> ai;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++
++void * foo () {
++ typedef int * ip;
++ return new ip;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t37a.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t37a.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t37a.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t37a.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++class A {
++public:
++ A(int);
++ A(float);
++ ~A();
++};
++
++A::A(float f) {
++}
++
++A::A(int i) {
++}
++
++A::~A() {
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++class A {
++public:
++ A(int); // ERROR - referenced below
++ A(float); // ERROR - referenced below
++ ~A();
++}; // ERROR - synthesized copy ctor
++
++A::A() { // ERROR -
++}
++
++A::A(int) {
++}
++
++A::~A() {
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++// Special g++ Options:
++extern "C" int printf (const char *, ...);
++
++template<class X> struct A {
++ A (int, char);
++ ~A ();
++ A (X *, float);
++};
++
++template<class Y> inline A<Y>::A (int i, char c) {
++ printf ("%d, %d\n", i, c);
++}
++template<class Z> A<Z>::~A() {}
++template<class W> A<W>::A (W * d, float f) {
++ printf ("%x, %e\n", d, f);
++}
++
++A<void> avoid (9, 0);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++extern "C" int printf (const char *, ...);
++
++template <class T>
++struct frob {
++ T *ptr;
++ void print ();
++ frob (T* init) { ptr = init; }
++};
++
++template <class T>
++void frob<T>::print () {
++ printf ("this = %08x\n", this);
++ printf (" ptr = %08x\n", ptr);
++ printf (" values = %x %x %x ...\n", ptr[0], ptr[1], ptr[2]);
++}
++
++ static int x[10];
++ frob<char> fc ("hello");
++ frob<int> fi (x);
++
++int main () {
++ fc.print ();
++ fi.print ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++struct A {
++ struct B {
++ B (int);
++ };
++ static int foop (B);
++ static int splat () {
++ return foop (B (1));
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++
++struct A {
++ struct B {
++ B (int);
++ };
++ static int foop (B);
++ int splat () {
++ return foop (B (1));
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/t42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/t42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++extern "C" void abort ();
++
++struct A {
++ struct stat {
++ int x;
++ stat (int j) { abort (); }
++ };
++ static int stat (double d) { return 0; } // gets bogus error - cfront takes it
++ static int zap () {
++ stat (0);
++ return stat (1); // gets bogus error - this should work
++ }
++};
++
++int main () {
++ return A::zap ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/test4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/test4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/test4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/test4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++
++class B { };
++template <class x, int b> class X : public B { int y[b]; };
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/test5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/test5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/test5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/test5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++// Build don't link:
++
++template <char *a, const char *b, char *const c> class A{int x;};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++
++struct bs_1
++{
++ typedef int (*p_user_hashf)(int);
++};
++
++bs_1::p_user_hashf i_user_hashf;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++extern "C" void printf (char *, ...);
++template <class T> T max (const T&x, const T&y)
++{
++ return (x>y)?x:y;
++}
++
++class complex
++{
++ double re, im;
++ public:
++ complex (double r, double i=0) { re = r; im = i; }
++ friend int operator > (const complex& x, const complex &y);
++ void print () { printf ("re = %g; im = %g;\n", re, im); }
++};
++int operator >(const complex& x, const complex &y)
++{
++ double c1 = x.re * x.re + x.im * x.im;
++ double c2 = y.re * y.re + y.im * y.im;
++ return c1 > c2;
++}
++
++int main ()
++{
++ complex c1 (1, 0);
++ complex c2 (2, 0);
++ complex c3 (2, 3);
++ complex c4 (2, 1);
++
++ complex m1 = max (c1, c2);
++ complex m2 = max (c3, c4);
++ m1.print ();
++ m2.print ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/to2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/to2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/to2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/to2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++template <class A> class B { public: A a; };
++static B<int> b_int;
++static B<int> b_int2;
++
++int foo () { return b_int.a + b_int2.a; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tt2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tt2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tt2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tt2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++int f1 () {
++ struct A {
++ A() : b (2) { }
++ int fred () { return b.hi_mom; }
++ struct B {
++ int hi_mom;
++ B (int a) { hi_mom = a; }
++ };
++ B b;
++ };
++ A aa;
++ return aa.fred();
++}
++
++int f2 () {
++ struct A {
++ ~A() { a = 3; }
++ int a;
++ int fred () { return a + 1; }
++ };
++
++ A ab;
++ ab.a = 12;
++ return ab.fred();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tt.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tt.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/tt.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/tt.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++
++#define DEF_A struct A { A() { a = 2; } int a; }
++
++#if 1
++int f1 () {
++ DEF_A;
++ A aa;
++ return aa.a;
++}
++
++int f2 () {
++ DEF_A;
++ A ab;
++ return ab.a;
++}
++/* results:
++tt.cc: In function int f2 ():
++tt.cc:9: conflicting types for `A::A ()'
++tt.cc:3: previous declaration of `A::A ()'
++/u2/projects/gcc2/src/cplus-cvt.c:1149: failed assertion `distance >= 0'
++gcc2: Program cc1plus got fatal signal 6.
++*/
++#else
++
++struct B1 { DEF_A; A aa; };
++
++struct B2 { DEF_A; A aa; };
++/* results:
++/u2/projects/gcc2/src/cplus-decl.c:5469: failed assertion `return_type == return_ctor'
++gcc2: Program cc1plus got fatal signal 6.
++*/
++#endif
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D d; // ERROR - D is a template
++ public:
++ int f();
++};
++
++template<template<class> class D,class E> int C<D,E>::f()
++{
++ return d.f(); // ERROR - d not properly declared
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { return d.f(); }
++};
++
++int main()
++{
++ C<D,int> c;
++ C<D,char> d;
++ c.f();
++ d.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class E,class D> class C
++{
++ E<D> d;
++ public:
++ int f();
++};
++
++template<template<class> class E,class D> int C<E,D>::f()
++{
++ return d.f();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f();
++};
++
++template<template<class> class D,class E> int C<D,E>::f()
++{
++ return d.f();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++template<class T> class D
++{
++ T a;
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<class E,template<class> class DD = D> class C
++{
++ DD<E> d;
++ public:
++ int f();
++};
++
++template<class E,template<class> class DD> int C<E,DD>::f()
++{
++ DD<E> d2;
++ return d2.f();
++}
++
++int main()
++{
++ C<int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f();
++};
++
++template<template<class> class D,class E> int C<D,E>::f()
++{
++ D<E> d2;
++ return d2.f();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++template<class T> class D
++{
++ T a;
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f();
++};
++
++template<template<class> class D,class E> int C<D,E>::f()
++{
++ D<E> d2;
++ return d2.f();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f();
++ int g() { return 0; }
++};
++
++template<template<class> class D,class E> int C<D,E>::f()
++{
++ C<D,E> d2;
++ return d2.g();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f();
++ int g() { return 0; }
++};
++
++template<template<class> class D,class E> int C<D,E>::f()
++{
++ C<D,char> d2;
++ return d2.g();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++#include <vector>
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int size() { return d.size(); }
++};
++
++template<template<class> class D,class E> int size(D<E> &d1)
++{
++ d1.size();
++ C<D,E> d2;
++ d2.size();
++ return 0;
++}
++
++int main()
++{
++ std::vector<int> c1;
++ std::vector<char> c2;
++ size(c1);
++ size(c2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template<class E> class D
++{
++};
++
++template<template<class> class D,class E> class C
++{
++};
++
++int main()
++{
++ C<int,D> c; // ERROR - args not match
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C : D<E>
++{
++ public:
++ int g();
++};
++
++template<template<class> class D,class E> int C<D,E>::g()
++{
++ return f();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C : D<E>
++{
++ public:
++ int g();
++};
++
++template<template<class> class D,class E> int C<D,E>::g()
++{
++ return f();
++}
++
++class E : C<D,int>
++{
++ public:
++ int h() { return g(); }
++};
++
++int main()
++{
++ E c;
++ c.h();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class DD,class EE> class C : DD<EE>
++{
++ public:
++ int f();
++};
++
++template<template<class> class DD,class EE> int C<DD,EE>::f()
++{
++ return DD<EE>::f();
++}
++
++class E : C<D,int>
++{
++ public:
++ int f() { return C<D,int>::f(); }
++};
++
++int main()
++{
++ E c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class E,class D> class C : E<D>
++{
++ public:
++ int f();
++};
++
++template<template<class> class E,class D> int C<E,D>::f()
++{
++ return E<D>::f();
++}
++
++class E : C<D,int>
++{
++ public:
++ int f() { return C<D,int>::f(); }
++};
++
++int main()
++{
++ E c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> int f()
++{
++ D<E> d;
++ return d.f();
++};
++
++int main()
++{
++ f<D,int>();
++ f<D,char>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp25.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp25.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp25.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp25.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<class> class D,class E> int f(D<E> &d1)
++{
++ d1.f();
++ C<D,E> d2;
++ d2.f();
++ return 0;
++}
++
++int main()
++{
++ D<int> c1;
++ D<char> c2;
++ f(c1);
++ f(c2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++template<class T, class U = int> class D
++{
++ public:
++ int f();
++};
++
++template<class T, class U> int D<T,U>::f()
++{
++ return sizeof(T)+sizeof(U);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<class> class D,class E> int f(D<E> &d1)
++{
++ d1.f();
++ C<D,E> d2;
++ d2.f();
++ return 0;
++}
++
++int main()
++{
++ D<int> c1;
++ D<char> c2;
++ f(c1);
++ f(c2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++template<class T> class D
++{
++ public:
++ int f() const;
++};
++
++template<class T> int D<T>::f() const
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() const { return d.f(); }
++};
++
++template<template<class> class D,class E> int f(const D<E> &d1)
++{
++ d1.f();
++ C<D,E> d2;
++ d2.f();
++ return 0;
++}
++
++int main()
++{
++ D<const int> c1;
++ D<char> c2;
++ const D<char> c3(c2);
++ f(c1);
++ f(c2);
++ f(c3);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<class> class D,class E> int f(D<E> &d1)
++{
++ d1.f();
++ C<D,E> d2;
++ d2.f();
++ return 0;
++}
++
++template<> int f<>(D<char> &d1)
++{
++ d1.f();
++ return 0;
++}
++
++int main()
++{
++ D<int> c1;
++ D<char> c2;
++ f(c1);
++ f(c2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++extern "C" void abort();
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { abort(); return 0; }
++};
++
++template<class E> class C<D,E>
++{
++ D<E> d;
++ public:
++ int f() { return d.f(); }
++};
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template<class E> class D
++{
++};
++
++template<template<class> class D,int> class C
++{
++};
++
++int main()
++{
++ C<1,D> c; // ERROR - args not match
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++extern "C" void abort();
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { abort(); return 0; }
++};
++
++template<class E> class C<D,E>
++{
++ D<E> d;
++ public:
++ int f();
++};
++
++template<class E> int C<D,E>::f()
++{
++ return d.f();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++extern "C" void abort();
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { abort(); return 0; }
++};
++
++template<template <class> class F> class C<F,int>
++{
++ F<int> d;
++ public:
++ int f() { return d.f(); }
++};
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++extern "C" void abort();
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { abort(); return 0; }
++};
++
++template<template <class> class F> class C<F,int>
++{
++ F<int> d;
++ public:
++ int f();
++};
++
++template<template<class>class F> int C<F,int>::f()
++{
++ return d.f();
++}
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ template<template<class> class F> int f(F<int>);
++};
++
++template<template<class> class D,class E>
++template<template<class> class F> int C<D,E>::f(F<int>)
++{
++ F<E> d2;
++ return d2.f();
++}
++
++int main()
++{
++ C<D,int> c;
++ D<int> d;
++ c.f(d);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ return sizeof(T);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f();
++};
++
++template<template<class> class D,class E> int C<D,E>::f()
++{
++ D<E> d2;
++ return d2.f();
++}
++
++template class C<D,int>;
++
++int main()
++{
++ C<D,int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++template<int T, class U = int> class D
++{
++ public:
++ int f();
++};
++
++template<int T, class U> int D<T,U>::f()
++{
++ return T+sizeof(U);
++}
++
++template<template<int> class D,class E> class C
++{
++ D<1> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<int> class D> int f(D<2> &d1)
++{
++ d1.f();
++ return 0;
++}
++
++template<template<int> class D> int f(D<1> &d1)
++{
++ d1.f();
++ return 0;
++}
++
++int main()
++{
++ D<1> c1;
++ f(c1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++template<int T, class U = int> class D
++{
++ public:
++ int f();
++};
++
++template<int T, class U> int D<T,U>::f()
++{
++ return T+sizeof(U);
++}
++
++template<template<int> class D,class E> class C
++{
++ D<1> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<int> class D> int f(D<1> &d1)
++{
++ d1.f();
++ return 0;
++}
++
++int main()
++{
++ D<1> c1;
++ f(c1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++template<int T, class U = int> class D
++{
++ public:
++ int f();
++};
++
++template<int T, class U> int D<T,U>::f()
++{
++ return T+sizeof(U);
++}
++
++template<template<int> class D,class E> class C
++{
++ D<1> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<int> class D, int T> int f(D<T> &d1)
++{
++ d1.f();
++ return T;
++}
++
++int main()
++{
++ D<1> c1;
++ f(c1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++template<class T, class U = int> class D
++{
++ public:
++ int f();
++};
++
++template<class T, class U> int D<T,U>::f()
++{
++ return sizeof(T)+sizeof(U);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<class> class D> int f(D<int> &d1)
++{
++ d1.f();
++ return 0;
++}
++
++int main()
++{
++ D<int> c1;
++ f(c1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++template<class T, class U = T> class D
++{
++ public:
++ int f();
++};
++
++template<class T, class U> int D<T,U>::f()
++{
++ return sizeof(T)+sizeof(U);
++}
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++ public:
++ int f() { return d.f(); }
++};
++
++template<template<class> class D> int f(D<int> &d1)
++{
++ d1.f();
++ return 0;
++}
++
++int main()
++{
++ D<int> c1;
++ f(c1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++
++template<class E,class F> class D
++{
++};
++
++template<template<class> class D,class E> class C
++{
++};
++
++int main()
++{
++ C<D,int> c; // ERROR - param list not match// WARNING - sees it as not having a type
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp40.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp40.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp40.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp40.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++#include <vector>
++
++template<class E,template<class> class DD = std::vector> class C
++{
++ DD<E> d;
++ public:
++ int f();
++};
++
++template<class E,template<class> class DD> int C<E,DD>::f()
++{
++ DD<E> d2;
++ return d2.size();
++}
++
++int main()
++{
++ C<int> c;
++ c.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++template<template<class> class D,class E> class C
++{
++ public:
++ int g() { return 1; }
++};
++
++template<class T> class D
++{
++ public:
++ int f();
++};
++
++template<class T> int D<T>::f()
++{
++ C<D,D> c;
++ return c.g();
++}
++
++int main()
++{
++ D<char> d;
++ d.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp42.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp42.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp42.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp42.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++template <class T, template <class T> class C>
++struct X
++{};
++
++template <class T>
++struct Y
++{};
++
++template <class T>
++struct Z
++{};
++
++template <class T>
++struct X<T,Y>
++{};
++
++int main()
++{
++ X<int,Y> a;
++ X<int,Z> b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp43.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp43.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp43.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp43.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++
++template < class T, template <class> class E1, template <class> class E2 >
++struct Add {
++ Add(const E1<T>& e1, const E2<T>& e2) {}
++};
++
++
++template < class T, template <class> class E1, template <class> class E2 >
++struct Mul {
++ Mul(const E1<T>& e1, const E2<T>& e2) {}
++};
++
++
++template < class T >
++struct Lit {
++ Lit(const T& t) {}
++};
++
++
++template < class T >
++struct Id {
++ Add < T, Id, Lit > operator+(const T& t) const {
++ return Add < T, Id, Lit >(*this, Lit<T>(t));
++ }
++
++ Mul < T, Id, Lit > operator*(const T& t) const {
++ return Mul < T, Id, Lit >(*this, Lit<T>(t));
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp44.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp44.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp44.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp44.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++
++template < class T, template < class > class E1, template < class > class E2 >
++class Add {
++public:
++ Add(const E1<T>& e1, const E2<T>& e2) {}
++};
++
++template < class T >
++struct Id {
++ template < template < class > class E >
++ Add < T, Id, E > operator+(const E<T>& e) const {
++ return Add < T, Id, E >(*this, e);
++ }
++};
++
++template struct Id<double>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp45.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp45.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp45.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp45.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++template<class M, class T> struct temp2;
++template<template<class> class M, class T> struct temp2<M<T>, T> {};
++
++template<class M> struct temp1;
++template<template<class> class M, class T> struct temp1<M<T> > {};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp46.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp46.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp46.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp46.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,4 @@
++// Build don't link:
++
++template <template<class> class TT> void f() {}
++template <template<class,class> class TT> void f() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp47.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp47.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp47.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp47.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++template <template<class,class> class TT, class T> void f(T)
++{
++}
++
++template <template<class> class TT, class T> void f(T)
++{
++}
++
++template <class T> class C {};
++template <class T,class U> class D {};
++
++int main()
++{
++ f<C>(1);
++ f<D>(1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp48.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp48.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp48.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp48.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++template <template<int> class TT, class T> void f(T)
++{
++}
++
++template <template<class> class TT, class T> void f(T)
++{
++}
++
++template <class T> class C {};
++template <int> class D {};
++
++int main()
++{
++ f<C>(1);
++ f<D>(1);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp49.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp49.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp49.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp49.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Build don't link:
++
++template <int i> class C {};
++template <template <long> class TT> class D {};
++
++int main()
++{
++ D<C> d; // ERROR - args not match
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template<class E> class D
++{
++};
++
++template<template<class> class D,class E> class C
++{
++ D<1> d; // ERROR - arg not match
++};
++
++int main()
++{
++ C<D,int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp50.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp50.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp50.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp50.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++template <class T, template <T> class TT> class C {};
++template <int> class D {};
++
++int main()
++{
++ C<int,D> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp51.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp51.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp51.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp51.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++template<class E, int i, class F, class G=int, int j=i, class H=E> class D
++{
++};
++
++template<template<class,int,class,class> class D,class E> class C
++{
++ D<E,2,char,bool> d;
++};
++
++int main()
++{
++ C<D,int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp52.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp52.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp52.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp52.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++template<class A,class B> class mymap {};
++
++template<class Key,
++ class Value,
++ template<class, class > class MapT>
++class base
++{
++
++};
++
++// specialization
++template<class Key, class Value>
++class base<Key, Value, mymap<int, int > >
++{ // ERROR - type/value mismatch
++
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp53.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp53.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp53.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp53.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// Build don't link:
++
++// Submitted by Erez Louidor Lior <s3824888@techst02.technion.ac.il>
++
++template <typename> class H;
++template <typename Target, typename Source>
++H<Target> foo(const H<Source>&);
++
++template <typename Type>
++class H{
++
++#ifdef OK
++public:
++#endif
++ template<template<class, class> class Caster, typename Source>
++ static H<Type> cast(const H<Source>& s);
++
++#ifndef OK
++ template <typename Target, typename Source>
++ friend H<Target> foo(const H<Source>&);
++#endif
++
++};
++
++template <class, class> class caster;
++
++template <typename Target, typename Source>
++H<Target> foo(const H<Source>& s){
++ return H<Target>::template cast<caster, Source>(s);
++}
++
++int main(){
++ H<int> i;
++ foo<const int>(i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp54.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp54.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp54.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp54.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++// Reported by Bruce Eckel <Bruce@EckelObjects.com>
++
++// [temp.deduct.type]
++// Make sure we treat <T> in the construct TT<T> as any type containing T.
++
++template <class T> class C
++{
++};
++
++template <class T, template <class> class TT> void f (TT<T *> &t)
++{
++}
++
++int main ()
++{
++ C<char *> c;
++ f(c);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp55.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp55.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp55.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp55.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++
++// Testing overloading of function argument involving template template
++// parameters
++
++// Reported by Thomus Kunert <kunert@physik.tu-dresden.de>
++
++template<class A>
++class H{};
++
++template <class T>
++void f( const T& ){} // #1
++
++template< template<class, class> class X,
++ class A, class B>
++void f( const X<A,B> & x ) // #2
++{}
++
++int main()
++{
++ H<int> h;
++ f(h); // #3
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template<int> class D
++{
++};
++
++template<template<int> class D,class E> class C
++{
++ D<int> d; // ERROR - arg not match
++};
++
++int main()
++{
++ C<D,int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++template<int> class F
++{
++};
++
++template<template<int> class D,class E> class C
++{
++ D<1> d;
++};
++
++int main()
++{
++ C<F,int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++
++template<class E> class D
++{
++};
++
++template<template<class> class D,class E> class C // ERROR - ref below
++{
++ D<int,int> d; // ERROR - arg not match
++};
++
++int main()
++{
++ C<D,int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++template<class E> class DD
++{
++};
++
++template<int> class D
++{
++};
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++};
++
++int main()
++{
++ C<DD,int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/ttp9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/ttp9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++template<class E,class F=int> class D
++{
++};
++
++template<template<class> class D,class E> class C
++{
++ D<E> d;
++};
++
++int main()
++{
++ C<D,int> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Testcase for handling of typedef wierdness.
++// Build don't link:
++
++template <class T>
++struct A
++{
++ typedef enum
++ {
++ foo
++ } B;
++
++ A (B b);
++};
++
++template <class T>
++A<T>::A (B b)
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++typedef const int cint;
++
++template<class T>
++class A
++{
++public:
++ T f(cint i);
++};
++
++template <class T>
++T A<T>::f(cint i)
++{
++}
++
++int main()
++{
++ A<int> a;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++
++template <class T>
++void f(T, T)
++{
++}
++
++struct A {
++ typedef enum {
++ VAL1
++ } result_t;
++};
++
++struct B {
++ typedef enum {
++ VAL2
++ } result_t;
++};
++
++
++void g()
++{
++ f(A::VAL1, A::VAL1);
++ f(B::VAL2, B::VAL2);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typedef4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typedef4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++struct B1 {
++ typedef int X;
++};
++
++struct B2 {
++ typedef int X;
++};
++
++template <class T>
++struct D : public B1, public B2 {
++ typedef int X;
++};
++
++template struct D<int>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++
++struct S {
++ typedef int I;
++};
++
++void f(typename S::I); // ERROR - using typename outside of template
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class T, int I>
++struct S {
++ struct X {};
++};
++
++template <class T, class U, int I>
++S<T,I>::X f(T, U)
++{
++ S<T, I>::X();
++}
++
++template S<int, 3>::X f<int, double, 3>(int, double);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Special g++ Options:
++// execution test - XFAIL *-*-*
++// excess errors test - XFAIL *-*-*
++
++int i = 0;
++
++template <class T>
++struct S {
++ struct X {};
++};
++
++template <class T>
++void f(T)
++{
++ S<T>::X();
++}
++
++template <>
++struct S<int> {
++ static void X() { i = 1; }
++};
++
++int main()
++{
++ f(3);
++ if (i != 1)
++ return 1;
++ else
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Build don't link:
++// Special g++ Options:
++// excess errors test - XFAIL *-*-*
++
++template <class T>
++struct B
++{
++ typedef int I;
++};
++
++
++template <class T>
++struct D : public B<T>
++{
++ void f();
++};
++
++
++template <class T>
++void D<T>::f()
++{
++ I();
++}
++
++
++template <>
++struct B<int>
++{
++ void I();
++};
++
++
++int main()
++{
++ D<int> di;
++ di.f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class T>
++struct B {
++ typedef T X;
++};
++
++template <class T>
++struct S : public B<T>
++{
++ struct I {
++ void f(X x);
++ };
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class T, bool B>
++struct R {
++ struct X {};
++};
++
++template <class T, bool B = false>
++struct S : public R <T, B> {
++};
++
++template <class T> void f()
++{
++ S<T>::X();
++}
++
++template void f<int>();
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Build don't run:
++// Special g++ Options:
++
++struct B {
++ typedef int I;
++};
++
++template <class T>
++struct D1 : public B {
++};
++
++template <class T>
++struct D2 : public D1<T> {
++ I i;
++};
++
++template <>
++struct D1<int> {
++ typedef double I;
++};
++
++template <class T>
++void f(T);
++template <>
++void f(double) {}
++
++int main()
++{
++ D2<int> d2i;
++ f(d2i.i);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++
++template <class T>
++struct A
++{
++ typedef T A_Type;
++};
++
++
++template <class U>
++struct B : public A<U>
++{
++ typename B<U>::A_Type Func();
++};
++
++
++template <class U>
++typename B<U>::A_Type B<U>::Func()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Special g++ Options:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++void X();
++
++template <class T>
++struct J {
++ typedef T X;
++};
++
++template <class T>
++struct S {
++ typedef T X;
++
++ struct I : public J<X> {
++ static X* f();
++ };
++};
++
++S<int> si;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Special g++ Options:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++struct O {
++ typedef char X;
++};
++
++template <class T>
++struct S {
++ typedef double X;
++
++ template <class U>
++ struct I : public O<U> {
++ static X x; // WARNING - lookup finds S<T>::X
++ };
++};
++
++template <class T>
++template <class U>
++typename S<T>::X S<T>::I<U>::x;
++
++int main()
++{
++ return sizeof (S<int>::I<double>::x) == 1;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++template<class T>
++struct A {
++ typedef T T1;
++};
++
++template<class T>
++struct B {
++ typedef T T2;
++};
++
++template<class T>
++struct C {
++};
++
++template<class E>
++C<typename E::T2::T1>
++foo (E)
++{
++ return C<typename E::T2::T1>();
++}
++
++void test()
++{
++ foo(B<A<int> >());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++// Special g++ Options:
++
++template <class T>
++struct B {
++ typedef int I;
++};
++
++template <class T, class X = int>
++struct S : public B <T> {
++ struct I {
++ };
++
++ void f(int i = true) {}
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++// Special g++ Options:
++
++template <class T>
++struct S1 {
++ typedef T X;
++};
++
++template <class T>
++struct B {
++ typedef T I;
++};
++
++template <class T>
++struct S2 : public B<T> {
++ struct I {};
++
++ typedef typename S1<I>::X IX;
++
++ void f(IX);
++};
++
++template <class T>
++void S2<T>::f(IX) {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++// Origin: Mark Mitchell <mark@codesourcery.com>
++
++template <class T>
++struct S {
++ template <class U>
++ struct I {
++ typedef U X;
++
++ X f();
++ };
++};
++
++
++template <class T>
++template <class U>
++typename S<T>::I<U>::X S<T>::I<U>::f() {}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++
++class Base {
++public:
++ class Bar { public: virtual ~Bar() {}; };
++};
++
++class Derived : public Base {
++public:
++ class Bar : public Base::Bar {};
++};
++
++template <class T>
++struct XYZ : public T::Bar {
++ XYZ(): T::Bar() { }
++};
++
++void test() {
++ XYZ<Base> b;
++ XYZ<Derived> d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class T>
++struct A
++{
++ typedef T A_Type;
++};
++
++
++template <class U>
++struct B : public A<U>
++{
++ A_Type Func();
++};
++
++
++template <class U>
++B<U>::A_Type B<U>::Func()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class T>
++struct A
++{
++ typedef T A_Type;
++};
++
++
++template <class U>
++struct B : public A<U>
++{
++};
++
++
++template <class U>
++struct C : public B<U>
++{
++ A_Type Func();
++};
++
++
++template <class U>
++C<U>::A_Type C<U>::Func()
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// Special g++ Options:
++
++template <class T>
++struct A
++{
++ typedef T A_Type;
++};
++
++
++template <class U>
++struct B : public A<U>
++{
++};
++
++
++template <class U>
++struct C : public B<U>
++{
++ void Func(A_Type);
++};
++
++
++template <class U>
++void C<U>::Func(A_Type)
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// We don't try to make implicit typename handle this case.
++
++// Build don't link:
++// Special g++ Options:
++
++template <class T>
++struct A
++{
++ typedef T A_Type;
++};
++
++
++template <class U>
++struct B : public A<U>
++{
++ A_Type Func(); // ERROR - candidate
++};
++
++template <class U>
++A<U>::A_Type B<U>::Func()
++{ // ERROR - no match
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Test for implicit typename
++// Build don't link:
++// Special g++ Options:
++
++template <class T>
++struct A {
++protected:
++ typedef struct B { } B;
++};
++
++template <class T>
++struct C { };
++
++template <class T>
++struct D : public A <C <T> > {
++ void f ()
++ {
++ B* new_entries = (B *) 0;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++template < class T > class A
++{
++public:
++ typedef typename T::myT anotherT; // ERROR - undefined type
++
++ anotherT t; // ERROR - undefined type
++
++ A(anotherT _t) { // ERROR - undefined type
++ t=_t;
++ }
++
++ anotherT getT() {
++ return t;
++ }
++};
++
++class B : public A< B > // ERROR - forward declaration
++{
++public:
++ typedef int myT;
++};
++
++int main() {
++ B b;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/typename9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/typename9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Test to make sure that implicit typename doesn't break name binding rules.
++// Special g++ Options: -w
++
++typedef double A;
++template<class T> class B {
++ typedef char A;
++};
++template<class T> struct X : B<T> {
++ A a;
++};
++
++int main()
++{
++ X<char*> x;
++ return sizeof (x.a) != sizeof (double);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Tests non-unification of parms that don't use template parms.
++// Build don't link:
++
++enum kind {a, b};
++
++class C { public: C () {} };
++
++template<class P>
++void f (P c, kind k) {}
++
++template<class P>
++void f (P c, P d, kind k) {}
++
++template void f (C c, C c, kind k);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++
++template <class T>
++struct S
++{
++ typedef T S_Type;
++};
++
++
++template <class T>
++void foo(typename S<T>::S_Type)
++{
++}
++
++
++template <class T>
++void foo(T)
++{
++}
++
++
++struct S2 {};
++
++void bar()
++{
++ foo(S2()); // We can't unify with the first foo, so we get the second.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++
++template <class T1, class T2>
++struct ComputeBinaryType
++{
++};
++
++template<class T1>
++struct ComputeBinaryType<T1, double> {
++ void g();
++};
++
++template<class T1>
++struct ComputeBinaryType<T1&, double> {
++ void h();
++};
++
++void f()
++{
++ ComputeBinaryType<double, double> cb;
++ cb.g();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/unify4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/unify4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++template <class T> void f (T);
++
++void g ();
++void g (int);
++
++int
++main ()
++{
++ f (g); // ERROR - ambiguous unification
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/union1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/union1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/union1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/union1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++
++union Un {int i;};
++
++template<class T1, class T2> struct St1 {};
++template<class T> struct St1<Un,T> {};
++
++template<class T> struct St2 {};
++template<> struct St2<Un> {};
++
++template<class T1, class T2> struct St3 {};
++template<> struct St3<Un,int> {};
++
++void f() {
++ St1<int,int> s1;
++ St2<int> s2;
++ St3<int,int> s3;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/union2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/union2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/union2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/union2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++// Build don't link:
++// Origin: David Mazieres <dm@amsterdam.lcs.mit.edu>
++
++template<class T> struct vector_base {
++ typedef T elm_t;
++protected:
++ union {
++ double alignment_hack;
++ char defbuf_space[2 * sizeof (elm_t)];
++ };
++ elm_t *def_basep () { return reinterpret_cast<elm_t *> (defbuf_space); }
++};
++
++template<class T> struct vector : public vector_base<T> {
++ vector () { def_basep (); }
++};
++
++vector<int> iv;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/vaarg.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/vaarg.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/vaarg.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/vaarg.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++#include <stdarg.h>
++
++extern "C" void abort();
++
++template <class T>
++T* f(T t, ...)
++{
++ va_list ap;
++
++ va_start(ap, t);
++ T* r = va_arg(ap, T*);
++ va_end(ap);
++
++ return r;
++}
++
++
++struct S
++{
++};
++
++int main()
++{
++ S s;
++
++ if (f(s, &s) != &s)
++ abort();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/vbase1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/vbase1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/vbase1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/vbase1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,31 @@
++// Check that template classes handle inherited virtual bases
++// properly, initializing them before direct non-virtual bases.
++
++int aflag;
++
++struct A
++{
++ A() { aflag = 1; }
++};
++
++struct B : virtual public A
++{
++ B() { }
++};
++
++struct C
++{
++ C() { if (!aflag) exit (1); }
++};
++
++template<class Parent>
++struct D : public C, public Parent
++{
++ D() { }
++};
++
++int
++main ()
++{
++ D<B> c;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/virtual1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/virtual1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/virtual1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/virtual1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++ struct V { virtual ~V() {} };
++ template <class T> struct A : virtual V { };
++ template <class T> struct B {
++ virtual void f() { T foo; }
++ };
++ int main() { B< A<int> > bar; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/warn1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/warn1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.pt/warn1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.pt/warn1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++// Build don't link:
++// Special g++ Options: -Wunused
++
++template <class T>
++struct S
++{
++ struct R
++ {
++ R();
++ ~R();
++ };
++
++ void foo()
++ {
++ R r; // no warning
++ int i; // WARNING - unused
++ }
++
++ S();
++ ~S();
++};
++
++void f()
++{
++ S<int> si;
++ si.foo();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Here is a simple one. GCC correctly gives errors for this code when the
++// - -pedantic-errors option is used, whereas g++ doesn't.
++
++// Build don't link:
++
++int (*p1)[3];
++int (*p2)[5];
++
++void
++test ()
++{
++ p1 == p2; // ERROR - comparison.*
++ p1 > p2; // ERROR - comparison.*
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Another simple one. GCC corerctly gives errors for this code when the
++// - -pedantic-errors options is used. g++ doesn't.
++
++// Build don't link:
++
++void f (int i) { }
++
++void (*fp)(void);
++
++int i;
++
++void
++test ()
++{
++ i ? f : fp; // ERROR -
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,43 @@
++// Special g++ Options: -g
++// Internal compiler error on egcs 1.0.1 i586-pc-linux-gnulibc1.
++// From: Max Lawson <mlawson@drfmc.ceng.cea.fr>
++// Message-Id: <9803091022.AA07520@drfmc.ceng.cea.fr>
++
++
++typedef __SIZE_TYPE__ size_t;
++
++struct dummy { };
++
++struct arrrrrgh { };
++
++template<class Par,class Rand = arrrrrgh>
++struct whyyyyyyy { };
++
++template<class T, class S =dummy>
++struct grrrrrrrr { };
++
++template<class Par, class Par2 =Par, class Rand =arrrrrgh>
++class no_future
++{
++public:
++
++ template<class S>
++ no_future(const grrrrrrrr<whyyyyyyy<Par,Rand>*,S>& man ) { }
++
++ ~no_future( ) { }
++
++private:
++
++ no_future(const no_future&);
++ no_future& operator=(const no_future&);
++};
++
++int main( )
++{
++ grrrrrrrr<whyyyyyyy<double>*> man;
++
++ no_future<double> here(man);
++
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb101.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb101.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb101.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb101.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3886 @@
++// Special g++ Options: -fcheck-memory-usage
++// Build don't link:
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#pragma interface
++
++#define _IOSTREAM_H
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#define _STREAMBUF_H
++
++#pragma interface
++
++
++
++
++#define _IO_NEW_STREAMS
++
++extern "C" {
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#define _IO_STDIO_H
++
++
++
++#define _G_config_h
++#define _G_LIB_VERSION "0.67"
++#define _G_NAMES_HAVE_UNDERSCORE 1
++#define _G_VTABLE_LABEL_HAS_LENGTH 1
++#define _G_VTABLE_LABEL_PREFIX "__vt$"
++#define _G_HAVE_ST_BLKSIZE 1
++typedef long _G_clock_t;
++typedef short _G_dev_t;
++typedef long _G_fpos_t;
++typedef unsigned short _G_gid_t;
++typedef unsigned long _G_ino_t;
++typedef unsigned short _G_mode_t;
++typedef short _G_nlink_t;
++typedef long _G_off_t;
++typedef int _G_pid_t;
++
++
++
++typedef int _G_ptrdiff_t;
++typedef int _G_sigset_t;
++
++
++
++typedef unsigned int _G_size_t;
++typedef long _G_time_t;
++typedef unsigned short _G_uid_t;
++
++
++
++typedef __wchar_t _G_wchar_t;
++typedef int _G_ssize_t;
++typedef int _G_wint_t;
++typedef char * _G_va_list;
++#define _G_signal_return_type void
++#define _G_sprintf_return_type char*
++
++typedef signed char _G_int8_t;
++
++typedef unsigned char _G_uint8_t;
++typedef short _G_int16_t;
++typedef unsigned short _G_uint16_t;
++typedef long _G_int32_t;
++typedef unsigned long _G_uint32_t;
++
++#define HAVE_INT64
++typedef long long _G_int64_t;
++typedef unsigned long long _G_uint64_t;
++
++#define _G_BUFSIZ 1024
++#define _G_FOPEN_MAX 32
++#define _G_FILENAME_MAX 1024
++#define _G_NULL 0
++
++#define _G_ARGS(ARGLIST) ARGLIST
++
++
++
++
++
++
++
++
++
++#define _G_HAVE_ATEXIT 0
++#define _G_HAVE_SYS_RESOURCE 1
++#define _G_HAVE_SYS_SOCKET 1
++#define _G_HAVE_SYS_WAIT 1
++#define _G_HAVE_UNISTD 1
++#define _G_HAVE_DIRENT 1
++#define _G_HAVE_CURSES 1
++#define _G_MATH_H_INLINES 0
++#define _G_HAVE_BOOL 1
++
++
++#define _IO_pos_t _G_fpos_t
++#define _IO_fpos_t _G_fpos_t
++#define _IO_size_t _G_size_t
++#define _IO_ssize_t _G_ssize_t
++#define _IO_off_t _G_off_t
++#define _IO_pid_t _G_pid_t
++#define _IO_uid_t _G_uid_t
++#define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
++#define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
++#define _IO_BUFSIZ _G_BUFSIZ
++#define _IO_va_list _G_va_list
++
++
++
++
++
++
++
++
++#define __P(protos) protos
++
++
++
++
++
++
++
++
++#define _PARAMS(protos) __P(protos)
++
++
++
++
++
++#define _IO_UNIFIED_JUMPTABLES 1
++
++#define _IO_USE_DTOA 1
++
++
++
++#define EOF (-1)
++
++
++
++
++#define NULL (__null)
++
++
++
++
++
++
++
++
++
++#define _IOS_INPUT 1
++#define _IOS_OUTPUT 2
++#define _IOS_ATEND 4
++#define _IOS_APPEND 8
++#define _IOS_TRUNC 16
++#define _IOS_NOCREATE 32
++#define _IOS_NOREPLACE 64
++#define _IOS_BIN 128
++
++
++
++
++
++
++
++#define _IO_MAGIC 0xFBAD0000
++#define _OLD_STDIO_MAGIC 0xFABC0000
++#define _IO_MAGIC_MASK 0xFFFF0000
++#define _IO_USER_BUF 1
++#define _IO_UNBUFFERED 2
++#define _IO_NO_READS 4
++#define _IO_NO_WRITES 8
++#define _IO_EOF_SEEN 0x10
++#define _IO_ERR_SEEN 0x20
++#define _IO_DELETE_DONT_CLOSE 0x40
++#define _IO_LINKED 0x80
++#define _IO_IN_BACKUP 0x100
++#define _IO_LINE_BUF 0x200
++#define _IO_TIED_PUT_GET 0x400
++#define _IO_CURRENTLY_PUTTING 0x800
++#define _IO_IS_APPENDING 0x1000
++#define _IO_IS_FILEBUF 0x2000
++#define _IO_BAD_SEEN 0x4000
++
++
++#define _IO_SKIPWS 01
++#define _IO_LEFT 02
++#define _IO_RIGHT 04
++#define _IO_INTERNAL 010
++#define _IO_DEC 020
++#define _IO_OCT 040
++#define _IO_HEX 0100
++#define _IO_SHOWBASE 0200
++#define _IO_SHOWPOINT 0400
++#define _IO_UPPERCASE 01000
++#define _IO_SHOWPOS 02000
++#define _IO_SCIENTIFIC 04000
++#define _IO_FIXED 010000
++#define _IO_UNITBUF 020000
++#define _IO_STDIO 040000
++#define _IO_DONT_CLOSE 0100000
++#define _IO_BOOLALPHA 0200000
++
++
++struct _IO_jump_t; struct _IO_FILE;
++
++
++
++
++
++
++
++
++
++
++
++ typedef void _IO_lock_t;
++
++
++
++
++
++
++
++struct _IO_marker {
++ struct _IO_marker *_next;
++ struct _IO_FILE *_sbuf;
++
++
++
++ int _pos;
++
++};
++
++struct _IO_FILE {
++ int _flags;
++#define _IO_file_flags _flags
++
++
++
++ char* _IO_read_ptr;
++ char* _IO_read_end;
++ char* _IO_read_base;
++ char* _IO_write_base;
++ char* _IO_write_ptr;
++ char* _IO_write_end;
++ char* _IO_buf_base;
++ char* _IO_buf_end;
++
++ char *_IO_save_base;
++ char *_IO_backup_base;
++ char *_IO_save_end;
++
++ struct _IO_marker *_markers;
++
++ struct _IO_FILE *_chain;
++
++ int _fileno;
++ int _blksize;
++ _G_off_t _offset;
++
++#define __HAVE_COLUMN
++
++ unsigned short _cur_column;
++ char _unused;
++ char _shortbuf[1];
++
++
++
++
++
++
++};
++
++
++
++
++
++struct _IO_FILE_plus;
++extern struct _IO_FILE_plus _IO_stdin_, _IO_stdout_, _IO_stderr_;
++#define _IO_stdin ((_IO_FILE*)(&_IO_stdin_))
++#define _IO_stdout ((_IO_FILE*)(&_IO_stdout_))
++#define _IO_stderr ((_IO_FILE*)(&_IO_stderr_))
++
++
++
++typedef struct
++{
++ _G_ssize_t (*read) (struct _IO_FILE *, void *, _G_ssize_t ) ;
++ _G_ssize_t (*write) (struct _IO_FILE *, const void *, _G_ssize_t ) ;
++ _G_fpos_t (*seek) (struct _IO_FILE *, _G_off_t , int) ;
++ int (*close) (struct _IO_FILE *) ;
++} _IO_cookie_io_functions_t;
++
++
++struct _IO_cookie_file
++{
++ struct _IO_FILE file;
++ const void *vtable;
++ void *cookie;
++ _IO_cookie_io_functions_t io_functions;
++};
++
++
++
++extern "C" {
++
++
++extern int __underflow (_IO_FILE *) ;
++extern int __uflow (_IO_FILE *) ;
++extern int __overflow (_IO_FILE *, int) ;
++
++#define _IO_getc_unlocked(_fp) ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
++
++
++#define _IO_peekc_unlocked(_fp) ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end && __underflow (_fp) == EOF ? EOF : *(unsigned char *) (_fp)->_IO_read_ptr)
++
++
++
++
++#define _IO_putc_unlocked(_ch, _fp) (((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) ? __overflow (_fp, (unsigned char) (_ch)) : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
++
++
++
++
++#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
++#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
++
++extern int _IO_getc (_IO_FILE *__fp) ;
++extern int _IO_putc (int __c, _IO_FILE *__fp) ;
++extern int _IO_feof (_IO_FILE *__fp) ;
++extern int _IO_ferror (_IO_FILE *__fp) ;
++
++extern int _IO_peekc_locked (_IO_FILE *__fp) ;
++
++
++#define _IO_PENDING_OUTPUT_COUNT(_fp) ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
++
++
++extern void _IO_flockfile (_IO_FILE *) ;
++extern void _IO_funlockfile (_IO_FILE *) ;
++extern int _IO_ftrylockfile (_IO_FILE *) ;
++
++
++
++
++#define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
++#define _IO_flockfile(_fp)
++#define _IO_funlockfile(_fp)
++#define _IO_ftrylockfile(_fp)
++#define _IO_cleanup_region_start(_fct, _fp)
++#define _IO_cleanup_region_end(_Doit)
++
++
++
++extern int _IO_vfscanf (_IO_FILE *, const char *, _G_va_list , int *) ;
++extern int _IO_vfprintf (_IO_FILE *, const char *, _G_va_list ) ;
++extern _G_ssize_t _IO_padn (_IO_FILE *, int, _G_ssize_t ) ;
++extern _G_size_t _IO_sgetn (_IO_FILE *, void *, _G_size_t ) ;
++
++extern _G_fpos_t _IO_seekoff (_IO_FILE *, _G_off_t , int, int) ;
++extern _G_fpos_t _IO_seekpos (_IO_FILE *, _G_fpos_t , int) ;
++
++extern void _IO_free_backup_area (_IO_FILE *) ;
++
++
++}
++
++
++
++
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#define _IO_wchar_t short
++
++
++extern "C++" {
++class istream;
++class ostream; class streambuf;
++
++
++
++
++
++typedef _G_off_t streamoff;
++typedef _G_fpos_t streampos;
++typedef _G_ssize_t streamsize;
++
++typedef unsigned long __fmtflags;
++typedef unsigned char __iostate;
++
++struct _ios_fields
++{
++ streambuf *_strbuf;
++ ostream* _tie;
++ int _width;
++ __fmtflags _flags;
++ short _fill;
++ __iostate _state;
++ __iostate _exceptions;
++ int _precision;
++
++ void *_arrays;
++};
++
++#define _IOS_GOOD 0
++#define _IOS_EOF 1
++#define _IOS_FAIL 2
++#define _IOS_BAD 4
++
++#define _IO_INPUT 1
++#define _IO_OUTPUT 2
++#define _IO_ATEND 4
++#define _IO_APPEND 8
++#define _IO_TRUNC 16
++#define _IO_NOCREATE 32
++#define _IO_NOREPLACE 64
++#define _IO_BIN 128
++
++
++
++class ios : public _ios_fields {
++ ios& operator=(ios&);
++ ios (const ios&);
++ public:
++ typedef __fmtflags fmtflags;
++ typedef int iostate;
++ typedef int openmode;
++ typedef int streamsize;
++ enum io_state {
++ goodbit = 0 ,
++ eofbit = 1 ,
++ failbit = 2 ,
++ badbit = 4 };
++ enum open_mode {
++ in = 1 ,
++ out = 2 ,
++ ate = 4 ,
++ app = 8 ,
++ trunc = 16 ,
++ nocreate = 32 ,
++ noreplace = 64 ,
++ bin = 128 ,
++ binary = 128 };
++ enum seek_dir { beg, cur, end};
++ typedef enum seek_dir seekdir;
++
++ enum { skipws= 01 ,
++ left= 02 , right= 04 , internal= 010 ,
++ dec= 020 , oct= 040 , hex= 0100 ,
++ showbase= 0200 , showpoint= 0400 ,
++ uppercase= 01000 , showpos= 02000 ,
++ scientific= 04000 , fixed= 010000 ,
++ unitbuf= 020000 , stdio= 040000
++
++
++
++ };
++ enum {
++ basefield=dec+oct+hex,
++ floatfield = scientific+fixed,
++ adjustfield = left+right+internal
++ };
++
++
++
++ ostream* tie() const { return _tie; }
++ ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }
++
++
++ short fill() const { return (short )_fill; }
++ short fill(short newf)
++ {short oldf = (short )_fill; _fill = (char)newf; return oldf;}
++ fmtflags flags() const { return _flags; }
++ fmtflags flags(fmtflags new_val) {
++ fmtflags old_val = _flags; _flags = new_val; return old_val; }
++ int precision() const { return _precision; }
++ int precision(int newp) {
++ unsigned short oldp = _precision; _precision = (unsigned short)newp;
++ return oldp; }
++ fmtflags setf(fmtflags val) {
++ fmtflags oldbits = _flags;
++ _flags |= val; return oldbits; }
++ fmtflags setf(fmtflags val, fmtflags mask) {
++ fmtflags oldbits = _flags;
++ _flags = (_flags & ~mask) | (val & mask); return oldbits; }
++ fmtflags unsetf(fmtflags mask) {
++ fmtflags oldbits = _flags;
++ _flags &= ~mask; return oldbits; }
++ int width() const { return _width; }
++ int width(int val) { int save = _width; _width = val; return save; }
++
++
++
++
++ void _throw_failure() const { }
++
++ void clear(iostate state = 0) {
++ _state = _strbuf ? state : state|badbit;
++ if (_state & _exceptions) _throw_failure(); }
++ void set(iostate flag) { _state |= flag;
++ if (_state & _exceptions) _throw_failure(); }
++ void setstate(iostate flag) { _state |= flag;
++ if (_state & _exceptions) _throw_failure(); }
++ int good() const { return _state == 0; }
++ int eof() const { return _state & ios::eofbit; }
++ int fail() const { return _state & (ios::badbit|ios::failbit); }
++ int bad() const { return _state & ios::badbit; }
++ iostate rdstate() const { return _state; }
++ operator void*() const { return fail() ? (void*)0 : (void*)(-1); }
++ int operator!() const { return fail(); }
++ iostate exceptions() const { return _exceptions; }
++ void exceptions(iostate enable) {
++ _exceptions = enable;
++ if (_state & _exceptions) _throw_failure(); }
++
++ streambuf* rdbuf() const { return _strbuf; }
++ streambuf* rdbuf(streambuf *_s) {
++ streambuf *_old = _strbuf; _strbuf = _s; clear (); return _old; }
++
++ static int sync_with_stdio(int on);
++ static void sync_with_stdio() { sync_with_stdio(1); }
++ static fmtflags bitalloc();
++ static int xalloc();
++ void*& pword(int);
++ void* pword(int) const;
++ long& iword(int);
++ long iword(int) const;
++
++
++
++
++
++
++
++
++
++
++ class Init {
++ public:
++ Init () { }
++ };
++
++ protected:
++ inline ios(streambuf* sb = 0, ostream* tie_to = 0);
++ inline virtual ~ios();
++ inline void init(streambuf* sb, ostream* tie = 0);
++};
++
++
++
++
++typedef ios::seek_dir _seek_dir;
++
++
++
++
++
++
++
++
++
++
++class streammarker : private _IO_marker {
++ friend class streambuf;
++ void set_offset(int offset) { _pos = offset; }
++ public:
++ streammarker(streambuf *sb);
++ ~streammarker();
++ int saving() { return 1; }
++ int delta(streammarker&);
++ int delta();
++};
++
++struct streambuf : public _IO_FILE {
++ friend class ios;
++ friend class istream;
++ friend class ostream;
++ friend class streammarker;
++ const void *&_vtable() { return *(const void**)((_IO_FILE*)this + 1); }
++ protected:
++ static streambuf* _list_all;
++ _IO_FILE*& xchain() { return _chain; }
++ void _un_link();
++ void _link_in();
++ char* gptr() const
++ { return _flags & 0x100 ? _IO_save_base : _IO_read_ptr; }
++ char* pptr() const { return _IO_write_ptr; }
++ char* egptr() const
++ { return _flags & 0x100 ? _IO_save_end : _IO_read_end; }
++ char* epptr() const { return _IO_write_end; }
++ char* pbase() const { return _IO_write_base; }
++ char* eback() const
++ { return _flags & 0x100 ? _IO_save_base : _IO_read_base;}
++ char* base() const { return _IO_buf_base; }
++ char* ebuf() const { return _IO_buf_end; }
++ int blen() const { return _IO_buf_end - _IO_buf_base; }
++ void xput_char(char c) { *_IO_write_ptr++ = c; }
++ int xflags() { return _flags ; }
++ int xflags(int f) {int fl = _flags ; _flags = f; return fl;}
++ void xsetflags(int f) { _flags |= f; }
++ void xsetflags(int f, int mask)
++ { _flags = (_flags & ~mask) | (f & mask); }
++ void gbump(int n)
++ { _flags & 0x100 ? (_IO_save_base+=n):(_IO_read_ptr+=n);}
++ void pbump(int n) { _IO_write_ptr += n; }
++ void setb(char* b, char* eb, int a=0);
++ void setp(char* p, char* ep)
++ { _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
++ void setg(char* eb, char* g, char *eg) {
++ if (_flags & 0x100 ) _IO_free_backup_area(this);
++ _IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
++ char *shortbuf() { return _shortbuf; }
++
++ int in_backup() { return _flags & 0x100 ; }
++
++ char *Gbase() { return in_backup() ? _IO_save_base : _IO_read_base; }
++
++ char *eGptr() { return in_backup() ? _IO_save_end : _IO_read_end; }
++
++ char *Bbase() { return in_backup() ? _IO_read_base : _IO_save_base; }
++ char *Bptr() { return _IO_backup_base; }
++
++ char *eBptr() { return in_backup() ? _IO_read_end : _IO_save_end; }
++ char *Nbase() { return _IO_save_base; }
++ char *eNptr() { return _IO_save_end; }
++ int have_backup() { return _IO_save_base != (__null) ; }
++ int have_markers() { return _markers != (__null) ; }
++ void free_backup_area();
++ void unsave_markers();
++ int put_mode() { return _flags & 0x800 ; }
++ int switch_to_get_mode();
++
++ streambuf(int flags=0);
++ public:
++ static int flush_all();
++ static void flush_all_linebuffered();
++ virtual ~streambuf();
++ virtual int overflow(int c = (-1) );
++ virtual int underflow();
++ virtual int uflow();
++ virtual int pbackfail(int c);
++
++ virtual streamsize xsputn(const char* s, streamsize n);
++ virtual streamsize xsgetn(char* s, streamsize n);
++ virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
++ virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
++
++ streampos pubseekoff(streamoff o, _seek_dir d, int mode=ios::in|ios::out)
++ { return _IO_seekoff (this, o, d, mode); }
++ streampos pubseekpos(streampos pos, int mode = ios::in|ios::out)
++ { return _IO_seekpos (this, pos, mode); }
++ streampos sseekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
++ streampos sseekpos(streampos pos, int mode = ios::in|ios::out);
++ virtual streambuf* setbuf(char* p, int len);
++ virtual int sync();
++ virtual int doallocate();
++
++ int seekmark(streammarker& mark, int delta = 0);
++ int sputbackc(char c);
++ int sungetc();
++ int unbuffered() { return _flags & 2 ? 1 : 0; }
++ int linebuffered() { return _flags & 0x200 ? 1 : 0; }
++ void unbuffered(int i)
++ { if (i) _flags |= 2 ; else _flags &= ~2 ; }
++ void linebuffered(int i)
++ { if (i) _flags |= 0x200 ; else _flags &= ~0x200 ; }
++ int allocate() {
++ if (base() || unbuffered()) return 0;
++ else return doallocate(); }
++
++ void allocbuf() { if (base() == (__null) ) doallocbuf(); }
++ void doallocbuf();
++ int in_avail() { return _IO_read_end - _IO_read_ptr; }
++ int out_waiting() { return _IO_write_ptr - _IO_write_base; }
++ streamsize sputn(const char* s, streamsize n) { return xsputn(s, n); }
++ streamsize padn(char pad, streamsize n) { return _IO_padn(this, pad, n); }
++ streamsize sgetn(char* s, streamsize n) { return _IO_sgetn(this, s, n); }
++ int ignore(int);
++ int get_column();
++ int set_column(int);
++ long sgetline(char* buf, _G_size_t n, char delim, int putback_delim);
++ int sputc(int c) { return _IO_putc(c, this); }
++ int sbumpc() { return _IO_getc(this); }
++ int sgetc() { return (( this )->_IO_read_ptr >= ( this )->_IO_read_end && __underflow ( this ) == (-1) ? (-1) : *(unsigned char *) ( this )->_IO_read_ptr) ; }
++ int snextc() {
++ if (_IO_read_ptr >= _IO_read_end && __underflow(this) == (-1) )
++ return (-1) ;
++ else return _IO_read_ptr++, sgetc(); }
++ void stossc() { if (_IO_read_ptr < _IO_read_end) _IO_read_ptr++; }
++ int vscan(char const *fmt0, _G_va_list ap, ios* stream = (__null) );
++ int scan(char const *fmt0 ...);
++ int vform(char const *fmt0, _G_va_list ap);
++ int form(char const *fmt0 ...);
++
++
++
++
++ virtual streamsize sys_read(char* buf, streamsize size);
++ virtual streamsize sys_write(const char*, streamsize);
++ virtual streampos sys_seek(streamoff, _seek_dir);
++ virtual int sys_close();
++ virtual int sys_stat(void*);
++};
++
++
++
++
++class filebuf : public streambuf {
++ protected:
++ void init();
++ public:
++ static const int openprot;
++ filebuf();
++ filebuf(int fd);
++ filebuf(int fd, char* p, int len);
++
++
++
++ ~filebuf();
++ filebuf* attach(int fd);
++ filebuf* open(const char *filename, const char *mode);
++ filebuf* open(const char *filename, ios::openmode mode, int prot = 0664);
++ virtual int underflow();
++ virtual int overflow(int c = (-1) );
++ int is_open() const { return _fileno >= 0; }
++ int fd() const { return is_open() ? _fileno : (-1) ; }
++ filebuf* close();
++ virtual int doallocate();
++ virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
++ virtual streambuf* setbuf(char* p, int len);
++ streamsize xsputn(const char* s, streamsize n);
++ streamsize xsgetn(char* s, streamsize n);
++ virtual int sync();
++ protected:
++
++ int is_reading() { return eback() != egptr(); }
++ char* cur_ptr() { return is_reading() ? gptr() : pptr(); }
++
++ char* file_ptr() { return eGptr(); }
++
++ virtual streamsize sys_read(char* buf, streamsize size);
++ virtual streampos sys_seek(streamoff, _seek_dir);
++ virtual streamsize sys_write(const char*, streamsize);
++ virtual int sys_stat(void*);
++ virtual int sys_close();
++
++
++
++
++};
++
++inline void ios::init(streambuf* sb, ostream* tie_to) {
++ _state = sb ? ios::goodbit : ios::badbit; _exceptions=0;
++ _strbuf=sb; _tie = tie_to; _width=0; _fill=' ';
++
++ _flags=ios::skipws|ios::dec;
++
++
++
++ _precision=6; _arrays = 0; }
++
++inline ios::ios(streambuf* sb, ostream* tie_to) { init(sb, tie_to); }
++
++inline ios::~ios() {
++
++
++
++ operator delete(_arrays);
++}
++}
++
++
++
++extern "C++" {
++class istream; class ostream;
++typedef ios& (*__manip)(ios&);
++typedef istream& (*__imanip)(istream&);
++typedef ostream& (*__omanip)(ostream&);
++
++extern istream& ws(istream& ins);
++extern ostream& flush(ostream& outs);
++extern ostream& endl(ostream& outs);
++extern ostream& ends(ostream& outs);
++
++class ostream : virtual public ios
++{
++
++ void do_osfx();
++ public:
++ ostream() { }
++ ostream(streambuf* sb, ostream* tied= (__null) );
++ int opfx() {
++ if (!good()) return 0;
++ else { if (_tie) _tie->flush(); ; return 1;} }
++ void osfx() { ;
++ if (flags() & (ios::unitbuf|ios::stdio))
++ do_osfx(); }
++ ostream& flush();
++ ostream& put(char c) { _strbuf->sputc(c); return *this; }
++
++
++
++
++
++ ostream& write(const char *s, streamsize n);
++ ostream& write(const unsigned char *s, streamsize n)
++ { return write((const char*)s, n);}
++ ostream& write(const signed char *s, streamsize n)
++ { return write((const char*)s, n);}
++ ostream& write(const void *s, streamsize n)
++ { return write((const char*)s, n);}
++ ostream& seekp(streampos);
++ ostream& seekp(streamoff, _seek_dir);
++ streampos tellp();
++ ostream& form(const char *format ...);
++ ostream& vform(const char *format, _G_va_list args);
++
++ ostream& operator<<(char c);
++ ostream& operator<<(unsigned char c) { return (*this) << (char)c; }
++ ostream& operator<<(signed char c) { return (*this) << (char)c; }
++ ostream& operator<<(const char *s);
++ ostream& operator<<(const unsigned char *s)
++ { return (*this) << (const char*)s; }
++ ostream& operator<<(const signed char *s)
++ { return (*this) << (const char*)s; }
++ ostream& operator<<(const void *p);
++ ostream& operator<<(int n);
++ ostream& operator<<(unsigned int n);
++ ostream& operator<<(long n);
++ ostream& operator<<(unsigned long n);
++
++ __extension__ ostream& operator<<(long long n);
++ __extension__ ostream& operator<<(unsigned long long n);
++
++ ostream& operator<<(short n) {return operator<<((int)n);}
++ ostream& operator<<(unsigned short n) {return operator<<((unsigned int)n);}
++
++ ostream& operator<<(bool b) { return operator<<((int)b); }
++
++ ostream& operator<<(double n);
++ ostream& operator<<(float n) { return operator<<((double)n); }
++
++
++
++ ostream& operator<<(long double n) { return operator<<((double)n); }
++
++ ostream& operator<<(__omanip func) { return (*func)(*this); }
++ ostream& operator<<(__manip func) {(*func)(*this); return *this;}
++ ostream& operator<<(streambuf*);
++
++
++
++};
++
++class istream : virtual public ios
++{
++
++protected:
++ _G_size_t _gcount;
++
++ int _skip_ws();
++ public:
++ istream(): _gcount (0) { }
++ istream(streambuf* sb, ostream*tied= (__null) );
++ istream& get(char* ptr, int len, char delim = '\n');
++ istream& get(unsigned char* ptr, int len, char delim = '\n')
++ { return get((char*)ptr, len, delim); }
++ istream& get(char& c);
++ istream& get(unsigned char& c) { return get((char&)c); }
++ istream& getline(char* ptr, int len, char delim = '\n');
++ istream& getline(unsigned char* ptr, int len, char delim = '\n')
++ { return getline((char*)ptr, len, delim); }
++ istream& get(signed char& c) { return get((char&)c); }
++ istream& get(signed char* ptr, int len, char delim = '\n')
++ { return get((char*)ptr, len, delim); }
++ istream& getline(signed char* ptr, int len, char delim = '\n')
++ { return getline((char*)ptr, len, delim); }
++ istream& read(char *ptr, streamsize n);
++ istream& read(unsigned char *ptr, streamsize n)
++ { return read((char*)ptr, n); }
++ istream& read(signed char *ptr, streamsize n)
++ { return read((char*)ptr, n); }
++ istream& read(void *ptr, streamsize n)
++ { return read((char*)ptr, n); }
++ istream& get(streambuf& sb, char delim = '\n');
++ istream& gets(char **s, char delim = '\n');
++ int ipfx(int need = 0) {
++ if (!good()) { set(ios::failbit); return 0; }
++ else {
++ ;
++ if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush();
++ if (!need && (flags() & ios::skipws)) return _skip_ws();
++ else return 1;
++ }
++ }
++ int ipfx0() {
++ if (!good()) { set(ios::failbit); return 0; }
++ else {
++ ;
++ if (_tie) _tie->flush();
++ if (flags() & ios::skipws) return _skip_ws();
++ else return 1;
++ }
++ }
++ int ipfx1() {
++ if (!good()) { set(ios::failbit); return 0; }
++ else {
++ ;
++ if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
++ return 1;
++ }
++ }
++ void isfx() { ; }
++ int get() { if (!ipfx1()) return (-1) ;
++ else { int ch = _strbuf->sbumpc();
++ if (ch == (-1) ) set(ios::eofbit);
++ return ch;
++ } }
++ int peek();
++ _G_size_t gcount() { return _gcount; }
++ istream& ignore(int n=1, int delim = (-1) );
++ int sync ();
++ istream& seekg(streampos);
++ istream& seekg(streamoff, _seek_dir);
++ streampos tellg();
++ istream& putback(char ch) {
++ if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit);
++ return *this;}
++ istream& unget() {
++ if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit);
++ return *this;}
++ istream& scan(const char *format ...);
++ istream& vscan(const char *format, _G_va_list args);
++
++
++
++
++
++
++ istream& operator>>(char*);
++ istream& operator>>(unsigned char* p) { return operator>>((char*)p); }
++ istream& operator>>(signed char*p) { return operator>>((char*)p); }
++ istream& operator>>(char& c);
++ istream& operator>>(unsigned char& c) {return operator>>((char&)c);}
++ istream& operator>>(signed char& c) {return operator>>((char&)c);}
++ istream& operator>>(int&);
++ istream& operator>>(long&);
++
++ __extension__ istream& operator>>(long long&);
++ __extension__ istream& operator>>(unsigned long long&);
++
++ istream& operator>>(short&);
++ istream& operator>>(unsigned int&);
++ istream& operator>>(unsigned long&);
++ istream& operator>>(unsigned short&);
++
++ istream& operator>>(bool&);
++
++ istream& operator>>(float&);
++ istream& operator>>(double&);
++ istream& operator>>(long double&);
++ istream& operator>>( __manip func) {(*func)(*this); return *this;}
++ istream& operator>>(__imanip func) { return (*func)(*this); }
++ istream& operator>>(streambuf*);
++};
++
++class iostream : public istream, public ostream
++{
++ public:
++ iostream() { }
++ iostream(streambuf* sb, ostream*tied= (__null) );
++};
++
++class _IO_istream_withassign : public istream {
++public:
++ _IO_istream_withassign& operator=(istream&);
++ _IO_istream_withassign& operator=(_IO_istream_withassign& rhs)
++ { return operator= (static_cast<istream&> (rhs)); }
++};
++
++class _IO_ostream_withassign : public ostream {
++public:
++ _IO_ostream_withassign& operator=(ostream&);
++ _IO_ostream_withassign& operator=(_IO_ostream_withassign& rhs)
++ { return operator= (static_cast<ostream&> (rhs)); }
++};
++
++extern _IO_istream_withassign cin;
++
++extern _IO_ostream_withassign cout, cerr;
++
++extern _IO_ostream_withassign clog
++
++
++
++;
++
++extern istream& lock(istream& ins);
++extern istream& unlock(istream& ins);
++extern ostream& lock(ostream& outs);
++extern ostream& unlock(ostream& outs);
++
++struct Iostream_init { } ;
++
++inline ios& dec(ios& i)
++{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
++inline ios& hex(ios& i)
++{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; }
++inline ios& oct(ios& i)
++{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; }
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#pragma interface
++
++#define _IOMANIP_H
++
++
++
++extern "C++" {
++
++
++
++
++
++
++
++
++template<class TP> class smanip;
++
++template<class TP> class sapp {
++ ios& (*_f)(ios&, TP);
++public:
++ sapp(ios& (*f)(ios&, TP)) : _f(f) {}
++
++ smanip<TP> operator()(TP a)
++ { return smanip<TP>(_f, a); }
++};
++
++template<class TP>
++inline istream& operator>>(istream& i, const smanip<TP>& m);
++template<class TP>
++inline ostream& operator<<(ostream& o, const smanip<TP>& m);
++
++template <class TP> class smanip {
++ ios& (*_f)(ios&, TP);
++ TP _a;
++public:
++ smanip(ios& (*f)(ios&, TP), TP a) : _f(f), _a(a) {}
++
++ friend
++ istream& operator>> <>(istream& i, const smanip<TP>& m);
++ friend
++ ostream& operator<< <>(ostream& o, const smanip<TP>& m);
++};
++
++
++extern template class smanip<int>;
++extern template class smanip<ios::fmtflags>;
++
++
++template<class TP>
++inline istream& operator>>(istream& i, const smanip<TP>& m)
++{ (*m._f)(i, m._a); return i; }
++
++template<class TP>
++inline ostream& operator<<(ostream& o, const smanip<TP>& m)
++{ (*m._f)(o, m._a); return o;}
++
++
++extern template istream& operator>>(istream&, const smanip<int>&);
++extern template istream& operator>>(istream&, const smanip<ios::fmtflags>&);
++extern template ostream& operator<<(ostream&, const smanip<int>&);
++extern template ostream& operator<<(ostream&, const smanip<ios::fmtflags>&);
++
++
++
++
++
++
++template<class TP> class imanip;
++
++template<class TP> class iapp {
++ istream& (*_f)(istream&, TP);
++public:
++ iapp(istream& (*f)(istream&,TP)) : _f(f) {}
++
++ imanip<TP> operator()(TP a)
++ { return imanip<TP>(_f, a); }
++};
++
++template <class TP>
++inline istream& operator>>(istream&, const imanip<TP>&);
++
++template <class TP> class imanip {
++ istream& (*_f)(istream&, TP);
++ TP _a;
++public:
++ imanip(istream& (*f)(istream&, TP), TP a) : _f(f), _a(a) {}
++
++ friend
++ istream& operator>> <>(istream& i, const imanip<TP>& m);
++};
++
++template <class TP>
++inline istream& operator>>(istream& i, const imanip<TP>& m)
++{ return (*m._f)( i, m._a); }
++
++
++
++
++
++template<class TP> class omanip;
++
++template<class TP> class oapp {
++ ostream& (*_f)(ostream&, TP);
++public:
++ oapp(ostream& (*f)(ostream&,TP)) : _f(f) {}
++
++ omanip<TP> operator()(TP a)
++ { return omanip<TP>(_f, a); }
++};
++
++template <class TP>
++inline ostream& operator<<(ostream&, const omanip<TP>&);
++
++template <class TP> class omanip {
++ ostream& (*_f)(ostream&, TP);
++ TP _a;
++public:
++ omanip(ostream& (*f)(ostream&, TP), TP a) : _f(f), _a(a) {}
++
++ friend
++ ostream& operator<< <>(ostream& o, const omanip<TP>& m);
++};
++
++template <class TP>
++inline ostream& operator<<(ostream& o, const omanip<TP>& m)
++{ return (*m._f)(o, m._a); }
++
++
++
++
++
++
++
++
++
++#define __DEFINE_IOMANIP_FN1(type,param,function) extern ios& __iomanip_##function (ios&, param); inline type<param> function (param n) { return type<param> (__iomanip_##function, n); }
++
++
++
++
++extern ios& __iomanip_setbase (ios&, int ); inline smanip < int > setbase ( int n) { return smanip < int > (__iomanip_setbase , n); }
++extern ios& __iomanip_setfill (ios&, int ); inline smanip < int > setfill ( int n) { return smanip < int > (__iomanip_setfill , n); }
++extern ios& __iomanip_setprecision (ios&, int ); inline smanip < int > setprecision ( int n) { return smanip < int > (__iomanip_setprecision , n); }
++extern ios& __iomanip_setw (ios&, int ); inline smanip < int > setw ( int n) { return smanip < int > (__iomanip_setw , n); }
++
++extern ios& __iomanip_resetiosflags (ios&, ios::fmtflags ); inline smanip < ios::fmtflags > resetiosflags ( ios::fmtflags n) { return smanip < ios::fmtflags > (__iomanip_resetiosflags , n); }
++extern ios& __iomanip_setiosflags (ios&, ios::fmtflags ); inline smanip < ios::fmtflags > setiosflags ( ios::fmtflags n) { return smanip < ios::fmtflags > (__iomanip_setiosflags , n); }
++}
++
++
++
++
++#define LS_hh
++
++
++#define Mouvement_hh
++
++
++
++#define usuel_hh
++
++
++
++
++
++
++#define _MATH_H
++
++
++extern "C" {
++
++
++#pragma ident "@(#)math.h 2.5 95/02/07"
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++typedef union _h_val {
++ unsigned long _i[2];
++ double _d;
++} _h_val;
++
++
++extern const _h_val __huge_val;
++
++
++
++
++
++#define HUGE_VAL __huge_val._d
++
++
++
++
++
++
++
++#define M_E 2.7182818284590452354
++#define M_LOG2E 1.4426950408889634074
++#define M_LOG10E 0.43429448190325182765
++#define M_LN2 0.69314718055994530942
++#define M_LN10 2.30258509299404568402
++#define M_PI 3.14159265358979323846
++#define M_PI_2 1.57079632679489661923
++#define M_PI_4 0.78539816339744830962
++#define M_1_PI 0.31830988618379067154
++#define M_2_PI 0.63661977236758134308
++#define M_2_SQRTPI 1.12837916709551257390
++#define M_SQRT2 1.41421356237309504880
++#define M_SQRT1_2 0.70710678118654752440
++
++extern int signgam;
++
++#define MAXFLOAT ((float)3.40282346638528860e+38)
++
++
++
++
++
++enum version {libm_ieee = -1, c_issue_4, ansi_1, strict_ansi};
++
++
++extern const enum version _lib_version;
++
++
++
++
++
++#define exception __math_exception
++
++struct __math_exception {
++
++#undef exception
++
++ int type;
++ char *name;
++ double arg1;
++ double arg2;
++ double retval;
++};
++
++#define HUGE MAXFLOAT
++
++#define _ABS(x) ((x) < 0 ? -(x) : (x))
++
++#define _REDUCE(TYPE, X, XN, C1, C2) { double x1 = (double)(TYPE)X, x2 = X - x1; X = x1 - (XN) * (C1); X += x2; X -= (XN) * (C2); }
++
++
++
++#define DOMAIN 1
++#define SING 2
++#define OVERFLOW 3
++#define UNDERFLOW 4
++#define TLOSS 5
++#define PLOSS 6
++
++#define _POLY1(x, c) ((c)[0] * (x) + (c)[1])
++#define _POLY2(x, c) (_POLY1((x), (c)) * (x) + (c)[2])
++#define _POLY3(x, c) (_POLY2((x), (c)) * (x) + (c)[3])
++#define _POLY4(x, c) (_POLY3((x), (c)) * (x) + (c)[4])
++#define _POLY5(x, c) (_POLY4((x), (c)) * (x) + (c)[5])
++#define _POLY6(x, c) (_POLY5((x), (c)) * (x) + (c)[6])
++#define _POLY7(x, c) (_POLY6((x), (c)) * (x) + (c)[7])
++#define _POLY8(x, c) (_POLY7((x), (c)) * (x) + (c)[8])
++#define _POLY9(x, c) (_POLY8((x), (c)) * (x) + (c)[9])
++
++
++
++
++
++
++extern double acos (double) ;
++extern double asin (double) ;
++extern double atan (double) ;
++extern double atan2 (double, double) ;
++extern double cos (double) ;
++extern double sin (double) ;
++extern double tan (double) ;
++
++extern double cosh (double) ;
++extern double sinh (double) ;
++extern double tanh (double) ;
++
++extern double exp (double) ;
++extern double frexp (double, int *) ;
++extern double ldexp (double, int) ;
++extern double log (double) ;
++extern double log10 (double) ;
++extern double modf (double, double *) ;
++
++extern double pow (double, double) ;
++extern double sqrt (double) ;
++
++extern double ceil (double) ;
++extern double fabs (double) ;
++extern double floor (double) ;
++extern double fmod (double, double) ;
++
++
++
++
++
++
++extern double erf (double) ;
++extern double erfc (double) ;
++extern double gamma (double) ;
++extern double hypot (double, double) ;
++extern int isnan (double) ;
++extern double j0 (double) ;
++extern double j1 (double) ;
++extern double jn (int, double) ;
++extern double lgamma (double) ;
++extern double y0 (double) ;
++extern double y1 (double) ;
++extern double yn (int, double) ;
++
++
++
++
++
++
++extern double acosh (double) ;
++extern double asinh (double) ;
++extern double atanh (double) ;
++extern double cbrt (double) ;
++extern double logb (double) ;
++extern double nextafter (double, double) ;
++extern double remainder (double, double) ;
++extern double scalb (double, double) ;
++
++
++
++
++extern double expm1 (double) ;
++extern int ilogb (double) ;
++extern double log1p (double) ;
++extern double rint (double) ;
++
++
++
++
++
++
++
++#define exception __math_exception
++
++extern int matherr (struct __math_exception *) ;
++
++#undef exception
++
++
++
++
++
++extern double significand (double) ;
++
++
++
++
++extern double copysign (double, double) ;
++extern double scalbn (double, int) ;
++
++
++
++
++
++
++
++
++
++
++
++
++
++extern float modff (float, float *) ;
++
++
++
++
++
++
++
++
++
++#define _FLOATINGPOINT_H
++
++
++extern "C" {
++
++
++#pragma ident "@(#)floatingpoint.h 2.4 94/06/09"
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#define _STDIO_H
++
++#pragma ident "@(#)stdio.h 1.39 95/12/04 SMI"
++
++
++
++
++
++
++
++
++
++#define _SYS_FEATURE_TESTS_H
++
++#pragma ident "@(#)feature_tests.h 1.7 94/12/06 SMI"
++
++
++extern "C" {
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++}
++
++
++
++
++
++
++
++
++
++
++#define _SYS_VA_LIST_H
++
++#pragma ident "@(#)va_list.h 1.6 96/01/26 SMI"
++
++
++
++
++
++
++
++
++
++
++
++
++extern "C" {
++
++
++
++
++
++typedef void *__va_list;
++
++
++
++
++
++
++
++}
++
++
++
++
++
++
++extern "C" {
++
++
++
++#define _SIZE_T
++typedef unsigned int size_t;
++
++
++typedef long fpos_t;
++
++
++
++
++
++
++
++
++
++
++#define BUFSIZ 1024
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#define _NFILE 20
++
++
++
++#define _SBFSIZ 8
++
++#define _IOFBF 0000
++#define _IOLBF 0100
++#define _IONBF 0004
++#define _IOEOF 0020
++#define _IOERR 0040
++
++#define _IOREAD 0001
++#define _IOWRT 0002
++#define _IORW 0200
++#define _IOMYBUF 0010
++
++
++
++
++
++#define FOPEN_MAX _NFILE
++#define FILENAME_MAX 1024
++
++#define SEEK_SET 0
++#define SEEK_CUR 1
++#define SEEK_END 2
++#define TMP_MAX 17576
++
++
++
++
++#define L_ctermid 9
++#define L_cuserid 9
++
++
++
++
++
++#define P_tmpdir "/var/tmp/"
++
++
++#define L_tmpnam 25
++
++
++#define stdin (&__iob[0])
++#define stdout (&__iob[1])
++#define stderr (&__iob[2])
++
++
++
++
++
++
++typedef struct
++{
++
++
++
++
++ int _cnt;
++ unsigned char *_ptr;
++
++ unsigned char *_base;
++ unsigned char _flag;
++ unsigned char _file;
++} FILE;
++
++
++extern FILE __iob[20 ];
++
++
++
++extern FILE *_lastbuf;
++extern unsigned char *_bufendtab[];
++
++extern unsigned char _sibuf[], _sobuf[];
++
++
++
++
++extern int remove(const char *);
++extern int rename(const char *, const char *);
++extern FILE *tmpfile(void);
++extern char *tmpnam(char *);
++
++
++
++extern int fclose(FILE *);
++extern int fflush(FILE *);
++extern FILE *fopen(const char *, const char *);
++extern FILE *freopen(const char *, const char *, FILE *);
++extern void setbuf(FILE *, char *);
++extern int setvbuf(FILE *, char *, int, size_t);
++
++extern int fprintf(FILE *, const char *, ...);
++
++extern int fscanf(FILE *, const char *, ...);
++
++extern int printf(const char *, ...);
++
++extern int scanf(const char *, ...);
++
++extern int sprintf(char *, const char *, ...);
++
++extern int sscanf(const char *, const char *, ...);
++extern int vfprintf(FILE *, const char *, __va_list);
++extern int vprintf(const char *, __va_list);
++extern int vsprintf(char *, const char *, __va_list);
++extern int fgetc(FILE *);
++extern char *fgets(char *, int, FILE *);
++extern int fputc(int, FILE *);
++extern int fputs(const char *, FILE *);
++extern int getc(FILE *);
++extern int getchar(void);
++extern char *gets(char *);
++extern int putc(int, FILE *);
++extern int putchar(int);
++extern int puts(const char *);
++extern int ungetc(int, FILE *);
++extern size_t fread(void *, size_t, size_t, FILE *);
++extern size_t fwrite(const void *, size_t, size_t, FILE *);
++extern int fgetpos(FILE *, fpos_t *);
++extern int fseek(FILE *, long, int);
++extern int fsetpos(FILE *, const fpos_t *);
++extern long ftell(FILE *);
++extern void rewind(FILE *);
++extern void clearerr(FILE *);
++extern int feof(FILE *);
++extern int ferror(FILE *);
++extern void perror(const char *);
++
++extern int __filbuf(FILE *);
++extern int __flsbuf(int, FILE *);
++
++
++
++
++
++
++
++extern FILE *fdopen(int, const char *);
++extern char *ctermid(char *);
++extern int fileno(FILE *);
++
++
++
++
++
++
++
++
++
++
++
++
++
++extern FILE *popen(const char *, const char *);
++extern char *cuserid(char *);
++extern char *tempnam(const char *, const char *);
++extern int getopt(int, char *const *, const char *);
++
++extern int getsubopt(char **, char *const *, char **);
++
++extern char *optarg;
++extern int optind, opterr, optopt;
++extern int getw(FILE *);
++extern int putw(int, FILE *);
++extern int pclose(FILE *);
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#define getc(p) (--(p)->_cnt < 0 ? __filbuf(p) : (int)*(p)->_ptr++)
++#define putc(x, p) (--(p)->_cnt < 0 ? __flsbuf((unsigned char) (x), (p)) : (int)(*(p)->_ptr++ = (x)))
++
++
++
++
++
++
++
++#define getchar() getc(stdin)
++#define putchar(x) putc((x), stdout)
++#define clearerr(p) ((void)((p)->_flag &= ~(_IOERR | _IOEOF)))
++#define feof(p) ((p)->_flag & _IOEOF)
++#define ferror(p) ((p)->_flag & _IOERR)
++
++
++
++
++#define fileno(p) ((p)->_file)
++
++
++
++
++
++
++
++}
++
++
++
++
++
++
++
++
++
++
++#define _SYS_IEEEFP_H
++
++#pragma ident "@(#)ieeefp.h 2.7 94/11/09"
++
++
++extern "C" {
++
++
++
++
++
++
++enum fp_direction_type {
++ fp_nearest = 0,
++ fp_tozero = 1,
++ fp_positive = 2,
++ fp_negative = 3
++};
++
++enum fp_precision_type {
++ fp_extended = 0,
++ fp_single = 1,
++ fp_double = 2,
++ fp_precision_3 = 3
++};
++
++enum fp_exception_type {
++ fp_inexact = 0,
++ fp_division = 1,
++ fp_underflow = 2,
++ fp_overflow = 3,
++ fp_invalid = 4
++};
++
++enum fp_trap_enable_type {
++ fp_trap_inexact = 0,
++ fp_trap_division = 1,
++ fp_trap_underflow = 2,
++ fp_trap_overflow = 3,
++ fp_trap_invalid = 4
++};
++
++
++
++
++
++
++enum fp_class_type {
++ fp_zero = 0,
++ fp_subnormal = 1,
++ fp_normal = 2,
++ fp_infinity = 3,
++ fp_quiet = 4,
++ fp_signaling = 5
++};
++
++
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#define N_IEEE_EXCEPTION 5
++
++typedef int sigfpe_code_type;
++
++typedef void (*sigfpe_handler_type)();
++
++#define SIGFPE_DEFAULT (void (*)())0
++#define SIGFPE_IGNORE (void (*)())1
++#define SIGFPE_ABORT (void (*)())2
++
++extern sigfpe_handler_type sigfpe (sigfpe_code_type, sigfpe_handler_type) ;
++
++
++
++
++typedef float single;
++
++
++#define _EXTENDED
++typedef unsigned extended[3];
++
++
++typedef long double quadruple;
++
++typedef unsigned fp_exception_field_type;
++
++
++
++
++
++
++
++#define DECIMAL_STRING_LENGTH 512
++
++typedef char decimal_string[512 ];
++
++
++typedef struct {
++ enum fp_class_type fpclass;
++ int sign;
++ int exponent;
++ decimal_string ds;
++
++
++ int more;
++
++
++ int ndigits;
++
++
++} decimal_record;
++
++enum decimal_form {
++ fixed_form,
++
++
++ floating_form
++
++};
++
++typedef struct {
++ enum fp_direction_type rd;
++
++ enum decimal_form df;
++
++ int ndigits;
++} decimal_mode;
++
++enum decimal_string_form {
++ invalid_form,
++ whitespace_form,
++ fixed_int_form,
++ fixed_intdot_form,
++ fixed_dotfrac_form,
++ fixed_intdotfrac_form,
++ floating_int_form,
++ floating_intdot_form,
++ floating_dotfrac_form,
++ floating_intdotfrac_form,
++ inf_form,
++ infinity_form,
++ nan_form,
++ nanstring_form
++};
++
++extern void single_to_decimal (single *, decimal_mode *, decimal_record *,
++ fp_exception_field_type *) ;
++extern void double_to_decimal (double *, decimal_mode *, decimal_record *,
++ fp_exception_field_type *) ;
++extern void extended_to_decimal (extended *, decimal_mode *,
++ decimal_record *, fp_exception_field_type *) ;
++extern void quadruple_to_decimal (quadruple *, decimal_mode *,
++ decimal_record *, fp_exception_field_type *) ;
++
++extern void decimal_to_single (single *, decimal_mode *, decimal_record *,
++ fp_exception_field_type *) ;
++extern void decimal_to_double (double *, decimal_mode *, decimal_record *,
++ fp_exception_field_type *) ;
++extern void decimal_to_extended (extended *, decimal_mode *,
++ decimal_record *, fp_exception_field_type *) ;
++extern void decimal_to_quadruple (quadruple *, decimal_mode *,
++ decimal_record *, fp_exception_field_type *) ;
++
++extern void string_to_decimal (char **, int, int, decimal_record *,
++ enum decimal_string_form *, char **) ;
++extern void func_to_decimal (char **, int, int, decimal_record *,
++ enum decimal_string_form *, char **,
++ int (*)(void), int *, int (*)(int)) ;
++extern void file_to_decimal (char **, int, int, decimal_record *,
++ enum decimal_string_form *, char **,
++ FILE *, int *) ;
++
++extern char *seconvert (single *, int, int *, int *, char *) ;
++extern char *sfconvert (single *, int, int *, int *, char *) ;
++extern char *sgconvert (single *, int, int, char *) ;
++extern char *econvert (double, int, int *, int *, char *) ;
++extern char *fconvert (double, int, int *, int *, char *) ;
++extern char *gconvert (double, int, int, char *) ;
++extern char *qeconvert (quadruple *, int, int *, int *, char *) ;
++extern char *qfconvert (quadruple *, int, int *, int *, char *) ;
++extern char *qgconvert (quadruple *, int, int, char *) ;
++
++extern char *ecvt (double, int, int *, int *) ;
++extern char *fcvt (double, int, int *, int *) ;
++extern char *gcvt (double, int, char *) ;
++
++
++
++
++
++extern double atof (const char *) ;
++extern double strtod (const char *, char **) ;
++
++
++}
++
++
++
++
++
++
++
++
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#pragma interface
++
++#define _String_h 1
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#pragma interface
++
++#define _Regex_h 1
++
++
++
++
++
++
++
++struct re_pattern_buffer;
++struct re_registers;
++
++class Regex
++{
++private:
++
++ Regex(const Regex&) {}
++ void operator = (const Regex&) {}
++
++protected:
++ re_pattern_buffer* buf;
++ re_registers* reg;
++
++public:
++ Regex(const char* t,
++ int fast = 0,
++ int bufsize = 40,
++ const char* transtable = 0);
++
++ ~Regex();
++
++ int match(const char* s, int len, int pos = 0) const;
++ int search(const char* s, int len,
++ int& matchlen, int startpos = 0) const;
++ int match_info(int& start, int& length, int nth = 0) const;
++
++ int OK() const;
++};
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++struct StrRep
++{
++ unsigned short len;
++ unsigned short sz;
++ char s[1];
++
++
++};
++
++
++
++StrRep* Salloc(StrRep*, const char*, int, int);
++StrRep* Scopy(StrRep*, const StrRep*);
++StrRep* Scat(StrRep*, const char*, int, const char*, int);
++StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int);
++StrRep* Sprepend(StrRep*, const char*, int);
++StrRep* Sreverse(const StrRep*, StrRep*);
++StrRep* Supcase(const StrRep*, StrRep*);
++StrRep* Sdowncase(const StrRep*, StrRep*);
++StrRep* Scapitalize(const StrRep*, StrRep*);
++
++
++
++class String;
++class SubString;
++
++class SubString
++{
++ friend class String;
++protected:
++
++ String& S;
++ unsigned short pos;
++ unsigned short len;
++
++ void assign(const StrRep*, const char*, int = -1);
++ SubString(String& x, int p, int l);
++
++public:
++ SubString(const SubString& x);
++
++
++
++
++ ~SubString();
++
++ SubString& operator = (const String& y);
++ SubString& operator = (const SubString& y);
++ SubString& operator = (const char* t);
++ SubString& operator = (char c);
++
++
++
++ int contains(char c) const;
++ int contains(const String& y) const;
++ int contains(const SubString& y) const;
++ int contains(const char* t) const;
++ int contains(const Regex& r) const;
++
++
++
++ int matches(const Regex& r) const;
++
++
++
++ friend ostream& operator<<(ostream& s, const SubString& x);
++
++
++
++ unsigned int length() const;
++ int empty() const;
++ const char* chars() const;
++
++ int OK() const;
++
++};
++
++
++class String
++{
++ friend class SubString;
++
++protected:
++ StrRep* rep;
++
++
++
++ int search(int, int, const char*, int = -1) const;
++ int search(int, int, char) const;
++ int match(int, int, int, const char*, int = -1) const;
++ int _gsub(const char*, int, const char* ,int);
++ int _gsub(const Regex&, const char*, int);
++ SubString _substr(int, int);
++
++public:
++
++
++
++ String();
++ String(const String& x);
++ String(const SubString& x);
++ String(const char* t);
++ String(const char* t, int len);
++ String(char c);
++
++ ~String();
++
++ String& operator = (const String& y);
++ String& operator = (const char* y);
++ String& operator = (char c);
++ String& operator = (const SubString& y);
++
++
++
++ String& operator += (const String& y);
++ String& operator += (const SubString& y);
++ String& operator += (const char* t);
++ String& operator += (char c);
++
++ void prepend(const String& y);
++ void prepend(const SubString& y);
++ void prepend(const char* t);
++ void prepend(char c);
++
++
++
++
++
++ friend inline void cat(const String&, const String&, String&);
++ friend inline void cat(const String&, const SubString&, String&);
++ friend inline void cat(const String&, const char*, String&);
++ friend inline void cat(const String&, char, String&);
++
++ friend inline void cat(const SubString&, const String&, String&);
++ friend inline void cat(const SubString&, const SubString&, String&);
++ friend inline void cat(const SubString&, const char*, String&);
++ friend inline void cat(const SubString&, char, String&);
++
++ friend inline void cat(const char*, const String&, String&);
++ friend inline void cat(const char*, const SubString&, String&);
++ friend inline void cat(const char*, const char*, String&);
++ friend inline void cat(const char*, char, String&);
++
++
++
++
++
++ friend inline void cat(const String&,const String&, const String&,String&);
++ friend inline void cat(const String&,const String&,const SubString&,String&);
++ friend inline void cat(const String&,const String&, const char*, String&);
++ friend inline void cat(const String&,const String&, char, String&);
++ friend inline void cat(const String&,const SubString&,const String&,String&);
++ inline friend void cat(const String&,const SubString&,const SubString&,String&);
++ friend inline void cat(const String&,const SubString&, const char*, String&);
++ friend inline void cat(const String&,const SubString&, char, String&);
++ friend inline void cat(const String&,const char*, const String&, String&);
++ friend inline void cat(const String&,const char*, const SubString&, String&);
++ friend inline void cat(const String&,const char*, const char*, String&);
++ friend inline void cat(const String&,const char*, char, String&);
++
++ friend inline void cat(const char*, const String&, const String&,String&);
++ friend inline void cat(const char*,const String&,const SubString&,String&);
++ friend inline void cat(const char*,const String&, const char*, String&);
++ friend inline void cat(const char*,const String&, char, String&);
++ friend inline void cat(const char*,const SubString&,const String&,String&);
++ friend inline void cat(const char*,const SubString&,const SubString&,String&);
++ friend inline void cat(const char*,const SubString&, const char*, String&);
++ friend inline void cat(const char*,const SubString&, char, String&);
++ friend inline void cat(const char*,const char*, const String&, String&);
++ friend inline void cat(const char*,const char*, const SubString&, String&);
++ friend inline void cat(const char*,const char*, const char*, String&);
++ friend inline void cat(const char*,const char*, char, String&);
++
++
++
++
++
++
++ int index(char c, int startpos = 0) const;
++ int index(const String& y, int startpos = 0) const;
++ int index(const SubString& y, int startpos = 0) const;
++ int index(const char* t, int startpos = 0) const;
++ int index(const Regex& r, int startpos = 0) const;
++
++
++
++ int contains(char c) const;
++ int contains(const String& y) const;
++ int contains(const SubString& y) const;
++ int contains(const char* t) const;
++ int contains(const Regex& r) const;
++
++
++
++
++ int contains(char c, int pos) const;
++ int contains(const String& y, int pos) const;
++ int contains(const SubString& y, int pos) const;
++ int contains(const char* t, int pos) const;
++ int contains(const Regex& r, int pos) const;
++
++
++
++ int matches(char c, int pos = 0) const;
++ int matches(const String& y, int pos = 0) const;
++ int matches(const SubString& y, int pos = 0) const;
++ int matches(const char* t, int pos = 0) const;
++ int matches(const Regex& r, int pos = 0) const;
++
++
++
++ int freq(char c) const;
++ int freq(const String& y) const;
++ int freq(const SubString& y) const;
++ int freq(const char* t) const;
++
++
++
++
++
++
++
++ SubString at(int pos, int len);
++ SubString operator () (int pos, int len);
++
++ SubString at(const String& x, int startpos = 0);
++ SubString at(const SubString& x, int startpos = 0);
++ SubString at(const char* t, int startpos = 0);
++ SubString at(char c, int startpos = 0);
++ SubString at(const Regex& r, int startpos = 0);
++
++ SubString before(int pos);
++ SubString before(const String& x, int startpos = 0);
++ SubString before(const SubString& x, int startpos = 0);
++ SubString before(const char* t, int startpos = 0);
++ SubString before(char c, int startpos = 0);
++ SubString before(const Regex& r, int startpos = 0);
++
++ SubString through(int pos);
++ SubString through(const String& x, int startpos = 0);
++ SubString through(const SubString& x, int startpos = 0);
++ SubString through(const char* t, int startpos = 0);
++ SubString through(char c, int startpos = 0);
++ SubString through(const Regex& r, int startpos = 0);
++
++ SubString from(int pos);
++ SubString from(const String& x, int startpos = 0);
++ SubString from(const SubString& x, int startpos = 0);
++ SubString from(const char* t, int startpos = 0);
++ SubString from(char c, int startpos = 0);
++ SubString from(const Regex& r, int startpos = 0);
++
++ SubString after(int pos);
++ SubString after(const String& x, int startpos = 0);
++ SubString after(const SubString& x, int startpos = 0);
++ SubString after(const char* t, int startpos = 0);
++ SubString after(char c, int startpos = 0);
++ SubString after(const Regex& r, int startpos = 0);
++
++
++
++
++
++ void del(int pos, int len);
++
++
++
++ void del(const String& y, int startpos = 0);
++ void del(const SubString& y, int startpos = 0);
++ void del(const char* t, int startpos = 0);
++ void del(char c, int startpos = 0);
++ void del(const Regex& r, int startpos = 0);
++
++
++
++ int gsub(const String& pat, const String& repl);
++ int gsub(const SubString& pat, const String& repl);
++ int gsub(const char* pat, const String& repl);
++ int gsub(const char* pat, const char* repl);
++ int gsub(const Regex& pat, const String& repl);
++
++
++
++
++
++ friend int split(const String& x, String res[], int maxn,
++ const String& sep);
++ friend int split(const String& x, String res[], int maxn,
++ const Regex& sep);
++
++ friend String common_prefix(const String& x, const String& y,
++ int startpos = 0);
++ friend String common_suffix(const String& x, const String& y,
++ int startpos = -1);
++ friend String replicate(char c, int n);
++ friend String replicate(const String& y, int n);
++ friend String join(String src[], int n, const String& sep);
++
++
++
++ friend inline String reverse(const String& x);
++ friend inline String upcase(const String& x);
++ friend inline String downcase(const String& x);
++ friend inline String capitalize(const String& x);
++
++
++
++ void reverse();
++ void upcase();
++ void downcase();
++ void capitalize();
++
++
++
++ char& operator [] (int i);
++ const char& operator [] (int i) const;
++ char elem(int i) const;
++ char firstchar() const;
++ char lastchar() const;
++
++
++
++ operator const char*() const;
++ const char* chars() const;
++
++
++
++
++ friend inline ostream& operator<<(ostream& s, const String& x);
++ friend ostream& operator<<(ostream& s, const SubString& x);
++ friend istream& operator>>(istream& s, String& x);
++
++ friend int readline(istream& s, String& x,
++ char terminator = '\n',
++ int discard_terminator = 1);
++
++
++
++ unsigned int length() const;
++ int empty() const;
++
++
++ void alloc(int newsize);
++
++
++
++ int allocation() const;
++
++
++ void error(const char* msg) const;
++
++ int OK() const;
++};
++
++typedef String StrTmp;
++
++
++
++int compare(const String& x, const String& y);
++int compare(const String& x, const SubString& y);
++int compare(const String& x, const char* y);
++int compare(const SubString& x, const String& y);
++int compare(const SubString& x, const SubString& y);
++int compare(const SubString& x, const char* y);
++int fcompare(const String& x, const String& y);
++
++extern StrRep _nilStrRep;
++extern String _nilString;
++
++
++
++inline unsigned int String::length() const { return rep->len; }
++inline int String::empty() const { return rep->len == 0; }
++inline const char* String::chars() const { return &(rep->s[0]); }
++inline int String::allocation() const { return rep->sz; }
++
++inline unsigned int SubString::length() const { return len; }
++inline int SubString::empty() const { return len == 0; }
++inline const char* SubString::chars() const { return &(S.rep->s[pos]); }
++
++
++
++
++inline String::String()
++ : rep(&_nilStrRep) {}
++inline String::String(const String& x)
++ : rep(Scopy(0, x.rep)) {}
++inline String::String(const char* t)
++ : rep(Salloc(0, t, -1, -1)) {}
++inline String::String(const char* t, int tlen)
++ : rep(Salloc(0, t, tlen, tlen)) {}
++inline String::String(const SubString& y)
++ : rep(Salloc(0, y.chars(), y.length(), y.length())) {}
++inline String::String(char c)
++ : rep(Salloc(0, &c, 1, 1)) {}
++
++inline String::~String() { if (rep != &_nilStrRep) delete rep; }
++
++inline SubString::SubString(const SubString& x)
++ :S(x.S), pos(x.pos), len(x.len) {}
++inline SubString::SubString(String& x, int first, int l)
++ :S(x), pos(first), len(l) {}
++
++inline SubString::~SubString() {}
++
++
++
++inline String& String::operator = (const String& y)
++{
++ rep = Scopy(rep, y.rep);
++ return *this;
++}
++
++inline String& String::operator=(const char* t)
++{
++ rep = Salloc(rep, t, -1, -1);
++ return *this;
++}
++
++inline String& String::operator=(const SubString& y)
++{
++ rep = Salloc(rep, y.chars(), y.length(), y.length());
++ return *this;
++}
++
++inline String& String::operator=(char c)
++{
++ rep = Salloc(rep, &c, 1, 1);
++ return *this;
++}
++
++
++inline SubString& SubString::operator = (const char* ys)
++{
++ assign(0, ys);
++ return *this;
++}
++
++inline SubString& SubString::operator = (char ch)
++{
++ assign(0, &ch, 1);
++ return *this;
++}
++
++inline SubString& SubString::operator = (const String& y)
++{
++ assign(y.rep, y.chars(), y.length());
++ return *this;
++}
++
++inline SubString& SubString::operator = (const SubString& y)
++{
++ assign(y.S.rep, y.chars(), y.length());
++ return *this;
++}
++
++
++
++inline void cat(const String& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const String& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const SubString& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const SubString& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const SubString& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const SubString& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const char* x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, y, -1);
++}
++
++inline void cat(const char* x, char y, String& r)
++{
++ r.rep = Scat(r.rep, x, -1, &y, 1);
++}
++
++inline void cat(const String& a, const String& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const String& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const String& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const String& a, const String& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const String& a, const SubString& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const SubString& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const String& a, const SubString& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const String& a, const SubString& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const String& a, const char* x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
++}
++
++inline void cat(const String& a, const char* x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
++}
++
++inline void cat(const String& a, const char* x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y, -1);
++}
++
++inline void cat(const String& a, const char* x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, &y, 1);
++}
++
++
++inline void cat(const char* a, const String& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const String& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const String& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const char* a, const String& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const char* a, const SubString& x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const SubString& x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
++}
++
++inline void cat(const char* a, const SubString& x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
++}
++
++inline void cat(const char* a, const SubString& x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
++}
++
++inline void cat(const char* a, const char* x, const String& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* a, const char* x, const SubString& y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
++}
++
++inline void cat(const char* a, const char* x, const char* y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, y, -1);
++}
++
++inline void cat(const char* a, const char* x, char y, String& r)
++{
++ r.rep = Scat(r.rep, a, -1, x, -1, &y, 1);
++}
++
++
++
++
++inline String& String::operator +=(const String& y)
++{
++ cat(*this, y, *this);
++ return *this;
++}
++
++inline String& String::operator +=(const SubString& y)
++{
++ cat(*this, y, *this);
++ return *this;
++}
++
++inline String& String::operator += (const char* y)
++{
++ cat(*this, y, *this);
++ return *this;
++}
++
++inline String& String:: operator +=(char y)
++{
++ cat(*this, y, *this);
++ return *this;
++}
++
++
++
++
++
++inline String operator + (const String& x, const String& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const String& x, const SubString& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const String& x, const char* y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const String& x, char y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, const String& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, const SubString& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, const char* y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const SubString& x, char y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const char* x, const String& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String operator + (const char* x, const SubString& y) return r;
++{
++ cat(x, y, r);
++}
++
++inline String reverse(const String& x) return r;
++{
++ r.rep = Sreverse(x.rep, r.rep);
++}
++
++inline String upcase(const String& x) return r;
++{
++ r.rep = Supcase(x.rep, r.rep);
++}
++
++inline String downcase(const String& x) return r;
++{
++ r.rep = Sdowncase(x.rep, r.rep);
++}
++
++inline String capitalize(const String& x) return r;
++{
++ r.rep = Scapitalize(x.rep, r.rep);
++}
++
++
++
++
++
++inline void String::prepend(const String& y)
++{
++ rep = Sprepend(rep, y.chars(), y.length());
++}
++
++inline void String::prepend(const char* y)
++{
++ rep = Sprepend(rep, y, -1);
++}
++
++inline void String::prepend(char y)
++{
++ rep = Sprepend(rep, &y, 1);
++}
++
++inline void String::prepend(const SubString& y)
++{
++ rep = Sprepend(rep, y.chars(), y.length());
++}
++
++
++
++
++inline void String::reverse()
++{
++ rep = Sreverse(rep, rep);
++}
++
++
++inline void String::upcase()
++{
++ rep = Supcase(rep, rep);
++}
++
++
++inline void String::downcase()
++{
++ rep = Sdowncase(rep, rep);
++}
++
++
++inline void String::capitalize()
++{
++ rep = Scapitalize(rep, rep);
++}
++
++
++
++inline char& String::operator [] (int i)
++{
++ if (((unsigned)i) >= length()) error("invalid index");
++ return rep->s[i];
++}
++
++inline const char& String::operator [] (int i) const
++{
++ if (((unsigned)i) >= length()) error("invalid index");
++ return rep->s[i];
++}
++
++inline char String::elem (int i) const
++{
++ if (((unsigned)i) >= length()) error("invalid index");
++ return rep->s[i];
++}
++
++inline char String::firstchar() const
++{
++ return elem(0);
++}
++
++inline char String::lastchar() const
++{
++ return elem(length() - 1);
++}
++
++
++
++inline int String::index(char c, int startpos) const
++{
++ return search(startpos, length(), c);
++}
++
++inline int String::index(const char* t, int startpos) const
++{
++ return search(startpos, length(), t);
++}
++
++inline int String::index(const String& y, int startpos) const
++{
++ return search(startpos, length(), y.chars(), y.length());
++}
++
++inline int String::index(const SubString& y, int startpos) const
++{
++ return search(startpos, length(), y.chars(), y.length());
++}
++
++inline int String::index(const Regex& r, int startpos) const
++{
++ int unused; return r.search(chars(), length(), unused, startpos);
++}
++
++inline int String::contains(char c) const
++{
++ return search(0, length(), c) >= 0;
++}
++
++inline int String::contains(const char* t) const
++{
++ return search(0, length(), t) >= 0;
++}
++
++inline int String::contains(const String& y) const
++{
++ return search(0, length(), y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(const SubString& y) const
++{
++ return search(0, length(), y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(char c, int p) const
++{
++ return match(p, length(), 0, &c, 1) >= 0;
++}
++
++inline int String::contains(const char* t, int p) const
++{
++ return match(p, length(), 0, t) >= 0;
++}
++
++inline int String::contains(const String& y, int p) const
++{
++ return match(p, length(), 0, y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(const SubString& y, int p) const
++{
++ return match(p, length(), 0, y.chars(), y.length()) >= 0;
++}
++
++inline int String::contains(const Regex& r) const
++{
++ int unused; return r.search(chars(), length(), unused, 0) >= 0;
++}
++
++inline int String::contains(const Regex& r, int p) const
++{
++ return r.match(chars(), length(), p) >= 0;
++}
++
++
++inline int String::matches(const SubString& y, int p) const
++{
++ return match(p, length(), 1, y.chars(), y.length()) >= 0;
++}
++
++inline int String::matches(const String& y, int p) const
++{
++ return match(p, length(), 1, y.chars(), y.length()) >= 0;
++}
++
++inline int String::matches(const char* t, int p) const
++{
++ return match(p, length(), 1, t) >= 0;
++}
++
++inline int String::matches(char c, int p) const
++{
++ return match(p, length(), 1, &c, 1) >= 0;
++}
++
++inline int String::matches(const Regex& r, int p) const
++{
++ int l = (p < 0)? -p : length() - p;
++ return r.match(chars(), length(), p) == l;
++}
++
++
++inline int SubString::contains(const char* t) const
++{
++ return S.search(pos, pos+len, t) >= 0;
++}
++
++inline int SubString::contains(const String& y) const
++{
++ return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
++}
++
++inline int SubString::contains(const SubString& y) const
++{
++ return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
++}
++
++inline int SubString::contains(char c) const
++{
++ return S.search(pos, pos+len, c) >= 0;
++}
++
++inline int SubString::contains(const Regex& r) const
++{
++ int unused; return r.search(chars(), len, unused, 0) >= 0;
++}
++
++inline int SubString::matches(const Regex& r) const
++{
++ return r.match(chars(), len, 0) == len;
++}
++
++
++inline int String::gsub(const String& pat, const String& r)
++{
++ return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
++}
++
++inline int String::gsub(const SubString& pat, const String& r)
++{
++ return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
++}
++
++inline int String::gsub(const Regex& pat, const String& r)
++{
++ return _gsub(pat, r.chars(), r.length());
++}
++
++inline int String::gsub(const char* pat, const String& r)
++{
++ return _gsub(pat, -1, r.chars(), r.length());
++}
++
++inline int String::gsub(const char* pat, const char* r)
++{
++ return _gsub(pat, -1, r, -1);
++}
++
++
++
++inline ostream& operator<<(ostream& s, const String& x)
++{
++ s << x.chars(); return s;
++}
++
++
++
++inline int operator==(const String& x, const String& y)
++{
++ return compare(x, y) == 0;
++}
++
++inline int operator!=(const String& x, const String& y)
++{
++ return compare(x, y) != 0;
++}
++
++inline int operator>(const String& x, const String& y)
++{
++ return compare(x, y) > 0;
++}
++
++inline int operator>=(const String& x, const String& y)
++{
++ return compare(x, y) >= 0;
++}
++
++inline int operator<(const String& x, const String& y)
++{
++ return compare(x, y) < 0;
++}
++
++inline int operator<=(const String& x, const String& y)
++{
++ return compare(x, y) <= 0;
++}
++
++inline int operator==(const String& x, const SubString& y)
++{
++ return compare(x, y) == 0;
++}
++
++inline int operator!=(const String& x, const SubString& y)
++{
++ return compare(x, y) != 0;
++}
++
++inline int operator>(const String& x, const SubString& y)
++{
++ return compare(x, y) > 0;
++}
++
++inline int operator>=(const String& x, const SubString& y)
++{
++ return compare(x, y) >= 0;
++}
++
++inline int operator<(const String& x, const SubString& y)
++{
++ return compare(x, y) < 0;
++}
++
++inline int operator<=(const String& x, const SubString& y)
++{
++ return compare(x, y) <= 0;
++}
++
++inline int operator==(const String& x, const char* t)
++{
++ return compare(x, t) == 0;
++}
++
++inline int operator!=(const String& x, const char* t)
++{
++ return compare(x, t) != 0;
++}
++
++inline int operator>(const String& x, const char* t)
++{
++ return compare(x, t) > 0;
++}
++
++inline int operator>=(const String& x, const char* t)
++{
++ return compare(x, t) >= 0;
++}
++
++inline int operator<(const String& x, const char* t)
++{
++ return compare(x, t) < 0;
++}
++
++inline int operator<=(const String& x, const char* t)
++{
++ return compare(x, t) <= 0;
++}
++
++inline int operator==(const SubString& x, const String& y)
++{
++ return compare(y, x) == 0;
++}
++
++inline int operator!=(const SubString& x, const String& y)
++{
++ return compare(y, x) != 0;
++}
++
++inline int operator>(const SubString& x, const String& y)
++{
++ return compare(y, x) < 0;
++}
++
++inline int operator>=(const SubString& x, const String& y)
++{
++ return compare(y, x) <= 0;
++}
++
++inline int operator<(const SubString& x, const String& y)
++{
++ return compare(y, x) > 0;
++}
++
++inline int operator<=(const SubString& x, const String& y)
++{
++ return compare(y, x) >= 0;
++}
++
++inline int operator==(const SubString& x, const SubString& y)
++{
++ return compare(x, y) == 0;
++}
++
++inline int operator!=(const SubString& x, const SubString& y)
++{
++ return compare(x, y) != 0;
++}
++
++inline int operator>(const SubString& x, const SubString& y)
++{
++ return compare(x, y) > 0;
++}
++
++inline int operator>=(const SubString& x, const SubString& y)
++{
++ return compare(x, y) >= 0;
++}
++
++inline int operator<(const SubString& x, const SubString& y)
++{
++ return compare(x, y) < 0;
++}
++
++inline int operator<=(const SubString& x, const SubString& y)
++{
++ return compare(x, y) <= 0;
++}
++
++inline int operator==(const SubString& x, const char* t)
++{
++ return compare(x, t) == 0;
++}
++
++inline int operator!=(const SubString& x, const char* t)
++{
++ return compare(x, t) != 0;
++}
++
++inline int operator>(const SubString& x, const char* t)
++{
++ return compare(x, t) > 0;
++}
++
++inline int operator>=(const SubString& x, const char* t)
++{
++ return compare(x, t) >= 0;
++}
++
++inline int operator<(const SubString& x, const char* t)
++{
++ return compare(x, t) < 0;
++}
++
++inline int operator<=(const SubString& x, const char* t)
++{
++ return compare(x, t) <= 0;
++}
++
++
++
++
++inline SubString String::_substr(int first, int l)
++{
++ if (first < 0 || (unsigned)(first + l) > length() )
++ return SubString(_nilString, 0, 0) ;
++ else
++ return SubString(*this, first, l);
++}
++
++
++
++
++
++#define booleen_hh
++
++
++typedef int booleen;
++
++const booleen VRAI=1;
++const booleen FAUX=0;
++
++
++
++
++#define valeur_bidon 12345678
++
++#define fors(type, i, imin, imax) for(type i=imin; i< imax; i++)
++#define fore(type, i, imin, imax) for(type i=imin; i<=imax; i++)
++
++void verif_nb_param(int argc, char* argv[], int nb_params);
++
++booleen f_exists(String nom);
++
++
++template<class Type>
++inline Type carre(const Type x)
++{
++ return x*x;
++}
++
++template<class Type>
++inline Type cube(const Type x)
++{
++ return x*x*x;
++}
++
++template<class Type>
++inline Type rac3(const Type x)
++{
++ if(fabs(x)<1E-5)
++ return 0;
++ else
++ if(x>0)
++ return exp(log(x)/3);
++ else
++ return -exp(log(-x)/3);
++}
++
++template<class Type>
++inline Type min(const Type a,const Type b)
++{
++ return (a>b)?b:a;
++}
++
++template<class Type>
++inline Type max(const Type a,const Type b)
++{
++ return (a<b)?b:a;
++}
++
++template<class Type>
++inline Type min(const Type a,const Type b,const Type c)
++{
++ return min(a,min(b,c));
++}
++
++template<class Type>
++inline Type max(const Type a,const Type b,const Type c)
++{
++ return max(a,max(b,c));
++}
++
++template <class Type>
++inline void echange(Type& a,Type& b)
++{
++ Type t=a;
++ a=b;
++ b=t;
++}
++
++
++String i2S(int n,int l=0);
++
++template <class Type>
++inline booleen dans(Type x, Type a, Type b)
++{
++ return (a<=x) && (x<=b);
++}
++
++template <class Type>
++inline Type mabs(Type x)
++{
++ return (x<0) ? -x : x ;
++}
++
++template <class Type>
++inline booleen dans2(Type x, Type a, Type b)
++
++{
++ return mabs(x-(a+b)/2) <= mabs((a-b)/2) ;
++}
++
++template <class Type>
++inline booleen proche(Type x, Type y, Type eps)
++{
++ return mabs(x-y)<eps;
++}
++
++template <class Type>
++inline int arrondi(Type x)
++{
++ return int(x+0.5);
++}
++
++template<class Type>
++unsigned char arrondi_ng(Type x)
++{
++ if((-0.5<x) && (x<255.5))
++ return (unsigned char)(x+0.5);
++ else
++ {
++ if(x<-3.0 || x>268.0)
++ cerr<<"arrondi_ng : attention x= "<<x<<endl;
++
++ if(x<0.0)
++ return 0;
++ else
++ return 255;
++ }
++}
++
++template<class Type>
++unsigned char arrondi_ng_err(Type x)
++{
++ if((-0.5<x) && (x<255.5))
++ return (unsigned char)(x+0.5);
++ else
++ {
++ if(x<0.0)
++ return 0;
++ else
++ return 255;
++ }
++}
++
++inline int nb_diff2(int a,int b)
++{
++ if(a==b)
++ return 1;
++ else
++ return 2;
++}
++
++inline int nb_diff3(int a,int b,int c)
++{
++ if(a==b || a==c)
++ return nb_diff2(b,c);
++ else
++ return 1+nb_diff2(b,c);
++}
++
++inline int nb_diff4(int a,int b,int c,int d)
++{
++ if(a==b || a==c || a==d)
++ return nb_diff3(b,c,d);
++ else
++ return 1+nb_diff3(b,c,d);
++}
++
++float echMSB(float a);
++
++void plante();
++void arrete();
++
++void touche();
++
++template<class Type>
++void lis_param(istream& f, Type& param)
++{
++ f>>param;
++ f.ignore(20000,'\n');
++}
++
++void lis_chaine(istream& s, String chaine);
++
++template<class Type_dest, class Type_source>
++void convert(Type_dest& dest, const Type_source& source)
++{
++ dest=source;
++}
++
++
++
++
++struct Vect2Dent
++{
++ int di;
++ int dj;
++};
++
++
++
++
++
++
++struct depl2D
++{
++ double x;
++ double y;
++ depl2D() : x(0.0), y(0.0)
++ { }
++
++
++ depl2D(double xx, double yy) : x(xx), y(yy)
++ { }
++ double amplitude()
++ {
++ return max(mabs(x),mabs(y));
++ }
++};
++
++ostream& operator<<(ostream& s, depl2D m);
++
++class Mouvement
++{
++private:
++ Mouvement* read_mv(istream& s);
++protected:
++ double t_x;
++ double t_y;
++ double centre_x;
++ double centre_y;
++public:
++ Mouvement();
++ Mouvement(double i_t_x, double i_t_y, double i_centre_x, double i_centre_y);
++ virtual void Id()=0;
++ virtual void centre(double x,double y)=0;
++ virtual void applique(double& xx, double& yy, double x, double y) const=0;
++ virtual void applique(float& xx, float& yy, float x, float y) const=0;
++ virtual depl2D calc_depl(double x, double y)=0;
++ double Centre_x() const
++ {
++ return centre_x;
++ }
++ double Centre_y() const
++ {
++ return centre_y;
++ }
++
++ virtual int nb_param() const=0;
++
++
++ virtual void init_from_vect_d(const double param[])=0;
++ virtual void init_vect_d(double param[]) const=0;
++ virtual void init_from_vect_f(const float param[])=0;
++ virtual void init_vect_f(float param[]) const=0;
++
++ virtual Mouvement* clone() const=0;
++ virtual String nom() const=0;
++ virtual void dump(ostream& s) const=0;
++
++ virtual booleen trop_grand(float seuil) const=0;
++ booleen trop_grand2(float seuil, float seuil_t) const;
++};
++
++ostream& operator<<(ostream& s, const Mouvement& m);
++Mouvement* read_mv(istream& s);
++
++
++
++
++class AFF;
++
++class LS : public Mouvement
++{
++protected:
++ double k;
++ double theta;
++public:
++ LS();
++ LS(double i_t_x, double i_t_y, double i_k, double i_theta, double i_centre_x, double i_centre_y);
++ LS(istream& s);
++ LS(const AFF& aff);
++ int nb_param() const;
++ void update(double d_t_x, double d_t_y, double d_k, double d_theta);
++ void init_from_vect_d(const double param[]);
++ void init_vect_d(double param[]) const;
++ void init_from_vect_f(const float param[]);
++ void init_vect_f(float param[]) const;
++ friend class AFF;
++ void dump(ostream& s) const;
++};
++
++ostream& operator<<(ostream& s, const LS& m);
++
++
++
++
++#define AFF_hh
++
++
++
++class LS;
++
++class AFF: public Mouvement
++{
++protected:
++ double a;
++ double b;
++ double c;
++ double d;
++public:
++ AFF();
++ AFF(double i_t_x, double i_t_y,
++ double i_a, double i_b, double i_c, double i_d,
++ double i_centre_x, double i_centre_y);
++ AFF(istream& s);
++ AFF(const LS& ls);
++ int nb_param() const;
++ void init_from_vect_d(const double param[]);
++ void init_vect_d(double param[]) const;
++ void init_from_vect_f(const float param[]);
++ void init_vect_f(float param[]) const;
++
++ friend class LS;
++ void dump(ostream& s) const;
++};
++
++ostream& operator<<(ostream& s, const AFF& m);
++
++
++
++
++
++
++
++
++
++LS::LS() :
++ k(0.0), theta(0.0)
++{ }
++
++LS::LS(double i_t_x, double i_t_y,
++ double i_k, double i_theta,
++ double i_centre_x, double i_centre_y) :
++ Mouvement(i_t_x, i_t_y, i_centre_x, i_centre_y),
++ k(i_k),
++ theta(i_theta)
++{ }
++
++LS::LS(istream& s)
++{
++ s>>k>>theta>>t_x>>theta>>k>>t_y>>centre_x>>centre_y;
++}
++
++LS::LS(const AFF& aff): Mouvement(aff.t_x, aff.t_y, aff.centre_x, aff.centre_y)
++{
++ const double eps_k=1E-6;
++ if(mabs(aff.a-aff.d)>eps_k)
++ {
++ cout<<"AFF_2_LS : delta k < "<<eps_k<<endl;
++ cout<<aff.a<<endl<<aff.d<<endl;
++ plante();
++ }
++ else
++ k=(aff.a+aff.d)/2;
++
++ const double eps_theta=1E-6;
++ if(mabs(aff.c+aff.b)>eps_theta)
++ {
++ cout<<"AFF_2_LS : delta theta < "<<eps_theta<<endl;
++ plante();
++ }
++ else
++ theta=(aff.c-aff.b)/2;
++}
++
++int LS::nb_param() const
++{
++ return 4;
++}
++
++void LS::update(double d_t_x,
++ double d_t_y,
++ double d_k,
++ double d_theta)
++{
++ t_x+=d_t_x;
++ t_y+=d_t_y;
++ k+=d_k;
++ theta+=d_theta;
++}
++
++void LS::init_from_vect_d(const double param[])
++{
++ t_x=param[0];
++ t_y=param[1];
++ k=param[2];
++ theta=param[3];
++}
++
++void LS::init_vect_d(double param[]) const
++{
++ param[0]=t_x;
++ param[1]=t_y;
++ param[2]=k;
++ param[3]=theta;
++}
++
++void LS::init_from_vect_f(const float param[])
++{
++ t_x=param[0];
++ t_y=param[1];
++ k=param[2];
++ theta=param[3];
++}
++
++void LS::init_vect_f(float param[]) const
++{
++ param[0]=t_x;
++ param[1]=t_y;
++ param[2]=k;
++ param[3]=theta;
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++void LS::dump(ostream& s) const
++{
++ const int largeur=14;
++ s.setf(ios::left,ios::adjustfield);
++ s<<nom()<<endl
++ <<setw(largeur)<<k<<setw(largeur)<<-theta<<setw(largeur)<<t_x<<endl
++ <<setw(largeur)<<theta<<setw(largeur)<<k<<setw(largeur)<<t_y<<endl
++ <<centre_x<<' '<<centre_y<<endl;
++}
++
++ostream& operator<<(ostream& s, const LS& m)
++{
++ m.dump(s);
++ return s;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb102.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb102.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb102.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb102.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,34 @@
++// Error: intenral compiler error on 1998/05/28 snapshot.
++#include <stdio.h>
++#include <stdlib.h>
++
++void evilRises (void **ptr)
++{
++ int *pi;
++
++ pi = new int;
++
++ *pi = 0;
++
++ *ptr = (void *)pi;
++}
++
++int main (int argc, char *argv[])
++{
++#ifdef WORKAROUND
++ union foo
++#else
++ union
++#endif
++ {
++ int a;
++ int b;
++ int c;
++ } *fred, barney;
++
++ evilRises((void **)&fred);
++
++ barney = *fred;
++
++ return EXIT_SUCCESS;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb103.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb103.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb103.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb103.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Error: Internal compiler error in 2.7.2 & EGCS 1.0.0
++
++template <int nlimb, int i>
++inline unsigned f (unsigned* ptr);
++template <int nlimb>
++inline unsigned f<nlimb,nlimb> (unsigned* ptr)
++{ //ERROR - partial specialization of function?
++ return 1;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb104.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb104.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb104.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb104.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++#include <string.h>
++
++class SomeClass_t {
++public:
++ SomeClass_t () : x (11) {}
++protected:
++ float x;
++};
++
++class DynamicOnly_t {
++public:
++ static DynamicOnly_t* create (const char* name = "UNDEF",
++ const SomeClass_t& somec = *(new SomeClass_t
++())) {
++ return new DynamicOnly_t (name, somec);
++ }
++ DynamicOnly_t (const char* name, const SomeClass_t& somec) :
++ m_somec (somec) {
++ strncpy (m_Name, name, sizeof (m_Name));
++ }
++private:
++ SomeClass_t m_somec;
++ char m_Name[255];
++};
++
++int main (int argc, char* argv[]) {
++ DynamicOnly_t* ptr = DynamicOnly_t::create ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb105.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb105.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb105.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb105.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++template< class T >
++void sort( T* t, int n )
++ {
++ struct
++/*line5*/ {
++ int operator()(T i, T j)
++ {
++ return (i < j) ? -1 : ((j < i) ? 1 : 0) ;
++ }
++ } c ;
++ sort(t, n, c, 0) ;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Skip if not native
++// Special g++ Options: -O2 -fPIC
++// Build don't link:
++struct T
++{
++ char* f1;
++ int f2;
++};
++
++void f(T*);
++int g();
++
++extern char a1[];
++
++inline int m(int a, int b) {return b < a ? 2 : 1;}
++
++void
++h()
++{
++ T a[10];
++ int i(0);
++
++ bool c;
++ if (c)
++ {
++ a[i++].f1 = "asf";
++ f(a);
++ i = 0;
++ }
++
++ a[i].f1 = &a1[1];
++ a[i].f2 = m(1, g());
++ i++;
++
++ a[i].f1 = "zxv";
++ a[i].f2 = 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb107.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb107.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb107.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb107.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++template <class T>
++struct X
++{
++ virtual void f(int) const;
++};
++
++template <class T>
++struct Y: public X<T>
++{
++ virtual void f(int) const;
++};
++
++template <class T>
++void Y<T>::f(int) const
++{
++}
++
++template <>
++void Y<bool>::f(int) const;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb108.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb108.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb108.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb108.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++class X
++{
++ public:
++ virtual void f() const = 0;
++};
++
++template <class T>
++class Y: public X
++{
++ public:
++ virtual void f() const;
++};
++
++template <class T>
++void Y<T>::f() const
++{
++}
++
++template <>
++void Y<bool>::f() const;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,71 @@
++#include<map>
++#include<iostream.h>
++#include<vector>
++#include<string>
++
++// empty parameter class with a minimal set of operations
++// if there are no weights for edges necessary
++struct Empty
++{
++ public:
++ Empty(int=0) {}
++ bool operator<(const Empty&) const { return true;}
++};
++inline ostream& operator<<(ostream& os, const Empty&) { return os;}
++inline istream& operator>>(istream& is, Empty& ) { return is;}
++
++
++template<class VertexType, class EdgeType>
++class Graph
++{
++ public:
++ // public type interface
++ typedef map<int, EdgeType > Successor;
++ typedef pair<VertexType, Successor> vertex;
++ typedef vector<vertex> GraphType;
++ typedef typename GraphType::iterator iterator;
++ typedef typename GraphType::const_iterator const_iterator;
++
++ // a lot of stuff deleted ....
++
++ private:
++ bool directed;
++ GraphType C; // container
++ ostream* pOut;
++}; // ERROR - candidates
++
++// all graph-methods delet
++template<class VertexType, class EdgeType>
++ostream& operator<<(ostream& os, Graph<VertexType,EdgeType>& G)
++{
++ // display of vertices with successors
++ for(int i = 0; i < G.size(); ++i) // ERROR - no size function
++ {
++ os << G[i].first << " <"; // ERROR - no index operator
++
++ // The compiler does not like this line!!!!!!
++ typename Graph<VertexType, EdgeType>::Successor::iterator
++ startN = G[i].second.begin(), // ERROR - no index operator
++ endN = G[i].second.end(); // ERROR - no index operator
++
++ while(startN != endN)
++ {
++ os << G[(*startN).first].first << ' ' // vertex
++ << (*startN).second << ' '; // ERROR - no index operator
++ ++startN;
++ }
++ os << ">\n";
++ }
++ return os;
++}
++
++int main()
++{
++ // no edge weighting, therefore type Empty:
++ Graph<string, Empty> V(true); // ERROR - no bool constructor
++ // ReadGraph(V, "gra1.dat");
++
++ // display of vertices with successors
++ cout << V;
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb10.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb10.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb10.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb10.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Build don't link:
++template <int object_size>
++class _fixed_size_allocator
++{
++ private:
++
++ struct something { };
++ static something * asdf;
++
++ public:
++
++ static void delete_object ();
++};
++
++
++template <class T>
++class object_allocator
++{
++ private:
++
++ typedef _fixed_size_allocator<sizeof (T)> allocator;
++
++ public:
++
++ static void deallocate (T * p)
++ {
++ allocator::delete_object (reinterpret_cast<void *> (p));
++ }
++};
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb110.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb110.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb110.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb110.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++class X
++{
++ public:
++ virtual void f() const = 0;
++};
++
++template <class T>
++class Y: public X
++{
++ public:
++ virtual void f() const;
++};
++
++template <class T>
++void Y<T>::f() const
++{
++}
++
++template <>
++void Y<bool>::f() const;
++
++template <>
++void Y<bool>::f() const
++{
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb111.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb111.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb111.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb111.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++ int main() {
++ for(int i=1; i < 9; i++);
++ for(int i=1; i < 9; i++);
++
++ return 0;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb112.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb112.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb112.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb112.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++template <class STRUCT, class MEMBER> inline STRUCT *
++setback(MEMBER *bp, MEMBER STRUCT::*offset)
++{
++ // The implementation of this function may be platform dependend
++ if(!bp) return 0; // NULL pointers remain NULL
++ union { int i; MEMBER STRUCT::*of; } u; // Switch types. Casting won't
+++work.
++ u.of = offset;
++ return (STRUCT *) ((int) bp - u.i);
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb113.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb113.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb113.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb113.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++#include <iostream.h>
++
++class X : public std::streambuf
++{
++} ;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb114.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb114.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb114.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb114.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++#include <string.h>
++
++class SomeClass_t {
++public:
++ SomeClass_t () : x (11) {}
++protected:
++ float x;
++};
++
++class DynamicOnly_t {
++public:
++ static DynamicOnly_t* create (const char* name = "UNDEF",
++ const SomeClass_t& somec = *(new SomeClass_t
++())) {
++ return new DynamicOnly_t (name, somec);
++ }
++ DynamicOnly_t (const char* name, const SomeClass_t& somec) :
++ m_somec (somec) {
++ strncpy (m_Name, name, sizeof (m_Name));
++ }
++private:
++ SomeClass_t m_somec;
++ char m_Name[255];
++};
++
++int main (int argc, char* argv[]) {
++ DynamicOnly_t* ptr = DynamicOnly_t::create (); //*
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb115.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb115.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb115.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb115.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Special g++ Options: -O
++
++#include <iostream.h>
++#include <typeinfo>
++
++int main() {
++ int *i1, *i2;
++ cerr << (typeid(i1)==typeid(i2)) << endl;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb116.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb116.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb116.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb116.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++template <class INT>
++class b
++{
++private:
++ char a(int x)
++ {
++ union {
++ int i;
++ char c;
++ } val;
++ val.i = x;
++ return val.c;
++ };
++
++public:
++ b() {
++ }
++};
++
++int main() {
++ b<int> n;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb118.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb118.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb118.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb118.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Test for obsolete specialization syntax. Turn off -pedantic.
++// Special g++ Options:
++
++#include <iostream.h>
++#include <typeinfo>
++
++template <typename T>
++class A {
++public:
++ void test ();
++};
++
++template <typename T>
++void
++A<T>::test(){
++ cerr << "test for " << typeid(*this).name() << endl;
++}
++// Specialization declaration
++void
++A<double>::test();
++
++// Specialization definition
++void
++A<double>::test(){
++ cerr << "specialization for " << typeid(*this).name() << endl;
++}
++
++
++int
++main(){
++ A<int> ai;
++ A<double> ad;
++ ai.test();
++ ad.test();
++ return 0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb119.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb119.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb119.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb119.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++template<bool B>
++void f()
++{
++}
++
++int main()
++{
++ f<bool>(); // ERROR - .*
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb11.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb11.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb11.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb11.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++// Build don't link:
++
++template<int N1, int N2>
++struct meta_max {
++ enum { max = (N1 > N2) ? N1 : N2 };
++};
++
++struct X {
++ enum {
++ a = 0,
++ n = 0
++ };
++};
++
++template<class T1, class T2>
++struct Y {
++
++ enum {
++ a = T1::a + T2::a,
++
++ // NB: if the next line is changed to
++ // n = (T1::n > T2::n) ? T1::n : T2::n
++ // the problem goes away.
++
++ n = meta_max<T1::n,T2::n>::max
++ };
++};
++
++int z = Y<X,X>::a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb120.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb120.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb120.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb120.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++template<double functionToIntegrate(double)>
++double integrate(double a, double b, int numSamplePoints)
++{
++ // PRECONDITION(numSamplePoints > 1);
++ double delta = (b-a) / (numSamplePoints-1);
++ double sum = 0.;
++ for (int i=0; i < numSamplePoints; ++i)
++ sum += functionToIntegrate(a + i*delta);
++ return sum * (b-a) / numSamplePoints;
++}
++
++inline double myFunction(double x)
++{
++ return 1 / (1 + x);
++}
++
++// Example use
++int main() {
++double z = integrate<myFunction>(0.0, 1.0, 50);
++ return 0 ;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb121.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb121.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb121.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb121.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++//Build don't link:
++class A {
++private:
++ int i1_;
++public:
++ void f(int const i1 = 1); // ERROR - previous specification
++};
++
++void
++A::f(int const i1 = 1)
++{ // ERROR - duplicate default argument
++ i1_ = i1;
++}
++
++int
++main()
++{
++ A a;
++ a.f();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb122.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb122.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb122.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb122.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++// Disable -ansi -pedantic-errors because of GNU extension
++// Special g++ Options:
++template<class foo>
++class bar {
++public:
++ void baz() { (({ while( foo::baz() );})); }
++};
++template<class foo>
++void baz() { (({ while( foo::baz() );})); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb123.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb123.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb123.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb123.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Special g++ Options: -O2 -W
++// Build don't link:
++#include "stdio.h"
++
++void writeNote() throw( int )
++{
++ printf( "hello world\n" );
++ try { }
++ catch( int ){ throw; }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb124.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb124.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb124.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb124.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,3 @@
++//Build don't link:
++#include <stdexcept>
++class X : public std::runtime_error {};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// This is a crash test; we don't care how many normal errors we get.
++// excess errors test - XFAIL *-*-*
++
++struct test_box
++ {
++ void print(void);
++ };
++
++void test<class BOX> (test_box *); // ERROR - illegal code
++
++class test_square
++ {
++ friend void test<class BOX> (test_box *); // ERROR - does not match
++ }
++
++
++
++template <class BOX> void test(BOX *the_box) // ERROR - semicolon missing
++ {
++ the_box->print();
++ };
++
++template void test<> (test_box *);
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb126.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb126.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb126.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb126.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,29 @@
++#include <string.h>
++
++class SomeClass_t {
++public:
++ SomeClass_t () : x (11) {}
++protected:
++ float x;
++};
++
++class DynamicOnly_t {
++public:
++ static DynamicOnly_t* create (const char* name = "UNDEF",
++ const SomeClass_t& somec = *(new SomeClass_t
++())) {
++ return new DynamicOnly_t (name, somec);
++ }
++ DynamicOnly_t (const char* name, const SomeClass_t& somec) :
++ m_somec (somec) {
++ strncpy (m_Name, name, sizeof (m_Name));
++ }
++private:
++ SomeClass_t m_somec;
++ char m_Name[255];
++};
++
++int main (int argc, char* argv[]) {
++ DynamicOnly_t* ptr = DynamicOnly_t::create ();
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb127.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb127.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb127.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb127.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,59 @@
++// Gets ICE 40.
++
++#include <vector>
++#include<string>
++
++using namespace std;
++
++class ODEsolver
++{
++ private:
++ void eulerODE(vector<double>& y, double& t, double& dt);
++ void midpointODE(vector<double>& y, double& t, double& dt);
++
++ protected:
++ void (ODEsolver::*useMethod)(vector<double>&, double&, double&);
++ void init();
++
++ public:
++ ODEsolver();
++ void timeloop(vector<double>& y, double ts, double te, double dt);
++};
++
++
++ODEsolver::ODEsolver()
++{
++ init();
++}
++
++
++void ODEsolver::eulerODE(vector<double>& y, double& t, double& dt)
++{
++ y[0] = dt * 2.;
++}
++
++void ODEsolver::midpointODE(vector<double>& y, double& t, double& dt)
++{
++ y[0] = dt * 3.;
++}
++
++
++
++void ODEsolver::init()
++{
++ ODEsolver::useMethod = &ODEsolver::midpointODE;
++}
++
++void ODEsolver::timeloop(vector<double>& y, double ts, double te, double dt)
++{
++ (ODEsolver::useMethod)(y,ts,dt);
++}
++
++int main (int nargs, char** args)
++{
++ ODEsolver solver;
++ vector<double> y(2); double t_start=5.; double t_end=7.; double dt=2.;
++ solver.timeloop(y,t_start,t_end,dt);
++ cout << y[0] << endl;
++ return(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb128.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb128.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb128.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb128.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++template<class T>
++struct A {
++ typedef T* iterator; // ERROR - pointer to reference
++public:
++ A(){}
++};
++
++void f()
++{
++ A<int&> a; // ERROR - instantiated from here
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb129.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb129.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb129.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb129.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Build don't link:
++// Gives ICE on EGCS release branch as of 98/06/08 on i686-pc-linux-gnulibc1)
++// From: Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++// Message-Id: <199806081358.PAA02505@achibm5.chemie.uni-karlsruhe.de>
++#include <list>
++#include <functional>
++#include <algorithm>
++#include <cassert>
++int main()
++{
++ list<int> l;
++ l.push_back(1);
++ l.push_back(2);
++
++ list<int>::iterator it =
++ find_if( l.begin(), l.end(),
++ // This is a typo, it should be bind2nd, but an
++ // ICE is not a very helpful diagnostic!
++ binder2nd( equal_to<int>(), 2 ) ); // ERROR -
++ assert( *(it) == 2 );
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb12.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb12.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb12.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb12.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,32 @@
++// Build don't link:
++// Error: Internal Compiler Error in 2.7.2. & egcs 1.0.0
++
++#ifndef NO_META_MAX
++template<int N1, int N2>
++struct meta_max {
++ enum { max = (N1 > N2) ? N1 : N2 };
++};
++#endif
++
++struct X {
++ enum {
++ a = 0,
++ n = 0
++ };
++};
++
++template<class T1, class T2>
++struct Y {
++
++ enum {
++ a = T1::a + T2::a,
++
++ // NB: if the next line is changed to
++ // n = (T1::n > T2::n) ? T1::n : T2::n
++ // the problem goes away.
++
++ n = meta_max<T1::n,T2::n>::max
++ };
++};
++
++int z = Y<X,X>::a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb130.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb130.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++// Gives spurious warnings when compiled with -Wall
++// EGCS 06/08/98 i686-pc-linux-gnulibc1
++// Special g++ Options: -Wall
++// Message-Id: <199806081358.PAA02505@achibm5.chemie.uni-karlsruhe.de>
++// From: Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++
++
++#include <hash_set>
++std::hash_set<int> foo;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++// From: Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++// Reported against EGCS snaps 98/06/18.
++
++struct a {
++ a();
++ void junk( float );
++ void junk( double );
++
++ void bar( double );
++ void bar( float );
++
++ void foo( void (a::*member)(float) ); // ERROR - candidate
++};
++
++a::a()
++{
++ foo( &junk ); // ERROR - junk is an unqualified-id.
++ foo( &bar ); // ERROR - bar is an unqualified-id.
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb132.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb132.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb132.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb132.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++// Build don't link:
++// From: Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++// Reported against EGCS snaps 98/06/28.
++// Special g++ Options: -O -Wall -fgcse -frerun-loop-opt
++//
++// Compilation of this program with the flags g++ -Wall -O -fgcse
++// -frerun-loop-opt or -O2 produces spurious warnings in the standard
++// header <std/bastring.h>.
++//
++// They vanish if the declaration of a::b is taken out.
++
++#include <string>
++
++string foo();
++struct a {
++ void bar();
++ enum b { c, d };
++ b theb;
++ string baz;
++};
++
++void
++a::bar()
++{
++ baz += foo() + foo();
++ baz += foo() + foo() + "foo";
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb133.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb133.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb133.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb133.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++// Gives ICE 109
++// From: Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
++// Reported against EGCS snaps 98/06/28.
++
++int main()
++{
++ try {
++ }
++ catch (bad_alloc) { // ERROR - parse error
++ return 1;
++ }
++ return 0;
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb13.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb13.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb13.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb13.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++template<class T>
++class Array {
++public:
++ typedef T T_numtype;
++};
++
++template<class T_array>
++void f(T_array, typename T_array::T_numtype)
++{
++}
++
++void g()
++{
++ f(Array<float>(), float());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb14.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb14.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb14.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb14.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++template<int N>
++struct I {
++};
++
++template<class T>
++struct A {
++
++ int r;
++
++ template<class T1, class T2>
++ void operator()(T1, T2)
++ { r = 0; }
++
++ template<int N1, int N2>
++ void operator()(I<N1>, I<N2>)
++ { r = 1; }
++};
++
++int main()
++{
++ A<float> x;
++ I<0> a;
++ I<1> b;
++
++ x(a,b);
++ if (x.r != 1)
++ abort();
++
++ x(float(), double());
++ if (x.r != 0)
++ abort();
++
++ return 0;
++}
++
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb15.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb15.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb15.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb15.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++#include<iostream.h>
++#include<stddef.h>
++
++struct A {
++ A() {
++ cerr<<"A constructing\n";
++ throw 1;
++ }
++ void *operator new(size_t sz) {
++ cerr<<"A allocated\n";
++ return ::operator new(sz);
++ }
++ void operator delete (void *p) {
++ cerr<<"A deleted\n";
++ ::operator delete (p);
++ }
++};
++
++int main() {
++ try {
++ new A();
++ } catch (...) {
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb16.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb16.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb16.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb16.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++template<class T>
++struct A {
++ typedef T T1;
++};
++
++template<class T>
++struct B : T::T1 { // insert `typename' before T::T1
++};
++
++struct C { };
++
++B<A<C> > z;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,56 @@
++// excess errors test - XFAIL
++// covariant return types in are currently not support for complex inheritance
++#include <stdio.h>
++
++class A {
++public:
++ virtual void print();
++ virtual A * clone();
++};
++
++class B : virtual public A {
++public:
++ void print();
++ B * clone();
++};
++
++void A::print()
++{
++ printf("A\n");
++}
++
++void B::print()
++{
++ printf("B\n");
++}
++
++
++A * A::clone()
++{
++ return this;
++}
++
++B * B::clone()
++{
++ return this;
++}
++
++
++int main()
++{
++ A * a = new B;
++ B * b = dynamic_cast<B *>(a);
++
++ printf("%p\n",b); // (*2*)
++ b->print();
++
++ a = b;
++ printf("%p\n",a);
++ a->print();
++
++ a = a->clone();
++ printf("%p\n",a);
++ a->print(); // (*1*)
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb18.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb18.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb18.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb18.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++class C { };
++
++void foo()
++{
++ C c;
++ void * v = static_cast<void *>(c); // ERROR - illegal cast
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb19.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb19.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb19.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb19.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++
++#define CRASH 1
++#ifdef CRASH
++#define VIRTUAL virtual
++#else
++#define VIRTUAL
++#endif
++
++class A {};
++class B : public VIRTUAL A {};
++template <class Imp> class C : public /*virtual*/ Imp {};
++// define CRASH and uncomment here ^^^^^^^^^^^
++// and the crash goes away!!!!
++
++template class C<B>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb20.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb20.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb20.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb20.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Error: ICE on 2.7.2.3 and EGCS 1.0.0.
++// Build don't link:
++
++template<int N1, int N2>
++struct meta_max {
++ enum { max = (N1 > N2) ? N1 : N2 };
++};
++
++struct X {
++ enum {
++ a = 0,
++ n = 0
++ };
++};
++
++template<class T1, class T2, class T3>
++struct Y {
++
++ enum {
++ a = T1::a + T2::a + T3::a,
++ n = meta_max<meta_max<T1::n,T2::n>::max, T3::n>::max
++ };
++};
++
++template<class T>
++struct Z {
++ enum {
++ a = T::a,
++ n = T::n
++ };
++};
++
++Z<Y<X,X,X> > z;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb21.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb21.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb21.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb21.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <vector>
++
++#include <strstream.h>
++
++/*----------------------------------------*/
++
++struct connection_t {
++ connection_t() {}
++};
++
++vector<connection_t> connections;
++
++/*----------------------------------------*/
++
++int
++main() {
++ ostrstream str;
++
++ connections.insert(connections.end(), connection_t());
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb22.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb22.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb22.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb22.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Ambiguous conversion, three candidates:
++// builtin == (int, int), and the two user-defined operators
++// Each one requires a user-defined ICS where another uses builtin conversions,
++// so none is the best viable function.
++
++class MyInt
++{
++public:
++ MyInt(int = 0) {}
++ operator int() const {return 2;}
++};
++
++bool operator==(const MyInt& a, const int& b)
++{ // ERROR - candidate
++ return (int)a == b;
++}
++
++bool operator==(const MyInt& a, const MyInt& b)
++{ // ERROR - candidate
++ return (int)a == (int)b;
++}
++
++bool f()
++{
++ return 3 == MyInt(); // ERROR - ambiguous
++} // ERROR - no return value
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb23.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb23.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb23.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb23.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,20 @@
++// Build don't link:
++class foo {
++protected:
++ void __duplicate ();
++
++};
++
++class bar : public virtual foo {
++protected:
++ void __duplicate() {
++ foo::__duplicate ();
++ }
++};
++
++class oops : public virtual bar {
++protected:
++ void __duplicate() {
++ foo::__duplicate ();
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb24.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb24.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb24.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb24.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Build don't link:
++#include <iostream.h>
++
++template < class T >
++class X
++{
++ protected:
++
++ union {
++ int x;
++ double y;
++ };
++};
++
++template < class T >
++class Y : public X<T>
++{
++ public:
++
++ using X<T>::x;
++
++ void f () { cout << x << endl; }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb26.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb26.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb26.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb26.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++//
++// egcs-2.90.06
++// cannot declare friend of enclosing class using its scope, works fine
++// without scope or for definition of foo::bar::f
++//
++
++class foo
++{
++public:
++ static int f();
++ class bar {
++ friend int foo::f();
++// friend int f();
++ static int x;
++ public:
++ static int f() {return foo::f();};
++ };
++};
++
++int foo::bar::x;
++
++int foo::f() {
++ return bar::x;
++}
++
++int
++main ()
++{
++ return foo::bar::f ();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb27.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb27.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb27.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb27.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,39 @@
++/* bug.cc */
++/* simple program to demonstrate the bug with named return values in gcc
++*/
++/* (w) 4.9.97 by Kurt Garloff <K.Garloff@ping.de> */
++// Special g++ Options:
++// 8/28/1998 - This dies in add_conversions from dfs_walk, null CLASSTYPE_METHOD_VEC
++// for the test<T> record_type. This is marked as an expected failure for now,
++// until we actually fix it.
++
++#include <iostream.h>
++
++template <class T> class test;
++template <class T> test<T> operator + (const test<T>& a, const test<T>& b);
++
++// A simple numerical class
++template <class T>
++class test
++{
++ T elem;
++ public:
++ test () { elem = 0; };
++ test (const T& a) { elem = a; };
++ test<T>& operator += (const test<T>& a) { elem += a.elem; return *this; };
++ friend test<T> operator + <> (const test<T>&, const test<T>&);
++ friend ostream& operator << (ostream& os, const test<T>& a)
++ { return os << a.elem; };
++};
++
++// named return value version
++template <class T>
++test<T> operator + (const test<T>& a, const test<T>& b) return c(a);
++{ c += b; };
++
++int main()
++{
++ test<int> x, y;
++ x += 5; cout << x << endl;
++ y = x + test<int>(2); cout << y << endl;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb28.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb28.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb28.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb28.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++//Build don't link:
++#include <vector.h>
++enum s { S };
++class a
++{
++ vector<s> vs;
++ friend class b;
++};
++struct b
++{
++ vector<a> va;
++ operator vector< vector<s> >()
++ {
++ vector< vector<s> > vvs(va.size());
++ return vvs;
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb29.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb29.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb29.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb29.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++//Build don't link:
++#include <vector.h>
++enum s { S };
++class a
++{
++ vector<s> vs;
++ friend class b;
++};
++struct b
++{
++ vector<a> va;
++ operator vector< vector<s> >()
++ {
++ return vector< vector<s> >(va.size());
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb2.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb2.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb2.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb2.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Build don't link:
++typedef __SIZE_TYPE__ size_t;
++inline void *operator new(size_t, void *place) throw() { return place; }
++
++struct A
++{
++ A();
++ ~A();
++};
++
++void testfunc( void )
++{
++ A* mybuf;
++ A v[1];
++
++ new (mybuf) A();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb30.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb30.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb30.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb30.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++#include <fstream.h>
++
++class bifstream : public ifstream {
++public:
++ bifstream();
++// ~bifstream();
++};
++
++void load_bin()
++{
++ bifstream InFile;
++
++ if (!InFile)
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb31.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb31.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb31.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb31.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++#include<iostream.h>
++
++int main() {
++ try {
++ throw 1;
++ } catch(...) {
++ try {
++ throw;
++ } catch(int) {
++ }
++ try {
++ throw;
++ } catch(int) {
++ }
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb32.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb32.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb32.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb32.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++class A {
++public:
++ void malloc(unsigned int);
++};
++
++void A::malloc(unsigned int) {}
++
++void foo() {
++ A a;
++ a.malloc(3); // <-- line 10
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb33.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb33.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb33.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb33.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++#include <fstream.h>
++#include <stdio.h>
++
++int
++main()
++{
++ printf("If you see this, you don't have a problem!\n");
++#ifdef EXPOSE_BUG
++ ifstream a;
++#endif
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb34.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb34.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb34.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb34.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++class Base {
++public:
++ class Bar { public: virtual ~Bar() {}; };
++};
++
++class Derived : public Base {
++public:
++ class Bar : public Base::Bar {};
++};
++
++template <class T>
++class XYZ : public T::Bar {
++};
++
++void test() {
++ XYZ<Base> b;
++ XYZ<Derived> d;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb35.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb35.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb35.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb35.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// Build don't link:
++
++class string
++{
++public:
++ string();
++ string(const string& x);
++ string(const char* t);
++
++ ~string();
++};
++
++void set_status(string message);
++
++class StatusDelay {
++private:
++ string cause;
++
++public:
++ StatusDelay(const string& c)
++ : cause(c)
++ {
++ set_status(cause);
++ }
++
++ ~StatusDelay()
++ {
++ set_status(cause);
++ }
++};
++
++static char delay_message[] = "Filtering files";
++
++static void searchRemote()
++{
++ StatusDelay delay(delay_message);
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb36.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb36.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb36.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb36.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++#include <vector>
++
++template <typename T=float> class foo {
++public:
++ foo();
++ foo(vector<int> v);
++private:
++ vector<int> v;
++ T t;
++};
++
++template <typename T>
++foo<T>::foo() :v(), t() {}
++template <typename T=float>
++foo<T>::foo(vector<int> v_) :v(v_), t() {} // ERROR - default arg for member template
++
++foo<float> a;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb37.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb37.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb37.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb37.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++// Build don't link:
++template<class T>
++struct A {
++ typedef T T1;
++};
++
++template<class T>
++struct B {
++ typedef T T2;
++};
++
++template<class T>
++struct C {
++};
++
++template<class E>
++C<typename E::T2::T1>
++foo (E)
++{
++ return C<typename E::T2::T1>();
++}
++
++void test()
++{
++ foo(B<A<int> >());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb38.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb38.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb38.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb38.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Build don't link:
++class string
++{
++public:
++ string();
++ string(const string& x);
++ string(const char* t);
++
++ ~string();
++};
++
++void set_status(string message);
++
++class StatusDelay {
++private:
++ string cause;
++
++public:
++ StatusDelay(const string& c)
++ : cause(c)
++ {
++ set_status(cause);
++ }
++
++ ~StatusDelay()
++ {
++ set_status(cause);
++ }
++};
++
++static char delay_message[] = "Filtering files";
++
++static void searchRemote()
++{
++ StatusDelay delay(delay_message);
++ return;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb39.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb39.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb39.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb39.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++#include <ctype.h>
++#include <iostream.h>
++// #include <streambuf.h>
++#include <libio.h>
++#include <strstream.h>
++
++extern bool foo2 (ostream &out, istream &in);
++
++bool
++foo1 (ostream &out, const char *in)
++{
++ strstreambuf sb (in, (int) strlen (in));
++ istream fmt (&sb);
++ return foo2 (out, fmt);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb3.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb3.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb3.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb3.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,11 @@
++// Build don't link:
++#include <complex.h>
++template<class T>
++class Vec {
++public:
++ Vec() { data = new T; }
++ Vec<T> split() { Vec<T> tmp; operator=(tmp); return tmp; }
++ void operator=(const Vec<T> &v) { data = new T; }
++ T *data;
++};
++template class Vec<complex<double> >;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb41.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb41.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb41.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb41.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++#include <iostream.h>
++#include <iterator.h>
++#include <string>
++
++ostream_iterator<string> oo(cout);
++
++int main()
++{
++ *oo = "Hello, ";
++ ++oo;
++ *oo = "world!\n";
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb43.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb43.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb43.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb43.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,38 @@
++// All the pointer_to_binary_function cases used to fail because g++
++// couldn't handle converting an overloaded function to a class type.
++// The first one should still fail because it requires an implicit conversion
++// to pointer_to_binary_function, which has an `explicit' constructor.
++
++#include <vector.h>
++#include <algo.h>
++
++template <class T> class Expr
++{
++public :
++ Expr(){};
++ Expr(const T&){};
++};
++
++template <class T >
++inline bool compare(const Expr<T> a, const Expr<T> b){ return true; };
++
++int main()
++{
++ vector<int> a(3);
++ sort( a.begin(), a.end(),
++ static_cast<bool (*)(const Expr<int>,const Expr<int>)>(compare) );
++ sort( a.begin(), a.end(), compare<int> );
++ sort<vector<int>::iterator,
++ pointer_to_binary_function<const Expr<int>, const Expr<int>, bool> >
++ ( a.begin(), a.end(), compare ); // ERROR - constructor is explicit
++ sort( a.begin(), a.end(),
++ ptr_fun<const Expr<int>, const Expr<int>, bool> (compare) );
++ sort( a.begin(), a.end(),
++ ptr_fun(compare<int>) );
++ sort( a.begin(), a.end(),
++ pointer_to_binary_function<const Expr<int>, const Expr<int>, bool>(compare) );
++ sort( a.begin(), a.end(),
++ pointer_to_binary_function<const Expr<int>, const Expr<int>, bool>(compare<int>) );
++ sort( a.begin(), a.end(),
++ pointer_to_binary_function<const Expr<int>, const Expr<int>, bool>(compare<>) );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb44.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb44.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb44.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb44.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,35 @@
++// spurious 'const' in error.
++// For egcs-2.91.34, the warning message refers to
++// class ostream & operator <<(class ostream &, const class Vector<T> &)
++// Also, the template instantiation does not provide the missing
++// friend function, the non-template function does
++
++#include <stdio.h>
++#include <iostream.h>
++
++template <class T>
++class Vector
++{
++ friend ostream& operator<< (ostream& out, const Vector<T> & vec); // WARNING -
++};
++
++template <class T>
++ostream& operator<< (ostream& out, const Vector<T> & vec)
++{
++ abort(); // this should not be called
++}
++
++template class Vector<char>;
++template ostream& operator<< (ostream& out, const Vector<char> &);
++
++ostream& operator<< (ostream& out, const Vector<char>&)
++{
++ return out;
++}
++
++int main()
++{
++ Vector<char> vc;
++ ostream out;
++ out << vc;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb45.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb45.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb45.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb45.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++class A {};
++class B : public virtual A {};
++template <class Imp> class C : public Imp {};
++
++template class C<B>;
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb46.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb46.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb46.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb46.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,27 @@
++#include <iostream.h>
++
++class A1 {
++ friend class B;
++ public:
++ virtual void foo() {};
++};
++
++class A2 : public virtual A1 {friend class B;};
++
++class A3 : public virtual A1, private A2 {friend class B;};
++
++class B
++{
++ public:
++ B(A1* a) : itsA(dynamic_cast<A2*>(a)) {};
++ A2* itsA;
++};
++
++int main()
++{
++ A1* a=new A3;
++ B b(a);
++
++ if (b.itsA) cout << "cast ok" << endl; else cout << "cast failed" << endl;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb48.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb48.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb48.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb48.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,10 @@
++// Build don't link:
++char *t1 (const char *s)
++{
++ return const_cast<char *>(s);
++}
++
++char *&t1 (const char *&s)
++{
++ return const_cast<char *&>(s);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb49.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb49.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb49.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb49.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,49 @@
++// Build don't link:
++// excess errors test
++
++// Here we declare ::S
++typedef struct s1 *S;
++
++struct s1
++{
++ int s;
++};
++
++struct A
++{
++ // Here we declare A::S
++ typedef struct s1 *S;
++};
++
++template<class T, class U> class XX;
++
++template<class T, class U>
++class X
++{
++public:
++ static T *do_something ();
++ friend class T; // ERROR - `T' is a template parameter
++ friend class XX<T, U>;
++};
++
++struct N
++{
++ // Here we declare N::S
++ class S
++ {
++ };
++
++ // Should use N::S and A::S.
++ typedef X<S, A::S> X_S;
++
++ void bug ();
++};
++
++void
++N::bug ()
++{
++ // X_S is template class X<N::S, A::S>
++ // `s' is N::S.
++ S *s = X_S::do_something ();
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,48 @@
++// Error: Internal Compiler Error in GCC 2.7.2 and EGCS 1998/05/28 snapshot.
++
++#include <iostream.h>
++
++class some_base
++ {
++public:
++ class base_func_args;
++ virtual void func(base_func_args &) = 0; // ERROR - referenced below
++ };
++
++class some_base::base_func_args
++ {
++public:
++ int i;
++ };
++
++class some_derived : public some_base
++ {
++public:
++ class derived_func_args;
++ void func(derived_func_args &);
++ };
++
++
++class derived_func_args : public some_base::base_func_args
++ {
++public:
++ float f;
++ };
++
++class some_derived::func(derived_func_args &a) // ERROR - illegal member syntax
++ {
++ cout << a.i << ' ' << a.f << endl;
++ }
++
++int
++main()
++ {
++ some_derived d; // ERROR - abstract class
++ some_derived::derived_func_args dfa; // ERROR - incomplete class
++ some_base *b = &d;
++
++ dfa.i = 10;
++ dfa.f = 20;
++ b->func(dfs); // ERROR - dfs not declared
++ return 0;
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb50.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb50.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb50.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb50.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++struct foo { };
++int f(int a, int b)
++{
++ if (b == 0)
++ throw foo();
++ return a / b;
++}
++int main()
++{
++ try {
++ f(0, 0);
++ return 1;
++ } catch (foo x) {
++ return 0;
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb51.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb51.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb51.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb51.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,36 @@
++// Build don't link:
++typedef unsigned long Xv_opaque;
++
++class DynaString
++{
++public:
++ DynaString();
++ DynaString( const DynaString& dynaStr );
++ DynaString( const long n );
++ ~DynaString();
++
++ int operator ==( const char* const string ) const;
++};
++
++class DDE_Defaults
++{
++public:
++ DynaString GetHost();
++ DynaString GetService();
++ DynaString GetDatabase();
++};
++
++extern DDE_Defaults* ddeDefaults;
++
++void
++f()
++{
++ DynaString tempHost, tempService, tempDatabase;
++ if( (tempHost = ddeDefaults->GetHost()) == 0
++ || (tempService = ddeDefaults->GetService()) == 0
++ || (tempDatabase = ddeDefaults->GetDatabase()) == 0
++ )
++ {
++ }
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb52.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb52.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb52.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb52.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Build don't link:
++class base {
++protected:
++ virtual void f();
++};
++
++class d1 : public virtual base {
++protected:
++ void f();
++};
++
++void d1::f()
++{
++ base::f();
++}
++
++class dd1 : public virtual d1 {
++protected:
++ void f();
++};
++
++void dd1::f()
++{
++ d1::f();
++ base::f();
++}
++
++class d1_and_base : public virtual d1, public virtual base {
++protected:
++ void f();
++};
++
++void d1_and_base::f()
++{
++ d1::f();
++ base::f();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb54.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb54.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb54.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb54.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++#include <iomanip.h>
++
++int main()
++{
++ cout << setbase(3) << endl;
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb55.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb55.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb55.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb55.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++// Build don't link:
++// Since the constructor is in streambuf.h, additional diagnostics are
++// produced, which are not really supported in the old-deja framework
++// excess errors test - XFAIL *-*-*
++#include <strstream.h>
++
++void
++t( char* buf )
++{
++ istrstream str = buf; //ERROR - inaccessible copy constructor
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++// Error: Internal compiler error on 1998/05/28 snapshot.
++// Build don't link:
++
++class foo {
++ typedef int sometype;
++};
++
++struct die : public foo::sometype { // ERROR - invalid base type
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb57.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb57.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb57.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb57.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++#include <exception>
++//using namespace std;
++class A {
++ class B : public std::exception {}
++ ;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Special g++ Options:
++// Test for g++ array init extension
++
++class A {
++public:
++ A(int i) {}
++private:
++ A( const A & ) {}
++};
++
++main()
++{
++ A *list = new A[10](4);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb59.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb59.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb59.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb59.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,28 @@
++#define INC_FUNCTIONAL 1
++#define USE_STATIC_CAST 1
++
++#include <vector>
++#include <numeric>
++#ifdef INC_FUNCTIONAL
++#include <functional>
++#endif
++
++template<class R> int p( int val, R& r )
++{
++ return val + r;
++}
++
++template<class R> void f( vector<R>& v )
++{
++#ifdef USE_STATIC_CAST
++ accumulate( v.begin(), v.end(), 0, static_cast<int (*)(int, R&)>(p) );
++#else
++ accumulate( v.begin(), v.end(), 0, p<R> );
++#endif
++}
++
++int main()
++{
++ vector<int> r;
++ f( r );
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb5.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb5.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb5.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb5.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++// Build don't link:
++enum { a, b };
++
++class Bug {
++ int pri:8;
++ int flags:24;
++public:
++ void bug() {
++ flags |= a; // this does not work
++ }
++};
++
++void dummy(Bug x) { x.bug(); }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb60.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb60.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb60.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb60.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++//Build don't link:
++#include <string>
++
++class t {
++public:
++ t(const string& s) : s_(s) {}
++ string s_;
++ static t* t_;
++};
++
++t* t::t_;
++
++t* makeT()
++{
++ return new t("test");
++ return t::t_ ? t::t_ :
++ t::t_ = new t("test");
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb61.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb61.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb61.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb61.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,8 @@
++// Build don't link:
++void
++action0(float& arg1)
++{
++ long cn0 = 1;
++
++ arg1 = cn0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb62.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb62.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb62.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb62.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++//Build don't link:
++#include <vector>
++
++void f(void)
++{
++ vector<int> l(5, 0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++//Special g++ Options:
++//This uses GNU extensions, so disable -ansi
++#include <stdio.h>
++
++class A {
++public:
++ A(bool b) { abort(); }
++ A(int a, bool b) { printf("cool\n"); }
++};
++
++main() {
++ A* a;
++ a = new A[2] = { A(1,false), A(1,false) } ;
++ a = new A[2](1,false);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb64.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb64.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb64.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb64.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++// Build don't link:
++template <class A>
++class B:public A {
++ B(){}
++};
++
++template <class A>
++class C:public B<A> {
++ C(){}
++};
++
++/*
++g++ bugsol.C
++bugsol.C:9: Internal compiler error.
++bugsol.C:9: Please submit a full bug report to `egcs-bugs@cygnus.com'.
++
++g++ -v
++Reading specs from
++/home/pierre/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.16/specs
++gcc version egcs-2.90.16 971105 (gcc2-970802 experimental)
++
++egcc compiled with gcc version 2.7.2.1 on debian 1.3.1
++
++*/
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb65.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb65.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb65.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb65.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <iterator>
++
++template<size_t n, size_t i> struct PartialDotProduct {
++ template<class T>
++ static T Expand(T* a, T* b) { return T(); }
++};
++
++const int N = 10;
++
++template<class In1, class In2>
++typename iterator_traits<In1>::value_type
++dot(In1 f1, In2 f2)
++{
++ return PartialDotProduct<N, 0>::Expand(f1, f2); // line 14
++}
++
++int main()
++{
++ double a[N], b[N];
++
++ double s = dot(&a[0], &b[0]);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb66.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb66.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb66.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb66.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <assert.h>
++#include <iostream.h>
++
++int bar ()
++{
++ throw 100;
++}
++
++int main ()
++{
++ int i = 0;
++ try
++ {
++ i = bar ();
++ }
++ catch (...)
++ {
++ }
++
++// cout << "i = " << i << endl;
++ assert (i == 0) ;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb67.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb67.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb67.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb67.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++// Build don't link:
++/*
++Check whether a typedef for a basic type as a baseclass is diagnosed.
++*/
++typedef int an_int;
++class bar : public an_int {}; // ERROR - not an aggregate
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb69.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb69.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb69.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb69.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,9 @@
++ #include <iostream.h>
++ struct foo {
++ foo(int x) { cerr << "foo's int constructor (" << x << ")\n"; };
++ };
++ struct bar : foo {
++ typedef int an_int;
++ bar() : bar::an_int(3) {}; // will call foo::foo(3)
++ };
++int main() { bar b; }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb6.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb6.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb6.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb6.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Build don't link:
++class A {
++public:
++ A() { t=0; }
++ double t;
++};
++template <class T>
++class B {
++public:
++ void f1() { new T; f2(); }
++ void f2() { new T; }
++};
++template class B<A>;
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb70.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb70.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb70.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb70.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// conversion ops should be treated as coming from the most derived class
++// for overload resolution. See [over.match.funcs].
++// Build don't link:
++
++class X {
++public:
++ operator bool() const;
++};
++
++class Y : public X {
++private:
++ operator void*() const;
++};
++
++int f(Y const& y) {
++ return bool(y);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb71.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb71.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb71.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb71.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,37 @@
++// Build don't link:
++typedef __SIZE_TYPE__ size_t;
++
++class A {
++
++public:
++ void operator delete(void*, size_t);
++ void* operator new(size_t);
++};
++
++class B : public A {
++friend class D;
++
++ B();
++ unsigned counter;
++};
++
++class D {
++
++ int ins( B*&);
++}; //WARNING - only private members
++
++int
++D::ins( B*& tempN)
++{
++ unsigned i;
++
++ if (i == 10) {
++ }
++ else {
++ }
++
++ tempN = new B();
++ tempN->counter = 20;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb73.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb73.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb73.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb73.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,14 @@
++// Special g++ Options: -O -Wall
++// Depeletes VM.
++
++#include <iostream.h>
++#include <list>
++#include <algorithm>
++using namespace std;
++
++int main()
++{
++ int daten [16] = { 1, 4, 4, 6, 1, 2, 2, 3, 6, 6, 6, 5, 7, 5, 4, 4};
++ list<int> menge;
++ copy (daten, daten+16, back_inserter(menge));
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb74.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb74.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb74.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb74.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++// Build don't link:
++class base {
++public:
++ virtual ~base();
++};
++
++
++class foo : public base {
++
++public :
++
++ foo (char *cs);
++
++ virtual void op (unsigned char dummy = false);
++ unsigned char m_dummy;
++};
++
++
++void foo :: op ( unsigned char dummy)
++
++{
++ bool bar;
++
++ if (dummy) {
++ foo IT_tempPhase( 0 );
++ return;
++ }
++
++ if ((m_dummy || bar)) {
++
++ }
++
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb75.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb75.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb75.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb75.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++// Build don't link:
++int*& foo (int const *& x)
++{
++ return const_cast<int*&> (x);
++}
++
++/*
++If the references in this example are changed to pointers (change
++all `&''s to `*'), no warnings result.
++
++I think this is incorrect according to CD2 5.2.11, para 4:
++
++4 An lvalue of type T1 can be explicitly converted to an lvalue of type
++ T2 using the cast const_cast<T2&> (where T1 and T2 are object types)
++ if a pointer to T1 can be explicitly converted to the type pointer to
++ T2 using a const_cast. The result of a reference const_cast refers to
++ the original object.
++
++*/
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb76.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,19 @@
++//Build don't link:
++// the template operator!= interferes. It should be in a namespace.
++// excess errors test - XFAIL *-*-*
++
++#include <utility>
++
++enum T {
++ V1
++};
++
++struct X {
++ T t : 31;
++};
++
++void
++f(X& v) {
++ if( v.t != V1 ) { // complains about taking address of bitfield
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++#include <stream.h>
++#include <strstream.h>
++
++int
++main(int, char* [])
++{
++ strstream s;
++
++ s << "line 1\nline 2\n\nline 4";
++ s << ends;
++
++ int nLine = 0;
++
++ while( true ) {
++ char* line = 0;
++ s.gets(&line);
++
++ if( ! line ) {
++ break;
++ }
++
++ ++nLine;
++ cout << nLine << ": " << line << endl;
++
++ if( nLine > 10 ) { // stop infinite loop
++ break;
++ }
++ }
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb79.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb79.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb79.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb79.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++// Makes bogus x86 assembly code.
++#include <iostream.h>
++
++template<class T>
++T max(T a, T b)
++{
++ return (a > b) ? a : b;
++}
++
++// Prototypes (enable one or the other)
++double max<>(double, double); // ERROR - bogus code
++// int max(int, int);
++
++int main()
++{
++ int i = 123;
++ double d = 1234.5678;
++
++ cout.precision(12);
++ cout << max(d, i) << endl; // #1
++ cout << max(i, d) << endl; // #2
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb7.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb7.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb7.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb7.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Build don't link:
++#include <vector>
++
++class T
++{
++ public:
++ T();
++
++};
++
++vector <T> tp;
++
++void f()
++{
++ tp.insert(tp.begin(), 10 , T());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb80.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb80.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb80.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb80.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,7 @@
++// Build don't link:
++#include <exception>
++
++class A {
++ class B : public std::exception {}
++ ;
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb81.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb81.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb81.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb81.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++// Build don't link:
++class x
++{
++public:
++ x (int init_buffer_size=0);
++ ~x ();
++};
++
++
++
++class xSequence
++{
++public:
++ xSequence ();
++ ~xSequence ();
++ x Get(int index)const;
++};
++
++
++
++class foo
++{
++public:
++ bool bar(const x & name, x & value);
++
++};
++
++
++
++bool foo::bar(const x & name, x & value)
++{
++ bool result = false;
++
++ xSequence seq;
++ x v1, v2;
++ if(result ? bar(seq.Get(1),v2) : bar(seq.Get(2),v2))
++
++ ;
++
++ return result;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb82.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb82.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb82.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb82.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#include <stdio.h>
++
++template <int n1>
++double val <int> ()
++{ // ERROR - bogus code
++ return (double) n1;
++};
++
++int main ()
++{
++ printf ("%d\n", val<(int)3> ());
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb83.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb83.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb83.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb83.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,16 @@
++// Skip if not native
++// Special g++ Options: -fprofile-arcs -ftest-coverage
++void
++swap(int& x, int& y) throw()
++{
++ int tmp = x;
++ x = y;
++ y = tmp;
++}
++
++main()
++{
++ int i = 5;
++ int j = 7;
++ swap(i, j);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb84.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb84.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb84.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb84.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Error: Internal Compiler error on GCC 2.7.2.3 & EGCS 1998/05/23 snapshot.
++
++class A {
++public:
++ enum { ONE, TWO, THREE };
++};
++
++template <const unsigned c1,const unsigned c2,const unsigned c3>
++void f() {
++
++}
++
++int
++main()
++{
++ f<A::ONE,A::TWO,A::THREE>();
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb86.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb86.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb86.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb86.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5 @@
++// Build don't link:
++template <class T>
++class Q {
++ friend void foo<T> ();
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb87.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb87.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb87.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb87.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,6 @@
++template <unsigned X, class T> struct Foo {
++ friend void operator<<(int, Foo const &) {}
++};
++template <unsigned X> class Bar : public Foo<X,int> {};
++inline Bar<0> bar(int,int,int) { return Bar<3>(); } // ERROR - no conversion
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb88.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb88.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb88.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb88.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++// Another magic NULL problem.
++// Special g++ Options: -w
++
++#include <stddef.h>
++
++int main()
++{
++ try
++ {
++ throw(NULL);
++ }
++ catch (...)
++ {
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb8.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb8.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb8.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb8.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,13 @@
++
++class foo {
++public:
++ operator <<(const void *); //ERROR - no return type
++ operator <<(char *); //ERROR - no return type
++};
++
++void main()
++{ //ERROR - wrong return type for main
++ foo f;
++ f << (void*)0;
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb90.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb90.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb90.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb90.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++// Special g++ Options: -O2
++// Build don't link:
++
++#ifdef HIDE_BUG
++#define realloc Realloc
++#endif
++
++class TmpRgn {
++public:
++ void
++ realloc();
++};
++
++class TmpActor {
++ TmpRgn tmpRgn;
++
++public:
++ void
++ realloc() {
++ tmpRgn.realloc();
++ }
++};
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,85 @@
++#include <sys/types.h>
++#include <algorithm>
++typedef short _eb91_int16_t;
++typedef char _eb91_int8_t;
++typedef unsigned char _eb91_u_int8_t;
++typedef unsigned short _eb91_u_int16_t;
++
++template <class INT>
++class other_endian
++{
++private:
++
++ INT value;
++
++
++ _eb91_u_int16_t change_endian(_eb91_u_int16_t x)
++ {
++ union {
++ _eb91_u_int16_t i;
++ _eb91_u_int8_t c[2];
++ } val;
++ val.i = x;
++ swap(val.c[0], val.c[1]);
++ return val.i;
++ };
++
++ _eb91_int16_t change_endian(_eb91_int16_t x)
++ {
++ union {
++ _eb91_int16_t i;
++ _eb91_int8_t c[2];
++ } val;
++ val.i = x;
++ swap(val.c[0], val.c[1]);
++ return val.i;
++ };
++public:
++ other_endian(const INT i = 0)
++ {
++ value = change_endian(i);
++ }
++
++ operator INT()
++ {
++ return change_endian(value);
++ }
++};
++
++template <class INT>
++class same_endian
++{
++ INT value;
++
++public:
++ same_endian(const INT i = 0)
++ {
++ value = i;
++ }
++
++ operator INT()
++ {
++ return value;
++ }
++};
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++int main() {
++ other_endian <_eb91_u_int16_t> little_endian_16_bit_int;
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb92.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb92.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb92.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb92.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1 @@
++template<int N> f<0>(){} // ERROR - invalid code
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb93.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb93.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb93.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb93.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,30 @@
++// Error: Internal compiler error on egcs 1998/05/28 snapshot.
++
++const double M_PI=3.14159265358979323846;
++
++template<int N,int I,int J,int K>
++inline double SineSeries()
++{
++ const double x=I*2*M_PI/N;
++ const bool go=K+1!=J;
++ return 1.0-x*x/(2*K+2)/(2*K+3)*SineSeries<N*go,I*go,J*go,(K+1)*go>();
++}
++
++template<>
++inline double SineSeries<0,0,0,0>()
++{
++ return 1.0;
++}
++
++template<int N,int I>
++inline double Sine()
++{
++ const double x=(I*2*M_PI/N);
++ return x * SineSeries<N,I,10,0>();
++}
++
++int main()
++{
++ double f=Sine<32,5>()
++ return 0; // ERROR - parse error
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,15 @@
++
++
++class baseClass
++{
++private:
++static int variable;
++};
++
++class myClass : public baseClass
++{
++private:
++static int variable; // this is intentionally duplicated
++};
++
++myClass::variable = 0; //ERROR - no type
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb95.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb95.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb95.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb95.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++struct A {};
++
++template <class T>
++void operator+ (A &i, T &b) {}
++
++template<class T>
++void func (A &a, T &b) {}
++
++int main()
++{
++ A a;
++
++#if STRANGE
++ func(a, "egcs");
++#endif
++ a+"egcs";
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb97.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb97.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb97.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb97.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++// Creates bad assembly on sparc and x86
++template<unsigned long SIZE>
++struct Array { };
++
++template<unsigned long SIZE>
++Array<SIZE> test_ok(const Array<SIZE>& a) {
++ Array<SIZE> result;
++ return(result);
++}
++
++template<unsigned long SIZE>
++Array<SIZE + 1> test_error(const Array<SIZE>& a) {
++ Array<SIZE + 1> result;
++ return(result);
++}
++
++int main(int argc, char* argv[]) {
++ Array<2> a;
++
++ test_ok(a);
++ test_error(a); // <<< MARKED LINE!
++
++ return(0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb98.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb98.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb98.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb98.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++// Error: Internal compiler error in egcs 1998/05/28 snapshot.
++
++
++ template<class T, unsigned int Length>
++ inline
++ unsigned int
++ extent(T (&x)[Length])
++ {
++ return Length;
++ }
++
++ extern int b[];
++
++ void f()
++ {
++ extent(b); // ERROR - no matching function
++ }
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb99.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb99.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb99.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb99.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,134 @@
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++class ref_counted
++{
++
++protected:
++ ref_counted( void ) : _count( 0 ) {}
++
++public:
++
++ unsigned int add_ref( void ) { return ++_count; }
++ unsigned int release( void ) { return --_count; }
++ unsigned int count( void ) const { return _count; }
++
++
++protected:
++ unsigned int _count;
++};
++
++
++
++
++
++template < class T >
++class ref_ptr
++{
++
++public:
++ ref_ptr( T* ptr = 0 ) : _ptr( ptr )
++ {
++ add_ref();
++ }
++
++ ref_ptr( const ref_ptr & rptr ) : _ptr( rptr.get() )
++ {
++ add_ref();
++ }
++
++ ~ref_ptr( void ) { release(); }
++
++
++ T* get( void ) const { return _ptr; }
++ T* operator->( void ) const { return get(); }
++ T& operator*( void ) const { return *get(); }
++
++ bool operator!( void ) const { return get() == 0; }
++ bool operator==( const ref_ptr & rptr ) const { return *get() == *rptr;
++}
++ bool operator<( const ref_ptr & rptr ) const { return *get() < *rptr; }
++
++
++ bool operator==( T* ptr ) const { return *get() == *ptr; }
++ bool operator<( T* ptr ) const { return *get() < *ptr; }
++
++ const ref_ptr & operator=( const ref_ptr & rptr )
++ {
++ release();
++ _ptr = rptr.get();
++ add_ref();
++
++ return *this;
++ }
++
++ T* operator=( T* ptr )
++ {
++ release();
++ _ptr = ptr;
++ add_ref();
++
++ return _ptr;
++ }
++
++protected:
++ void add_ref( void )
++ {
++ if( _ptr )
++ _ptr->add_ref();
++ }
++
++ void release( void )
++ {
++ if( _ptr && 0 == _ptr->release() )
++ {
++ delete _ptr;
++ _ptr = 0;
++ }
++ }
++
++
++protected:
++ T * _ptr;
++};
++
++
++template< class T >
++bool operator==( T* ptr, const ref_ptr< T > & rptr )
++{
++ return *ptr == *rptr;
++}
++
++template< class T >
++bool operator<( T* ptr, const ref_ptr< T > & rptr )
++{
++ return *ptr < *rptr;
++}
++
++
++
++class Baz : public ref_counted {
++ int dummy;
++};
++
++
++class Bar;
++
++int main() {
++ ref_ptr<Baz> foo;
++ static_cast<Bar *> (foo)->DoSomething; //ERROR - invalid cast
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb9.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb9.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/eb9.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/eb9.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,21 @@
++// Build don't link:
++template <class Key>
++class d0om_Hashmap
++{
++public:
++ typedef int value_type;
++
++ class iterator
++ {
++ public:
++ value_type* operator-> () const;
++ };
++
++};
++
++
++template <class Key>
++d0om_Hashmap<Key>::value_type* d0om_Hashmap<Key>::iterator::operator-> () const
++{
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++class null {
++ null (null const&);
++ void operator& ();
++
++ public:
++ null () {}
++
++ template <typename T>
++ operator T* () const { return 0; }
++} const null;
++
++int main ()
++{
++ int *p = null;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++class null {
++ null (null const&);
++ void operator& ();
++
++ public:
++ null () {}
++
++ template <typename T>
++ operator T* () const { return 0; }
++} const null;
++
++
++int main ()
++{
++ int *p = static_cast<int*>(null);
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++class null {
++ null (null const&);
++ void operator& ();
++
++ public:
++ null () {}
++
++ template <typename T>
++ operator T* () const { return 0; }
++} const null;
++
++int main ()
++{
++ int *p = (int*) null;
++
++ return 0;
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/README gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/README
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/g++.robertl/README 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/g++.robertl/README 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,18 @@
++This directory contains a hodgepodge of problem reports that appeared on
++the egcs-bugs or egcs mailing lists. Just like the reports themselves,
++they tend to be poorly understood and poorly organized. However, we
++drop them into the testsuite on the premise that internal compiler errors
++are always bad - no matter how bogus the source.
++
++If you really understand C++ (and you know who you are) if you find
++entries in this area that are bogus, feel free to just fix them or nuke
++them. You don't need my permission.
++
++Many of the first entries in this area were done in "block mode" by
++whipping through many months of archives. In hindsight, some important
++information was lost, but being picky on over 8,000 messages is a sure
++way to never get out of the gate.
++
++We'll do better now.
++
++Robert Lipe
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/Makefile.in gcc-2.95.4/gcc/testsuite/g++.old-deja/Makefile.in
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/Makefile.in 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#### host, target, and site specific Makefile frags come in here.
++
++srcdir = .
++
++# Nothing to do...
++all:
++
++clean:
++ -rm -f *.o *.diff *~ *.bad core *.x
++
++distclean: clean
++ -rm -f Makefile config.status
+diff -ruNb gcc-2.95.3/gcc/testsuite/g++.old-deja/old-deja.exp gcc-2.95.4/gcc/testsuite/g++.old-deja/old-deja.exp
+--- gcc-2.95.3/gcc/testsuite/g++.old-deja/old-deja.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/g++.old-deja/old-deja.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,65 @@
++# Copyright (C) 1988, 90, 91, 92, 1994, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-g++@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++
++#
++# these tests come from the original DejaGnu test suite
++# developed at Cygnus Support. If this isn't deja gnu, I
++# don't know what is...
++#
++
++# load support procs
++load_lib old-dejagnu.exp
++load_lib g++.exp
++
++
++# When a testcase doesn't have any special options, use these.
++if ![info exists DEFAULT_CXXFLAGS] {
++ set DEFAULT_CXXFLAGS "-ansi -pedantic-errors"
++
++}
++
++old-dejagnu-init
++global GXX_UNDER_TEST
++
++#
++# main test loop
++#
++
++set dirlen [expr [string length "$srcdir/$subdir"] + 1];
++foreach file [lsort [find $srcdir/$subdir *.C]] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ set tfile [string range $file $dirlen end];
++ if ![runtest_file_p $runtests $tfile] then {
++ continue
++ }
++ verbose "Testing $file"
++
++ # We don't want old-dejagnu.exp to have to know about all the global
++ # variables we use. For now we tell it about CXXFLAGS and LIBS and
++ # leave LDFLAGS alone.
++ old-dejagnu $GXX_UNDER_TEST "$file" "$tfile" "" "$DEFAULT_CXXFLAGS" "-lstdc++"
++}
++
++# The framework doesn't like to see any error remnants,
++# so remove them.
++if [info exists errorInfo] then {
++ unset errorInfo
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/chill.exp gcc-2.95.4/gcc/testsuite/lib/chill.exp
+--- gcc-2.95.3/gcc/testsuite/lib/chill.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/chill.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,365 @@
++#
++# Expect script for Chill Regression Tests
++# Copyright (C) 1993, 1996, 1997 Free Software Foundation
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++#
++# Written by Jeffrey Wheat (cassidy@cygnus.com)
++#
++
++#
++# chill support library procedures and testsuite specific instructions
++#
++
++#
++# default_chill_version
++# extract and print the version number of the chill compiler
++# exits if compiler does not exist
++#
++proc default_chill_version { } {
++ global GCC_UNDER_TEST
++
++ # ignore any arguments after the command
++ set compiler [lindex $GCC_UNDER_TEST 0]
++
++ # verify that the compiler exists
++ if {[which $compiler] != 0} then {
++ set tmp [ exec $compiler -v ]
++ regexp "version.*$" $tmp version
++
++ if [info exists version] then {
++ clone_output "[which $compiler] $version\n"
++ }
++ } else {
++ warning "$compiler does not exist"
++ exit -1
++ }
++}
++
++#
++# chill_compile
++# compile the specified file
++#
++# returns values:
++# return 0 on success
++# return 1 on failure with $result containing compiler output
++# exit with -1 if compiler doesn't exist
++#
++# verbosity output:
++# 1 - indicate compile in progress
++# 2 - indicate compile, target name
++# 3 - indicate compile, target name, exec command, and result
++#
++proc chill_compile { src obj } {
++ global GCC_UNDER_TEST
++ global CFLAGS
++
++ global errno
++ global result
++ global verbose
++
++ global subdir
++ global tmpdir
++
++ set errno 0
++ set cflags $CFLAGS
++ set dumpfile [file rootname $obj].cmp ;# name of file to dump stderr in
++
++ # verify that the compiler exists
++ if { [which $GCC_UNDER_TEST] == 0 } then {
++ warning "$GCC_UNDER_TEST does not exist"
++ exit -1
++ }
++
++ if { $verbose == 1 } then {
++ send_user "Compiling... "
++ } else {
++ verbose " - CMPL: Compiling [file tail $src]" 2
++ }
++
++ # if object type is a grt file, then only build a grant file
++ if [string match "*.grt" $obj] then {
++ set cflags [concat $cflags -fgrant-only]
++ }
++
++ # build command line
++ set commandline "$GCC_UNDER_TEST $cflags -I$subdir -c $src"
++
++ # write command line to logfile
++ send_log "\n### EXEC: $commandline\n"
++
++ # tell us whats going on if verbose
++ verbose "### EXEC: $commandline" 3
++
++ # exec the compiler with the appropriate flags
++ set errno [catch "exec $commandline" result]
++
++ # dump compiler's stderr output into $dumpfile - this is a gross hack
++ set dumpfile [open $dumpfile w+]; puts $dumpfile $result; close $dumpfile
++
++ # log any compiler output unless its null
++ if ![string match "" $result] then { send_log "\n$result\n" }
++ unset cflags
++ return
++}
++
++#
++# chill_link
++# link the specified files
++#
++# returns values:
++# return 0 on success
++# return 1 on failure with $result containing compiler output
++# exit with -1 if compiler doesn't exist
++#
++# verbosity output:
++# 1 - indicate linking in progress
++# 2 - indicate linking, target name
++# 3 - indicate linking, target name, exec command, and result
++#
++proc chill_link { target } {
++ global GCC_UNDER_TEST
++ global CFLAGS
++
++ global errno
++ global result
++ global verbose
++ global tmptarget
++
++ global crt0
++ global libs
++ global objs
++
++ set errno 0
++
++ # verify that the compiler exists
++ if { [which $GCC_UNDER_TEST] == 0 } then {
++ warning "$GCC_UNDER_TEST does not exist"
++ exit -1
++ }
++
++ if { $verbose == 1 } then {
++ send_user "Linking... "
++ } else {
++ verbose " - LINK: Linking [file tail $target]" 2
++ }
++
++ # verify that the object exists
++ if ![file exists $target.o] then {
++ set errno 1
++ set result "file $target.o doesn't exist"
++ return
++ }
++
++ # build command line
++ set commandline "$GCC_UNDER_TEST $CFLAGS -o $target $target.o $objs $crt0 $libs"
++
++ # write command line to logfile
++ send_log "\n### EXEC: $commandline\n"
++
++ # tell us whats going on if we are verbose
++ verbose "### EXEC: $commandline" 3
++
++ # link the objects, sending any linker output to $result
++ set errno [catch "exec $commandline > $tmptarget.lnk" result]
++
++ # log any linker output unless its null
++ if ![string match "" $result] then { send_log "\n$result\n" }
++ return
++}
++
++#
++# default_chill_start
++#
++proc default_chill_start { } {
++ global srcdir
++ global subdir
++ global tmpdir
++ global verbose
++
++ if { $verbose > 1 } then { send_user "Configuring testsuite... " }
++
++ # tmpdir is obtained from $objdir/site.exp. if not, set it to /tmp
++ if ![info exists tmpdir] then { set tmpdir /tmp }
++
++ # save and convert $srcdir to an absolute pathname, stomp on the old value
++ # stomp on $subdir and set to the absolute path to the subdirectory
++ global osrcdir; set osrcdir $srcdir; set srcdir [cd $srcdir; pwd]
++ global osubdir; set osubdir $subdir; set subdir $srcdir/$subdir
++
++ # cd the temporary directory, $tmpdir
++ cd $tmpdir; verbose "### PWD: [pwd]" 5
++
++ # copy init files to the tmpdir
++ foreach initfile [glob -nocomplain $subdir/*.init] {
++ set targfile $tmpdir/[file tail [file rootname $initfile]]
++ verbose "### EXEC: cp $initfile $targfile" 5
++ if [catch "exec cp $initfile $targfile"] then {
++ send_user "\nConfigure failed.\n"
++ exit -1
++ }
++ }
++ if { $verbose > 1 } then { send_user "Configuring finished.\n" }
++}
++
++#
++# default_chill_exit
++#
++#
++proc default_chill_exit { } {
++ global srcdir
++ global objdir
++ global tmpdir
++ global osrcdir
++ global osubdir
++
++ # reset directory variables
++ set srcdir $osrcdir; set subdir $osubdir
++
++ # remove all generated targets and objects
++ verbose "### EXEC: rm -f $tmpdir/*" 3
++ catch "exec rm -f $tmpdir/*" result
++
++ # change back to the main object directory
++ cd $objdir
++ verbose "### SANITY: [pwd]" 5
++}
++
++#
++# chill_diff
++# compare two files line-by-line
++#
++# returns values:
++# return 0 on success
++# return 1 if different
++# return -1 if output file doesn't exist
++#
++# verbosity output:
++# 1 - indicate diffing in progress
++# 2 - indicate diffing, target names
++# 3 - indicate diffing, target names, and result
++#
++proc chill_diff { file_1 file_2 } {
++ global errno
++ global result
++ global target
++ global tmptarget
++
++ global verbose
++
++ set eof -1
++ set errno 0
++ set differences 0
++
++ if { $verbose == 1 } then {
++ send_user "Diffing... "
++ } else {
++ verbose " - DIFF: Diffing [file tail $file_1] [file tail $file_2]" 2
++ }
++
++ # write command line to logfile
++ send_log "### EXEC: diff $file_1 $file_2\n"
++
++ # tell us whats going on if we are verbose
++ verbose "### EXEC: diff $file_1 $file_2" 3
++
++ # verify file exists and open it
++ if [file exists $file_1] then {
++ set file_a [open $file_1 r]
++ } else {
++ set errno -1; set result "$file_1 doesn't exist"
++ return
++ }
++
++ # verify file exists and is not zero length, and then open it
++ if [file exists $file_2] then {
++ if [file size $file_2]!=0 then {
++ set file_b [open $file_2 r]
++ } else {
++ set errno -1; set result "$file_2 is zero bytes"; return
++ }
++ } else {
++ set errno -1; set result "$file_2 doesn't exist"; return
++ }
++
++ # spoof the diff routine
++ lappend list_a $target
++
++ while { [gets $file_a line] != $eof } {
++ if [regexp "^#.*$" $line] then {
++ continue
++ } else {
++ lappend list_a $line
++ }
++ }
++ close $file_a
++
++ # spoof the diff routine
++ lappend list_b $target
++
++ while { [gets $file_b line] != $eof } {
++ if [regexp "^#.*$" $line] then {
++ continue
++ } else {
++ # use [file tail $line] to strip off pathname
++ lappend list_b [file tail $line]
++ }
++ }
++ close $file_b
++
++ for { set i 0 } { $i < [llength $list_a] } { incr i } {
++ set line_a [lindex $list_a $i]
++ set line_b [lindex $list_b $i]
++
++ if [string compare $line_a $line_b] then {
++ set errno 1
++ set count [expr $i+1]
++ set linenum [format %dc%d $count $count]
++ verbose "$linenum" 3
++ verbose "< $line_a" 3
++ verbose "---" 3
++ verbose "> $line_b" 3
++
++ send_log "$file_1: < $count: $line_a\n"
++ send_log "$file_2: > $count: $line_b\n"
++ set result "differences found"
++ }
++ }
++ return
++}
++
++#
++# chill_fail
++# a wrapper around the framework fail proc
++#
++proc chill_fail { target result } {
++ global verbose
++
++ if { $verbose == 1 } then { send_user "\n" }
++ fail $target
++ verbose "--------------------------------------------------" 3
++ verbose "### RESULT: $result" 3
++}
++
++#
++# chill_pass
++# a wrapper around the framework fail proc
++#
++proc chill_pass { target } {
++ global verbose
++
++ if { $verbose == 1 } then { send_user "\n" }
++ pass $target
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/c-torture.exp gcc-2.95.4/gcc/testsuite/lib/c-torture.exp
+--- gcc-2.95.3/gcc/testsuite/lib/c-torture.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/c-torture.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,288 @@
++# Copyright (C) 1992-1998, 1999 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-dejagnu@gnu.org.
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++
++# The default option list can be overridden by
++# TORTURE_OPTIONS="{ { list1 } ... { listN } }"
++
++if ![info exists TORTURE_OPTIONS] {
++ # It is theoretically beneficial to group all of the O2/O3 options together,
++ # as in many cases the compiler will generate identical executables for
++ # all of them--and the c-torture testsuite will skip testing identical
++ # executables multiple times.
++ # Also note that -finline-functions is explicitly included in one of the
++ # items below, even though -O3 is also specified, because some ports may
++ # choose to disable inlining functions by default, even when optimizing.
++ set TORTURE_OPTIONS [list \
++ { -O0 } \
++ { -O1 } \
++ { -O2 } \
++ { -O3 -fomit-frame-pointer } \
++ { -O3 -fomit-frame-pointer -funroll-loops } \
++ { -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions } \
++ { -O3 -g } \
++ { -Os } ]
++}
++
++
++# Split TORTURE_OPTIONS into two choices: one for testcases with loops and
++# one for testcases without loops.
++
++set torture_with_loops $TORTURE_OPTIONS
++set torture_without_loops ""
++foreach option $TORTURE_OPTIONS {
++ if ![string match "*loop*" $option] {
++ lappend torture_without_loops $option
++ }
++}
++
++#
++# c-torture-compile -- runs the Tege C-torture test
++#
++# SRC is the full pathname of the testcase.
++# OPTION is the specific compiler flag we're testing (eg: -O2).
++#
++proc c-torture-compile { src option } {
++ global output
++ global srcdir tmpdir
++ global host_triplet
++
++ set output "$tmpdir/[file tail [file rootname $src]].o"
++
++ regsub "^$srcdir/?" $src "" testcase
++ # If we couldn't rip $srcdir out of `src' then just do the best we can.
++ # The point is to reduce the unnecessary noise in the logs. Don't strip
++ # out too much because different testcases with the same name can confuse
++ # `test-tool'.
++ if [string match "/*" $testcase] {
++ set testcase "[file tail [file dirname $src]]/[file tail $src]"
++ }
++
++ verbose "Testing $testcase, $option" 1
++
++ # Run the compiler and analyze the results.
++ set options ""
++ lappend options "additional_flags=-w $option"
++
++ set comp_output [gcc_target_compile "$src" "$output" object $options];
++ gcc_check_compile $testcase $option $output $comp_output
++ remote_file build delete $output
++}
++
++#
++# c-torture-execute -- utility to compile and execute a testcase
++#
++# SRC is the full pathname of the testcase.
++#
++# If the testcase has an associated .x file, we source that to run the
++# test instead. We use .x so that we don't lengthen the existing filename
++# to more than 14 chars.
++#
++proc c-torture-execute { src args } {
++ global tmpdir tool srcdir output
++
++ if { [llength $args] > 0 } {
++ set additional_flags [lindex $args 0];
++ } else {
++ set additional_flags "";
++ }
++ # Check for alternate driver.
++ if [file exists [file rootname $src].x] {
++ verbose "Using alternate driver [file rootname [file tail $src]].x" 2
++ set done_p 0
++ catch "set done_p \[source [file rootname $src].x\]"
++ if { $done_p } {
++ return
++ }
++ }
++
++ # Look for a loop within the source code - if we don't find one,
++ # don't pass -funroll[-all]-loops.
++ global torture_with_loops torture_without_loops
++ if [expr [search_for $src "for*("]+[search_for $src "while*("]] then {
++ set option_list $torture_with_loops
++ } else {
++ set option_list $torture_without_loops
++ }
++
++ set executable $tmpdir/[file tail [file rootname $src].x]
++
++ regsub "^$srcdir/?" $src "" testcase
++ # If we couldn't rip $srcdir out of `src' then just do the best we can.
++ # The point is to reduce the unnecessary noise in the logs. Don't strip
++ # out too much because different testcases with the same name can confuse
++ # `test-tool'.
++ if [string match "/*" $testcase] {
++ set testcase "[file tail [file dirname $src]]/[file tail $src]"
++ }
++
++ set count 0;
++ set oldstatus "foo";
++ foreach option $option_list {
++ if { $count > 0 } {
++ set oldexec $execname;
++ }
++ set execname "${executable}${count}";
++ incr count;
++
++ # torture_{compile,execute}_xfail are set by the .x script
++ # (if present)
++ if [info exists torture_compile_xfail] {
++ setup_xfail $torture_compile_xfail
++ }
++
++ # torture_execute_before_{compile,execute} can be set by the .x script
++ # (if present)
++ if [info exists torture_eval_before_compile] {
++ set ignore_me [eval $torture_eval_before_compile]
++ }
++
++ remote_file build delete $execname;
++ verbose "Testing $testcase, $option" 1
++
++ set options ""
++ lappend options "additional_flags=-w $option"
++ if { $additional_flags != "" } {
++ lappend options "additional_flags=$additional_flags";
++ }
++ set comp_output [gcc_target_compile "$src" "${execname}" executable $options];
++
++ if ![gcc_check_compile "$testcase compilation" $option $execname $comp_output] {
++ unresolved "$testcase execution, $option"
++ remote_file build delete $execname
++ continue
++ }
++
++ # See if this source file uses "long long" types, if it does, and
++ # no_long_long is set, skip execution of the test.
++ if [target_info exists no_long_long] then {
++ if [expr [search_for $src "long long"]] then {
++ unsupported "$testcase execution, $option"
++ continue
++ }
++ }
++
++ if [info exists torture_execute_xfail] {
++ setup_xfail $torture_execute_xfail
++ }
++
++ if [info exists torture_eval_before_execute] {
++ set ignore_me [eval $torture_eval_before_execute]
++ }
++
++ set skip 0;
++ if [info exists oldexec] {
++ if { [remote_file build cmp $oldexec $execname] == 0 } {
++ set skip 1;
++ }
++ }
++ if { $skip == 0 } {
++ set result [gcc_load "$execname" "" ""]
++ set status [lindex $result 0];
++ set output [lindex $result 1];
++ }
++ if { $oldstatus == "pass" } {
++ remote_file build delete $oldexec;
++ }
++ $status "$testcase execution, $option"
++ set oldstatus $status;
++ }
++ if [info exists status] {
++ if { $status == "pass" } {
++ remote_file build delete $execname;
++ }
++ }
++}
++
++#
++# search_for -- looks for a string match in a file
++#
++proc search_for { file pattern } {
++ set fd [open $file r]
++ while { [gets $fd cur_line]>=0 } {
++ if [string match "*$pattern*" $cur_line] then {
++ close $fd
++ return 1
++ }
++ }
++ close $fd
++ return 0
++}
++
++#
++# c-torture -- the c-torture testcase source file processor
++#
++# This runs compilation only tests (no execute tests).
++# SRC is the full pathname of the testcase, or just a file name in which case
++# we prepend $srcdir/$subdir.
++#
++# If the testcase has an associated .x file, we source that to run the
++# test instead. We use .x so that we don't lengthen the existing filename
++# to more than 14 chars.
++#
++proc c-torture { args } {
++ global srcdir subdir
++
++ set src [lindex $args 0];
++ if { [llength $args] > 1 } {
++ set options [lindex $args 1];
++ } else {
++ set options ""
++ }
++
++ # Prepend $srdir/$subdir if missing.
++ if ![string match "*/*" $src] {
++ set src "$srcdir/$subdir/$src"
++ }
++
++ # Check for alternate driver.
++ if [file exists [file rootname $src].x] {
++ verbose "Using alternate driver [file rootname [file tail $src]].x" 2
++ set done_p 0
++ catch "set done_p \[source [file rootname $src].x\]"
++ if { $done_p } {
++ return
++ }
++ }
++
++ # Look for a loop within the source code - if we don't find one,
++ # don't pass -funroll[-all]-loops.
++ global torture_with_loops torture_without_loops
++ if [expr [search_for $src "for*("]+[search_for $src "while*("]] then {
++ set option_list $torture_with_loops
++ } else {
++ set option_list $torture_without_loops
++ }
++
++ # loop through all the options
++ foreach option $option_list {
++ # torture_compile_xfail is set by the .x script (if present)
++ if [info exists torture_compile_xfail] {
++ setup_xfail $torture_compile_xfail
++ }
++
++ # torture_execute_before_compile is set by the .x script (if present)
++ if [info exists torture_eval_before_compile] {
++ set ignore_me [eval $torture_eval_before_compile]
++ }
++
++ c-torture-compile $src "$option $options"
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/f-torture.exp gcc-2.95.4/gcc/testsuite/lib/f-torture.exp
+--- gcc-2.95.3/gcc/testsuite/lib/f-torture.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/f-torture.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,317 @@
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-dejagnu@gnu.org.
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++
++# The default option list can be overridden by
++# TORTURE_OPTIONS="{ { list1 } ... { listN } }"
++
++if ![info exists TORTURE_OPTIONS] {
++ # FIXME: We should test -g at least once.
++ set TORTURE_OPTIONS [list \
++ { -O0 } { -O1 } { -O2 } \
++ { -O2 -fomit-frame-pointer -finline-functions } \
++ { -O2 -fomit-frame-pointer -finline-functions -funroll-loops } \
++ { -O2 -fomit-frame-pointer -finline-functions -funroll-all-loops } \
++ { -Os }]
++}
++
++
++# Split TORTURE_OPTIONS into two choices: one for testcases with loops and
++# one for testcases without loops.
++
++set torture_with_loops $TORTURE_OPTIONS
++set torture_without_loops ""
++foreach option $TORTURE_OPTIONS {
++ if ![string match "*loop*" $option] {
++ lappend torture_without_loops $option
++ }
++}
++
++#
++# f-torture-compile -- runs the Tege C-torture test
++#
++# SRC is the full pathname of the testcase.
++# OPTION is the specific compiler flag we're testing (eg: -O2).
++#
++proc f-torture-compile { src option } {
++ global output
++ global srcdir tmpdir
++ global host_triplet
++
++ set output "$tmpdir/[file tail [file rootname $src]].o"
++
++ regsub "^$srcdir/?" $src "" testcase
++ # If we couldn't rip $srcdir out of `src' then just do the best we can.
++ # The point is to reduce the unnecessary noise in the logs. Don't strip
++ # out too much because different testcases with the same name can confuse
++ # `test-tool'.
++ if [string match "/*" $testcase] {
++ set testcase "[file tail [file dirname $src]]/[file tail $src]"
++ }
++
++ verbose "Testing $testcase, $option" 1
++
++ # Run the compiler and analyze the results.
++ set options ""
++ lappend options "additional_flags=-w $option"
++
++ set comp_output [g77_target_compile "$src" "$output" object $options];
++
++ # Set a few common compiler messages.
++ set fatal_signal "*77*: Internal compiler error: program*got fatal signal"
++
++ if [string match "$fatal_signal 6" $comp_output] then {
++ g77_fail $testcase "Got Signal 6, $option"
++ remote_file build delete $output
++ return
++ }
++
++ if [string match "$fatal_signal 11" $comp_output] then {
++ g77_fail $testcase "Got Signal 11, $option"
++ remote_file build delete $output
++ return
++ }
++
++ # We shouldn't get these because of -w, but just in case.
++ if [string match "*77*:*warning:*" $comp_output] then {
++ warning "$testcase: (with warnings) $option"
++ send_log "$comp_output\n"
++ unresolved "$testcase, $option"
++ remote_file build delete $output
++ return
++ }
++
++ set comp_output [prune_warnings $comp_output]
++
++ set unsupported_message [g77_check_unsupported_p $comp_output]
++ if { $unsupported_message != "" } {
++ unsupported "$testcase: $unsupported_message"
++ remote_file build delete $output
++ return
++ }
++
++ # remove any leftover LF/CR to make sure any output is legit
++ regsub -all -- "\[\r\n\]*" $comp_output "" comp_output
++ # If any message remains, we fail.
++ if ![string match "" $comp_output] then {
++ g77_fail $testcase $option
++ remote_file build delete $output
++ return
++ }
++
++ g77_pass $testcase $option
++ remote_file build delete $output
++}
++
++#
++# f-torture-execute -- utility to compile and execute a testcase
++#
++# SRC is the full pathname of the testcase.
++#
++# If the testcase has an associated .x file, we source that to run the
++# test instead. We use .x so that we don't lengthen the existing filename
++# to more than 14 chars.
++#
++proc f-torture-execute { src } {
++ global tmpdir tool srcdir output
++
++ # Check for alternate driver.
++ if [file exists [file rootname $src].x] {
++ verbose "Using alternate driver [file rootname [file tail $src]].x" 2
++ set done_p 0
++ catch "set done_p \[source [file rootname $src].x\]"
++ if { $done_p } {
++ return
++ }
++ }
++
++ # Look for a loop within the source code - if we don't find one,
++ # don't pass -funroll[-all]-loops.
++ global torture_with_loops torture_without_loops
++ if [expr [search_for $src "do *\[0-9\]"]+[search_for $src "end *do"]] then {
++ set option_list $torture_with_loops
++ } else {
++ set option_list $torture_without_loops
++ }
++
++ set executable $tmpdir/[file tail [file rootname $src].x]
++
++ regsub "^$srcdir/?" $src "" testcase
++ # If we couldn't rip $srcdir out of `src' then just do the best we can.
++ # The point is to reduce the unnecessary noise in the logs. Don't strip
++ # out too much because different testcases with the same name can confuse
++ # `test-tool'.
++ if [string match "/*" $testcase] {
++ set testcase "[file tail [file dirname $src]]/[file tail $src]"
++ }
++
++ foreach option $option_list {
++ # torture_{compile,execute}_xfail are set by the .x script
++ # (if present)
++ if [info exists torture_compile_xfail] {
++ setup_xfail $torture_compile_xfail
++ }
++ remote_file build delete $executable
++ verbose "Testing $testcase, $option" 1
++
++ set options ""
++ lappend options "additional_flags=-w $option"
++ set comp_output [g77_target_compile "$src" "$executable" executable $options];
++
++ # Set a few common compiler messages.
++ set fatal_signal "*77*: Internal compiler error: program*got fatal signal"
++
++ if [string match "$fatal_signal 6" $comp_output] then {
++ g77_fail $testcase "Got Signal 6, $option"
++ remote_file build delete $executable
++ continue
++ }
++
++ if [string match "$fatal_signal 11" $comp_output] then {
++ g77_fail $testcase "Got Signal 11, $option"
++ remote_file build delete $executable
++ continue
++ }
++
++ # We shouldn't get these because of -w, but just in case.
++ if [string match "*77*:*warning:*" $comp_output] then {
++ warning "$testcase: (with warnings) $option"
++ send_log "$comp_output\n"
++ unresolved "$testcase, $option"
++ remote_file build delete $executable
++ continue
++ }
++
++ set comp_output [prune_warnings $comp_output]
++
++ set unsupported_message [g77_check_unsupported_p $comp_output]
++
++ if { $unsupported_message != "" } {
++ unsupported "$testcase: $unsupported_message"
++ continue
++ } elseif ![file exists $executable] {
++ if ![is3way] {
++ fail "$testcase compilation, $option"
++ untested "$testcase execution, $option"
++ continue
++ } else {
++ # FIXME: since we can't test for the existance of a remote
++ # file without short of doing an remote file list, we assume
++ # that since we got no output, it must have compiled.
++ pass "$testcase compilation, $option"
++ }
++ } else {
++ pass "$testcase compilation, $option"
++ }
++
++ # See if this source file uses "long long" types, if it does, and
++ # no_long_long is set, skip execution of the test.
++ if [target_info exists no_long_long] then {
++ if [expr [search_for $src "integer\*8"]] then {
++ untested "$testcase execution, $option"
++ continue
++ }
++ }
++
++ if [info exists torture_execute_xfail] {
++ setup_xfail $torture_execute_xfail
++ }
++
++ set result [g77_load "$executable" "" ""]
++ set status [lindex $result 0];
++ set output [lindex $result 1];
++ if { $status == "pass" } {
++ remote_file build delete $executable
++ }
++ $status "$testcase execution, $option"
++ }
++}
++
++#
++# search_for -- looks for a string match in a file
++#
++proc search_for { file pattern } {
++ set fd [open $file r]
++ while { [gets $fd cur_line]>=0 } {
++ set lower [string tolower $cur_line]
++ if [regexp "$pattern" $lower] then {
++ close $fd
++ return 1
++ }
++ }
++ close $fd
++ return 0
++}
++
++#
++# f-torture -- the f-torture testcase source file processor
++#
++# This runs compilation only tests (no execute tests).
++# SRC is the full pathname of the testcase, or just a file name in which case
++# we prepend $srcdir/$subdir.
++#
++# If the testcase has an associated .x file, we source that to run the
++# test instead. We use .x so that we don't lengthen the existing filename
++# to more than 14 chars.
++#
++proc f-torture { args } {
++ global srcdir subdir
++
++ set src [lindex $args 0];
++ if { [llength $args] > 1 } {
++ set options [lindex $args 1];
++ } else {
++ set options ""
++ }
++
++ # Prepend $srdir/$subdir if missing.
++ if ![string match "*/*" $src] {
++ set src "$srcdir/$subdir/$src"
++ }
++
++ # Check for alternate driver.
++ if [file exists [file rootname $src].x] {
++ verbose "Using alternate driver [file rootname [file tail $src]].x" 2
++ set done_p 0
++ catch "set done_p \[source [file rootname $src].x\]"
++ if { $done_p } {
++ return
++ }
++ }
++
++ # Look for a loop within the source code - if we don't find one,
++ # don't pass -funroll[-all]-loops.
++ global torture_with_loops torture_without_loops
++ if [expr [search_for $src "do *\[0-9\]"]+[search_for $src "end *do"]] then {
++ set option_list $torture_with_loops
++ } else {
++ set option_list $torture_without_loops
++ }
++
++ # loop through all the options
++ foreach option $option_list {
++ # torture_compile_xfail is set by the .x script (if present)
++ if [info exists torture_compile_xfail] {
++ setup_xfail $torture_compile_xfail
++ }
++
++ f-torture-compile $src "$option $options"
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/g77.exp gcc-2.95.4/gcc/testsuite/lib/g77.exp
+--- gcc-2.95.3/gcc/testsuite/lib/g77.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/g77.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,274 @@
++# Copyright (C) 1992, 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-g77@prep.ai.mit.edu
++
++# This file was written by Rob Savoye (rob@cygnus.com)
++# Currently maintained by Doug Evans (dje@cygnus.com)
++
++# This file is loaded by the tool init file (eg: unix.exp). It provides
++# default definitions for g77_start, etc. and other supporting cast members.
++
++# These globals are used by g77_start if no compiler arguments are provided.
++# They are also used by the various testsuites to define the environment:
++# where to find stdio.h, libc.a, etc.
++
++#
++# G77_UNDER_TEST is the compiler under test.
++#
++
++#
++# default_g77_version -- extract and print the version number of the compiler
++#
++
++proc default_g77_version { } {
++ global G77_UNDER_TEST
++
++ g77_init;
++
++ # ignore any arguments after the command
++ set compiler [lindex $G77_UNDER_TEST 0]
++
++ if ![is_remote host] {
++ set compiler_name [which $compiler];
++ } else {
++ set compiler_name $compiler;
++ }
++
++ # verify that the compiler exists
++ if { $compiler_name != 0 } then {
++ set options ""
++
++ lappend options "additional_flags=-v"
++ set tmp [g77_target_compile "" "" "none" $options]
++ regexp "g77 version\[^\n\]*" $tmp version
++ if { [info exists version] } then {
++ clone_output "$compiler_name $version\n"
++ } else {
++ clone_output "Couldn't determine version of $compiler_name: $tmp\n"
++ }
++ } else {
++ # compiler does not exist (this should have already been detected)
++ warning "$compiler does not exist"
++ }
++}
++
++#
++# Call g77_version. We do it this way so we can override it if needed.
++#
++proc g77_version { } {
++ default_g77_version;
++}
++
++#
++# g77_init -- called at the start of each .exp script.
++#
++# There currently isn't much to do, but always using it allows us to
++# make some enhancements without having to go back and rewrite the scripts.
++#
++
++set g77_initialized 0
++
++proc g77_init { args } {
++ global tmpdir
++ global libdir
++ global gluefile wrap_flags
++ global g77_initialized
++ global G77_UNDER_TEST
++ global TOOL_EXECUTABLE
++
++ if { $g77_initialized == 1 } { return; }
++
++ if ![info exists G77_UNDER_TEST] then {
++ if [info exists TOOL_EXECUTABLE] {
++ set G77_UNDER_TEST $TOOL_EXECUTABLE;
++ } else {
++ set G77_UNDER_TEST [find_g77]
++ }
++ }
++
++ if ![info exists tmpdir] then {
++ set tmpdir /tmp
++ }
++ if { [target_info needs_status_wrapper]!="" && ![info exists gluefile] } {
++ set gluefile ${tmpdir}/testglue.o;
++ set result [build_wrapper $gluefile];
++ if { $result != "" } {
++ set gluefile [lindex $result 0];
++ set wrap_flags [lindex $result 1];
++ } else {
++ unset gluefile
++ }
++ }
++}
++
++proc g77_target_compile { source dest type options } {
++ global tmpdir;
++ global gluefile wrap_flags;
++ global G77_UNDER_TEST
++ global TOOL_OPTIONS
++
++ if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
++ lappend options "libs=${gluefile}"
++ lappend options "ldflags=$wrap_flags"
++ }
++
++ if [target_info exists g77,stack_size] {
++ lappend options "additional_flags=-DSTACK_SIZE=[target_info g77,stack_size]"
++ }
++ if [target_info exists g77,no_trampolines] {
++ lappend options "additional_flags=-DNO_TRAMPOLINES"
++ }
++ if [target_info exists g77,no_label_values] {
++ lappend options "additional_flags=-DNO_LABEL_VALUES"
++ }
++ if [info exists TOOL_OPTIONS] {
++ lappend options "additional_flags=$TOOL_OPTIONS"
++ }
++ if [target_info exists g77,no_varargs] {
++ lappend options "additional_flags=-DNO_VARARGS"
++ }
++ if ![is_remote host] {
++ set gccpath "[get_multilibs]"
++ set libg2c_dir [lookfor_file ${gccpath} libf2c/libg2c.a]
++ if { $libg2c_dir != "" } {
++ set libg2c_link_flags "-L[file dirname ${libg2c_dir}]"
++ lappend options "additional_flags=${libg2c_link_flags}"
++ }
++ }
++ lappend options "compiler=$G77_UNDER_TEST"
++ return [target_compile $source $dest $type $options]
++}
++
++#
++# g77_pass -- utility to record a testcase passed
++#
++
++proc g77_pass { testcase cflags } {
++ if { "$cflags" == "" } {
++ pass "$testcase"
++ } else {
++ pass "$testcase, $cflags"
++ }
++}
++
++#
++# g77_fail -- utility to record a testcase failed
++#
++
++proc g77_fail { testcase cflags } {
++ if { "$cflags" == "" } {
++ fail "$testcase"
++ } else {
++ fail "$testcase, $cflags"
++ }
++}
++
++#
++# g77_finish -- called at the end of every .exp script that calls g77_init
++#
++# The purpose of this proc is to hide all quirks of the testing environment
++# from the testsuites. It also exists to undo anything that g77_init did
++# (that needs undoing).
++#
++
++proc g77_finish { } {
++ # The testing harness apparently requires this.
++ global errorInfo;
++
++ if [info exists errorInfo] then {
++ unset errorInfo
++ }
++
++ # Might as well reset these (keeps our caller from wondering whether
++ # s/he has to or not).
++ global prms_id bug_id
++ set prms_id 0
++ set bug_id 0
++}
++
++proc g77_exit { } {
++ global gluefile;
++
++ if [info exists gluefile] {
++ file_on_build delete $gluefile;
++ unset gluefile;
++ }
++}
++
++# If this is an older version of dejagnu (without runtest_file_p),
++# provide one and assume the old syntax: foo1.exp bar1.c foo2.exp bar2.c.
++# This can be deleted after next dejagnu release.
++
++if { [info procs runtest_file_p] == "" } then {
++ proc runtest_file_p { runtests testcase } {
++ if { $runtests != "" && [regexp "\[.\]\[cC\]" $runtests] } then {
++ if { [lsearch $runtests [file tail $testcase]] >= 0 } then {
++ return 1
++ } else {
++ return 0
++ }
++ }
++ return 1
++ }
++}
++
++# Provide a definition of this if missing (delete after next dejagnu release).
++
++if { [info procs prune_warnings] == "" } then {
++ proc prune_warnings { text } {
++ return $text
++ }
++}
++
++# Utility used by mike-gcc.exp and c-torture.exp.
++# Check the compiler(/assembler/linker) output for text indicating that
++# the testcase should be marked as "unsupported".
++#
++# When dealing with a large number of tests, it's difficult to weed out the
++# ones that are too big for a particular cpu (eg: 16 bit with a small amount
++# of memory). There are various ways to deal with this. Here's one.
++# Fortunately, all of the cases where this is likely to happen will be using
++# gld so we can tell what the error text will look like.
++
++proc ${tool}_check_unsupported_p { output } {
++ if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $output] {
++ return "memory full"
++ }
++ return ""
++}
++
++# Prune messages from g77 that aren't useful.
++
++proc prune_g77_output { text } {
++ #send_user "Before:$text\n"
++ regsub -all "(^|\n)\[^\n\]*: In (function|method) \[^\n\]*" $text "" text
++ regsub -all "(^|\n)\[^\n\]*: At top level:\[^\n\]*" $text "" text
++
++ # It would be nice to avoid passing anything to g77 that would cause it to
++ # issue these messages (since ignoring them seems like a hack on our part),
++ # but that's too difficult in the general case. For example, sometimes
++ # you need to use -B to point g77 at crt0.o, but there are some targets
++ # that don't have crt0.o.
++ regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $text "" text
++ regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $text "" text
++
++ #send_user "After:$text\n"
++
++ return $text
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/gcc-dg.exp gcc-2.95.4/gcc/testsuite/lib/gcc-dg.exp
+--- gcc-2.95.3/gcc/testsuite/lib/gcc-dg.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/gcc-dg.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,84 @@
++# Copyright (C) 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# Define gcc callbacks for dg.exp.
++
++load_lib dg.exp
++
++proc gcc-dg-test { prog do_what extra_tool_flags } {
++ # Set up the compiler flags, based on what we're going to do.
++
++ switch $do_what {
++ "preprocess" {
++ set compile_type "preprocess"
++ set output_file "[file rootname [file tail $prog]].i"
++ }
++ "compile" {
++ set compile_type "assembly"
++ set output_file "[file rootname [file tail $prog]].s"
++ }
++ "assemble" {
++ set compile_type "object"
++ set output_file "[file rootname [file tail $prog]].o"
++ }
++ "link" {
++ set compile_type "executable"
++ set output_file "a.out"
++ # The following line is needed for targets like the i960 where
++ # the default output file is b.out. Sigh.
++ }
++ "run" {
++ set compile_type "executable"
++ # FIXME: "./" is to cope with "." not being in $PATH.
++ # Should this be handled elsewhere?
++ # YES.
++ set output_file "./a.out"
++ # This is the only place where we care if an executable was
++ # created or not. If it was, dg.exp will try to run it.
++ remote_file build delete $output_file;
++ }
++ default {
++ perror "$do_what: not a valid dg-do keyword"
++ return ""
++ }
++ }
++ set options ""
++ if { $extra_tool_flags != "" } {
++ lappend options "additional_flags=$extra_tool_flags"
++ }
++
++ set comp_output [gcc_target_compile "$prog" "$output_file" "$compile_type" $options];
++
++ return [list $comp_output $output_file]
++}
++
++
++proc gcc-dg-prune { system text } {
++ set text [prune_gcc_output $text]
++
++ # If we see "region xxx is full" then the testcase is too big for ram.
++ # This is tricky to deal with in a large testsuite like c-torture so
++ # deal with it here. Just mark the testcase as unsupported.
++ if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $text] {
++ # The format here is important. See dg.exp.
++ return "::unsupported::memory full"
++ }
++
++ return $text
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/gcc.exp gcc-2.95.4/gcc/testsuite/lib/gcc.exp
+--- gcc-2.95.3/gcc/testsuite/lib/gcc.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/gcc.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,325 @@
++# Copyright (C) 1992, 1993, 1994, 1996, 1997, 1999 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# This file was written by Rob Savoye (rob@cygnus.com)
++# Currently maintained by Doug Evans (dje@cygnus.com)
++
++# This file is loaded by the tool init file (eg: unix.exp). It provides
++# default definitions for gcc_start, etc. and other supporting cast members.
++
++# These globals are used by gcc_start if no compiler arguments are provided.
++# They are also used by the various testsuites to define the environment:
++# where to find stdio.h, libc.a, etc.
++
++# we want to use libgloss so we can get find_gcc.
++load_lib libgloss.exp
++
++#
++# GCC_UNDER_TEST is the compiler under test.
++#
++
++#
++# default_gcc_version -- extract and print the version number of the compiler
++#
++
++proc default_gcc_version { } {
++ global GCC_UNDER_TEST
++
++ gcc_init;
++
++ # ignore any arguments after the command
++ set compiler [lindex $GCC_UNDER_TEST 0]
++
++ if ![is_remote host] {
++ set compiler_name [which $compiler];
++ } else {
++ set compiler_name $compiler;
++ }
++
++ # verify that the compiler exists
++ if { $compiler_name != 0 } then {
++ set tmp [remote_exec host "$compiler -v"]
++ set status [lindex $tmp 0];
++ set output [lindex $tmp 1];
++ regexp "version.*$" $output version
++ if { $status == 0 && [info exists version] } then {
++ clone_output "$compiler_name $version\n"
++ } else {
++ clone_output "Couldn't determine version of $compiler_name: $output\n"
++ }
++ } else {
++ # compiler does not exist (this should have already been detected)
++ warning "$compiler does not exist"
++ }
++}
++
++#
++# Call gcc_version. We do it this way so we can override it if needed.
++#
++proc gcc_version { } {
++ default_gcc_version;
++}
++
++#
++# gcc_init -- called at the start of each .exp script.
++#
++# There currently isn't much to do, but always using it allows us to
++# make some enhancements without having to go back and rewrite the scripts.
++#
++
++set gcc_initialized 0
++
++proc gcc_init { args } {
++ global tmpdir
++ global libdir
++ global gluefile wrap_flags
++ global gcc_initialized
++ global GCC_UNDER_TEST
++ global TOOL_EXECUTABLE
++
++ if { $gcc_initialized == 1 } { return; }
++
++ if ![info exists GCC_UNDER_TEST] {
++ if [info exists TOOL_EXECUTABLE] {
++ set GCC_UNDER_TEST $TOOL_EXECUTABLE;
++ } else {
++ set GCC_UNDER_TEST "[find_gcc]"
++ }
++ }
++
++ if ![info exists tmpdir] then {
++ set tmpdir /tmp
++ }
++ if { [target_info needs_status_wrapper]!="" && ![info exists gluefile] } {
++ set gluefile ${tmpdir}/testglue.o;
++ set result [build_wrapper $gluefile];
++ if { $result != "" } {
++ set gluefile [lindex $result 0];
++ set wrap_flags [lindex $result 1];
++ } else {
++ unset gluefile
++ }
++ }
++}
++
++proc gcc_target_compile { source dest type options } {
++ global tmpdir;
++ global gluefile wrap_flags;
++ global GCC_UNDER_TEST
++ global TOOL_OPTIONS
++
++ if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
++ lappend options "libs=${gluefile}"
++ lappend options "ldflags=$wrap_flags"
++ }
++
++ if [target_info exists gcc,stack_size] {
++ lappend options "additional_flags=-DSTACK_SIZE=[target_info gcc,stack_size]"
++ }
++ if [target_info exists gcc,no_trampolines] {
++ lappend options "additional_flags=-DNO_TRAMPOLINES"
++ }
++ if [target_info exists gcc,no_label_values] {
++ lappend options "additional_flags=-DNO_LABEL_VALUES"
++ }
++ if [info exists TOOL_OPTIONS] {
++ lappend options "additional_flags=$TOOL_OPTIONS"
++ }
++ if [target_info exists gcc,no_varargs] {
++ lappend options "additional_flags=-DNO_VARARGS"
++ }
++ if [target_info exists gcc,timeout] {
++ lappend options "timeout=[target_info gcc,timeout]"
++ }
++ lappend options "compiler=$GCC_UNDER_TEST"
++ return [target_compile $source $dest $type $options]
++}
++
++
++# Reports pass/fail for a gcc compilation and returns true/false.
++proc gcc_check_compile {testcase option objname gcc_output} {
++
++ set fatal_signal "*cc: Internal compiler error: program*got fatal signal"
++
++ if [string match "$fatal_signal 6" $gcc_output] then {
++ gcc_fail $testcase "Got Signal 6, $option"
++ return 0
++ }
++
++ if [string match "$fatal_signal 11" $gcc_output] then {
++ gcc_fail $testcase "Got Signal 11, $option"
++ return 0
++ }
++
++ # We shouldn't get these because of -w, but just in case.
++ if [string match "*cc:*warning:*" $gcc_output] then {
++ warning "$testcase: (with warnings) $option"
++ send_log "$gcc_output\n"
++ unresolved "$testcase, $option"
++ return 0
++ }
++
++ set gcc_output [prune_warnings $gcc_output]
++
++ set unsupported_message [gcc_check_unsupported_p $gcc_output]
++ if { $unsupported_message != "" } {
++ unsupported "$testcase: $unsupported_message"
++ return 0
++ }
++
++ # remove any leftover LF/CR to make sure any output is legit
++ regsub -all -- "\[\r\n\]*" $gcc_output "" gcc_output
++
++ # If any message remains, we fail.
++ if ![string match "" $gcc_output] then {
++ gcc_fail $testcase $option
++ return 0
++ }
++
++ # fail if the desired object file doesn't exist.
++ # FIXME: there's no way of checking for existence on a remote host.
++ if {$objname != "" && ![is3way] && ![file exists $objname]} {
++ gcc_fail $testcase $option
++ return 0
++ }
++
++ gcc_pass $testcase $option
++ return 1
++}
++
++
++
++#
++# gcc_pass -- utility to record a testcase passed
++#
++
++proc gcc_pass { testcase cflags } {
++ if { "$cflags" == "" } {
++ pass "$testcase"
++ } else {
++ pass "$testcase, $cflags"
++ }
++}
++
++#
++# gcc_fail -- utility to record a testcase failed
++#
++
++proc gcc_fail { testcase cflags } {
++ if { "$cflags" == "" } {
++ fail "$testcase"
++ } else {
++ fail "$testcase, $cflags"
++ }
++}
++
++#
++# gcc_finish -- called at the end of every .exp script that calls gcc_init
++#
++# The purpose of this proc is to hide all quirks of the testing environment
++# from the testsuites. It also exists to undo anything that gcc_init did
++# (that needs undoing).
++#
++
++proc gcc_finish { } {
++ # The testing harness apparently requires this.
++ global errorInfo;
++
++ if [info exists errorInfo] then {
++ unset errorInfo
++ }
++
++ # Might as well reset these (keeps our caller from wondering whether
++ # s/he has to or not).
++ global prms_id bug_id
++ set prms_id 0
++ set bug_id 0
++}
++
++proc gcc_exit { } {
++ global gluefile;
++
++ if [info exists gluefile] {
++ file_on_build delete $gluefile;
++ unset gluefile;
++ }
++}
++
++# If this is an older version of dejagnu (without runtest_file_p),
++# provide one and assume the old syntax: foo1.exp bar1.c foo2.exp bar2.c.
++# This can be deleted after next dejagnu release.
++
++if { [info procs runtest_file_p] == "" } then {
++ proc runtest_file_p { runtests testcase } {
++ if { $runtests != "" && [regexp "\[.\]\[cC\]" $runtests] } then {
++ if { [lsearch $runtests [file tail $testcase]] >= 0 } then {
++ return 1
++ } else {
++ return 0
++ }
++ }
++ return 1
++ }
++}
++
++# Provide a definition of this if missing (delete after next dejagnu release).
++
++if { [info procs prune_warnings] == "" } then {
++ proc prune_warnings { text } {
++ return $text
++ }
++}
++
++# Utility used by mike-gcc.exp and c-torture.exp.
++# Check the compiler(/assembler/linker) output for text indicating that
++# the testcase should be marked as "unsupported".
++#
++# When dealing with a large number of tests, it's difficult to weed out the
++# ones that are too big for a particular cpu (eg: 16 bit with a small amount
++# of memory). There are various ways to deal with this. Here's one.
++# Fortunately, all of the cases where this is likely to happen will be using
++# gld so we can tell what the error text will look like.
++
++proc ${tool}_check_unsupported_p { output } {
++ if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $output] {
++ return "memory full"
++ }
++ return ""
++}
++
++# Prune messages from gcc that aren't useful.
++
++proc prune_gcc_output { text } {
++ #send_user "Before:$text\n"
++ regsub -all "(^|\n)\[^\n\]*: In (function|method) \[^\n\]*" $text "" text
++ regsub -all "(^|\n)\[^\n\]*: At top level:\[^\n\]*" $text "" text
++
++ # It would be nice to avoid passing anything to gcc that would cause it to
++ # issue these messages (since ignoring them seems like a hack on our part),
++ # but that's too difficult in the general case. For example, sometimes
++ # you need to use -B to point gcc at crt0.o, but there are some targets
++ # that don't have crt0.o.
++ regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $text "" text
++ regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $text "" text
++
++ #send_user "After:$text\n"
++
++ return $text
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/g++-dg.exp gcc-2.95.4/gcc/testsuite/lib/g++-dg.exp
+--- gcc-2.95.3/gcc/testsuite/lib/g++-dg.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/g++-dg.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,83 @@
++# Copyright (C) 1997, 1999 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-g++@prep.ai.mit.edu
++
++# Define g++ callbacks for dg.exp.
++
++load_lib dg.exp
++
++proc g++-dg-test { prog do_what extra_tool_flags } {
++ # Set up the compiler flags, based on what we're going to do.
++
++ switch $do_what {
++ "preprocess" {
++ set compile_type "preprocess"
++ set output_file "[file rootname [file tail $prog]].i"
++ }
++ "compile" {
++ set compile_type "assembly"
++ set output_file "[file rootname [file tail $prog]].s"
++ }
++ "assemble" {
++ set compile_type "object"
++ set output_file "[file rootname [file tail $prog]].o"
++ }
++ "link" {
++ set compile_type "executable"
++ set output_file "a.out"
++ # The following line is needed for targets like the i960 where
++ # the default output file is b.out. Sigh.
++ }
++ "run" {
++ set compile_type "executable"
++ # FIXME: "./" is to cope with "." not being in $PATH.
++ # Should this be handled elsewhere?
++ # YES.
++ set output_file "./a.out"
++ # This is the only place where we care if an executable was
++ # created or not. If it was, dg.exp will try to run it.
++ remote_file build delete $output_file;
++ }
++ default {
++ perror "$do_what: not a valid dg-do keyword"
++ return ""
++ }
++ }
++ set options ""
++ if { $extra_tool_flags != "" } {
++ lappend options "additional_flags=$extra_tool_flags"
++ }
++
++ set comp_output [g++_target_compile "$prog" "$output_file" "$compile_type" $options];
++
++ return [list $comp_output $output_file]
++}
++
++
++proc g++-dg-prune { system text } {
++
++ # If we see "region xxx is full" then the testcase is too big for ram.
++ # This is tricky to deal with in a large testsuite like c-torture so
++ # deal with it here. Just mark the testcase as unsupported.
++ if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $text] {
++ # The format here is important. See dg.exp.
++ return "::unsupported::memory full"
++ }
++
++ return $text
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/g++.exp gcc-2.95.4/gcc/testsuite/lib/g++.exp
+--- gcc-2.95.3/gcc/testsuite/lib/g++.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/g++.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,234 @@
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-g++@prep.ai.mit.edu
++
++# This file was written by Rob Savoye (rob@cygnus.com)
++# Many modifications by Jeffrey Wheat (cassidy@cygnus.com)
++# With modifications by Mike Stump <mrs@cygnus.com>.
++
++#
++# g++ support library routines
++#
++
++#
++# GXX_UNDER_TEST is the compiler under test.
++#
++
++
++set gpp_compile_options ""
++
++#
++# g++_version -- extract and print the version number of the compiler
++#
++proc g++_version { } {
++ global GXX_UNDER_TEST
++
++ # ignore any arguments after the command
++ set compiler [lindex $GXX_UNDER_TEST 0]
++
++ # verify that the compiler exists
++ if { [is_remote host] || [which $compiler] != 0 } then {
++ set tmp [remote_exec host "$compiler -v"]
++ set status [lindex $tmp 0];
++ set output [lindex $tmp 1];
++ regexp "version.*$" $output version
++ if { $status == 0 && [info exists version] } then {
++ if [is_remote host] {
++ clone_output "$compiler $version\n"
++ } else {
++ clone_output "[which $compiler] $version\n"
++ }
++ } else {
++ clone_output "Couldn't determine version of [which $compiler]\n"
++ }
++ } else {
++ # compiler does not exist (this should have already been detected)
++ warning "$compiler does not exist"
++ }
++}
++
++#
++# g++_init -- called at the start of each subdir of tests
++#
++
++proc g++_init { args } {
++ global subdir
++ global gpp_initialized
++ global base_dir
++ global tmpdir
++ global libdir
++ global gluefile wrap_flags;
++ global objdir srcdir
++ global ALWAYS_CXXFLAGS
++ global TOOL_EXECUTABLE TOOL_OPTIONS
++ global GXX_UNDER_TEST
++
++ if ![info exists GXX_UNDER_TEST] then {
++ if [info exists TOOL_EXECUTABLE] {
++ set GXX_UNDER_TEST $TOOL_EXECUTABLE;
++ } else {
++ if [is_remote host] {
++ set GXX_UNDER_TEST [transform c++]
++ } else {
++ set GXX_UNDER_TEST [findfile $base_dir/../xgcc "$base_dir/../xgcc -B$base_dir/../" [findfile $base_dir/xgcc "$base_dir/xgcc -B$base_dir/" [transform c++]]]
++ }
++ }
++ }
++
++ # Bleah, nasty. Bad taste.
++ if [ishost "*-dos-*" ] {
++ regsub "c\\+\\+" "$GXX_UNDER_TEST" "gcc" GXX_UNDER_TEST
++ }
++
++ if ![is_remote host] {
++ if { [which $GXX_UNDER_TEST] == 0 } then {
++ perror "GXX_UNDER_TEST does not exist"
++ exit 1
++ }
++ }
++ if ![info exists tmpdir] {
++ set tmpdir "/tmp"
++ }
++
++ if [info exists gluefile] {
++ unset gluefile
++ }
++
++ if { [target_info needs_status_wrapper] != "" } {
++ set gluefile ${tmpdir}/testglue.o;
++ set result [build_wrapper $gluefile];
++ if { $result != "" } {
++ set gluefile [lindex $result 0];
++ set wrap_flags [lindex $result 1];
++ } else {
++ unset gluefile
++ }
++ }
++
++ set ALWAYS_CXXFLAGS ""
++
++ if ![is_remote host] {
++ lappend ALWAYS_CXXFLAGS "additional_flags=[g++_include_flags]";
++ lappend ALWAYS_CXXFLAGS "ldflags=[g++_link_flags]";
++ }
++
++ if [info exists TOOL_OPTIONS] {
++ lappend ALWAYS_CXXFLAGS "additional_flags=$TOOL_OPTIONS";
++ }
++
++ verbose -log "ALWAYS_CXXFLAGS set to $ALWAYS_CXXFLAGS"
++
++ verbose "g++ is initialized" 3
++}
++
++
++proc g++_target_compile { source dest type options } {
++ global tmpdir;
++ global gpp_compile_options
++ global gluefile wrap_flags
++ global ALWAYS_CXXFLAGS;
++ global GXX_UNDER_TEST;
++
++ if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
++ lappend options "libs=${gluefile}"
++ lappend options "ldflags=${wrap_flags}"
++ }
++
++ lappend options "additional_flags=[libio_include_flags]"
++ lappend options "compiler=$GXX_UNDER_TEST";
++
++ set options [concat $options $gpp_compile_options]
++
++ set options [concat $options "$ALWAYS_CXXFLAGS"];
++
++ if { [regexp "(^| )-frepo( |$)" $options] && \
++ [regexp "\.o(|bj)$" $dest] } then {
++ regsub "\.o(|bj)$" $dest ".rpo" rponame
++ exec rm -f $rponame
++ }
++
++ return [target_compile $source $dest $type $options]
++}
++
++proc g++_exit { args } {
++ global gluefile;
++
++ if [info exists gluefile] {
++ file_on_build delete $gluefile;
++ unset gluefile;
++ }
++}
++
++# If this is an older version of dejagnu (without runtest_file_p),
++# provide one and assume the old syntax: foo1.exp bar1.c foo2.exp bar2.c.
++# This can be deleted after the next dejagnu release.
++
++if { [info procs runtest_file_p] == "" } then {
++ proc runtest_file_p { runtests testcase } {
++ if { $runtests != "" && [regexp "\[.\]\[cC\]" $runtests] } then {
++ if { [lsearch $runtests [file tail $testcase]] >= 0 } then {
++ return 1
++ } else {
++ return 0
++ }
++ }
++ return 1
++ }
++}
++
++# Provide a definition of this if missing (delete after next dejagnu release).
++
++if { [info procs prune_warnings] == "" } then {
++ proc prune_warnings { text } {
++ return $text
++ }
++}
++
++# Utility used by mike-g++.exp and old-dejagnu.exp.
++# Check the compiler(/assembler/linker) output for text indicating that
++# the testcase should be marked as "unsupported".
++#
++# When dealing with a large number of tests, it's difficult to weed out the
++# ones that are too big for a particular cpu (eg: 16 bit with a small amount
++# of memory). There are various ways to deal with this. Here's one.
++# Fortunately, all of the cases where this is likely to happen will be using
++# gld so we can tell what the error text will look like.
++
++proc ${tool}_check_unsupported_p { output } {
++ if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $output] {
++ return "memory full"
++ }
++ return ""
++}
++
++proc ${tool}_option_help { } {
++ send_user "--additional_options,OPTIONS\t\tUse OPTIONS to compile the testcase files. OPTIONS should be comma-separated."
++}
++
++proc ${tool}_option_proc { option } {
++ if[regexp "^--additional_options," $option] {
++ global gpp_compile_options
++ regsub "--additional_options," $option "" option
++ foreach x [split $option ","] {
++ lappend gpp_compile_options "additional_flags=$x"
++ }
++ return 1;
++ } else {
++ return 0
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/mike-g77.exp gcc-2.95.4/gcc/testsuite/lib/mike-g77.exp
+--- gcc-2.95.3/gcc/testsuite/lib/mike-g77.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/mike-g77.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,262 @@
++# Copyright (C) 1988, 90, 91, 92, 95, 96, 97, 1998 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# This file was derived from mike-g++.exp written by Mike Stump <mrs@cygnus.com>
++
++# Please email any bugs, comments, and/or additions to this file to:
++# fortran@gnu.org
++
++#
++# mike_cleanup -- remove any files that are created by the testcase
++#
++proc mike_cleanup { src_code output_file assembly_file } {
++ remote_file build delete $output_file $assembly_file;
++}
++
++#
++# prebase -- sets up a Mike Stump (mrs@cygnus.com) style g77 test
++#
++proc prebase { } {
++ global compiler_output
++ global not_compiler_output
++ global compiler_result
++ global not_compiler_result
++ global program_output
++ global groups
++ global run
++ global actions
++ global target_regexp
++
++ set compiler_output "^$"
++ set not_compiler_output ".*Internal compiler error.*"
++ set compiler_result ""
++ set not_compiler_result ""
++ set program_output ".*PASS.*"
++ set groups {}
++ set run no
++ set actions assemble
++ set target_regexp ".*"
++}
++
++#
++# run the test
++#
++proc postbase { src_code run groups args } {
++ global verbose
++ global srcdir
++ global subdir
++ global not_compiler_output
++ global compiler_output
++ global compiler_result
++ global not_compiler_result
++ global program_output
++ global actions
++ global target_regexp
++ global host_triplet
++ global target_triplet
++ global tool
++ global tmpdir
++ global G77_UNDER_TEST
++ global GROUP
++
++ if ![info exists G77_UNDER_TEST] {
++ error "No compiler specified for testing."
++ }
++
++ if ![regexp $target_regexp $target_triplet] {
++ unsupported $subdir/$src_code
++ return
++ }
++
++ if { [llength $args] > 0 } {
++ set comp_options [lindex $args 0];
++ } else {
++ set comp_options ""
++ }
++
++ set fail_message $subdir/$src_code
++ set pass_message $subdir/$src_code
++
++ if [info exists GROUP] {
++ if {[lsearch $groups $GROUP] == -1} {
++ return
++ }
++ }
++
++ if [string match $run yes] {
++ set actions run
++ }
++
++ set output_file "$tmpdir/[file tail [file rootname $src_code]]"
++ set assembly_file "$output_file"
++ append assembly_file ".S"
++
++ set compile_type "none"
++
++ case $actions {
++ compile
++ {
++ set compile_type "assembly";
++ set output_file $assembly_file;
++ }
++ assemble
++ {
++ set compile_type "object";
++ append output_file ".o";
++ }
++ link
++ {
++ set compile_type "executable";
++ set output_file "$tmpdir/a.out";
++ }
++ run
++ {
++ set compile_type "executable";
++ set output_file "$tmpdir/a.out";
++ set run yes;
++ }
++ default
++ {
++ set output_file "";
++ set compile_type "none";
++ }
++ }
++
++ set src_file "$srcdir/$subdir/$src_code"
++ set options ""
++ lappend options "compiler=$G77_UNDER_TEST"
++
++ if { $comp_options != "" } {
++ lappend options "additional_flags=$comp_options"
++ }
++
++ set comp_output [g77_target_compile $src_file $output_file $compile_type $options];
++
++ set pass no
++
++ # Delete things like "ld.so warning" messages.
++ set comp_output [prune_warnings $comp_output]
++
++ if [regexp -- $not_compiler_output $comp_output] {
++ if { $verbose > 1 } {
++ send_user "\nChecking:\n$not_compiler_output\nto make sure it does not match:\n$comp_output\nbut it does.\n\n"
++ } else {
++ send_log "\nCompiler output:\n$comp_output\n\n"
++ }
++ fail $fail_message
++ # The framework doesn't like to see any error remnants,
++ # so remove them.
++ uplevel {
++ if [info exists errorInfo] {
++ unset errorInfo
++ }
++ }
++ mike_cleanup $src_code $output_file $assembly_file
++ return
++ }
++
++ # remove any leftover CRs.
++ regsub -all -- "\r" $comp_output "" comp_output
++
++ regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output
++
++ set unsupported_message [${tool}_check_unsupported_p $comp_output]
++ if { $unsupported_message != "" } {
++ unsupported "$subdir/$src_code: $unsupported_message"
++ mike_cleanup $src_code $output_file $assembly_file
++ return
++ }
++
++ if { $verbose > 1 } {
++ send_user "\nChecking:\n$compiler_output\nto see if it matches:\n$comp_output\n"
++ } else {
++ send_log "\nCompiler output:\n$comp_output\n\n"
++ }
++ if [regexp -- $compiler_output $comp_output] {
++ if { $verbose > 1 } {
++ send_user "Yes, it matches.\n\n"
++ }
++ set pass yes
++ if [file exists [file rootname [file tail $src_code]].s] {
++ set fd [open [file rootname [file tail $src_code]].s r]
++ set dot_s [read $fd]
++ close $fd
++ if { $compiler_result != "" } {
++ verbose "Checking .s file for $compiler_result" 2
++ if [regexp -- $compiler_result $dot_s] {
++ verbose "Yes, it matches." 2
++ } else {
++ verbose "Nope, doesn't match." 2
++ verbose $dot_s 4
++ set pass no
++ }
++ }
++ if { $not_compiler_result != "" } {
++ verbose "Checking .s file for not $not_compiler_result" 2
++ if ![regexp -- $not_compiler_result $dot_s] {
++ verbose "Nope, not found (that's good)." 2
++ } else {
++ verbose "Uh oh, it was found." 2
++ verbose $dot_s 4
++ set pass no
++ }
++ }
++ }
++ if [string match $run yes] {
++ set result [g77_load $output_file]
++ set status [lindex $result 0];
++ set output [lindex $result 1];
++ if { $status == -1 } {
++ mike_cleanup $src_code $output_file $assembly_file;
++ return;
++ }
++ if { $verbose > 1 } {
++ send_user "Checking:\n$program_output\nto see if it matches:\n$output\n\n"
++ }
++ if ![regexp -- $program_output $output] {
++ set pass no
++ if { $verbose > 1 } {
++ send_user "Nope, does not match.\n\n"
++ }
++ } else {
++ if { $verbose > 1 } {
++ send_user "Yes, it matches.\n\n"
++ }
++ }
++ }
++ } else {
++ if { $verbose > 1 } {
++ send_user "Nope, does not match.\n\n"
++ }
++ }
++
++ if [string match $pass "yes"] {
++ pass $pass_message
++ } else {
++ fail $fail_message
++ }
++
++ # The framework doesn't like to see any error remnants,
++ # so remove them.
++ uplevel {
++ if [info exists errorInfo] {
++ unset errorInfo
++ }
++ }
++
++ mike_cleanup $src_code $output_file $assembly_file
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/mike-gcc.exp gcc-2.95.4/gcc/testsuite/lib/mike-gcc.exp
+--- gcc-2.95.3/gcc/testsuite/lib/mike-gcc.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/mike-gcc.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,262 @@
++# Copyright (C) 1988, 90, 91, 92, 95, 96, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# This file was derived from mike-g++.exp written by Mike Stump <mrs@cygnus.com>
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++#
++# mike_cleanup -- remove any files that are created by the testcase
++#
++proc mike_cleanup { src_code output_file assembly_file } {
++ remote_file build delete $output_file $assembly_file;
++}
++
++#
++# prebase -- sets up a Mike Stump (mrs@cygnus.com) style gcc test
++#
++proc prebase { } {
++ global compiler_output
++ global not_compiler_output
++ global compiler_result
++ global not_compiler_result
++ global program_output
++ global groups
++ global run
++ global actions
++ global target_regexp
++
++ set compiler_output "^$"
++ set not_compiler_output ".*Internal compiler error.*"
++ set compiler_result ""
++ set not_compiler_result ""
++ set program_output ".*PASS.*"
++ set groups {}
++ set run no
++ set actions assemble
++ set target_regexp ".*"
++}
++
++#
++# run the test
++#
++proc postbase { src_code run groups args } {
++ global verbose
++ global srcdir
++ global subdir
++ global not_compiler_output
++ global compiler_output
++ global compiler_result
++ global not_compiler_result
++ global program_output
++ global actions
++ global target_regexp
++ global host_triplet
++ global target_triplet
++ global tool
++ global tmpdir
++ global GCC_UNDER_TEST
++ global GROUP
++
++ if ![info exists GCC_UNDER_TEST] {
++ error "No compiler specified for testing."
++ }
++
++ if ![regexp $target_regexp $target_triplet] {
++ unsupported $subdir/$src_code
++ return
++ }
++
++ if { [llength $args] > 0 } {
++ set comp_options [lindex $args 0];
++ } else {
++ set comp_options ""
++ }
++
++ set fail_message $subdir/$src_code
++ set pass_message $subdir/$src_code
++
++ if [info exists GROUP] {
++ if {[lsearch $groups $GROUP] == -1} {
++ return
++ }
++ }
++
++ if [string match $run yes] {
++ set actions run
++ }
++
++ set output_file "$tmpdir/[file tail [file rootname $src_code]]"
++ set assembly_file "$output_file"
++ append assembly_file ".S"
++
++ set compile_type "none"
++
++ case $actions {
++ compile
++ {
++ set compile_type "assembly";
++ set output_file $assembly_file;
++ }
++ assemble
++ {
++ set compile_type "object";
++ append output_file ".o";
++ }
++ link
++ {
++ set compile_type "executable";
++ set output_file "$tmpdir/a.out";
++ }
++ run
++ {
++ set compile_type "executable";
++ set output_file "$tmpdir/a.out";
++ set run yes;
++ }
++ default
++ {
++ set output_file "";
++ set compile_type "none";
++ }
++ }
++
++ set src_file "$srcdir/$subdir/$src_code"
++ set options ""
++ lappend options "compiler=$GCC_UNDER_TEST"
++
++ if { $comp_options != "" } {
++ lappend options "additional_flags=$comp_options"
++ }
++
++ set comp_output [gcc_target_compile $src_file $output_file $compile_type $options];
++
++ set pass no
++
++ # Delete things like "ld.so warning" messages.
++ set comp_output [prune_warnings $comp_output]
++
++ if [regexp -- $not_compiler_output $comp_output] {
++ if { $verbose > 1 } {
++ send_user "\nChecking:\n$not_compiler_output\nto make sure it does not match:\n$comp_output\nbut it does.\n\n"
++ } else {
++ send_log "\nCompiler output:\n$comp_output\n\n"
++ }
++ fail $fail_message
++ # The framework doesn't like to see any error remnants,
++ # so remove them.
++ uplevel {
++ if [info exists errorInfo] {
++ unset errorInfo
++ }
++ }
++ mike_cleanup $src_code $output_file $assembly_file
++ return
++ }
++
++ # remove any leftover CRs.
++ regsub -all -- "\r" $comp_output "" comp_output
++
++ regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output
++
++ set unsupported_message [${tool}_check_unsupported_p $comp_output]
++ if { $unsupported_message != "" } {
++ unsupported "$subdir/$src_code: $unsupported_message"
++ mike_cleanup $src_code $output_file $assembly_file
++ return
++ }
++
++ if { $verbose > 1 } {
++ send_user "\nChecking:\n$compiler_output\nto see if it matches:\n$comp_output\n"
++ } else {
++ send_log "\nCompiler output:\n$comp_output\n\n"
++ }
++ if [regexp -- $compiler_output $comp_output] {
++ if { $verbose > 1 } {
++ send_user "Yes, it matches.\n\n"
++ }
++ set pass yes
++ if [file exists [file rootname [file tail $src_code]].s] {
++ set fd [open [file rootname [file tail $src_code]].s r]
++ set dot_s [read $fd]
++ close $fd
++ if { $compiler_result != "" } {
++ verbose "Checking .s file for $compiler_result" 2
++ if [regexp -- $compiler_result $dot_s] {
++ verbose "Yes, it matches." 2
++ } else {
++ verbose "Nope, doesn't match." 2
++ verbose $dot_s 4
++ set pass no
++ }
++ }
++ if { $not_compiler_result != "" } {
++ verbose "Checking .s file for not $not_compiler_result" 2
++ if ![regexp -- $not_compiler_result $dot_s] {
++ verbose "Nope, not found (that's good)." 2
++ } else {
++ verbose "Uh oh, it was found." 2
++ verbose $dot_s 4
++ set pass no
++ }
++ }
++ }
++ if [string match $run yes] {
++ set result [gcc_load $output_file]
++ set status [lindex $result 0];
++ set output [lindex $result 1];
++ if { $status == -1 } {
++ mike_cleanup $src_code $output_file $assembly_file;
++ return;
++ }
++ if { $verbose > 1 } {
++ send_user "Checking:\n$program_output\nto see if it matches:\n$output\n\n"
++ }
++ if ![regexp -- $program_output $output] {
++ set pass no
++ if { $verbose > 1 } {
++ send_user "Nope, does not match.\n\n"
++ }
++ } else {
++ if { $verbose > 1 } {
++ send_user "Yes, it matches.\n\n"
++ }
++ }
++ }
++ } else {
++ if { $verbose > 1 } {
++ send_user "Nope, does not match.\n\n"
++ }
++ }
++
++ if [string match $pass "yes"] {
++ pass $pass_message
++ } else {
++ fail $fail_message
++ }
++
++ # The framework doesn't like to see any error remnants,
++ # so remove them.
++ uplevel {
++ if [info exists errorInfo] {
++ unset errorInfo
++ }
++ }
++
++ mike_cleanup $src_code $output_file $assembly_file
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/mike-g++.exp gcc-2.95.4/gcc/testsuite/lib/mike-g++.exp
+--- gcc-2.95.3/gcc/testsuite/lib/mike-g++.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/mike-g++.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,264 @@
++# Copyright (C) 1988, 90, 91, 92, 95, 96, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# This file was written by Mike Stump <mrs@cygnus.com>
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-g++@prep.ai.mit.edu
++
++#
++# mike_cleanup -- remove any files that are created by the testcase
++#
++proc mike_cleanup { src_code output_file assembly_file } {
++ remote_file build delete $output_file $assembly_file;
++}
++
++#
++# prebase -- sets up a Mike Stump (mrs@cygnus.com) style G++ test
++#
++proc prebase { } {
++ global compiler_output
++ global not_compiler_output
++ global compiler_result
++ global not_compiler_result
++ global program_output
++ global groups
++ global run
++ global actions
++ global target_regexp
++
++ set compiler_output "^$"
++ set not_compiler_output ".*Internal compiler error.*"
++ set compiler_result ""
++ set not_compiler_result ""
++ set program_output ".*PASS.*"
++ set groups {}
++ set run no
++ set actions assemble
++ set target_regexp ".*"
++}
++
++#
++# run the test
++#
++proc postbase { src_code run groups args } {
++ global verbose
++ global srcdir
++ global subdir
++ global not_compiler_output
++ global compiler_output
++ global compiler_result
++ global not_compiler_result
++ global program_output
++ global actions
++ global target_regexp
++ global host_triplet
++ global target_triplet
++ global tool
++ global tmpdir
++ global objdir
++ global base_dir
++
++ if ![regexp $target_regexp $target_triplet] {
++ unsupported $subdir/$src_code
++ return
++ }
++
++ if { [llength $args] > 0 } {
++ set comp_options [lindex $args 0];
++ } else {
++ set comp_options ""
++ }
++
++ set fail_message $subdir/$src_code
++ set pass_message $subdir/$src_code
++
++ if [info exists GROUP] {
++ if {[lsearch $groups $GROUP] == -1} {
++ return
++ }
++ }
++
++ if [string match $run yes] {
++ set actions run
++ }
++
++ set output_file "$tmpdir/[file tail [file rootname $src_code]]"
++ set assembly_file "$output_file"
++ append assembly_file ".S"
++
++ set compile_type "none"
++
++ case $actions {
++ compile
++ {
++ set compile_type "assembly";
++ set output_file $assembly_file;
++ }
++ assemble
++ {
++ set compile_type "object";
++ append output_file ".o";
++ }
++ link
++ {
++ set compile_type "executable";
++ set output_file "$tmpdir/a.out";
++ }
++ run
++ {
++ set compile_type "executable";
++ set output_file "$tmpdir/a.out";
++ set run yes;
++ }
++ default
++ {
++ set output_file "";
++ set compile_type "none";
++ }
++ }
++
++ set src_file "$srcdir/$subdir/$src_code"
++ set options ""
++
++ if { $comp_options != "" } {
++ lappend options "additional_flags=$comp_options"
++ }
++
++ if ![ishost "*-dos-*"] {
++ lappend options "libs=-lstdc++ -lg++"
++ } else {
++ lappend options "libs=-lstdcxx -lgxx"
++ }
++
++ set comp_output [g++_target_compile $src_file $output_file $compile_type $options]
++
++ set pass no
++
++ # Delete things like "ld.so warning" messages.
++ set comp_output [prune_warnings $comp_output]
++
++ if [regexp -- $not_compiler_output $comp_output] {
++ if { $verbose > 1 } {
++ send_user "\nChecking:\n$not_compiler_output\nto make sure it does not match:\n$comp_output\nbut it does.\n\n"
++ } else {
++ send_log "\nCompiler output:\n$comp_output\n\n"
++ }
++ fail $fail_message
++ # The framework doesn't like to see any error remnants,
++ # so remove them.
++ uplevel {
++ if [info exists errorInfo] {
++ unset errorInfo
++ }
++ }
++ mike_cleanup $src_code $output_file $assembly_file
++ return
++ }
++
++ # remove any leftover CRs.
++ regsub -all -- "\r" $comp_output "" comp_output
++
++ regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output
++
++ set unsupported_message [${tool}_check_unsupported_p $comp_output]
++ if { $unsupported_message != "" } {
++ unsupported "$subdir/$src_code: $unsupported_message"
++ mike_cleanup $src_code $output_file $assembly_file
++ return
++ }
++
++ if { $verbose > 1 } {
++ send_user "\nChecking:\n$compiler_output\nto see if it matches:\n$comp_output\n"
++ } else {
++ send_log "\nCompiler output:\n$comp_output\n\n"
++ }
++ if [regexp -- $compiler_output $comp_output] {
++ if { $verbose > 1 } {
++ send_user "Yes, it matches.\n\n"
++ }
++ set pass yes
++ if [file exists [file rootname [file tail $src_code]].s] {
++ set fd [open [file rootname [file tail $src_code]].s r]
++ set dot_s [read $fd]
++ close $fd
++ if { $compiler_result != "" } {
++ verbose "Checking .s file for $compiler_result" 2
++ if [regexp -- $compiler_result $dot_s] {
++ verbose "Yes, it matches." 2
++ } else {
++ verbose "Nope, doesn't match." 2
++ verbose $dot_s 4
++ set pass no
++ }
++ }
++ if { $not_compiler_result != "" } {
++ verbose "Checking .s file for not $not_compiler_result" 2
++ if ![regexp -- $not_compiler_result $dot_s] {
++ verbose "Nope, not found (that's good)." 2
++ } else {
++ verbose "Uh oh, it was found." 2
++ verbose $dot_s 4
++ set pass no
++ }
++ }
++ }
++ if [string match $run yes] {
++ set result [g++_load $output_file]
++ set status [lindex $result 0];
++ set output [lindex $result 1];
++
++ if { $status == -1 } {
++ mike_cleanup $src_code $output_file $assembly_file;
++ return;
++ }
++ if { $verbose > 1 } {
++ send_user "Checking:\n$program_output\nto see if it matches:\n$output\n\n"
++ }
++ if ![regexp -- $program_output $output] {
++ set pass no
++ if { $verbose > 1 } {
++ send_user "Nope, does not match.\n\n"
++ }
++ } else {
++ if { $verbose > 1 } {
++ send_user "Yes, it matches.\n\n"
++ }
++ }
++ }
++ } else {
++ if { $verbose > 1 } {
++ send_user "Nope, does not match.\n\n"
++ }
++ }
++
++ if [string match $pass "yes"] {
++ pass $pass_message
++ } else {
++ fail $fail_message
++ }
++
++ # The framework doesn't like to see any error remnants,
++ # so remove them.
++ uplevel {
++ if [info exists errorInfo] {
++ unset errorInfo
++ }
++ }
++
++ mike_cleanup $src_code $output_file $assembly_file
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/objc.exp gcc-2.95.4/gcc/testsuite/lib/objc.exp
+--- gcc-2.95.3/gcc/testsuite/lib/objc.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/objc.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,269 @@
++# Copyright (C) 1992, 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# This file was written by Rob Savoye (rob@cygnus.com)
++# Currently maintained by Doug Evans (dje@cygnus.com)
++
++# This file is loaded by the tool init file (eg: unix.exp). It provides
++# default definitions for objc_start, etc. and other supporting cast members.
++
++# These globals are used by objc_start if no compiler arguments are provided.
++# They are also used by the various testsuites to define the environment:
++# where to find stdio.h, libc.a, etc.
++
++#
++# OBJC_UNDER_TEST is the compiler under test.
++#
++
++#
++# default_objc_version -- extract and print the version number of the compiler
++#
++
++proc default_objc_version { } {
++ global OBJC_UNDER_TEST
++
++ objc_init;
++
++ # ignore any arguments after the command
++ set compiler [lindex $OBJC_UNDER_TEST 0]
++
++ if ![is_remote host] {
++ set compiler_name [which $compiler];
++ } else {
++ set compiler_name $compiler;
++ }
++
++ # verify that the compiler exists
++ if { $compiler_name != 0 } then {
++ set tmp [remote_exec host "$compiler -v"]
++ set status [lindex $tmp 0];
++ set output [lindex $tmp 1];
++ regexp "version.*$" $output version
++ if { $status == 0 && [info exists version] } then {
++ clone_output "$compiler_name $version\n"
++ } else {
++ clone_output "Couldn't determine version of $compiler_name: $output\n"
++ }
++ } else {
++ # compiler does not exist (this should have already been detected)
++ warning "$compiler does not exist"
++ }
++}
++
++#
++# Call objc_version. We do it this way so we can override it if needed.
++#
++proc objc_version { } {
++ default_objc_version;
++}
++
++#
++# objc_init -- called at the start of each .exp script.
++#
++# There currently isn't much to do, but always using it allows us to
++# make some enhancements without having to go back and rewrite the scripts.
++#
++
++set objc_initialized 0
++
++proc objc_init { args } {
++ global tmpdir
++ global libdir
++ global gluefile wrap_flags
++ global objc_initialized
++ global OBJC_UNDER_TEST
++ global TOOL_EXECUTABLE
++
++ if { $objc_initialized == 1 } { return; }
++
++ if ![info exists OBJC_UNDER_TEST] then {
++ if [info exists TOOL_EXECUTABLE] {
++ set OBJC_UNDER_TEST $TOOL_EXECUTABLE;
++ } else {
++ set OBJC_UNDER_TEST [find_gcc]
++ }
++ }
++
++ if ![info exists tmpdir] then {
++ set tmpdir /tmp
++ }
++ if { [target_info needs_status_wrapper]!="" && ![info exists gluefile] } {
++ set gluefile ${tmpdir}/testglue.o;
++ set result [build_wrapper $gluefile];
++ if { $result != "" } {
++ set gluefile [lindex $result 0];
++ set wrap_flags [lindex $result 1];
++ } else {
++ unset gluefile
++ }
++ }
++}
++
++proc objc_target_compile { source dest type options } {
++ global tmpdir;
++ global gluefile wrap_flags;
++ global OBJC_UNDER_TEST
++ global TOOL_OPTIONS
++
++ lappend options "libs=-lobjc"
++ if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
++ lappend options "libs=${gluefile}"
++ lappend options "ldflags=$wrap_flags"
++ }
++
++ if [target_info exists objc,stack_size] {
++ lappend options "additional_flags=-DSTACK_SIZE=[target_info objc,stack_size]"
++ }
++ if [target_info exists objc,no_trampolines] {
++ lappend options "additional_flags=-DNO_TRAMPOLINES"
++ }
++ if [target_info exists objc,no_label_values] {
++ lappend options "additional_flags=-DNO_LABEL_VALUES"
++ }
++ if [info exists TOOL_OPTIONS] {
++ lappend options "additional_flags=$TOOL_OPTIONS"
++ }
++ if [target_info exists objc,no_varargs] {
++ lappend options "additional_flags=-DNO_VARARGS"
++ }
++ set objcpath "[get_multilibs]"
++ set libobjc_dir [lookfor_file ${objcpath} libobjc/libobjc.a]
++ if { $libobjc_dir != "" } {
++ set objc_link_flags "-L[file dirname ${libobjc_dir}]"
++ lappend options "additional_flags=${objc_link_flags}"
++ }
++ lappend options "compiler=$OBJC_UNDER_TEST"
++ return [target_compile $source $dest $type $options]
++}
++
++#
++# objc_pass -- utility to record a testcase passed
++#
++
++proc objc_pass { testcase cflags } {
++ if { "$cflags" == "" } {
++ pass "$testcase"
++ } else {
++ pass "$testcase, $cflags"
++ }
++}
++
++#
++# objc_fail -- utility to record a testcase failed
++#
++
++proc objc_fail { testcase cflags } {
++ if { "$cflags" == "" } {
++ fail "$testcase"
++ } else {
++ fail "$testcase, $cflags"
++ }
++}
++
++#
++# objc_finish -- called at the end of every .exp script that calls objc_init
++#
++# The purpose of this proc is to hide all quirks of the testing environment
++# from the testsuites. It also exists to undo anything that objc_init did
++# (that needs undoing).
++#
++
++proc objc_finish { } {
++ # The testing harness apparently requires this.
++ global errorInfo;
++
++ if [info exists errorInfo] then {
++ unset errorInfo
++ }
++
++ # Might as well reset these (keeps our caller from wondering whether
++ # s/he has to or not).
++ global prms_id bug_id
++ set prms_id 0
++ set bug_id 0
++}
++
++proc objc_exit { } {
++ global gluefile;
++
++ if [info exists gluefile] {
++ file_on_build delete $gluefile;
++ unset gluefile;
++ }
++}
++
++# If this is an older version of dejagnu (without runtest_file_p),
++# provide one and assume the old syntax: foo1.exp bar1.c foo2.exp bar2.c.
++# This can be deleted after next dejagnu release.
++
++if { [info procs runtest_file_p] == "" } then {
++ proc runtest_file_p { runtests testcase } {
++ if { $runtests != "" && [regexp "\[.\]\[cC\]" $runtests] } then {
++ if { [lsearch $runtests [file tail $testcase]] >= 0 } then {
++ return 1
++ } else {
++ return 0
++ }
++ }
++ return 1
++ }
++}
++
++# Provide a definition of this if missing (delete after next dejagnu release).
++
++if { [info procs prune_warnings] == "" } then {
++ proc prune_warnings { text } {
++ return $text
++ }
++}
++
++# Utility used by mike-gcc.exp and c-torture.exp.
++# Check the compiler(/assembler/linker) output for text indicating that
++# the testcase should be marked as "unsupported".
++#
++# When dealing with a large number of tests, it's difficult to weed out the
++# ones that are too big for a particular cpu (eg: 16 bit with a small amount
++# of memory). There are various ways to deal with this. Here's one.
++# Fortunately, all of the cases where this is likely to happen will be using
++# gld so we can tell what the error text will look like.
++
++proc ${tool}_check_unsupported_p { output } {
++ if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $output] {
++ return "memory full"
++ }
++ return ""
++}
++
++# Prune messages from objc that aren't useful.
++
++proc prune_objc_output { text } {
++ #send_user "Before:$text\n"
++ regsub -all "(^|\n)\[^\n\]*: In (function|method) \[^\n\]*" $text "" text
++ regsub -all "(^|\n)\[^\n\]*: At top level:\[^\n\]*" $text "" text
++
++ # It would be nice to avoid passing anything to objc that would cause it to
++ # issue these messages (since ignoring them seems like a hack on our part),
++ # but that's too difficult in the general case. For example, sometimes
++ # you need to use -B to point objc at crt0.o, but there are some targets
++ # that don't have crt0.o.
++ regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $text "" text
++ regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $text "" text
++
++ #send_user "After:$text\n"
++
++ return $text
++}
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/objc-torture.exp gcc-2.95.4/gcc/testsuite/lib/objc-torture.exp
+--- gcc-2.95.3/gcc/testsuite/lib/objc-torture.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/objc-torture.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,316 @@
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-dejagnu.prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++
++# The default option list can be overridden by
++# TORTURE_OPTIONS="{ { list1 } ... { listN } }"
++
++if ![info exists TORTURE_OPTIONS] {
++ # FIXME: We should test -g at least once.
++ set TORTURE_OPTIONS [list { -O }]
++}
++
++
++# Split TORTURE_OPTIONS into two choices: one for testcases with loops and
++# one for testcases without loops.
++
++set torture_with_loops $TORTURE_OPTIONS
++set torture_without_loops ""
++foreach option $TORTURE_OPTIONS {
++ if ![string match "*loop*" $option] {
++ lappend torture_without_loops $option
++ }
++}
++
++#
++# objc-torture-compile -- runs the Tege C-torture test
++#
++# SRC is the full pathname of the testcase.
++# OPTION is the specific compiler flag we're testing (eg: -O2).
++#
++proc objc-torture-compile { src option } {
++ global output
++ global srcdir tmpdir
++ global host_triplet
++
++ set output "$tmpdir/[file tail [file rootname $src]].o"
++
++ regsub "^$srcdir/?" $src "" testcase
++ # If we couldn't rip $srcdir out of `src' then just do the best we can.
++ # The point is to reduce the unnecessary noise in the logs. Don't strip
++ # out too much because different testcases with the same name can confuse
++ # `test-tool'.
++ if [string match "/*" $testcase] {
++ set testcase "[file tail [file dirname $src]]/[file tail $src]"
++ }
++
++ verbose "Testing $testcase, $option" 1
++
++ # Run the compiler and analyze the results.
++ set options ""
++ lappend options "additional_flags=-w $option"
++
++ set comp_output [objc_target_compile "$src" "$output" object $options];
++
++ # Set a few common compiler messages.
++ set fatal_signal "*Obj-C*: Internal compiler error: program*got fatal signal"
++
++ if [string match "$fatal_signal 6" $comp_output] then {
++ objc_fail $testcase "Got Signal 6, $option"
++ remote_file build delete $output
++ return
++ }
++
++ if [string match "$fatal_signal 11" $comp_output] then {
++ objc_fail $testcase "Got Signal 11, $option"
++ remote_file build delete $output
++ return
++ }
++
++ # We shouldn't get these because of -w, but just in case.
++ if [string match "*Obj-C*:*warning:*" $comp_output] then {
++ warning "$testcase: (with warnings) $option"
++ send_log "$comp_output\n"
++ unresolved "$testcase, $option"
++ remote_file build delete $output
++ return
++ }
++
++ set comp_output [prune_warnings $comp_output]
++
++ set unsupported_message [objc_check_unsupported_p $comp_output]
++ if { $unsupported_message != "" } {
++ unsupported "$testcase: $unsupported_message"
++ remote_file build delete $output
++ return
++ }
++
++ # remove any leftover LF/CR to make sure any output is legit
++ regsub -all -- "\[\r\n\]*" $comp_output "" comp_output
++ # If any message remains, we fail.
++ if ![string match "" $comp_output] then {
++ objc_fail $testcase $option
++ remote_file build delete $output
++ return
++ }
++
++ objc_pass $testcase $option
++ remote_file build delete $output
++}
++
++#
++# objc-torture-execute -- utility to compile and execute a testcase
++#
++# SRC is the full pathname of the testcase.
++#
++# If the testcase has an associated .cexp file, we source that to run the
++# test instead. We use .cexp instead of .exp so that the testcase is still
++# controlled by the main .exp driver (this is useful when one wants to only
++# run the compile.exp tests for example - one need only pass compile.exp to
++# dejagnu, and not compile.exp, foo1.exp, foo2.exp, etc.).
++#
++proc objc-torture-execute { src } {
++ global tmpdir tool srcdir output
++
++ # Check for alternate driver.
++ if [file exists [file rootname $src].cexp] {
++ verbose "Using alternate driver [file rootname [file tail $src]].cexp" 2
++ set done_p 0
++ catch "set done_p \[source [file rootname $src].cexp\]"
++ if { $done_p } {
++ return
++ }
++ }
++
++ # Look for a loop within the source code - if we don't find one,
++ # don't pass -funroll[-all]-loops.
++ global torture_with_loops torture_without_loops
++ if [expr [search_for $src "do *\[0-9\]"]+[search_for $src "end *do"]] then {
++ set option_list $torture_with_loops
++ } else {
++ set option_list $torture_without_loops
++ }
++
++ set executable $tmpdir/[file tail [file rootname $src].x]
++
++ regsub "^$srcdir/?" $src "" testcase
++ # If we couldn't rip $srcdir out of `src' then just do the best we can.
++ # The point is to reduce the unnecessary noise in the logs. Don't strip
++ # out too much because different testcases with the same name can confuse
++ # `test-tool'.
++ if [string match "/*" $testcase] {
++ set testcase "[file tail [file dirname $src]]/[file tail $src]"
++ }
++
++ foreach option $option_list {
++ # torture_{compile,execute}_xfail are set by the .cexp script
++ # (if present)
++ if [info exists torture_compile_xfail] {
++ setup_xfail $torture_compile_xfail
++ }
++ remote_file build delete $executable
++ verbose "Testing $testcase, $option" 1
++
++ set options ""
++ lappend options "additional_flags=-w $option -I${srcdir}/../../libobjc"
++ set comp_output [objc_target_compile "$src" "$executable" executable $options];
++
++ # Set a few common compiler messages.
++ set fatal_signal "*Obj-C*: Internal compiler error: program*got fatal signal"
++
++ if [string match "$fatal_signal 6" $comp_output] then {
++ objc_fail $testcase "Got Signal 6, $option"
++ remote_file build delete $executable
++ continue
++ }
++
++ if [string match "$fatal_signal 11" $comp_output] then {
++ objc_fail $testcase "Got Signal 11, $option"
++ remote_file build delete $executable
++ continue
++ }
++
++ # We shouldn't get these because of -w, but just in case.
++ if [string match "*Obj-C*:*warning:*" $comp_output] then {
++ warning "$testcase: (with warnings) $option"
++ send_log "$comp_output\n"
++ unresolved "$testcase, $option"
++ remote_file build delete $executable
++ continue
++ }
++
++ set comp_output [prune_warnings $comp_output]
++
++ set unsupported_message [objc_check_unsupported_p $comp_output]
++
++ if { $unsupported_message != "" } {
++ unsupported "$testcase: $unsupported_message"
++ continue
++ } elseif ![file exists $executable] {
++ if ![is3way] {
++ fail "$testcase compilation, $option"
++ untested "$testcase execution, $option"
++ continue
++ } else {
++ # FIXME: since we can't test for the existance of a remote
++ # file without short of doing an remote file list, we assume
++ # that since we got no output, it must have compiled.
++ pass "$testcase compilation, $option"
++ }
++ } else {
++ pass "$testcase compilation, $option"
++ }
++
++ # See if this source file uses "long long" types, if it does, and
++ # no_long_long is set, skip execution of the test.
++ if [target_info exists no_long_long] then {
++ if [expr [search_for $src "integer\*8"]] then {
++ untested "$testcase execution, $option"
++ continue
++ }
++ }
++
++ if [info exists torture_execute_xfail] {
++ setup_xfail $torture_execute_xfail
++ }
++
++ set result [objc_load "$executable" "" ""]
++ set status [lindex $result 0];
++ set output [lindex $result 1];
++ if { $status == "pass" } {
++ remote_file build delete $executable
++ }
++ $status "$testcase execution, $option"
++ }
++}
++
++#
++# search_for -- looks for a string match in a file
++#
++proc search_for { file pattern } {
++ set fd [open $file r]
++ while { [gets $fd cur_line]>=0 } {
++ set lower [string tolower $cur_line]
++ if [regexp "$pattern" $lower] then {
++ close $fd
++ return 1
++ }
++ }
++ close $fd
++ return 0
++}
++
++#
++# objc-torture -- the objc-torture testcase source file processor
++#
++# This runs compilation only tests (no execute tests).
++# SRC is the full pathname of the testcase, or just a file name in which case
++# we prepend $srcdir/$subdir.
++#
++# If the testcase has an associated .cexp file, we source that to run the
++# test instead. We use .cexp instead of .exp so that the testcase is still
++# controlled by the main .exp driver (this is useful when one wants to only
++# run the compile.exp tests for example - one need only pass compile.exp to
++# dejagnu, and not compile.exp, foo1.exp, foo2.exp, etc.).
++#
++proc objc-torture { args } {
++ global srcdir subdir
++
++ set src [lindex $args 0];
++ if { [llength $args] > 1 } {
++ set options [lindex $args 1];
++ } else {
++ set options ""
++ }
++
++ # Prepend $srdir/$subdir if missing.
++ if ![string match "*/*" $src] {
++ set src "$srcdir/$subdir/$src"
++ }
++
++ # Check for alternate driver.
++ if [file exists [file rootname $src].cexp] {
++ verbose "Using alternate driver [file rootname [file tail $src]].cexp" 2
++ set done_p 0
++ catch "set done_p \[source [file rootname $src].cexp\]"
++ if { $done_p } {
++ return
++ }
++ }
++
++ # Look for a loop within the source code - if we don't find one,
++ # don't pass -funroll[-all]-loops.
++ global torture_with_loops torture_without_loops
++ if [expr [search_for $src "do *\[0-9\]"]+[search_for $src "end *do"]] then {
++ set option_list $torture_with_loops
++ } else {
++ set option_list $torture_without_loops
++ }
++
++ # loop through all the options
++ foreach option $option_list {
++ # torture_compile_xfail is set by the .cexp script (if present)
++ if [info exists torture_compile_xfail] {
++ setup_xfail $torture_compile_xfail
++ }
++
++ objc-torture-compile $src "$option $options"
++ }
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/lib/old-dejagnu.exp gcc-2.95.4/gcc/testsuite/lib/old-dejagnu.exp
+--- gcc-2.95.3/gcc/testsuite/lib/old-dejagnu.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/lib/old-dejagnu.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,585 @@
++# Copyright (C) 1988, 90, 91, 92, 1994, 1996, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-g++@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++# With modifications by Mike Stump <mrs@cygnus.com>.
++
++# These tests come from the original DejaGnu test suite
++# developed at Cygnus Support. If this isn't deja gnu, I
++# don't know what is.
++#
++# Language independence is achieved by:
++#
++# 1) Using global $tool to indicate the language (eg: gcc, g++, etc.).
++# This should only be used to look up other objects. We don't want to
++# have to add code for each new language that is supported. If this is
++# done right, no code needs to be added here for each new language.
++#
++# 2) Passing compiler options in as arguments.
++#
++# We require a bit of smarts in our caller to isolate us from the vagaries of
++# each language. See old-deja.exp for the g++ example.
++
++# Useful subroutines.
++
++# process-option -- Look for and process a test harness option in the testcase.
++#
++# PROG is the pathname of the testcase.
++# OPTION is the string to look for.
++# MESSAGE is what to print if $verbose > 1.
++# FLAG_NAME is one of ERROR, WARNING, etc.
++# PATTERN is ???
++
++proc process-option { prog option message flag_name pattern } {
++ global verbose
++
++ set result ""
++
++ set tmp [grep $prog "$option.*" line]
++ if ![string match "" $tmp] then {
++ foreach i $tmp {
++ #send_user "Found: $i\n"
++ set xfail_test 0
++ set triplet_match 0
++ regsub "\\*/$" [string trim $i] "" i
++ if [regexp "LINE +\[0-9\]+" $i xopt] then {
++ regsub "LINE" $xopt "" xopt;
++ regsub "LINE +\[0-9\]+" $i "" i
++ set i [lreplace $i 0 0 [expr "${xopt}-0"]];
++ }
++ if [regexp "XFAIL( +\[^ \]+-\[^ \]+-\[^ \]+)*" $i xopt] then {
++ set xfail_test 1
++ regsub "XFAIL( +\[^ \]+-\[^ \]+-\[^ \]+)*" $i "" i
++ regsub "XFAIL" $xopt "" xopt
++ if ![string match "" [string trim $xopt]] then {
++ foreach triplet $xopt {
++ if [istarget $triplet] {
++ set triplet_match 1;
++ break;
++ }
++ }
++ } else {
++ set triplet_match 1
++ }
++ }
++ set compos [expr [llength $option] + 1] ;# Start of comment, if any
++ if { $xfail_test && $triplet_match } then {
++ lappend result [list [lindex $i 0] "X$flag_name" [lrange $i $compos end] "$pattern"]
++ } else {
++ lappend result [list [lindex $i 0] "$flag_name" [lrange $i $compos end] "$pattern"]
++ }
++ if { $verbose > 1 } then {
++ if [string match "" [lrange $i $compos end]] then {
++ send_user "Found $message for line [lindex $i 0]\n"
++ } else {
++ send_user "Found $message \"[lrange $i $compos end]\" for line [lindex $i 0]\n"
++ }
++ }
++ }
++ }
++
++ #send_user "Returning: $result\n"
++ return $result
++}
++
++# old-dejagnu-init -- set up some statistics collectors
++#
++# There currently isn't much to do, but always calling it allows us to add
++# enhancements without having to update our callers.
++# It must be run before calling `old-dejagnu'.
++
++proc old-dejagnu-init { } {
++}
++
++# old-dejagnu-stat -- print the stats of this run
++#
++# ??? This is deprecated, and can be removed.
++
++proc old-dejagnu-stat { } {
++}
++
++# old-dejagnu -- runs an old style DejaGnu test.
++#
++# Returns 0 if successful, 1 if their were any errors.
++# PROG is the full path name of the file to compile.
++#
++# CFLAGSX is the options to always pass to the compiler.
++#
++# DEFAULT_CFLAGS are additional options if the testcase has none.
++#
++# LIBS_VAR is the name of the global variable containing libraries (-lxxx's).
++# This is also ignored.
++#
++# LIBS is any additional libraries to link with. This *cannot* be specified
++# with the compiler flags because otherwise gcc will issue, for example, a
++# "-lg++ argument not used since linking not done" warning which will screw up
++# the test for excess errors. We could ignore such messages instead.
++#
++# Think of "cflags" here as "compiler flags", not "C compiler flags".
++
++proc old-dejagnu { compiler prog name cflagsx default_cflags libs } {
++ global verbose
++ global tool
++ global subdir ;# eg: g++.old-dejagnu
++ global host_triplet
++ global tmpdir
++
++ set runflag 1
++ set execbug_flag 0
++ set excessbug_flag 0
++ set pattern ""
++ set text "\[- A-Za-z0-9\.\;\"\_\:\'\`\(\)\!\#\=\+\?\&\*]*"
++
++ if ![info exists tmpdir] then {
++ set tmpdir "/tmp"
++ }
++
++# look for keywords that change the compiler options
++#
++# There are two types of test, negative and affirmative. Negative
++# tests have the keyword of "ERROR - " or "WARNING - " on the line
++# expected to produce an error. This is followed by the pattern. If
++# the desired error or warning message appears, then the test passes.
++#
++# Affirmative test can have the following keywords "gets bogus error",
++# "causes invalid C code", "invalid assembly code", "causes abort",
++# "causes segfault", "causes linker error", "execution test fails". If
++# the pattern after the keyword matches, then the test is a failure.
++#
++# One can specify particular targets for expected failures of the above
++# keywords by putting "XFAIL target-triplet" after the keyword.
++#
++# Example:
++#
++# void f ()
++#{
++# int i[2], j;
++# A a (int (i[1]), j); // gets bogus error - late parsing XFAIL *-*-*
++# A b (int (i[1]), int j); // function
++# a.k = 0; // gets bogus error - late parsing XFAIL *-*-*
++# b (i, j);
++#}
++#
++# Note also, that one can add a comment with the keyword ("late parsing"
++# in the above example).
++#
++# If any of the tests contain the special pattern "FIXME -" that test is
++# not run because it will produce incorrect output.
++#
++# Testcases can supply special options to the compiler with a line containing
++# "Special.*Options: ...", where ".*" can be anything (eg: g++) and "..." are
++# the additional options to pass to the compiler. Nothing else may appear
++# after the options. IE: for a C testcase
++# /* Special Options: -fomit-frame-pointer */ /* Oops! */
++# is wrong,
++# /* Special Options: -fomit-frame-pointer */
++# is right. If no such Special Options are found, $default_cflags is used.
++# FIXME: Can there be multiple lines of these?
++#
++# Other keywords: "Build don't link:", "Build don't run:", "Build then link:",
++# "Additional sources: <file>.cc ..."
++
++# $name is now passed in.
++# set name "[file tail [file dirname $prog]]/[file tail $prog]"
++
++ set tmp [grep $prog "FIXME -.*"]
++ if ![string match "" $tmp] then {
++ foreach i $tmp {
++ warning "[file tail [file dirname $prog]]/[file tail $prog] [lrange $i 2 end]"
++ }
++ return 1
++ }
++
++ set tmp [lindex [grep $prog "Special.*Options:.*"] 0]
++ set cflags ""
++
++ regsub -all "\n\[^\n\]+(\n|$)" $tmp "\n" tmp
++ set tmp [string trim $tmp]
++ if ![string match "" $tmp] then {
++ regsub "^.*Special.*Options:" $tmp "" tmp
++ lappend cflags "additional_flags=$tmp"
++ verbose "Adding special options $tmp" 2
++ } else {
++ lappend cflags "additional_flags=$default_cflags"
++ }
++
++ if { $cflagsx != "" } {
++ lappend cflags "additional_flags=$cflagsx"
++ }
++
++ set tmp [lindex [grep $prog "Additional sources: .*"] 0]
++ regsub -all "\n\[^\n\]+(\n|$)" $tmp "\n" tmp
++ set tmp [string trim $tmp]
++ if ![string match "" $tmp] then {
++ regsub "^.*Additional.*sources:" $tmp "" tmp
++ regsub -all " " $tmp " [file dirname $prog]/" tmp
++ lappend cflags "additional_flags=$tmp"
++ verbose "Adding sources $tmp"
++ }
++
++ lappend cflags "compiler=$compiler"
++
++ regsub -all "\[./\]" "$name" "-" output;
++ set output "$tmpdir/$output";
++ set compile_type "executable"
++
++ set tmp [lindex [grep $prog "Build don.t link:"] 0]
++ if ![string match "" $tmp] then {
++ set compile_type "object"
++ set runflag 0
++ set output "$tmpdir/[file tail [file rootname $prog]].o"
++ verbose "Will compile $prog to object" 3
++ }
++
++ set tmp [lindex [grep $prog "Build then link:"] 0]
++ if ![string match "" $tmp] then {
++ set compile_type "object"
++ set runflag 2
++ set final_output "$output"
++ set output "$tmpdir/[file tail [file rootname $prog]].o"
++ verbose "Will compile $prog to object, then link it" 3
++ }
++
++ set tmp [lindex [grep $prog "Build don.t run:"] 0]
++ if ![string match "" $tmp] then {
++ set runflag 0
++ verbose "Will compile $prog to binary" 3
++ }
++
++ set tmp [grep $prog "Skip if (|not )feature:.*"];
++ if { $tmp != "" } {
++ foreach line $tmp {
++ if [regexp "Skip if not feature" $line] {
++ set not 1;
++ } else {
++ set not 0;
++ }
++ regsub "^.*Skip if (|not )feature:\[ \]*" "$line" "" i;
++ set is_set 0;
++ foreach j $i {
++ if [target_info exists $j] {
++ set is_set 1;
++ break;
++ }
++ }
++ if { $is_set != $not } {
++ untested "$name: Test skipped: ${line}($j set)"
++ return;
++ }
++ }
++ }
++
++ set tmp [grep $prog "Skip if (|not )target:.*"];
++ if { $tmp != "" } {
++ foreach line $tmp {
++ if [regexp "Skip if not target:" $line] {
++ set not 1;
++ } else {
++ set not 0;
++ }
++ regsub "^.*Skip if (|not )target:\[ \]*" "$line" "" i;
++ set ist 0;
++ foreach j $i {
++ if [istarget $j] {
++ set ist 1;
++ break;
++ }
++ }
++ if { $ist != $not } {
++ untested "$name: Test skipped: ${line}"
++ return;
++ }
++ }
++ }
++
++ if ![isnative] {
++ set tmp [lindex [grep $prog "Skip if not native"] 0];
++ if { $tmp != "" } {
++ untested "$name: Test skipped because not native";
++ return;
++ }
++ } else {
++ set tmp [lindex [grep $prog "Skip if native"] 0];
++ if { $tmp != "" } {
++ untested "$name: Test skipped because native";
++ return;
++ }
++ }
++
++ lappend cflags "libs=$libs"
++
++#
++# Look for the other keywords and extract the error messages.
++# `message' contains all the things we found.
++# ??? We'd like to use lappend below instead of concat, but that doesn't
++# work (adds an extra level of nesting to $tmp).
++#
++
++ set message ""
++
++ set tmp [process-option $prog "ERROR - " "an error message" ERROR "$text error$text"]
++ if ![string match "" $tmp] then {
++ set runflag 0
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "WARNING - " "a warning message" WARNING "warning"]
++ if ![string match "" $tmp] then {
++ set runflag 0
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "gets bogus error" "a bogus error" BOGUS $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "causes invalid C code" "a bad C translation" BADC $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "invalid assembly code" "some invalid assembly code" BADASM $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "causes abort" "an abort cause" ABORT $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "causes segfault" "a segfault cause" SEGFAULT $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "causes linker error" "a linker error" LINKER $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "execution test fails" "an execution failure" EXECO $text]
++ if ![string match "" $tmp] then {
++ set execbug_flag 1
++ set message [concat $message $tmp]
++ warning "please use execution test - XFAIL *-*-* in $prog instead"
++ }
++
++ set tmp [process-option $prog "execution test - " "an excess error failure" EXEC $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set tmp [process-option $prog "excess errors test fails" "an excess error failure" EXCESSO $text]
++ if ![string match "" $tmp] then {
++ set excessbug_flag 1
++ set message [concat $message $tmp]
++ warning "please use excess errors test - XFAIL *-*-* in $prog instead"
++ }
++
++ set tmp [process-option $prog "excess errors test - " "an excess error failure" EXCESS $text]
++ if ![string match "" $tmp] then {
++ set message [concat $message $tmp]
++ }
++
++ set expect_crash \
++ [process-option $prog "crash test - " "a crash" CRASH $text]
++ if {$expect_crash != ""
++ && [lindex [lindex $expect_crash 0] 1] == "XCRASH"} then {
++ set expect_crash 1
++ } else {
++ set expect_crash 0
++ }
++
++#
++# run the compiler and analyze the results
++#
++
++ # Since we don't check return status of the compiler, make sure
++ # we can't run a.out when the compilation fails.
++ remote_file build delete $output
++ set comp_output [${tool}_target_compile $prog $output $compile_type $cflags]
++ if { $runflag == 2 && [file exists $output] } then {
++ set runflag 0
++ set comp_output [concat $comp_output [${tool}_target_compile $output $final_output "executable" $cflags]]
++ set output $final_output
++ }
++
++ # Delete things like "ld.so: warning" messages.
++ set comp_output [prune_warnings $comp_output]
++
++ if [string match "*Internal compiler error*" $comp_output] then {
++ if $expect_crash then {
++ setup_xfail "*-*-*"
++ }
++ fail "$name caused compiler crash"
++ remote_file build delete $output
++ return 1
++ }
++
++ #send_user "\nold_dejagnu.exp: comp_output1 = :$comp_output:\n\n"
++ #send_user "\nold_dejagnu.exp: message = :$message:\n\n"
++ #send_user "\nold_dejagnu.exp: message length = [llength $message]\n\n"
++
++ set last_line 0
++ foreach i $message {
++
++ #send_user "\nold_dejagnu.exp: i = :$i:\n\n"
++
++ # Remove all error messages for the line [lindex $i 0]
++ # in the source file. If we find any, success!
++ set line [lindex $i 0]
++ set pattern [lindex $i 2]
++
++ # Multiple tests one one line don't work, because we remove all
++ # messages on the line for the first test. So skip later ones.
++ if { $line == $last_line } {
++ continue
++ }
++ set last_line $line
++
++ if [regsub -all "(^|\n)\[^\n\]+:$line:\[^\n\]*" $comp_output "" comp_output] {
++ set comp_output [string trimleft $comp_output]
++ set ok pass
++ set uhoh fail
++ } else {
++ set ok fail
++ set uhoh pass
++ }
++
++ case [lindex $i 1] {
++ "ERROR" {
++ $ok "$name $pattern (test for errors, line $line)"
++ }
++ "XERROR" {
++ x$ok "$name $pattern (test for errors, line $line)"
++ }
++ "WARNING" {
++ $ok "$name $pattern (test for warnings, line $line)"
++ }
++ "XWARNING" {
++ x$ok "$name $pattern (test for warnings, line $line)"
++ }
++ "BOGUS" {
++ $uhoh "$name $pattern (test for bogus messages, line $line)"
++ }
++ "XBOGUS" {
++ x$uhoh "$name $pattern (test for bogus messages, line $line)"
++ }
++ "ABORT" {
++ $uhoh "$name $pattern (test for compiler aborts, line $line)"
++ }
++ "XABORT" {
++ x$uhoh "$name $pattern (test for compiler aborts, line $line)"
++ }
++ "SEGFAULT" {
++ $uhoh "$name $pattern (test for compiler segfaults, line $line)"
++ }
++ "XSEGFAULT" {
++ x$uhoh "$name $pattern (test for compiler segfaults, line $line)"
++ }
++ "LINKER" {
++ $uhoh "$name $pattern (test for linker problems, line $line)"
++ }
++ "XLINKER" {
++ x$uhoh "$name $pattern (test for linker problems, line $line)"
++ }
++ "BADC" {
++ $uhoh "$name $pattern (test for Bad C code, line $line)"
++ }
++ "XBADC" {
++ x$uhoh "$name $pattern (test for Bad C code, line $line)"
++ }
++ "BADASM" {
++ $uhoh "$name $pattern (test for bad assembler, line $line)"
++ }
++ "XBADASM" {
++ x$uhoh "$name $pattern (test for bad assembler, line $line)"
++ }
++ "XEXEC" {
++ set execbug_flag 1
++ }
++ "XEXCESS" {
++ set excessbug_flag 1
++ }
++ }
++ #send_user "\nold_dejagnu.exp: comp_output2= :$comp_output:\n\n"
++ }
++ #send_user "\nold_dejagnu.exp: comp_output3 = :$comp_output:\n\n"
++
++ #look to see if this is all thats left, if so, all messages have been handled
++ #send_user "comp_output: $comp_output\n"
++ regsub -all "(^|\n)\[^\n\]*: In (function|method) \[^\n\]*" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*: In instantiation of \[^\n\]*" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*: instantiated from \[^\n\]*" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*: At top level:\[^\n\]*" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output
++ regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output
++ regsub -all "(^|\n)collect: re(compiling|linking)\[^\n\]*" $comp_output "" comp_output
++
++ set unsupported_message [${tool}_check_unsupported_p $comp_output]
++ if { $unsupported_message != "" } {
++ unsupported "$name: $unsupported_message"
++ return
++ }
++
++ # someone forgot to delete the extra lines
++ regsub -all "\n+" $comp_output "\n" comp_output
++ regsub "^\n+" $comp_output "" comp_output
++ #send_user "comp_output: $comp_output\n"
++
++ # excess errors
++ if $excessbug_flag then {
++ setup_xfail "*-*-*"
++ }
++ if ![string match "" $comp_output] then {
++ fail "$name (test for excess errors)"
++ send_log "$comp_output\n"
++ } else {
++ pass "$name (test for excess errors)"
++ }
++
++ # run the executable image
++ if $runflag then {
++ set executable $output
++ if ![file exists $executable] then {
++ # Since we couldn't run it, we consider it an expected failure,
++ # so that test cases don't appear to disappear, and reappear.
++ setup_xfail "*-*-*"
++ fail "$name $pattern Execution test"
++ } else {
++ set status -1
++ set result [eval [format "%s_load %s" $tool $executable]]
++ set status [lindex $result 0];
++ set output [lindex $result 1];
++ if { $status == "pass" } {
++ remote_file build delete $executable;
++ }
++ if { $execbug_flag || $excessbug_flag } then {
++ setup_xfail "*-*-*"
++ }
++ $status "$name $pattern Execution test"
++ }
++ }
++
++ verbose "deleting $output"
++ remote_file build delete $output
++ return 0
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-10.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-10.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-10.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-10.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ int i:2;
++ int j:6;
++ char c;
++ int k:12;
++ char d;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-11.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-11.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-11.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-11.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ int i:2;
++ int j:6;
++ short s;
++ int k:12;
++ char d;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-12.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-12.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-12.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-12.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ int i:2;
++ int j:6;
++ int s;
++ int k:12;
++ char d;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-13.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-13.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-13.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-13.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ struct {
++ int i:2;
++ int j:6;
++ char s;
++ int k:12;
++ } flags;
++ char d;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-14.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-14.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-14.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-14.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ struct {
++ int i:2;
++ int j:6;
++ short s;
++ int k:12;
++ } flags;
++ char d;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-15.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-15.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-15.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-15.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a;
++ struct {
++ int i:2;
++ int j:6;
++ int s;
++ int k:12;
++ } flags;
++ char d;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-16.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-16.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-16.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-16.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,26 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++struct A {
++ int i;
++ float f;
++ int a:3;
++ int b:2;
++};
++
++@interface MyObject
++{
++ Class isa;
++ int i;
++ float f[3];
++ struct A a, b;
++ char c;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-17.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-17.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-17.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-17.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,25 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++struct A {
++ int i;
++ float f;
++ int a:3;
++ int b:2;
++};
++
++@interface MyObject
++{
++ Class isa;
++ int i;
++ float f[3];
++ struct A a;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-18.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-18.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-18.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-18.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ int i;
++ char c[1];
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-19.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-19.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-19.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-19.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,17 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ unsigned int i;
++ MyObject *object;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-1.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-1.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-1.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-1.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a;
++ struct {
++ int i:2;
++ int j:3;
++ int k:12;
++ } flags;
++ char c;
++// void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-2.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-2.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-2.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-2.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ struct {
++ int i:2;
++ int j:3;
++ int k:12;
++ } flags;
++ char c;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-3.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-3.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-3.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-3.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a;
++ struct {
++ int i:2;
++ int j:6;
++ int k:12;
++ } flags;
++ char c;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-4.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-4.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-4.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-4.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,24 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ struct {
++ int i:2;
++ int j:6;
++ int k:12;
++ } flags;
++ char c;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-5.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-5.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-5.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-5.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a;
++ int i:2;
++ int j:3;
++ int k:12;
++ char c;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-6.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-6.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-6.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-6.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ int i:2;
++ int j:3;
++ int k:12;
++ char c;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-7.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-7.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-7.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-7.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a;
++ int i:2;
++ int j:6;
++ int k:12;
++ char c;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-8.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-8.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-8.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-8.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,22 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ int i:2;
++ int j:6;
++ int k:12;
++ char c;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-9.m gcc-2.95.4/gcc/testsuite/objc/execute/bf-9.m
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-9.m 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-9.m 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,23 @@
++#include <objc/objc.h>
++#include <objc/objc-api.h>
++#include <objc/Object.h>
++
++@interface MyObject
++{
++ Class isa;
++ float f;
++ char a[3];
++ int i:2;
++ int j:3;
++ char c;
++ int k:12;
++ char d;
++ void *pointer;
++}
++@end
++
++@implementation MyObject
++@end
++
++#include "bf-common.h"
++
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/bf-common.h gcc-2.95.4/gcc/testsuite/objc/execute/bf-common.h
+--- gcc-2.95.3/gcc/testsuite/objc/execute/bf-common.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/bf-common.h 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,76 @@
++#include <objc/encoding.h>
++
++
++void print_ivars (Class class)
++{
++ struct objc_ivar_list* ivars = class->ivars;
++ int i;
++
++ for (i = 0; i < ivars->ivar_count; i++) {
++ struct objc_ivar *ivar = &(ivars->ivar_list[i]);
++ printf ("ivar '%s', type '%s', offset %d\n",
++ ivar->ivar_name, ivar->ivar_type, ivar->ivar_offset);
++ }
++}
++
++void compare_structures (Class class, const char* type)
++{
++ struct objc_struct_layout layout;
++ struct objc_ivar_list* ivars = class->ivars;
++ int i = 0;
++ int position;
++
++ objc_layout_structure (type, &layout);
++
++ while (objc_layout_structure_next_member (&layout))
++ {
++ struct objc_ivar *ivar;
++ const char *ivar_type;
++
++ if (i > ivars->ivar_count)
++ {
++ printf ("too many ivars in type %s, layout = %s\n",
++ type, layout.type);
++ exit (1);
++ }
++
++ ivar = &(ivars->ivar_list[i]);
++ objc_layout_structure_get_info (&layout, &position, NULL, &ivar_type);
++ printf ("real ivar '%s' offset %d\n",
++ ivar->ivar_name, ivar->ivar_offset);
++ printf ("computed type '%s' offset %d\n", ivar_type, position);
++ if (position != ivar->ivar_offset)
++ {
++ printf ("offset %d and computed position %d don't match on ivar '%s'"
++ " (i = %d)\n",
++ ivar->ivar_offset, position, ivar->ivar_name, i);
++ exit (1);
++ }
++ i++;
++ }
++
++ printf ("%d ivars checked\n", i);
++}
++
++int main ()
++{
++ struct class_vars
++ {
++ @defs (MyObject);
++ };
++ int size1, size2;
++ Class class = [MyObject class];
++
++ printf ("type = %s\n", @encode (struct class_vars));
++ print_ivars (class);
++
++ compare_structures (class, @encode(struct class_vars));
++ if ((size1 = objc_sizeof_type (@encode(struct class_vars)))
++ != (size2 = sizeof (struct class_vars)))
++ {
++ printf ("sizes don't match (computed %d, exact %d)\n", size1, size2);
++ abort ();
++ }
++
++ exit (0);
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/objc/execute/execute.exp gcc-2.95.4/gcc/testsuite/objc/execute/execute.exp
+--- gcc-2.95.3/gcc/testsuite/objc/execute/execute.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/objc/execute/execute.exp 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,42 @@
++# Copyright (C) 1991, 1992, 1993, 1995, 1997 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gcc@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++# Modified by Ovidiu Predescu (ovidiu@aracnet.com)
++
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# load support procs
++load_lib objc-torture.exp
++
++#
++# main test loop
++#
++
++foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.m]] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $src] then {
++ continue
++ }
++
++ objc-torture-execute $src
++}
+diff -ruNb gcc-2.95.3/gcc/testsuite/README gcc-2.95.4/gcc/testsuite/README
+--- gcc-2.95.3/gcc/testsuite/README 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/README 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,50 @@
++This is a collection of tests for the C and C++ frontends of EGCS. For
++further information please check README.gcc and README.g++, though the
++latter may not be up-to-date any more.
++
++The driver that runs this testsuite is called DejaGnu and you will
++need a current DejaGnu snapshot, which is available from
++ftp://egcs.cygnus.com/pub/egcs/infrastructure, for example.
++
++Most of these tests were originally developed and/or collected by
++Cygnus Solutions, but these days many are being added by the EGCS
++developers.
++
++These tests are included "as is". If any of them fails, do not report
++a bug. Bug reports for DejaGnu can go to bug-dejagnu@prep.ai.mit.edu.
++Discussion and comments about this testsuite should be sent to
++gcc@gcc.gnu.org; additions and changes to should go to sent to
++gcc-patches@gcc.gnu.org.
++
++The entire testsuite is invoked by `make check` at the top level of
++the EGCS tree. `make check-g++` runs the C++ testsuite only.
++
++
++STRUCTURE OF THE TESTSUITE
++
++Almost all C++ tests reside in subdirectories of g++.old-deja, based on
++the following structure:
++
++ g++.benjamin Tests by Benjamin Koz
++ g++.bob
++ g++.brendan Tests by Brendan Kehoe
++ g++.bugs
++ g++.eh Tests for exception handling
++ g++.ext Tests for g++ extensions
++ g++.gb Tests by Gerald Baumgartner
++ g++.jason Tests by Jason Merill
++ g++.jeff Tests by Jeffrey A Law
++ g++.martin Tests by Martin v. Löwis
++ g++.mike Tests by Mike Stump
++ g++.niklas Tests by Niklas Hallqvist
++ g++.ns Tests for namespaces
++ g++.other
++ g++.pt Tests for templates
++ g++.rfg
++ g++.robertl Tests from gcc-bugs@gcc.gnu.org, gathered by Robert Lipe
++
++g++.old-deja uses a fixed driver for all g++ tests based on the old
++DejaGnu drivers. But just because its old, doesn't mean its redundant!
++Tests that want to use the normal dg.exp driver can be put in g++.dg instead.
++This may be required for platform-specific tests, or tests with other
++special requirements.
+diff -ruNb gcc-2.95.3/gcc/testsuite/README.g++ gcc-2.95.4/gcc/testsuite/README.g++
+--- gcc-2.95.3/gcc/testsuite/README.g++ 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/README.g++ 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,33 @@
++Here are some random last minute notes by this file's original maintainer,
++Mike Stump <mrs@cygnus.com>:
++
++> and the command
++
++> runtest --tool g++ --srcdir ./testsuite
++
++> doesn't work. I got it to work by explicitly setting CXX and CXXFLAGS
++> on the command line, e.g.
++
++> runtest --tool g++ --srcdir ./testsuite CXX=g++ CXXFLAGS=""
++
++site.exp updated to have right CXXFLAGS and CXX, but not at the FSF yet.
++
++
++ To run the tests, first change to the gcc-2.7.1 directory, then type:
++
++ runtest --tool g++ --srcdir ./testsuite
++
++Here's a brief explanation.
++
++runtest - Is the name used to invoke DejaGnu. If DejaGnu is not
++ install this will be the relative path name for runtest.
++
++--tool - This tells DejaGnu which tool you are testing. It is
++ mainly used to find the testsuite directories for a
++ particular tool when several testsuites are in the
++ same directory. (like the gcc and g++ testsuites)
++
++--srcdir - This points to the top level of the directory
++ containing the sources of the testsuite. This is
++ ./testsuite if you are in the directory that has the
++ testsuite directory.
+diff -ruNb gcc-2.95.3/gcc/testsuite/README.gcc gcc-2.95.4/gcc/testsuite/README.gcc
+--- gcc-2.95.3/gcc/testsuite/README.gcc 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/testsuite/README.gcc 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,87 @@
++This file contains a list of notes for those writing testcases and those
++writing expect scripts. At present, they're in random order.
++
++Verbosity Levels
++
++- each level adds verbosity so level 2 prints all level 1 and level 2 stuff.
++
++1) Print a one-liner indicating the testcase being run (and maybe special
++ compiler options).
++
++2) Print compiler and program invocation including arguments and their output.
++ Proc's gcc_load and gcc_start handle the latter two.
++
++3) Print detailed testcase analysis like "Looking for pattern ...", etc.
++
++4) Maximum verbosity. Print anything else of interest.
++
++send_log conventions
++
++Various messages are stored in gcc.log by the testing framework and we
++try to augment them with some of our own. The format of the framework
++messages are:
++
++PASS: blah blah ...
++FAIL: blah blah ...
++
++so we use
++
++XXXX: blah blah ...
++
++Current messages are:
++
++EXEC: program being executed (so compiler path and args are recorded)
++STAT: intermediate pass/fail statistics
++
++Test scripts must ignore the compiler messages "path prefix never used"
++and "linker input file unused". Don't let their appearance cause a testcase
++to fail. See lib/dg.exp for the exact regsub to use.
++
++If you're unclear about which directory a testcase should be installed in,
++ask gcc-local.
++
++Have the text of a fail message be the same as that for pass.
++IE: have
++
++ if ...success...
++ pass "pr 1234"
++ else
++ fail "pr 1234"
++
++not
++
++ if ...success...
++ pass "pr 1234 passed"
++ else
++ fail "pr 1234 failed"
++
++
++This lets test-tool (which drives the nightly tests) do a better job
++at tracking which tests have digressed or been fixed.
++
++DO NOT PUT NON-PORTABLE TESTCASES IN gcc.c-torture.
++
++ANY TARGET SPECIFIC TESTCASE MUST HAVE APPROPRIATE CODE TO PREVENT IT FROM
++CAUSING A `FAILURE' ON UNSUPPORTED PLATFORMS.
++
++The "torture" tests are meant to be generic tests that can run on any
++target. So you have to be careful about endianness, assumptions about
++sizes of datatypes, etc etc.
++
++For tests that merely need to compile, put them in the "compile" directory.
++
++For tests which should give an error, put them in the "noncompile" directory
++and update noncompile.exp appropriately (see examples in noncompile.exp).
++
++For IEEE FP specific tests, put them in execute/ieee.
++
++For execution tests, put them in execute.
++
++Always use abort() for runtime failures, and exit(0) for success.
++The testing harness is set up to watch for these and do something appropriate
++(when necessary) for target boards.
++
++If a test does not fit into the torture framework, use the dg framework.
++
++
++
+diff -ruNb gcc-2.95.3/gcc/texinfo.tex gcc-2.95.4/gcc/texinfo.tex
+--- gcc-2.95.3/gcc/texinfo.tex 1998-12-16 21:58:28.000000000 +0100
++++ gcc-2.95.4/gcc/texinfo.tex 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ % texinfo.tex -- TeX macros to handle Texinfo files.
+-% $Id: texinfo.tex,v 1.5 1998/06/29 21:40:12 law Exp $
++% $Id: texinfo.tex,v 1.6 1998/12/16 20:58:28 law Exp $
+ %
+ % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98
+ % Free Software Foundation, Inc.
+@@ -58,7 +58,7 @@
+
+ % This automatically updates the version number based on RCS.
+ \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
+-\deftexinfoversion$Revision: 1.5 $
++\deftexinfoversion$Revision: 1.6 $
+ \message{Loading texinfo package [Version \texinfoversion]:}
+
+ % If in a .fmt file, print the version number
+diff -ruNb gcc-2.95.3/gcc/tm.texi gcc-2.95.4/gcc/tm.texi
+--- gcc-2.95.3/gcc/tm.texi 1999-05-31 04:56:15.000000000 +0200
++++ gcc-2.95.4/gcc/tm.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -49,6 +49,19 @@
+ You can control the compilation driver.
+
+ @table @code
++@findex TARGET_OBJECT_SUFFIX
++@item TARGET_OBJECT_SUFFIX
++Define this macro to be a C string representing the suffix for object
++files on your target machine. If you do not define this macro, GCC will
++use @samp{.o} as the suffix for object files.
++
++@findex TARGET_EXECUTABLE_SUFFIX
++@item TARGET_EXECUTABLE_SUFFIX
++Define this macro to be a C string representing the suffix to be
++automatically added to executable files on your target machine. If you
++do not define this macro, GCC will use the null string as the suffix for
++executable files.
++
+ @findex SWITCH_TAKES_ARG
+ @item SWITCH_TAKES_ARG (@var{char})
+ A C expression which determines whether the option @samp{-@var{char}}
+@@ -3464,6 +3477,13 @@
+ system's installed C compiler and look at the assembler code that
+ results.
+
++@findex NO_PROFILE_COUNTERS
++@item NO_PROFILE_COUNTERS
++Define this macro if the @code{mcount} subroutine on your system does
++not need a counter variable allocated for each function. This is true
++for almost all modern implementations. If you define this macro, you
++must not use the @var{labelno} argument to @code{FUNCTION_PROFILER}.
++
+ @findex PROFILE_BEFORE_PROLOGUE
+ @item PROFILE_BEFORE_PROLOGUE
+ Define this macro if the code for function profiling should come before
+diff -ruNb gcc-2.95.3/gcc/toplev.c gcc-2.95.4/gcc/toplev.c
+--- gcc-2.95.3/gcc/toplev.c 2001-01-25 15:03:23.000000000 +0100
++++ gcc-2.95.4/gcc/toplev.c 2017-11-07 22:10:12.000000000 +0100
+@@ -137,8 +137,6 @@
+ #define DIR_SEPARATOR '/'
+ #endif
+
+-extern int rtx_equal_function_value_matters;
+-
+ #if ! (defined (VMS) || defined (OS2))
+ extern char **environ;
+ #endif
+@@ -772,6 +770,8 @@
+
+ int flag_no_ident = 0;
+
++int flag_keep_file_path = 0;
++
+ /* Table of supported debugging formats. */
+ static struct
+ {
+@@ -978,6 +978,8 @@
+ "Instrument function entry/exit with profiling calls"},
+ {"leading-underscore", &flag_leading_underscore, 1,
+ "External symbols have a leading underscore" },
++ {"keep-file-path", &flag_keep_file_path,1,
++ "Do not strip path in .file directive"},
+ {"ident", &flag_no_ident, 0,
+ "Process #ident directives"}
+ };
+@@ -2563,8 +2565,14 @@
+ FILE *asm_file;
+ const char *input_name;
+ {
++const char *na;
++
++ if ( flag_keep_file_path) /* leave the input_name unchanged */
++ na = input_name;
++ else /* strip leadin path from input_name - default behaviour */
++ {
+ int len = strlen (input_name);
+- const char *na = input_name + len;
++ na = input_name + len;
+
+ /* NA gets INPUT_NAME sans directory names. */
+ while (na > input_name)
+@@ -2577,6 +2585,7 @@
+ #endif
+ na--;
+ }
++ }
+
+ #ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
+ ASM_OUTPUT_MAIN_SOURCE_FILENAME (asm_file, na);
+diff -ruNb gcc-2.95.3/gcc/.#toplev.c.1.185.4.7 gcc-2.95.4/gcc/.#toplev.c.1.185.4.7
+--- gcc-2.95.3/gcc/.#toplev.c.1.185.4.7 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/gcc/.#toplev.c.1.185.4.7 2017-11-07 22:10:12.000000000 +0100
+@@ -0,0 +1,5750 @@
++/* Top level of GNU C compiler
++ Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
++ 1999, 2000, 2001 Free Software Foundation, Inc.
++
++This file is part of GNU CC.
++
++GNU CC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU CC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU CC; see the file COPYING. If not, write to
++the Free Software Foundation, 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA. */
++
++/* This is the top level of cc1/c++.
++ It parses command args, opens files, invokes the various passes
++ in the proper order, and counts the time used by each.
++ Error messages and low-level interface to malloc also handled here. */
++
++#include "config.h"
++#undef FLOAT /* This is for hpux. They should change hpux. */
++#undef FFS /* Some systems define this in param.h. */
++#include "system.h"
++#include <signal.h>
++#include <setjmp.h>
++
++#ifdef HAVE_SYS_RESOURCE_H
++# include <sys/resource.h>
++#endif
++
++#ifdef HAVE_SYS_TIMES_H
++# include <sys/times.h>
++#endif
++
++#include "input.h"
++#include "tree.h"
++#include "rtl.h"
++#include "flags.h"
++#include "insn-attr.h"
++#include "insn-codes.h"
++#include "insn-config.h"
++#include "recog.h"
++#include "defaults.h"
++#include "output.h"
++#include "except.h"
++#include "toplev.h"
++#include "expr.h"
++#include "basic-block.h"
++#include "intl.h"
++
++#ifdef DWARF_DEBUGGING_INFO
++#include "dwarfout.h"
++#endif
++
++#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
++#include "dwarf2out.h"
++#endif
++
++#if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
++#include "dbxout.h"
++#endif
++
++#ifdef SDB_DEBUGGING_INFO
++#include "sdbout.h"
++#endif
++
++#ifdef XCOFF_DEBUGGING_INFO
++#include "xcoffout.h"
++#endif
++
++#ifdef VMS
++/* The extra parameters substantially improve the I/O performance. */
++static FILE *
++vms_fopen (fname, type)
++ char * fname;
++ char * type;
++{
++ /* The <stdio.h> in the gcc-vms-1.42 distribution prototypes fopen with two
++ fixed arguments, which matches ANSI's specification but not VAXCRTL's
++ pre-ANSI implementation. This hack circumvents the mismatch problem. */
++ FILE *(*vmslib_fopen)() = (FILE *(*)()) fopen;
++
++ if (*type == 'w')
++ return (*vmslib_fopen) (fname, type, "mbc=32",
++ "deq=64", "fop=tef", "shr=nil");
++ else
++ return (*vmslib_fopen) (fname, type, "mbc=32");
++}
++#define fopen vms_fopen
++#endif /* VMS */
++
++#ifndef DEFAULT_GDB_EXTENSIONS
++#define DEFAULT_GDB_EXTENSIONS 1
++#endif
++
++/* If more than one debugging type is supported, you must define
++ PREFERRED_DEBUGGING_TYPE to choose a format in a system-dependent way.
++
++ This is one long line cause VAXC can't handle a \-newline. */
++#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO))
++#ifndef PREFERRED_DEBUGGING_TYPE
++You Lose! You must define PREFERRED_DEBUGGING_TYPE!
++#endif /* no PREFERRED_DEBUGGING_TYPE */
++#else /* Only one debugging format supported. Define PREFERRED_DEBUGGING_TYPE
++ so the following code needn't care. */
++#ifdef DBX_DEBUGGING_INFO
++#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
++#endif
++#ifdef SDB_DEBUGGING_INFO
++#define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
++#endif
++#ifdef DWARF_DEBUGGING_INFO
++#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
++#endif
++#ifdef DWARF2_DEBUGGING_INFO
++#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
++#endif
++#ifdef XCOFF_DEBUGGING_INFO
++#define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG
++#endif
++#endif /* More than one debugger format enabled. */
++
++/* If still not defined, must have been because no debugging formats
++ are supported. */
++#ifndef PREFERRED_DEBUGGING_TYPE
++#define PREFERRED_DEBUGGING_TYPE NO_DEBUG
++#endif
++
++#ifndef DIR_SEPARATOR
++#define DIR_SEPARATOR '/'
++#endif
++
++extern int rtx_equal_function_value_matters;
++
++#if ! (defined (VMS) || defined (OS2))
++extern char **environ;
++#endif
++extern char *version_string, *language_string;
++
++/* Carry information from ASM_DECLARE_OBJECT_NAME
++ to ASM_FINISH_DECLARE_OBJECT. */
++
++extern int size_directive_output;
++extern tree last_assemble_variable_decl;
++
++extern char *init_parse PVPROTO((char *));
++extern void finish_parse ();
++extern void init_decl_processing ();
++extern void init_obstacks ();
++extern void init_tree_codes ();
++extern void init_rtl ();
++extern void init_regs ();
++extern void init_optabs ();
++extern void init_stmt ();
++extern void init_reg_sets ();
++extern void dump_flow_info ();
++extern void dump_sched_info ();
++extern void dump_local_alloc ();
++extern void regset_release_memory ();
++
++extern void print_rtl ();
++extern void print_rtl_with_bb ();
++
++void rest_of_decl_compilation ();
++void error_with_file_and_line PVPROTO((const char *file,
++ int line, const char *s, ...));
++void error_with_decl PVPROTO((tree decl, const char *s, ...));
++void error_for_asm PVPROTO((rtx insn, const char *s, ...));
++void notice PVPROTO((const char *s, ...));
++void error PVPROTO((const char *s, ...));
++void fatal PVPROTO((const char *s, ...));
++void warning_with_file_and_line PVPROTO((const char *file,
++ int line, const char *s, ...));
++void warning_with_decl PVPROTO((tree decl, const char *s, ...));
++void warning PVPROTO((const char *s, ...));
++void pedwarn PVPROTO((const char *s, ...));
++void pedwarn_with_decl PVPROTO((tree decl, const char *s, ...));
++void pedwarn_with_file_and_line PVPROTO((const char *file,
++ int line, const char *s, ...));
++void sorry PVPROTO((const char *s, ...));
++static void set_target_switch PROTO((const char *));
++static char *decl_name PROTO((tree, int));
++static void vmessage PROTO((const char *, const char *, va_list));
++static void v_message_with_file_and_line PROTO((const char *, int, int,
++ const char *, va_list));
++static void v_message_with_decl PROTO((tree, int, const char *, va_list));
++static void file_and_line_for_asm PROTO((rtx, char **, int *));
++static void v_error_with_file_and_line PROTO((const char *, int,
++ const char *, va_list));
++static void v_error_with_decl PROTO((tree, const char *, va_list));
++static void v_error_for_asm PROTO((rtx, const char *, va_list));
++static void verror PROTO((const char *, va_list));
++static void vfatal PROTO((const char *, va_list)) ATTRIBUTE_NORETURN;
++static void v_warning_with_file_and_line PROTO ((const char *, int,
++ const char *, va_list));
++static void v_warning_with_decl PROTO((tree, const char *, va_list));
++static void v_warning_for_asm PROTO((rtx, const char *, va_list));
++static void vwarning PROTO((const char *, va_list));
++static void vpedwarn PROTO((const char *, va_list));
++static void v_pedwarn_with_decl PROTO((tree, const char *, va_list));
++static void v_pedwarn_with_file_and_line PROTO((const char *, int,
++ const char *, va_list));
++static void vsorry PROTO((const char *, va_list));
++static void float_signal PROTO((int)) ATTRIBUTE_NORETURN;
++static void pipe_closed PROTO((int)) ATTRIBUTE_NORETURN;
++#ifdef ASM_IDENTIFY_LANGUAGE
++/* This might or might not be used in ASM_IDENTIFY_LANGUAGE. */
++static void output_lang_identify PROTO((FILE *)) ATTRIBUTE_UNUSED;
++#endif
++static void open_dump_file PROTO((const char *, const char *));
++static void close_dump_file PROTO((void (*) (FILE *, rtx), rtx));
++static void dump_rtl PROTO((const char *, tree, void (*) (FILE *, rtx), rtx));
++static void clean_dump_file PROTO((const char *));
++static void compile_file PROTO((char *));
++static void display_help PROTO ((void));
++
++static void print_version PROTO((FILE *, const char *));
++static int print_single_switch PROTO((FILE *, int, int, const char *,
++ const char *, const char *,
++ const char *, const char *));
++static void print_switch_values PROTO((FILE *, int, int, const char *,
++ const char *, const char *));
++
++void print_rtl_graph_with_bb PROTO ((const char *, const char *, rtx));
++void clean_graph_dump_file PROTO ((const char *, const char *));
++void finish_graph_dump_file PROTO ((const char *, const char *));
++/* Length of line when printing switch values. */
++#define MAX_LINE 75
++
++/* Name of program invoked, sans directories. */
++
++char *progname;
++
++/* Copy of arguments to main. */
++int save_argc;
++char **save_argv;
++
++/* Name of current original source file (what was input to cpp).
++ This comes from each #-command in the actual input. */
++
++char *input_filename;
++
++/* Name of top-level original source file (what was input to cpp).
++ This comes from the #-command at the beginning of the actual input.
++ If there isn't any there, then this is the cc1 input file name. */
++
++char *main_input_filename;
++
++/* Current line number in real source file. */
++
++int lineno;
++
++/* Nonzero if it is unsafe to create any new pseudo registers. */
++int no_new_pseudos;
++
++/* Stack of currently pending input files. */
++
++struct file_stack *input_file_stack;
++
++/* Incremented on each change to input_file_stack. */
++int input_file_stack_tick;
++
++/* FUNCTION_DECL for function now being parsed or compiled. */
++
++extern tree current_function_decl;
++
++/* Name to use as base of names for dump output files. */
++
++const char *dump_base_name;
++
++/* Bit flags that specify the machine subtype we are compiling for.
++ Bits are tested using macros TARGET_... defined in the tm.h file
++ and set by `-m...' switches. Must be defined in rtlanal.c. */
++
++extern int target_flags;
++
++/* Flags saying which kinds of debugging dump have been requested. */
++
++int rtl_dump = 0;
++int rtl_dump_and_exit = 0;
++int jump_opt_dump = 0;
++int addressof_dump = 0;
++int cse_dump = 0;
++int gcse_dump = 0;
++int loop_dump = 0;
++int cse2_dump = 0;
++int branch_prob_dump = 0;
++int flow_dump = 0;
++int combine_dump = 0;
++int regmove_dump = 0;
++int sched_dump = 0;
++int local_reg_dump = 0;
++int global_reg_dump = 0;
++int flow2_dump = 0;
++int sched2_dump = 0;
++int jump2_opt_dump = 0;
++#ifdef DELAY_SLOTS
++int dbr_sched_dump = 0;
++#endif
++int flag_print_asm_name = 0;
++#ifdef STACK_REGS
++int stack_reg_dump = 0;
++#endif
++#ifdef MACHINE_DEPENDENT_REORG
++int mach_dep_reorg_dump = 0;
++#endif
++enum graph_dump_types graph_dump_format;
++
++/* Name for output file of assembly code, specified with -o. */
++
++char *asm_file_name;
++
++/* Value of the -G xx switch, and whether it was passed or not. */
++int g_switch_value;
++int g_switch_set;
++
++/* Type(s) of debugging information we are producing (if any).
++ See flags.h for the definitions of the different possible
++ types of debugging information. */
++enum debug_info_type write_symbols = NO_DEBUG;
++
++/* Level of debugging information we are producing. See flags.h
++ for the definitions of the different possible levels. */
++enum debug_info_level debug_info_level = DINFO_LEVEL_NONE;
++
++/* Nonzero means use GNU-only extensions in the generated symbolic
++ debugging information. */
++/* Currently, this only has an effect when write_symbols is set to
++ DBX_DEBUG, XCOFF_DEBUG, or DWARF_DEBUG. */
++int use_gnu_debug_info_extensions = 0;
++
++/* Nonzero means do optimizations. -O.
++ Particular numeric values stand for particular amounts of optimization;
++ thus, -O2 stores 2 here. However, the optimizations beyond the basic
++ ones are not controlled directly by this variable. Instead, they are
++ controlled by individual `flag_...' variables that are defaulted
++ based on this variable. */
++
++int optimize = 0;
++
++/* Nonzero means optimize for size. -Os.
++ The only valid values are zero and non-zero. When optimize_size is
++ non-zero, optimize defaults to 2, but certain individual code
++ bloating optimizations are disabled. */
++
++int optimize_size = 0;
++
++/* Number of error messages and warning messages so far. */
++
++int errorcount = 0;
++int warningcount = 0;
++int sorrycount = 0;
++
++/* Pointer to function to compute the name to use to print a declaration.
++ DECL is the declaration in question.
++ VERBOSITY determines what information will be printed:
++ 0: DECL_NAME, demangled as necessary.
++ 1: and scope information.
++ 2: and any other information that might be interesting, such as function
++ parameter types in C++. */
++
++char *(*decl_printable_name) PROTO ((tree, int));
++
++/* Pointer to function to compute rtl for a language-specific tree code. */
++
++typedef rtx (*lang_expand_expr_t)
++ PROTO ((union tree_node *, rtx, enum machine_mode,
++ enum expand_modifier modifier));
++
++lang_expand_expr_t lang_expand_expr = 0;
++
++tree (*lang_expand_constant) PROTO((tree)) = 0;
++
++/* Pointer to function to finish handling an incomplete decl at the
++ end of compilation. */
++
++void (*incomplete_decl_finalize_hook) PROTO((tree)) = 0;
++
++/* Nonzero if generating code to do profiling. */
++
++int profile_flag = 0;
++
++/* Nonzero if generating code to do profiling on a line-by-line basis. */
++
++int profile_block_flag;
++
++/* Nonzero if generating code to profile program flow graph arcs. */
++
++int profile_arc_flag = 0;
++
++/* Nonzero if generating info for gcov to calculate line test coverage. */
++
++int flag_test_coverage = 0;
++
++/* Nonzero indicates that branch taken probabilities should be calculated. */
++
++int flag_branch_probabilities = 0;
++
++/* Nonzero for -pedantic switch: warn about anything
++ that standard spec forbids. */
++
++int pedantic = 0;
++
++/* Temporarily suppress certain warnings.
++ This is set while reading code from a system header file. */
++
++int in_system_header = 0;
++
++/* Nonzero means do stupid register allocation.
++ Currently, this is 1 if `optimize' is 0. */
++
++int obey_regdecls = 0;
++
++/* Don't print functions as they are compiled and don't print
++ times taken by the various passes. -quiet. */
++
++int quiet_flag = 0;
++
++/* -f flags. */
++
++/* Nonzero means `char' should be signed. */
++
++int flag_signed_char;
++
++/* Nonzero means give an enum type only as many bytes as it needs. */
++
++int flag_short_enums;
++
++/* Nonzero for -fcaller-saves: allocate values in regs that need to
++ be saved across function calls, if that produces overall better code.
++ Optional now, so people can test it. */
++
++#ifdef DEFAULT_CALLER_SAVES
++int flag_caller_saves = 1;
++#else
++int flag_caller_saves = 0;
++#endif
++
++/* Nonzero if structures and unions should be returned in memory.
++
++ This should only be defined if compatibility with another compiler or
++ with an ABI is needed, because it results in slower code. */
++
++#ifndef DEFAULT_PCC_STRUCT_RETURN
++#define DEFAULT_PCC_STRUCT_RETURN 1
++#endif
++
++/* Nonzero for -fpcc-struct-return: return values the same way PCC does. */
++
++int flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN;
++
++/* Nonzero for -fforce-mem: load memory value into a register
++ before arithmetic on it. This makes better cse but slower compilation. */
++
++int flag_force_mem = 0;
++
++/* Nonzero for -fforce-addr: load memory address into a register before
++ reference to memory. This makes better cse but slower compilation. */
++
++int flag_force_addr = 0;
++
++/* Nonzero for -fdefer-pop: don't pop args after each function call;
++ instead save them up to pop many calls' args with one insns. */
++
++int flag_defer_pop = 0;
++
++/* Nonzero for -ffloat-store: don't allocate floats and doubles
++ in extended-precision registers. */
++
++int flag_float_store = 0;
++
++/* Nonzero for -fcse-follow-jumps:
++ have cse follow jumps to do a more extensive job. */
++
++int flag_cse_follow_jumps;
++
++/* Nonzero for -fcse-skip-blocks:
++ have cse follow a branch around a block. */
++int flag_cse_skip_blocks;
++
++/* Nonzero for -fexpensive-optimizations:
++ perform miscellaneous relatively-expensive optimizations. */
++int flag_expensive_optimizations;
++
++/* Nonzero for -fthread-jumps:
++ have jump optimize output of loop. */
++
++int flag_thread_jumps;
++
++/* Nonzero enables strength-reduction in loop.c. */
++
++int flag_strength_reduce = 0;
++
++/* Nonzero enables loop unrolling in unroll.c. Only loops for which the
++ number of iterations can be calculated at compile-time (UNROLL_COMPLETELY,
++ UNROLL_MODULO) or at run-time (preconditioned to be UNROLL_MODULO) are
++ unrolled. */
++
++int flag_unroll_loops;
++
++/* Nonzero enables loop unrolling in unroll.c. All loops are unrolled.
++ This is generally not a win. */
++
++int flag_unroll_all_loops;
++
++/* Nonzero forces all invariant computations in loops to be moved
++ outside the loop. */
++
++int flag_move_all_movables = 0;
++
++/* Nonzero forces all general induction variables in loops to be
++ strength reduced. */
++
++int flag_reduce_all_givs = 0;
++
++/* Nonzero to perform full register move optimization passes. This is the
++ default for -O2. */
++
++int flag_regmove = 0;
++
++/* Nonzero for -fwritable-strings:
++ store string constants in data segment and don't uniquize them. */
++
++int flag_writable_strings = 0;
++
++/* Nonzero means don't put addresses of constant functions in registers.
++ Used for compiling the Unix kernel, where strange substitutions are
++ done on the assembly output. */
++
++int flag_no_function_cse = 0;
++
++/* Nonzero for -fomit-frame-pointer:
++ don't make a frame pointer in simple functions that don't require one. */
++
++int flag_omit_frame_pointer = 0;
++
++/* Nonzero means place each function into its own section on those platforms
++ which support arbitrary section names and unlimited numbers of sections. */
++
++int flag_function_sections = 0;
++
++/* ... and similar for data. */
++
++int flag_data_sections = 0;
++
++/* Nonzero to inhibit use of define_optimization peephole opts. */
++
++int flag_no_peephole = 0;
++
++/* Nonzero allows GCC to violate some IEEE or ANSI rules regarding math
++ operations in the interest of optimization. For example it allows
++ GCC to assume arguments to sqrt are nonnegative numbers, allowing
++ faster code for sqrt to be generated. */
++
++int flag_fast_math = 0;
++
++/* Nonzero means the front end generally wants `errno' maintained by math
++ operations, like built-in SQRT, unless overridden by flag_fast_math. */
++
++int flag_errno_math = 1;
++
++/* 0 means straightforward implementation of complex divide acceptable.
++ 1 means wide ranges of inputs must work for complex divide.
++ 2 means C9X-like requirements for complex divide (not yet implemented). */
++
++int flag_complex_divide_method = 0;
++
++/* Nonzero means all references through pointers are volatile. */
++
++int flag_volatile;
++
++/* Nonzero means treat all global and extern variables as volatile. */
++
++int flag_volatile_global;
++
++/* Nonzero means treat all static variables as volatile. */
++
++int flag_volatile_static;
++
++/* Nonzero means just do syntax checking; don't output anything. */
++
++int flag_syntax_only = 0;
++
++/* Nonzero means perform global cse. */
++
++static int flag_gcse;
++
++/* Nonzero means to rerun cse after loop optimization. This increases
++ compilation time about 20% and picks up a few more common expressions. */
++
++static int flag_rerun_cse_after_loop;
++
++/* Nonzero means to run loop optimizations twice. */
++
++int flag_rerun_loop_opt;
++
++/* Nonzero for -finline-functions: ok to inline functions that look like
++ good inline candidates. */
++
++int flag_inline_functions;
++
++/* Nonzero for -fkeep-inline-functions: even if we make a function
++ go inline everywhere, keep its definition around for debugging
++ purposes. */
++
++int flag_keep_inline_functions;
++
++/* Nonzero means that functions will not be inlined. */
++
++int flag_no_inline;
++
++/* Nonzero means that we should emit static const variables
++ regardless of whether or not optimization is turned on. */
++
++int flag_keep_static_consts = 1;
++
++/* Nonzero means we should be saving declaration info into a .X file. */
++
++int flag_gen_aux_info = 0;
++
++/* Specified name of aux-info file. */
++
++static char *aux_info_file_name;
++
++/* Nonzero means make the text shared if supported. */
++
++int flag_shared_data;
++
++/* Nonzero means schedule into delayed branch slots if supported. */
++
++int flag_delayed_branch;
++
++/* Nonzero if we are compiling pure (sharable) code.
++ Value is 1 if we are doing reasonable (i.e. simple
++ offset into offset table) pic. Value is 2 if we can
++ only perform register offsets. */
++
++int flag_pic;
++
++/* Nonzero means generate extra code for exception handling and enable
++ exception handling. */
++
++int flag_exceptions;
++
++/* Nonzero means use the new model for exception handling. Replaces
++ -DNEW_EH_MODEL as a compile option. */
++
++int flag_new_exceptions = 0;
++
++/* Nonzero means don't place uninitialized global data in common storage
++ by default. */
++
++int flag_no_common;
++
++/* Nonzero means pretend it is OK to examine bits of target floats,
++ even if that isn't true. The resulting code will have incorrect constants,
++ but the same series of instructions that the native compiler would make. */
++
++int flag_pretend_float;
++
++/* Nonzero means change certain warnings into errors.
++ Usually these are warnings about failure to conform to some standard. */
++
++int flag_pedantic_errors = 0;
++
++/* flag_schedule_insns means schedule insns within basic blocks (before
++ local_alloc).
++ flag_schedule_insns_after_reload means schedule insns after
++ global_alloc. */
++
++int flag_schedule_insns = 0;
++int flag_schedule_insns_after_reload = 0;
++
++#ifdef HAIFA
++/* The following flags have effect only for scheduling before register
++ allocation:
++
++ flag_schedule_interblock means schedule insns accross basic blocks.
++ flag_schedule_speculative means allow speculative motion of non-load insns.
++ flag_schedule_speculative_load means allow speculative motion of some
++ load insns.
++ flag_schedule_speculative_load_dangerous allows speculative motion of more
++ load insns. */
++
++int flag_schedule_interblock = 1;
++int flag_schedule_speculative = 1;
++int flag_schedule_speculative_load = 0;
++int flag_schedule_speculative_load_dangerous = 0;
++#endif /* HAIFA */
++
++/* flag_on_branch_count_reg means try to replace add-1,compare,branch tupple
++ by a cheaper branch, on a count register. */
++int flag_branch_on_count_reg;
++
++/* -finhibit-size-directive inhibits output of .size for ELF.
++ This is used only for compiling crtstuff.c,
++ and it may be extended to other effects
++ needed for crtstuff.c on other systems. */
++int flag_inhibit_size_directive = 0;
++
++/* -fverbose-asm causes extra commentary information to be produced in
++ the generated assembly code (to make it more readable). This option
++ is generally only of use to those who actually need to read the
++ generated assembly code (perhaps while debugging the compiler itself).
++ -fno-verbose-asm, the default, causes the extra information
++ to be omitted and is useful when comparing two assembler files. */
++
++int flag_verbose_asm = 0;
++
++/* -dA causes debug commentary information to be produced in
++ the generated assembly code (to make it more readable). This option
++ is generally only of use to those who actually need to read the
++ generated assembly code (perhaps while debugging the compiler itself).
++ Currently, this switch is only used by dwarfout.c; however, it is intended
++ to be a catchall for printing debug information in the assembler file. */
++
++int flag_debug_asm = 0;
++
++/* -fgnu-linker specifies use of the GNU linker for initializations.
++ (Or, more generally, a linker that handles initializations.)
++ -fno-gnu-linker says that collect2 will be used. */
++#ifdef USE_COLLECT2
++int flag_gnu_linker = 0;
++#else
++int flag_gnu_linker = 1;
++#endif
++
++/* Tag all structures with __attribute__(packed) */
++int flag_pack_struct = 0;
++
++/* Emit code to check for stack overflow; also may cause large objects
++ to be allocated dynamically. */
++int flag_stack_check;
++
++/* -fcheck-memory-usage causes extra code to be generated in order to check
++ memory accesses. This is used by a detector of bad memory accesses such
++ as Checker. */
++int flag_check_memory_usage = 0;
++
++/* -fprefix-function-name causes function name to be prefixed. This
++ can be used with -fcheck-memory-usage to isolate code compiled with
++ -fcheck-memory-usage. */
++int flag_prefix_function_name = 0;
++
++/* 0 if pointer arguments may alias each other. True in C.
++ 1 if pointer arguments may not alias each other but may alias
++ global variables.
++ 2 if pointer arguments may not alias each other and may not
++ alias global variables. True in Fortran.
++ This defaults to 0 for C. */
++int flag_argument_noalias = 0;
++
++/* Nonzero if we should do (language-dependent) alias analysis.
++ Typically, this analysis will assume that expressions of certain
++ types do not alias expressions of certain other types. Only used
++ if alias analysis (in general) is enabled. */
++int flag_strict_aliasing = 0;
++
++/* Instrument functions with calls at entry and exit, for profiling. */
++int flag_instrument_function_entry_exit = 0;
++
++/* Nonzero means ignore `#ident' directives. 0 means handle them.
++ On SVR4 targets, it also controls whether or not to emit a
++ string identifying the compiler. */
++
++int flag_no_ident = 0;
++
++int flag_keep_file_path = 0;
++
++/* Table of supported debugging formats. */
++static struct
++{
++ const char * arg;
++ /* Since PREFERRED_DEBUGGING_TYPE isn't necessarily a
++ constant expression, we use NO_DEBUG in its place. */
++ enum debug_info_type debug_type;
++ int use_extensions_p;
++ const char * description;
++} *da,
++debug_args[] =
++{
++ { "g", NO_DEBUG, DEFAULT_GDB_EXTENSIONS,
++ "Generate default debug format output" },
++ { "ggdb", NO_DEBUG, 1, "Generate default extended debug format output" },
++#ifdef DBX_DEBUGGING_INFO
++ { "gstabs", DBX_DEBUG, 0, "Generate STABS format debug output" },
++ { "gstabs+", DBX_DEBUG, 1, "Generate extended STABS format debug output" },
++#endif
++#ifdef DWARF_DEBUGGING_INFO
++ { "gdwarf", DWARF_DEBUG, 0, "Generate DWARF-1 format debug output"},
++ { "gdwarf+", DWARF_DEBUG, 1,
++ "Generated extended DWARF-1 format debug output" },
++#endif
++#ifdef DWARF2_DEBUGGING_INFO
++ { "gdwarf-2", DWARF2_DEBUG, 0, "Enable DWARF-2 debug output" },
++#endif
++#ifdef XCOFF_DEBUGGING_INFO
++ { "gxcoff", XCOFF_DEBUG, 0, "Generate XCOFF format debug output" },
++ { "gxcoff+", XCOFF_DEBUG, 1, "Generate extended XCOFF format debug output" },
++#endif
++#ifdef SDB_DEBUGGING_INFO
++ { "gcoff", SDB_DEBUG, 0, "Generate COFF format debug output" },
++#endif
++ { 0, 0, 0, 0 }
++};
++
++typedef struct
++{
++ const char * string;
++ int * variable;
++ int on_value;
++ const char * description;
++}
++lang_independent_options;
++
++/* Add or remove a leading underscore from user symbols. */
++int flag_leading_underscore = -1;
++
++/* The user symbol prefix after having resolved same. */
++const char *user_label_prefix;
++
++/* A default for same. */
++#ifndef USER_LABEL_PREFIX
++#define USER_LABEL_PREFIX ""
++#endif
++
++/* Table of language-independent -f options.
++ STRING is the option name. VARIABLE is the address of the variable.
++ ON_VALUE is the value to store in VARIABLE
++ if `-fSTRING' is seen as an option.
++ (If `-fno-STRING' is seen as an option, the opposite value is stored.) */
++
++lang_independent_options f_options[] =
++{
++ {"float-store", &flag_float_store, 1,
++ "Do not store floats in registers" },
++ {"volatile", &flag_volatile, 1,
++ "Consider all mem refs through pointers as volatile"},
++ {"volatile-global", &flag_volatile_global, 1,
++ "Consider all mem refs to global data to be volatile" },
++ {"volatile-static", &flag_volatile_static, 1,
++ "Consider all mem refs to static data to be volatile" },
++ {"defer-pop", &flag_defer_pop, 1,
++ "Defer popping functions args from stack until later" },
++ {"omit-frame-pointer", &flag_omit_frame_pointer, 1,
++ "When possible do not generate stack frames"},
++ {"cse-follow-jumps", &flag_cse_follow_jumps, 1,
++ "When running CSE, follow jumps to their targets" },
++ {"cse-skip-blocks", &flag_cse_skip_blocks, 1,
++ "When running CSE, follow conditional jumps" },
++ {"expensive-optimizations", &flag_expensive_optimizations, 1,
++ "Perform a number of minor, expensive optimisations" },
++ {"thread-jumps", &flag_thread_jumps, 1,
++ "Perform jump threading optimisations"},
++ {"strength-reduce", &flag_strength_reduce, 1,
++ "Perform strength reduction optimisations" },
++ {"unroll-loops", &flag_unroll_loops, 1,
++ "Perform loop unrolling when iteration count is known" },
++ {"unroll-all-loops", &flag_unroll_all_loops, 1,
++ "Perform loop unrolling for all loops" },
++ {"move-all-movables", &flag_move_all_movables, 1,
++ "Force all loop invariant computations out of loops" },
++ {"reduce-all-givs", &flag_reduce_all_givs, 1,
++ "Strength reduce all loop general induction variables" },
++ {"writable-strings", &flag_writable_strings, 1,
++ "Store strings in writable data section" },
++ {"peephole", &flag_no_peephole, 0,
++ "Enable machine specific peephole optimisations" },
++ {"force-mem", &flag_force_mem, 1,
++ "Copy memory operands into registers before using" },
++ {"force-addr", &flag_force_addr, 1,
++ "Copy memory address constants into regs before using" },
++ {"function-cse", &flag_no_function_cse, 0,
++ "Allow function addresses to be held in registers" },
++ {"inline-functions", &flag_inline_functions, 1,
++ "Integrate simple functions into their callers" },
++ {"keep-inline-functions", &flag_keep_inline_functions, 1,
++ "Generate code for funcs even if they are fully inlined" },
++ {"inline", &flag_no_inline, 0,
++ "Pay attention to the 'inline' keyword"},
++ {"keep-static-consts", &flag_keep_static_consts, 1,
++ "Emit static const variables even if they are not used" },
++ {"syntax-only", &flag_syntax_only, 1,
++ "Check for syntax errors, then stop" },
++ {"shared-data", &flag_shared_data, 1,
++ "Mark data as shared rather than private" },
++ {"caller-saves", &flag_caller_saves, 1,
++ "Enable saving registers around function calls" },
++ {"pcc-struct-return", &flag_pcc_struct_return, 1,
++ "Return 'short' aggregates in memory, not registers" },
++ {"reg-struct-return", &flag_pcc_struct_return, 0,
++ "Return 'short' aggregates in registers" },
++ {"delayed-branch", &flag_delayed_branch, 1,
++ "Attempt to fill delay slots of branch instructions" },
++ {"gcse", &flag_gcse, 1,
++ "Perform the global common subexpression elimination" },
++ {"rerun-cse-after-loop", &flag_rerun_cse_after_loop, 1,
++ "Run CSE pass after loop optimisations"},
++ {"rerun-loop-opt", &flag_rerun_loop_opt, 1,
++ "Run the loop optimiser twice"},
++ {"pretend-float", &flag_pretend_float, 1,
++ "Pretend that host and target use the same FP format"},
++ {"schedule-insns", &flag_schedule_insns, 1,
++ "Reschedule instructions to avoid pipeline stalls"},
++ {"schedule-insns2", &flag_schedule_insns_after_reload, 1,
++ "Run two passes of the instruction scheduler"},
++#ifdef HAIFA
++ {"sched-interblock",&flag_schedule_interblock, 1,
++ "Enable scheduling across basic blocks" },
++ {"sched-spec",&flag_schedule_speculative, 1,
++ "Allow speculative motion of non-loads" },
++ {"sched-spec-load",&flag_schedule_speculative_load, 1,
++ "Allow speculative motion of some loads" },
++ {"sched-spec-load-dangerous",&flag_schedule_speculative_load_dangerous, 1,
++ "Allow speculative motion of more loads" },
++#endif /* HAIFA */
++ {"branch-count-reg",&flag_branch_on_count_reg, 1,
++ "Replace add,compare,branch with branch on count reg"},
++ {"pic", &flag_pic, 1,
++ "Generate position independent code, if possible"},
++ {"PIC", &flag_pic, 2, ""},
++ {"exceptions", &flag_exceptions, 1,
++ "Enable exception handling" },
++ {"new-exceptions", &flag_new_exceptions, 1,
++ "Use the new model for exception handling" },
++ {"sjlj-exceptions", &exceptions_via_longjmp, 1,
++ "Use setjmp/longjmp to handle exceptions" },
++ {"asynchronous-exceptions", &asynchronous_exceptions, 1,
++ "Support asynchronous exceptions" },
++ {"profile-arcs", &profile_arc_flag, 1,
++ "Insert arc based program profiling code" },
++ {"test-coverage", &flag_test_coverage, 1,
++ "Create data files needed by gcov" },
++ {"branch-probabilities", &flag_branch_probabilities, 1,
++ "Use profiling information for branch probabilities" },
++ {"fast-math", &flag_fast_math, 1,
++ "Improve FP speed by violating ANSI & IEEE rules" },
++ {"common", &flag_no_common, 0,
++ "Do not put unitialised globals in the common section" },
++ {"inhibit-size-directive", &flag_inhibit_size_directive, 1,
++ "Do not generate .size directives" },
++ {"function-sections", &flag_function_sections, 1,
++ "place each function into its own section" },
++ {"data-sections", &flag_data_sections, 1,
++ "place data items into their own section" },
++ {"verbose-asm", &flag_verbose_asm, 1,
++ "Add extra commentry to assembler output"},
++ {"gnu-linker", &flag_gnu_linker, 1,
++ "Output GNU ld formatted global initialisers"},
++ {"regmove", &flag_regmove, 1,
++ "Enables a register move optimisation"},
++ {"optimize-register-move", &flag_regmove, 1,
++ "Do the full regmove optimization pass"},
++ {"pack-struct", &flag_pack_struct, 1,
++ "Pack structure members together without holes" },
++ {"stack-check", &flag_stack_check, 1,
++ "Insert stack checking code into the program" },
++ {"argument-alias", &flag_argument_noalias, 0,
++ "Specify that arguments may alias each other & globals"},
++ {"argument-noalias", &flag_argument_noalias, 1,
++ "Assume arguments may alias globals but not each other"},
++ {"argument-noalias-global", &flag_argument_noalias, 2,
++ "Assume arguments do not alias each other or globals" },
++ {"strict-aliasing", &flag_strict_aliasing, 1,
++ "Assume strict aliasing rules apply" },
++ {"check-memory-usage", &flag_check_memory_usage, 1,
++ "Generate code to check every memory access" },
++ {"prefix-function-name", &flag_prefix_function_name, 1,
++ "Add a prefix to all function names" },
++ {"dump-unnumbered", &flag_dump_unnumbered, 1,
++ "Suppress output of instruction numbers and line number notes in debugging dumps"},
++ {"instrument-functions", &flag_instrument_function_entry_exit, 1,
++ "Instrument function entry/exit with profiling calls"},
++ {"leading-underscore", &flag_leading_underscore, 1,
++ "External symbols have a leading underscore" },
++ {"keep-file-path", &flag_keep_file_path,1,
++ "Do not strip path in .file directive"},
++ {"ident", &flag_no_ident, 0,
++ "Process #ident directives"}
++};
++
++#define NUM_ELEM(a) (sizeof (a) / sizeof ((a)[0]))
++
++/* Table of language-specific options. */
++
++static struct lang_opt
++{
++ const char * option;
++ const char * description;
++}
++documented_lang_options[] =
++{
++ /* In order not to overload the --help output, the convention
++ used here is to only describe those options which are not
++ enabled by default. */
++
++ { "-ansi", "Compile just for ANSI C" },
++ { "-fallow-single-precision",
++ "Do not promote floats to double if using -traditional" },
++ { "-std= ", "Determine language standard"},
++
++ { "-fsigned-bitfields", "" },
++ { "-funsigned-bitfields","Make bitfields by unsigned by default" },
++ { "-fno-signed-bitfields", "" },
++ { "-fno-unsigned-bitfields","" },
++ { "-fsigned-char", "Make 'char' be signed by default"},
++ { "-funsigned-char", "Make 'char' be unsigned by default"},
++ { "-fno-signed-char", "" },
++ { "-fno-unsigned-char", "" },
++
++ { "-ftraditional", "" },
++ { "-traditional", "Attempt to support traditional K&R style C"},
++ { "-fnotraditional", "" },
++ { "-fno-traditional", "" },
++
++ { "-fasm", "" },
++ { "-fno-asm", "Do not recognise the 'asm' keyword" },
++ { "-fbuiltin", "" },
++ { "-fno-builtin", "Do not recognise any built in functions" },
++ { "-fhosted", "Assume normal C execution environment" },
++ { "-fno-hosted", "" },
++ { "-ffreestanding",
++ "Assume that standard libraries & main might not exist" },
++ { "-fno-freestanding", "" },
++ { "-fcond-mismatch", "Allow different types as args of ? operator"},
++ { "-fno-cond-mismatch", "" },
++ { "-fdollars-in-identifiers", "Allow the use of $ inside identifiers" },
++ { "-fno-dollars-in-identifiers", "" },
++ { "-fshort-double", "Use the same size for double as for float" },
++ { "-fno-short-double", "" },
++ { "-fshort-enums", "Use the smallest fitting integer to hold enums"},
++ { "-fno-short-enums", "" },
++
++ { "-Wall", "Enable most warning messages" },
++ { "-Wbad-function-cast",
++ "Warn about casting functions to incompatible types" },
++ { "-Wno-bad-function-cast", "" },
++ { "-Wmissing-noreturn",
++ "Warn about functions which might be candidates for attribute noreturn" },
++ { "-Wno-missing-noreturn", "" },
++ { "-Wcast-qual", "Warn about casts which discard qualifiers"},
++ { "-Wno-cast-qual", "" },
++ { "-Wchar-subscripts", "Warn about subscripts whose type is 'char'"},
++ { "-Wno-char-subscripts", "" },
++ { "-Wcomment", "Warn if nested comments are detected" },
++ { "-Wno-comment", "" },
++ { "-Wcomments", "Warn if nested comments are detected" },
++ { "-Wno-comments", "" },
++ { "-Wconversion", "Warn about possibly confusing type conversions" },
++ { "-Wno-conversion", "" },
++ { "-Wformat", "Warn about printf format anomalies" },
++ { "-Wno-format", "" },
++ { "-Wimplicit-function-declaration",
++ "Warn about implicit function declarations" },
++ { "-Wno-implicit-function-declaration", "" },
++ { "-Werror-implicit-function-declaration", "" },
++ { "-Wimplicit-int", "Warn when a declaration does not specify a type" },
++ { "-Wno-implicit-int", "" },
++ { "-Wimplicit", "" },
++ { "-Wno-implicit", "" },
++ { "-Wimport", "Warn about the use of the #import directive" },
++ { "-Wno-import", "" },
++ { "-Wlong-long","" },
++ { "-Wno-long-long", "Do not warn about using 'long long' when -pedantic" },
++ { "-Wmain", "Warn about suspicious declarations of main" },
++ { "-Wno-main", "" },
++ { "-Wmissing-braces",
++ "Warn about possibly missing braces around initialisers" },
++ { "-Wno-missing-braces", "" },
++ { "-Wmissing-declarations",
++ "Warn about global funcs without previous declarations"},
++ { "-Wno-missing-declarations", "" },
++ { "-Wmissing-prototypes", "Warn about global funcs without prototypes" },
++ { "-Wno-missing-prototypes", "" },
++ { "-Wmultichar", "Warn about use of multicharacter literals"},
++ { "-Wno-multichar", "" },
++ { "-Wnested-externs", "Warn about externs not at file scope level" },
++ { "-Wno-nested-externs", "" },
++ { "-Wparentheses", "Warn about possible missing parentheses" },
++ { "-Wno-parentheses", "" },
++ { "-Wpointer-arith", "Warn about function pointer arithmetic" },
++ { "-Wno-pointer-arith", "" },
++ { "-Wredundant-decls",
++ "Warn about multiple declarations of the same object" },
++ { "-Wno-redundant-decls", "" },
++ { "-Wsign-compare", "Warn about signed/unsigned comparisons" },
++ { "-Wno-sign-compare", "" },
++ { "-Wunknown-pragmas", "Warn about unrecognised pragmas" },
++ { "-Wno-unknown-pragmas", "" },
++ { "-Wstrict-prototypes", "Warn about non-prototyped function decls" },
++ { "-Wno-strict-prototypes", "" },
++ { "-Wtraditional", "Warn about constructs whose meaning change in ANSI C"},
++ { "-Wno-traditional", "" },
++ { "-Wtrigraphs", "Warn when trigraphs are encountered" },
++ { "-Wno-trigraphs", "" },
++ { "-Wundef", "" },
++ { "-Wno-undef", "" },
++ { "-Wwrite-strings", "Mark strings as 'const char *'"},
++ { "-Wno-write-strings", "" },
++
++ /* These are for languages with USE_CPPLIB. */
++ /* These options are already documented in cpplib.c */
++ { "--help", "" },
++ { "-A", "" },
++ { "-D", "" },
++ { "-I", "" },
++#if USE_CPPLIB
++ { "-MD", "Print dependencies to FILE.d" },
++ { "-MMD", "Print dependencies to FILE.d" },
++ { "-M", "Print dependencies to stdout" },
++ { "-MM", "Print dependencies to stdout" },
++#endif /* USE_CPPLIB */
++ { "-U", "" },
++ { "-H", "" },
++ { "-idirafter", "" },
++ { "-imacros", "" },
++ { "-include", "" },
++ { "-iprefix", "" },
++ { "-isystem", "" },
++ { "-iwithprefix", "" },
++ { "-iwithprefixbefore", "" },
++ { "-lang-c", "" },
++ { "-lang-c89", "" },
++ { "-lang-c++", "" },
++ { "-remap", "" },
++ { "-nostdinc", "" },
++ { "-nostdinc++", "" },
++ { "-trigraphs", "" },
++ { "-undef", "" },
++
++#define DEFINE_LANG_NAME(NAME) { NULL, NAME },
++
++ /* These are for obj c. */
++ DEFINE_LANG_NAME ("Objective C")
++
++ { "-lang-objc", "" },
++ { "-gen-decls", "Dump decls to a .decl file" },
++ { "-fgnu-runtime", "Generate code for GNU runtime environment" },
++ { "-fno-gnu-runtime", "" },
++ { "-fnext-runtime", "Generate code for NeXT runtime environment" },
++ { "-fno-next-runtime", "" },
++ { "-Wselector", "Warn if a selector has multiple methods" },
++ { "-Wno-selector", "" },
++ { "-Wprotocol", "" },
++ { "-Wno-protocol", "Do not warn if inherited methods are unimplemented"},
++ { "-print-objc-runtime-info",
++ "Generate C header of platform specific features" },
++
++#include "options.h"
++
++};
++
++/* Here is a table, controlled by the tm.h file, listing each -m switch
++ and which bits in `target_switches' it should set or clear.
++ If VALUE is positive, it is bits to set.
++ If VALUE is negative, -VALUE is bits to clear.
++ (The sign bit is not used so there is no confusion.) */
++
++struct
++{
++ const char * name;
++ int value;
++ const char * description;
++}
++target_switches [] = TARGET_SWITCHES;
++
++/* This table is similar, but allows the switch to have a value. */
++
++#ifdef TARGET_OPTIONS
++struct
++{
++ const char * prefix;
++ const char ** variable;
++ const char * description;
++}
++target_options [] = TARGET_OPTIONS;
++#endif
++
++/* Options controlling warnings */
++
++/* Don't print warning messages. -w. */
++
++int inhibit_warnings = 0;
++
++/* Print various extra warnings. -W. */
++
++int extra_warnings = 0;
++
++/* Treat warnings as errors. -Werror. */
++
++int warnings_are_errors = 0;
++
++/* Nonzero to warn about unused local variables. */
++
++int warn_unused;
++
++/* Nonzero to warn about variables used before they are initialized. */
++
++int warn_uninitialized;
++
++/* Nonzero means warn about all declarations which shadow others. */
++
++int warn_shadow;
++
++/* Warn if a switch on an enum fails to have a case for every enum value. */
++
++int warn_switch;
++
++/* Nonzero means warn about function definitions that default the return type
++ or that use a null return and have a return-type other than void. */
++
++int warn_return_type;
++
++/* Nonzero means warn about pointer casts that increase the required
++ alignment of the target type (and might therefore lead to a crash
++ due to a misaligned access). */
++
++int warn_cast_align;
++
++/* Nonzero means warn about any identifiers that match in the first N
++ characters. The value N is in `id_clash_len'. */
++
++int warn_id_clash;
++unsigned id_clash_len;
++
++/* Nonzero means warn about any objects definitions whose size is larger
++ than N bytes. Also want about function definitions whose returned
++ values are larger than N bytes. The value N is in `larger_than_size'. */
++
++int warn_larger_than;
++unsigned larger_than_size;
++
++/* Nonzero means warn if inline function is too large. */
++
++int warn_inline;
++
++/* Warn if a function returns an aggregate,
++ since there are often incompatible calling conventions for doing this. */
++
++int warn_aggregate_return;
++
++/* Likewise for -W. */
++
++lang_independent_options W_options[] =
++{
++ {"unused", &warn_unused, 1, "Warn when a variable is unused" },
++ {"error", &warnings_are_errors, 1, ""},
++ {"shadow", &warn_shadow, 1, "Warn when one local variable shadows another" },
++ {"switch", &warn_switch, 1,
++ "Warn about enumerated switches missing a specific case" },
++ {"aggregate-return", &warn_aggregate_return, 1,
++ "Warn about returning structures, unions or arrays" },
++ {"cast-align", &warn_cast_align, 1,
++ "Warn about pointer casts which increase alignment" },
++ {"uninitialized", &warn_uninitialized, 1,
++ "Warn about unitialized automatic variables"},
++ {"inline", &warn_inline, 1,
++ "Warn when an inlined function cannot be inlined"}
++};
++
++/* Output files for assembler code (real compiler output)
++ and debugging dumps. */
++
++FILE *asm_out_file;
++FILE *aux_info_file;
++FILE *rtl_dump_file = NULL;
++
++/* Decode the string P as an integral parameter.
++ If the string is indeed an integer return its numeric value else
++ issue an Invalid Option error for the option PNAME and return DEFVAL.
++ If PNAME is zero just return DEFVAL, do not call error. */
++
++int
++read_integral_parameter (p, pname, defval)
++ const char *p;
++ const char *pname;
++ const int defval;
++{
++ const char *endp = p;
++
++ while (*endp)
++ {
++ if (*endp >= '0' && *endp <= '9')
++ endp++;
++ else
++ break;
++ }
++
++ if (*endp != 0)
++ {
++ if (pname != 0)
++ error ("Invalid option `%s'", pname);
++ return defval;
++ }
++
++ return atoi (p);
++}
++
++
++/* Time accumulators, to count the total time spent in various passes. */
++
++int parse_time;
++int varconst_time;
++int integration_time;
++int jump_time;
++int cse_time;
++int gcse_time;
++int loop_time;
++int cse2_time;
++int branch_prob_time;
++int flow_time;
++int combine_time;
++int regmove_time;
++int sched_time;
++int local_alloc_time;
++int global_alloc_time;
++int flow2_time;
++int sched2_time;
++#ifdef DELAY_SLOTS
++int dbr_sched_time;
++#endif
++int shorten_branch_time;
++int stack_reg_time;
++int final_time;
++int symout_time;
++int dump_time;
++
++/* Return time used so far, in microseconds. */
++
++long
++get_run_time ()
++{
++ if (quiet_flag)
++ return 0;
++
++#ifdef __BEOS__
++ return 0;
++#else /* not BeOS */
++#if defined (_WIN32) && !defined (__CYGWIN__)
++ if (clock() < 0)
++ return 0;
++ else
++ return (clock() * 1000);
++#else /* not _WIN32 */
++#ifdef _SC_CLK_TCK
++ {
++ static int tick;
++ struct tms tms;
++ if (tick == 0)
++ tick = 1000000 / sysconf(_SC_CLK_TCK);
++ times (&tms);
++ return (tms.tms_utime + tms.tms_stime) * tick;
++ }
++#else
++#ifdef USG
++ {
++ struct tms tms;
++# if HAVE_SYSCONF && defined _SC_CLK_TCK
++# define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */
++# else
++# ifdef CLK_TCK
++# define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */
++# else
++# define TICKS_PER_SECOND HZ /* traditional UNIX */
++# endif
++# endif
++ times (&tms);
++ return (tms.tms_utime + tms.tms_stime) * (1000000 / TICKS_PER_SECOND);
++ }
++#else
++#ifndef VMS
++ {
++ struct rusage rusage;
++ getrusage (0, &rusage);
++ return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
++ + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
++ }
++#else /* VMS */
++ {
++ struct
++ {
++ int proc_user_time;
++ int proc_system_time;
++ int child_user_time;
++ int child_system_time;
++ } vms_times;
++ times ((void *) &vms_times);
++ return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000;
++ }
++#endif /* VMS */
++#endif /* USG */
++#endif /* _SC_CLK_TCK */
++#endif /* _WIN32 */
++#endif /* __BEOS__ */
++}
++
++#define TIMEVAR(VAR, BODY) \
++do { int otime = get_run_time (); BODY; VAR += get_run_time () - otime; } while (0)
++
++void
++print_time (str, total)
++ const char *str;
++ int total;
++{
++ fprintf (stderr,
++ "time in %s: %d.%06d\n",
++ str, total / 1000000, total % 1000000);
++}
++
++/* Count an error or warning. Return 1 if the message should be printed. */
++
++int
++count_error (warningp)
++ int warningp;
++{
++ if (warningp && inhibit_warnings)
++ return 0;
++
++ if (warningp && !warnings_are_errors)
++ warningcount++;
++ else
++ {
++ static int warning_message = 0;
++
++ if (warningp && !warning_message)
++ {
++ notice ("%s: warnings being treated as errors\n", progname);
++ warning_message = 1;
++ }
++ errorcount++;
++ }
++
++ return 1;
++}
++
++/* Print a fatal error message. NAME is the text.
++ Also include a system error message based on `errno'. */
++
++void
++pfatal_with_name (name)
++ const char *name;
++{
++ fprintf (stderr, "%s: ", progname);
++ perror (name);
++ exit (FATAL_EXIT_CODE);
++}
++
++void
++fatal_io_error (name)
++ const char *name;
++{
++ notice ("%s: %s: I/O error\n", progname, name);
++ exit (FATAL_EXIT_CODE);
++}
++
++/* Called to give a better error message for a bad insn rather than
++ just calling abort(). */
++
++void
++fatal_insn VPROTO((const char *msgid, rtx insn, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *msgid;
++ rtx insn;
++#endif
++ va_list ap;
++
++ VA_START (ap, insn);
++
++#ifndef ANSI_PROTOTYPES
++ msgid = va_arg (ap, const char *);
++ insn = va_arg (ap, rtx);
++#endif
++
++ verror (msgid, ap);
++ debug_rtx (insn);
++ exit (FATAL_EXIT_CODE);
++}
++
++/* Called to give a better error message when we don't have an insn to match
++ what we are looking for or if the insn's constraints aren't satisfied,
++ rather than just calling abort(). */
++
++void
++fatal_insn_not_found (insn)
++ rtx insn;
++{
++ if (INSN_CODE (insn) < 0)
++ fatal_insn ("internal error--unrecognizable insn:", insn);
++ else
++ fatal_insn ("internal error--insn does not satisfy its constraints:", insn);
++}
++
++/* This is the default decl_printable_name function. */
++
++static char *
++decl_name (decl, verbosity)
++ tree decl;
++ int verbosity ATTRIBUTE_UNUSED;
++{
++ return IDENTIFIER_POINTER (DECL_NAME (decl));
++}
++
++static int need_error_newline;
++
++/* Function of last error message;
++ more generally, function such that if next error message is in it
++ then we don't have to mention the function name. */
++static tree last_error_function = NULL;
++
++/* Used to detect when input_file_stack has changed since last described. */
++static int last_error_tick;
++
++/* Called when the start of a function definition is parsed,
++ this function prints on stderr the name of the function. */
++
++void
++announce_function (decl)
++ tree decl;
++{
++ if (! quiet_flag)
++ {
++ if (rtl_dump_and_exit)
++ fprintf (stderr, "%s ", IDENTIFIER_POINTER (DECL_NAME (decl)));
++ else
++ fprintf (stderr, " %s", (*decl_printable_name) (decl, 2));
++ fflush (stderr);
++ need_error_newline = 1;
++ last_error_function = current_function_decl;
++ }
++}
++
++/* The default function to print out name of current function that caused
++ an error. */
++
++void
++default_print_error_function (file)
++ const char *file;
++{
++ if (last_error_function != current_function_decl)
++ {
++ if (file)
++ fprintf (stderr, "%s: ", file);
++
++ if (current_function_decl == NULL)
++ notice ("At top level:\n");
++ else
++ notice ((TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE
++ ? "In method `%s':\n"
++ : "In function `%s':\n"),
++ (*decl_printable_name) (current_function_decl, 2));
++
++ last_error_function = current_function_decl;
++ }
++}
++
++/* Called by report_error_function to print out function name.
++ * Default may be overridden by language front-ends. */
++
++void (*print_error_function) PROTO((const char *)) =
++ default_print_error_function;
++
++/* Prints out, if necessary, the name of the current function
++ that caused an error. Called from all error and warning functions.
++ We ignore the FILE parameter, as it cannot be relied upon. */
++
++void
++report_error_function (file)
++ const char *file ATTRIBUTE_UNUSED;
++{
++ struct file_stack *p;
++
++ if (need_error_newline)
++ {
++ fprintf (stderr, "\n");
++ need_error_newline = 0;
++ }
++
++ if (input_file_stack && input_file_stack->next != 0
++ && input_file_stack_tick != last_error_tick)
++ {
++ for (p = input_file_stack->next; p; p = p->next)
++ notice ((p == input_file_stack->next
++ ? "In file included from %s:%d"
++ : ",\n from %s:%d"),
++ p->name, p->line);
++ fprintf (stderr, ":\n");
++ last_error_tick = input_file_stack_tick;
++ }
++
++ (*print_error_function) (input_filename);
++}
++
++/* Print a message. */
++
++static void
++vnotice (file, msgid, ap)
++ FILE *file;
++ char *msgid;
++ va_list ap;
++{
++ vfprintf (file, _(msgid), ap);
++}
++
++void
++notice VPROTO((const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ msgid = va_arg (ap, char *);
++#endif
++
++ vnotice (stderr, msgid, ap);
++ va_end (ap);
++}
++
++void
++fnotice VPROTO((FILE *file, const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ FILE *file;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ file = va_arg (ap, FILE *);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ vnotice (file, msgid, ap);
++ va_end (ap);
++}
++
++/* Report FILE and LINE (or program name), and optionally just WARN. */
++
++static void
++report_file_and_line (file, line, warn)
++ char *file;
++ int line;
++ int warn;
++{
++ if (file)
++ fprintf (stderr, "%s:%d: ", file, line);
++ else
++ fprintf (stderr, "%s: ", progname);
++
++ if (warn)
++ notice ("warning: ");
++}
++
++/* Print a message. */
++
++static void
++vmessage (prefix, msgid, ap)
++ const char *prefix;
++ const char *msgid;
++ va_list ap;
++{
++ if (prefix)
++ fprintf (stderr, "%s: ", prefix);
++
++ vfprintf (stderr, msgid, ap);
++}
++
++/* Print a message relevant to line LINE of file FILE. */
++
++static void
++v_message_with_file_and_line (file, line, warn, msgid, ap)
++ const char *file;
++ int line;
++ int warn;
++ const char *msgid;
++ va_list ap;
++{
++ report_file_and_line (file, line, warn);
++ vnotice (stderr, msgid, ap);
++ fputc ('\n', stderr);
++}
++
++/* Print a message relevant to the given DECL. */
++
++static void
++v_message_with_decl (decl, warn, msgid, ap)
++ tree decl;
++ int warn;
++ const char *msgid;
++ va_list ap;
++{
++ const char *p;
++
++ report_file_and_line (DECL_SOURCE_FILE (decl),
++ DECL_SOURCE_LINE (decl), warn);
++
++ /* Do magic to get around lack of varargs support for insertion
++ of arguments into existing list. We know that the decl is first;
++ we ass_u_me that it will be printed with "%s". */
++
++ for (p = _(msgid); *p; ++p)
++ {
++ if (*p == '%')
++ {
++ if (*(p + 1) == '%')
++ ++p;
++ else if (*(p + 1) != 's')
++ abort ();
++ else
++ break;
++ }
++ }
++
++ if (p > _(msgid)) /* Print the left-hand substring. */
++ {
++ char fmt[sizeof "%.255s"];
++ long width = p - _(msgid);
++
++ if (width > 255L) width = 255L; /* arbitrary */
++ sprintf (fmt, "%%.%lds", width);
++ fprintf (stderr, fmt, _(msgid));
++ }
++
++ if (*p == '%') /* Print the name. */
++ {
++ const char *n = (DECL_NAME (decl)
++ ? (*decl_printable_name) (decl, 2)
++ : "((anonymous))");
++ fputs (n, stderr);
++ while (*p)
++ {
++ ++p;
++ if (ISALPHA (*(p - 1) & 0xFF))
++ break;
++ }
++ }
++
++ if (*p) /* Print the rest of the message. */
++ vmessage ((char *)NULL, p, ap);
++
++ fputc ('\n', stderr);
++}
++
++/* Figure file and line of the given INSN. */
++
++static void
++file_and_line_for_asm (insn, pfile, pline)
++ rtx insn;
++ char **pfile;
++ int *pline;
++{
++ rtx body = PATTERN (insn);
++ rtx asmop;
++
++ /* Find the (or one of the) ASM_OPERANDS in the insn. */
++ if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) == ASM_OPERANDS)
++ asmop = SET_SRC (body);
++ else if (GET_CODE (body) == ASM_OPERANDS)
++ asmop = body;
++ else if (GET_CODE (body) == PARALLEL
++ && GET_CODE (XVECEXP (body, 0, 0)) == SET)
++ asmop = SET_SRC (XVECEXP (body, 0, 0));
++ else if (GET_CODE (body) == PARALLEL
++ && GET_CODE (XVECEXP (body, 0, 0)) == ASM_OPERANDS)
++ asmop = XVECEXP (body, 0, 0);
++ else
++ asmop = NULL;
++
++ if (asmop)
++ {
++ *pfile = ASM_OPERANDS_SOURCE_FILE (asmop);
++ *pline = ASM_OPERANDS_SOURCE_LINE (asmop);
++ }
++ else
++ {
++ *pfile = input_filename;
++ *pline = lineno;
++ }
++}
++
++/* Report an error at line LINE of file FILE. */
++
++static void
++v_error_with_file_and_line (file, line, msgid, ap)
++ const char *file;
++ int line;
++ const char *msgid;
++ va_list ap;
++{
++ count_error (0);
++ report_error_function (file);
++ v_message_with_file_and_line (file, line, 0, msgid, ap);
++}
++
++void
++error_with_file_and_line VPROTO((const char *file, int line,
++ const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *file;
++ int line;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ file = va_arg (ap, const char *);
++ line = va_arg (ap, int);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_error_with_file_and_line (file, line, msgid, ap);
++ va_end (ap);
++}
++
++/* Report an error at the declaration DECL.
++ MSGID is a format string which uses %s to substitute the declaration
++ name; subsequent substitutions are a la printf. */
++
++static void
++v_error_with_decl (decl, msgid, ap)
++ tree decl;
++ const char *msgid;
++ va_list ap;
++{
++ count_error (0);
++ report_error_function (DECL_SOURCE_FILE (decl));
++ v_message_with_decl (decl, 0, msgid, ap);
++}
++
++void
++error_with_decl VPROTO((tree decl, const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ tree decl;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ decl = va_arg (ap, tree);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_error_with_decl (decl, msgid, ap);
++ va_end (ap);
++}
++
++/* Report an error at the line number of the insn INSN.
++ This is used only when INSN is an `asm' with operands,
++ and each ASM_OPERANDS records its own source file and line. */
++
++static void
++v_error_for_asm (insn, msgid, ap)
++ rtx insn;
++ const char *msgid;
++ va_list ap;
++{
++ char *file;
++ int line;
++
++ count_error (0);
++ file_and_line_for_asm (insn, &file, &line);
++ report_error_function (file);
++ v_message_with_file_and_line (file, line, 0, msgid, ap);
++}
++
++void
++error_for_asm VPROTO((rtx insn, const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ rtx insn;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ insn = va_arg (ap, rtx);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_error_for_asm (insn, msgid, ap);
++ va_end (ap);
++}
++
++/* Report an error at the current line number. */
++
++static void
++verror (msgid, ap)
++ const char *msgid;
++ va_list ap;
++{
++ v_error_with_file_and_line (input_filename, lineno, msgid, ap);
++}
++
++void
++error VPROTO((const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ msgid = va_arg (ap, const char *);
++#endif
++
++ verror (msgid, ap);
++ va_end (ap);
++}
++
++/* Report a fatal error at the current line number. */
++
++static void
++vfatal (msgid, ap)
++ const char *msgid;
++ va_list ap;
++{
++ verror (msgid, ap);
++ exit (FATAL_EXIT_CODE);
++}
++
++void
++fatal VPROTO((const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ msgid = va_arg (ap, const char *);
++#endif
++
++ vfatal (msgid, ap);
++ va_end (ap);
++}
++
++/* Report a warning at line LINE of file FILE. */
++
++static void
++v_warning_with_file_and_line (file, line, msgid, ap)
++ const char *file;
++ int line;
++ const char *msgid;
++ va_list ap;
++{
++ if (count_error (1))
++ {
++ report_error_function (file);
++ v_message_with_file_and_line (file, line, 1, msgid, ap);
++ }
++}
++
++void
++warning_with_file_and_line VPROTO((const char *file, int line,
++ const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *file;
++ int line;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ file = va_arg (ap, const char *);
++ line = va_arg (ap, int);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_warning_with_file_and_line (file, line, msgid, ap);
++ va_end (ap);
++}
++
++/* Report a warning at the declaration DECL.
++ MSGID is a format string which uses %s to substitute the declaration
++ name; subsequent substitutions are a la printf. */
++
++static void
++v_warning_with_decl (decl, msgid, ap)
++ tree decl;
++ const char *msgid;
++ va_list ap;
++{
++ if (count_error (1))
++ {
++ report_error_function (DECL_SOURCE_FILE (decl));
++ v_message_with_decl (decl, 1, msgid, ap);
++ }
++}
++
++void
++warning_with_decl VPROTO((tree decl, const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ tree decl;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ decl = va_arg (ap, tree);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_warning_with_decl (decl, msgid, ap);
++ va_end (ap);
++}
++
++/* Report a warning at the line number of the insn INSN.
++ This is used only when INSN is an `asm' with operands,
++ and each ASM_OPERANDS records its own source file and line. */
++
++static void
++v_warning_for_asm (insn, msgid, ap)
++ rtx insn;
++ const char *msgid;
++ va_list ap;
++{
++ if (count_error (1))
++ {
++ char *file;
++ int line;
++
++ file_and_line_for_asm (insn, &file, &line);
++ report_error_function (file);
++ v_message_with_file_and_line (file, line, 1, msgid, ap);
++ }
++}
++
++void
++warning_for_asm VPROTO((rtx insn, const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ rtx insn;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ insn = va_arg (ap, rtx);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_warning_for_asm (insn, msgid, ap);
++ va_end (ap);
++}
++
++/* Report a warning at the current line number. */
++
++static void
++vwarning (msgid, ap)
++ const char *msgid;
++ va_list ap;
++{
++ v_warning_with_file_and_line (input_filename, lineno, msgid, ap);
++}
++
++void
++warning VPROTO((const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ msgid = va_arg (ap, const char *);
++#endif
++
++ vwarning (msgid, ap);
++ va_end (ap);
++}
++
++/* These functions issue either warnings or errors depending on
++ -pedantic-errors. */
++
++static void
++vpedwarn (msgid, ap)
++ const char *msgid;
++ va_list ap;
++{
++ if (flag_pedantic_errors)
++ verror (msgid, ap);
++ else
++ vwarning (msgid, ap);
++}
++
++void
++pedwarn VPROTO((const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ msgid = va_arg (ap, const char *);
++#endif
++
++ vpedwarn (msgid, ap);
++ va_end (ap);
++}
++
++static void
++v_pedwarn_with_decl (decl, msgid, ap)
++ tree decl;
++ const char *msgid;
++ va_list ap;
++{
++ /* We don't want -pedantic-errors to cause the compilation to fail from
++ "errors" in system header files. Sometimes fixincludes can't fix what's
++ broken (eg: unsigned char bitfields - fixing it may change the alignment
++ which will cause programs to mysteriously fail because the C library
++ or kernel uses the original layout). There's no point in issuing a
++ warning either, it's just unnecessary noise. */
++
++ if (! DECL_IN_SYSTEM_HEADER (decl))
++ {
++ if (flag_pedantic_errors)
++ v_error_with_decl (decl, msgid, ap);
++ else
++ v_warning_with_decl (decl, msgid, ap);
++ }
++}
++
++void
++pedwarn_with_decl VPROTO((tree decl, const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ tree decl;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ decl = va_arg (ap, tree);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_pedwarn_with_decl (decl, msgid, ap);
++ va_end (ap);
++}
++
++static void
++v_pedwarn_with_file_and_line (file, line, msgid, ap)
++ const char *file;
++ int line;
++ const char *msgid;
++ va_list ap;
++{
++ if (flag_pedantic_errors)
++ v_error_with_file_and_line (file, line, msgid, ap);
++ else
++ v_warning_with_file_and_line (file, line, msgid, ap);
++}
++
++void
++pedwarn_with_file_and_line VPROTO((const char *file, int line,
++ const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *file;
++ int line;
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ file = va_arg (ap, const char *);
++ line = va_arg (ap, int);
++ msgid = va_arg (ap, const char *);
++#endif
++
++ v_pedwarn_with_file_and_line (file, line, msgid, ap);
++ va_end (ap);
++}
++
++/* Apologize for not implementing some feature. */
++
++static void
++vsorry (msgid, ap)
++ const char *msgid;
++ va_list ap;
++{
++ sorrycount++;
++ if (input_filename)
++ fprintf (stderr, "%s:%d: ", input_filename, lineno);
++ else
++ fprintf (stderr, "%s: ", progname);
++ notice ("sorry, not implemented: ");
++ vnotice (stderr, msgid, ap);
++ fputc ('\n', stderr);
++}
++
++void
++sorry VPROTO((const char *msgid, ...))
++{
++#ifndef ANSI_PROTOTYPES
++ const char *msgid;
++#endif
++ va_list ap;
++
++ VA_START (ap, msgid);
++
++#ifndef ANSI_PROTOTYPES
++ msgid = va_arg (ap, const char *);
++#endif
++
++ vsorry (msgid, ap);
++ va_end (ap);
++}
++
++/* Given a partial pathname as input, return another pathname that shares
++ no elements with the pathname of __FILE__. This is used by abort() to
++ print `Internal compiler error in expr.c' instead of `Internal compiler
++ error in ../../egcs/gcc/expr.c'. */
++const char *
++trim_filename (name)
++ const char *name;
++{
++ static const char *this_file = __FILE__;
++ const char *p = name, *q = this_file;
++
++ while (*p == *q && *p != 0 && *q != 0) p++, q++;
++ while (p > name && p[-1] != DIR_SEPARATOR
++#ifdef DIR_SEPARATOR_2
++ && p[-1] != DIR_SEPARATOR_2
++#endif
++ )
++ p--;
++
++ return p;
++}
++
++/* More 'friendly' abort that prints the line and file.
++ config.h can #define abort fancy_abort if you like that sort of thing.
++
++ I don't think this is actually a good idea.
++ Other sorts of crashes will look a certain way.
++ It is a good thing if crashes from calling abort look the same way.
++ -- RMS */
++
++void
++fancy_abort ()
++{
++ fatal ("internal gcc abort");
++}
++
++/* This calls abort and is used to avoid problems when abort if a macro.
++ It is used when we need to pass the address of abort. */
++
++void
++do_abort ()
++{
++ abort ();
++}
++
++/* When `malloc.c' is compiled with `rcheck' defined,
++ it calls this function to report clobberage. */
++
++void
++botch (s)
++ const char * s ATTRIBUTE_UNUSED;
++{
++ abort ();
++}
++
++/* Same as `malloc' but report error if no memory available. */
++
++PTR
++xmalloc (size)
++ size_t size;
++{
++ register PTR value;
++
++ if (size == 0)
++ size = 1;
++
++ value = (PTR) malloc (size);
++ if (value == 0)
++ fatal ("virtual memory exhausted");
++ return value;
++}
++
++/* Same as `calloc' but report error if no memory available. */
++
++PTR
++xcalloc (size1, size2)
++ size_t size1, size2;
++{
++ register PTR value;
++
++ if (size1 == 0 || size2 == 0)
++ size1 = size2 = 1;
++
++ value = (PTR) calloc (size1, size2);
++ if (value == 0)
++ fatal ("virtual memory exhausted");
++ return value;
++}
++
++
++/* Same as `realloc' but report error if no memory available.
++ Also handle null PTR even if the vendor realloc gets it wrong. */
++
++PTR
++xrealloc (ptr, size)
++ PTR ptr;
++ size_t size;
++{
++ register PTR result;
++
++ if (size == 0)
++ size = 1;
++
++ result = (ptr ? (PTR) realloc (ptr, size) : (PTR) malloc (size));
++
++ if (!result)
++ fatal ("virtual memory exhausted");
++
++ return result;
++}
++
++/* Same as `strdup' but report error if no memory available. */
++
++char *
++xstrdup (s)
++ register const char *s;
++{
++ register char *result = (char *) malloc (strlen (s) + 1);
++
++ if (! result)
++ fatal ("virtual memory exhausted");
++ strcpy (result, s);
++ return result;
++}
++
++/* Return the logarithm of X, base 2, considering X unsigned,
++ if X is a power of 2. Otherwise, returns -1.
++
++ This should be used via the `exact_log2' macro. */
++
++int
++exact_log2_wide (x)
++ register unsigned HOST_WIDE_INT x;
++{
++ register int log = 0;
++ /* Test for 0 or a power of 2. */
++ if (x == 0 || x != (x & -x))
++ return -1;
++ while ((x >>= 1) != 0)
++ log++;
++ return log;
++}
++
++/* Given X, an unsigned number, return the largest int Y such that 2**Y <= X.
++ If X is 0, return -1.
++
++ This should be used via the floor_log2 macro. */
++
++int
++floor_log2_wide (x)
++ register unsigned HOST_WIDE_INT x;
++{
++ register int log = -1;
++ while (x != 0)
++ log++,
++ x >>= 1;
++ return log;
++}
++
++static int float_handler_set;
++int float_handled;
++jmp_buf float_handler;
++
++/* Signals actually come here. */
++
++static void
++float_signal (signo)
++ /* If this is missing, some compilers complain. */
++ int signo ATTRIBUTE_UNUSED;
++{
++ if (float_handled == 0)
++ abort ();
++#if defined (USG) || defined (hpux)
++ signal (SIGFPE, float_signal); /* re-enable the signal catcher */
++#endif
++ float_handled = 0;
++ signal (SIGFPE, float_signal);
++ longjmp (float_handler, 1);
++}
++
++/* Specify where to longjmp to when a floating arithmetic error happens.
++ If HANDLER is 0, it means don't handle the errors any more. */
++
++void
++set_float_handler (handler)
++ jmp_buf handler;
++{
++ float_handled = (handler != 0);
++ if (handler)
++ bcopy ((char *) handler, (char *) float_handler, sizeof (float_handler));
++
++ if (float_handled && ! float_handler_set)
++ {
++ signal (SIGFPE, float_signal);
++ float_handler_set = 1;
++ }
++}
++
++/* This is a wrapper function for code which might elicit an
++ arithmetic exception. That code should be passed in as a function
++ pointer FN, and one argument DATA. DATA is usually a struct which
++ contains the real input and output for function FN. This function
++ returns 0 (failure) if longjmp was called (i.e. an exception
++ occured.) It returns 1 (success) otherwise. */
++
++int
++do_float_handler (fn, data)
++ void (*fn) PROTO ((PTR));
++ PTR data;
++{
++ jmp_buf buf;
++
++ if (setjmp (buf))
++ {
++ /* We got here via longjmp() caused by an exception in function fn() */
++ set_float_handler (NULL);
++ return 0;
++ }
++
++ set_float_handler (buf);
++ (*fn)(data);
++ set_float_handler (NULL);
++ return 1;
++}
++
++/* Specify, in HANDLER, where to longjmp to when a floating arithmetic
++ error happens, pushing the previous specification into OLD_HANDLER.
++ Return an indication of whether there was a previous handler in effect. */
++
++int
++push_float_handler (handler, old_handler)
++ jmp_buf handler, old_handler;
++{
++ int was_handled = float_handled;
++
++ float_handled = 1;
++ if (was_handled)
++ memcpy ((char *) old_handler, (char *) float_handler,
++ sizeof (float_handler));
++
++ memcpy ((char *) float_handler, (char *) handler, sizeof (float_handler));
++ return was_handled;
++}
++
++/* Restore the previous specification of whether and where to longjmp to
++ when a floating arithmetic error happens. */
++
++void
++pop_float_handler (handled, handler)
++ int handled;
++ jmp_buf handler;
++{
++ float_handled = handled;
++ if (handled)
++ bcopy ((char *) handler, (char *) float_handler, sizeof (float_handler));
++}
++
++/* Handler for SIGPIPE. */
++
++static void
++pipe_closed (signo)
++ /* If this is missing, some compilers complain. */
++ int signo ATTRIBUTE_UNUSED;
++{
++ fatal ("output pipe has been closed");
++}
++
++/* Strip off a legitimate source ending from the input string NAME of
++ length LEN. Rather than having to know the names used by all of
++ our front ends, we strip off an ending of a period followed by
++ up to five characters. (Java uses ".class".) */
++
++void
++strip_off_ending (name, len)
++ char *name;
++ int len;
++{
++ int i;
++ for (i = 2; i < 6 && len > i; i++)
++ {
++ if (name[len - i] == '.')
++ {
++ name[len - i] = '\0';
++ break;
++ }
++ }
++}
++
++/* Output a quoted string. */
++
++void
++output_quoted_string (asm_file, string)
++ FILE *asm_file;
++ const char *string;
++{
++#ifdef OUTPUT_QUOTED_STRING
++ OUTPUT_QUOTED_STRING (asm_file, string);
++#else
++ char c;
++
++ putc ('\"', asm_file);
++ while ((c = *string++) != 0)
++ {
++ if (c == '\"' || c == '\\')
++ putc ('\\', asm_file);
++ putc (c, asm_file);
++ }
++ putc ('\"', asm_file);
++#endif
++}
++
++/* Output a file name in the form wanted by System V. */
++
++void
++output_file_directive (asm_file, input_name)
++ FILE *asm_file;
++ const char *input_name;
++{
++const char *na;
++
++ if ( flag_keep_file_path) /* leave the input_name unchanged */
++ na = input_name;
++ else /* strip leadin path from input_name - default behaviour */
++ {
++ int len = strlen (input_name);
++ na = input_name + len;
++
++ /* NA gets INPUT_NAME sans directory names. */
++ while (na > input_name)
++ {
++ if (na[-1] == '/')
++ break;
++#ifdef DIR_SEPARATOR
++ if (na[-1] == DIR_SEPARATOR)
++ break;
++#endif
++ na--;
++ }
++ }
++
++#ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
++ ASM_OUTPUT_MAIN_SOURCE_FILENAME (asm_file, na);
++#else
++#ifdef ASM_OUTPUT_SOURCE_FILENAME
++ ASM_OUTPUT_SOURCE_FILENAME (asm_file, na);
++#else
++ fprintf (asm_file, "\t.file\t");
++ output_quoted_string (asm_file, na);
++ fputc ('\n', asm_file);
++#endif
++#endif
++}
++
++#ifdef ASM_IDENTIFY_LANGUAGE
++/* Routine to build language identifier for object file. */
++static void
++output_lang_identify (asm_out_file)
++ FILE *asm_out_file;
++{
++ int len = strlen (lang_identify ()) + sizeof ("__gnu_compiled_") + 1;
++ char *s = (char *) alloca (len);
++ sprintf (s, "__gnu_compiled_%s", lang_identify ());
++ ASM_OUTPUT_LABEL (asm_out_file, s);
++}
++#endif
++
++/* Routine to open a dump file. */
++static void
++open_dump_file (suffix, function_name)
++ const char *suffix;
++ const char *function_name;
++{
++ char *dumpname;
++
++ TIMEVAR
++ (dump_time,
++ {
++ dumpname = (char *) xmalloc (strlen (dump_base_name) + strlen (suffix) + 1);
++
++ if (rtl_dump_file != NULL)
++ fclose (rtl_dump_file);
++
++ strcpy (dumpname, dump_base_name);
++ strcat (dumpname, suffix);
++
++ rtl_dump_file = fopen (dumpname, "a");
++
++ if (rtl_dump_file == NULL)
++ pfatal_with_name (dumpname);
++
++ free (dumpname);
++
++ if (function_name)
++ fprintf (rtl_dump_file, "\n;; Function %s\n\n", function_name);
++ });
++
++ return;
++}
++
++/* Routine to close a dump file. */
++static void
++close_dump_file (func, insns)
++ void (*func) PROTO ((FILE *, rtx));
++ rtx insns;
++{
++ TIMEVAR
++ (dump_time,
++ {
++ if (func)
++ func (rtl_dump_file, insns);
++
++ fflush (rtl_dump_file);
++ fclose (rtl_dump_file);
++
++ rtl_dump_file = NULL;
++ });
++
++ return;
++}
++
++/* Routine to dump rtl into a file. */
++static void
++dump_rtl (suffix, decl, func, insns)
++ const char *suffix;
++ tree decl;
++ void (*func) PROTO ((FILE *, rtx));
++ rtx insns;
++{
++ open_dump_file (suffix, decl_printable_name (decl, 2));
++ close_dump_file (func, insns);
++}
++
++/* Routine to empty a dump file. */
++static void
++clean_dump_file (suffix)
++ const char *suffix;
++{
++ char *dumpname;
++
++ dumpname = (char *) xmalloc (strlen (dump_base_name) + strlen (suffix) + 1);
++
++ strcpy (dumpname, dump_base_name);
++ strcat (dumpname, suffix);
++
++ rtl_dump_file = fopen (dumpname, "w");
++
++ if (rtl_dump_file == NULL)
++ pfatal_with_name (dumpname);
++
++ free (dumpname);
++
++ fclose (rtl_dump_file);
++ rtl_dump_file = NULL;
++
++ return;
++}
++
++/* Do any final processing required for the declarations in VEC, of
++ which there are LEN. We write out inline functions and variables
++ that have been deferred until this point, but which are required.
++ Returns non-zero if anything was put out. */
++int
++wrapup_global_declarations (vec, len)
++ tree *vec;
++ int len;
++{
++ tree decl;
++ int i;
++ int reconsider;
++ int output_something = 0;
++
++ for (i = 0; i < len; i++)
++ {
++ decl = vec[i];
++
++ /* We're not deferring this any longer. */
++ DECL_DEFER_OUTPUT (decl) = 0;
++
++ if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0
++ && incomplete_decl_finalize_hook != 0)
++ (*incomplete_decl_finalize_hook) (decl);
++ }
++
++ /* Now emit any global variables or functions that we have been
++ putting off. We need to loop in case one of the things emitted
++ here references another one which comes earlier in the list. */
++ do
++ {
++ reconsider = 0;
++ for (i = 0; i < len; i++)
++ {
++ decl = vec[i];
++
++ if (TREE_ASM_WRITTEN (decl) || DECL_EXTERNAL (decl))
++ continue;
++
++ /* Don't write out static consts, unless we still need them.
++
++ We also keep static consts if not optimizing (for debugging),
++ unless the user specified -fno-keep-static-consts.
++ ??? They might be better written into the debug information.
++ This is possible when using DWARF.
++
++ A language processor that wants static constants to be always
++ written out (even if it is not used) is responsible for
++ calling rest_of_decl_compilation itself. E.g. the C front-end
++ calls rest_of_decl_compilation from finish_decl.
++ One motivation for this is that is conventional in some
++ environments to write things like:
++ static const char rcsid[] = "... version string ...";
++ intending to force the string to be in the executable.
++
++ A language processor that would prefer to have unneeded
++ static constants "optimized away" would just defer writing
++ them out until here. E.g. C++ does this, because static
++ constants are often defined in header files.
++
++ ??? A tempting alternative (for both C and C++) would be
++ to force a constant to be written if and only if it is
++ defined in a main file, as opposed to an include file. */
++
++ if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)
++ && (! TREE_READONLY (decl)
++ || TREE_PUBLIC (decl)
++ || (!optimize && flag_keep_static_consts)
++ || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
++ {
++ reconsider = 1;
++ rest_of_decl_compilation (decl, NULL_PTR, 1, 1);
++ }
++
++ if (TREE_CODE (decl) == FUNCTION_DECL
++ && DECL_INITIAL (decl) != 0
++ && DECL_SAVED_INSNS (decl) != 0
++ && (flag_keep_inline_functions
++ || (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
++ || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
++ {
++ reconsider = 1;
++ temporary_allocation ();
++ output_inline_function (decl);
++ permanent_allocation (1);
++ }
++ }
++
++ if (reconsider)
++ output_something = 1;
++ }
++ while (reconsider);
++
++ return output_something;
++}
++
++/* Issue appropriate warnings for the global declarations in VEC (of
++ which there are LEN). Output debugging information for them. */
++void
++check_global_declarations (vec, len)
++ tree *vec;
++ int len;
++{
++ tree decl;
++ int i;
++
++ for (i = 0; i < len; i++)
++ {
++ decl = vec[i];
++
++ if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)
++ && ! TREE_ASM_WRITTEN (decl))
++ /* Cancel the RTL for this decl so that, if debugging info
++ output for global variables is still to come,
++ this one will be omitted. */
++ DECL_RTL (decl) = NULL;
++
++ /* Warn about any function
++ declared static but not defined.
++ We don't warn about variables,
++ because many programs have static variables
++ that exist only to get some text into the object file. */
++ if (TREE_CODE (decl) == FUNCTION_DECL
++ && (warn_unused
++ || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
++ && DECL_INITIAL (decl) == 0
++ && DECL_EXTERNAL (decl)
++ && ! DECL_ARTIFICIAL (decl)
++ && ! TREE_PUBLIC (decl))
++ {
++ if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
++ pedwarn_with_decl (decl,
++ "`%s' used but never defined");
++ else
++ warning_with_decl (decl,
++ "`%s' declared `static' but never defined");
++ /* This symbol is effectively an "extern" declaration now. */
++ TREE_PUBLIC (decl) = 1;
++ assemble_external (decl);
++ }
++
++ /* Warn about static fns or vars defined but not used,
++ but not about inline functions or static consts
++ since defining those in header files is normal practice. */
++ if (warn_unused
++ && ((TREE_CODE (decl) == FUNCTION_DECL && ! DECL_INLINE (decl))
++ || (TREE_CODE (decl) == VAR_DECL && ! TREE_READONLY (decl)))
++ && ! DECL_IN_SYSTEM_HEADER (decl)
++ && ! DECL_EXTERNAL (decl)
++ && ! TREE_PUBLIC (decl)
++ && ! TREE_USED (decl)
++ && (TREE_CODE (decl) == FUNCTION_DECL || ! DECL_REGISTER (decl))
++ /* The TREE_USED bit for file-scope decls
++ is kept in the identifier, to handle multiple
++ external decls in different scopes. */
++ && ! TREE_USED (DECL_NAME (decl)))
++ warning_with_decl (decl, "`%s' defined but not used");
++
++#ifdef SDB_DEBUGGING_INFO
++ /* The COFF linker can move initialized global vars to the end.
++ And that can screw up the symbol ordering.
++ By putting the symbols in that order to begin with,
++ we avoid a problem. mcsun!unido!fauern!tumuc!pes@uunet.uu.net. */
++ if (write_symbols == SDB_DEBUG && TREE_CODE (decl) == VAR_DECL
++ && TREE_PUBLIC (decl) && DECL_INITIAL (decl)
++ && ! DECL_EXTERNAL (decl)
++ && DECL_RTL (decl) != 0)
++ TIMEVAR (symout_time, sdbout_symbol (decl, 0));
++
++ /* Output COFF information for non-global
++ file-scope initialized variables. */
++ if (write_symbols == SDB_DEBUG
++ && TREE_CODE (decl) == VAR_DECL
++ && DECL_INITIAL (decl)
++ && ! DECL_EXTERNAL (decl)
++ && DECL_RTL (decl) != 0
++ && GET_CODE (DECL_RTL (decl)) == MEM)
++ TIMEVAR (symout_time, sdbout_toplevel_data (decl));
++#endif /* SDB_DEBUGGING_INFO */
++#ifdef DWARF_DEBUGGING_INFO
++ /* Output DWARF information for file-scope tentative data object
++ declarations, file-scope (extern) function declarations (which
++ had no corresponding body) and file-scope tagged type declarations
++ and definitions which have not yet been forced out. */
++
++ if (write_symbols == DWARF_DEBUG
++ && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)))
++ TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 1));
++#endif
++#ifdef DWARF2_DEBUGGING_INFO
++ /* Output DWARF2 information for file-scope tentative data object
++ declarations, file-scope (extern) function declarations (which
++ had no corresponding body) and file-scope tagged type declarations
++ and definitions which have not yet been forced out. */
++
++ if (write_symbols == DWARF2_DEBUG
++ && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)))
++ TIMEVAR (symout_time, dwarf2out_decl (decl));
++#endif
++ }
++}
++
++/* Compile an entire file of output from cpp, named NAME.
++ Write a file of assembly output and various debugging dumps. */
++
++static void
++compile_file (name)
++ char *name;
++{
++ tree globals;
++ int start_time;
++
++ int name_specified = name != 0;
++
++ if (dump_base_name == 0)
++ dump_base_name = name ? name : "gccdump";
++
++ parse_time = 0;
++ varconst_time = 0;
++ integration_time = 0;
++ jump_time = 0;
++ cse_time = 0;
++ gcse_time = 0;
++ loop_time = 0;
++ cse2_time = 0;
++ branch_prob_time = 0;
++ flow_time = 0;
++ combine_time = 0;
++ regmove_time = 0;
++ sched_time = 0;
++ local_alloc_time = 0;
++ global_alloc_time = 0;
++ flow2_time = 0;
++ sched2_time = 0;
++#ifdef DELAY_SLOTS
++ dbr_sched_time = 0;
++#endif
++ shorten_branch_time = 0;
++ stack_reg_time = 0;
++ final_time = 0;
++ symout_time = 0;
++ dump_time = 0;
++
++ /* Initialize data in various passes. */
++
++ init_obstacks ();
++ init_tree_codes ();
++ name = init_parse (name);
++ init_rtl ();
++ init_emit_once (debug_info_level == DINFO_LEVEL_NORMAL
++ || debug_info_level == DINFO_LEVEL_VERBOSE
++ || flag_test_coverage);
++ init_regs ();
++ init_decl_processing ();
++ init_optabs ();
++ init_stmt ();
++ init_expmed ();
++ init_expr_once ();
++ init_loop ();
++ init_reload ();
++ init_alias_once ();
++
++ if (flag_caller_saves)
++ init_caller_save ();
++
++ /* If auxiliary info generation is desired, open the output file.
++ This goes in the same directory as the source file--unlike
++ all the other output files. */
++ if (flag_gen_aux_info)
++ {
++ aux_info_file = fopen (aux_info_file_name, "w");
++ if (aux_info_file == 0)
++ pfatal_with_name (aux_info_file_name);
++ }
++
++ /* Clear the dump files. */
++ if (rtl_dump)
++ clean_dump_file (".rtl");
++ if (jump_opt_dump)
++ {
++ clean_dump_file (".jump");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".jump");
++ }
++ if (addressof_dump)
++ {
++ clean_dump_file (".addressof");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".addressof");
++ }
++ if (cse_dump)
++ {
++ clean_dump_file (".cse");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".cse");
++ }
++ if (loop_dump)
++ {
++ clean_dump_file (".loop");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".loop");
++ }
++ if (cse2_dump)
++ {
++ clean_dump_file (".cse2");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".cse2");
++ }
++ if (branch_prob_dump)
++ {
++ clean_dump_file (".bp");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".bp");
++ }
++ if (flow_dump)
++ {
++ clean_dump_file (".flow");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".flow");
++ }
++ if (combine_dump)
++ {
++ clean_dump_file (".combine");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".combine");
++ }
++ if (regmove_dump)
++ {
++ clean_dump_file (".regmove");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".regmove");
++ }
++ if (sched_dump)
++ {
++ clean_dump_file (".sched");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".sched");
++ }
++ if (local_reg_dump)
++ {
++ clean_dump_file (".lreg");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".lreg");
++ }
++ if (global_reg_dump)
++ {
++ clean_dump_file (".greg");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".greg");
++ }
++ if (flow2_dump)
++ {
++ clean_dump_file (".flow2");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".flow2");
++ }
++ if (sched2_dump)
++ {
++ clean_dump_file (".sched2");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".sched2");
++ }
++ if (jump2_opt_dump)
++ {
++ clean_dump_file (".jump2");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".jump2");
++ }
++#ifdef DELAY_SLOTS
++ if (dbr_sched_dump)
++ {
++ clean_dump_file (".dbr");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".dbr");
++ }
++#endif
++ if (gcse_dump)
++ {
++ clean_dump_file (".gcse");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".gcse");
++ }
++#ifdef STACK_REGS
++ if (stack_reg_dump)
++ {
++ clean_dump_file (".stack");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".stack");
++ }
++#endif
++#ifdef MACHINE_DEPENDENT_REORG
++ if (mach_dep_reorg_dump)
++ {
++ clean_dump_file (".mach");
++ if (graph_dump_format != no_graph)
++ clean_graph_dump_file (dump_base_name, ".mach");
++ }
++#endif
++
++ /* Open assembler code output file. */
++
++ if (flag_syntax_only)
++ asm_out_file = NULL;
++ else
++ {
++ if (! name_specified && asm_file_name == 0)
++ asm_out_file = stdout;
++ else
++ {
++ int len = strlen (dump_base_name);
++ register char *dumpname = (char *) xmalloc (len + 6);
++ strcpy (dumpname, dump_base_name);
++ strip_off_ending (dumpname, len);
++ strcat (dumpname, ".s");
++ if (asm_file_name == 0)
++ {
++ asm_file_name = (char *) xmalloc (strlen (dumpname) + 1);
++ strcpy (asm_file_name, dumpname);
++ }
++ if (!strcmp (asm_file_name, "-"))
++ asm_out_file = stdout;
++ else
++ asm_out_file = fopen (asm_file_name, "w");
++ if (asm_out_file == 0)
++ pfatal_with_name (asm_file_name);
++ }
++
++#ifdef IO_BUFFER_SIZE
++ setvbuf (asm_out_file, (char *) xmalloc (IO_BUFFER_SIZE),
++ _IOFBF, IO_BUFFER_SIZE);
++#endif
++ }
++
++ input_filename = name;
++
++ /* Put an entry on the input file stack for the main input file. */
++ input_file_stack
++ = (struct file_stack *) xmalloc (sizeof (struct file_stack));
++ input_file_stack->next = 0;
++ input_file_stack->name = input_filename;
++
++ /* Perform language-specific initialization.
++ This may set main_input_filename. */
++ lang_init ();
++
++ /* If the input doesn't start with a #line, use the input name
++ as the official input file name. */
++ if (main_input_filename == 0)
++ main_input_filename = name;
++
++ if (flag_syntax_only)
++ {
++ write_symbols = NO_DEBUG;
++ profile_flag = 0;
++ profile_block_flag = 0;
++ }
++ else
++ {
++ ASM_FILE_START (asm_out_file);
++
++#ifdef ASM_COMMENT_START
++ if (flag_verbose_asm)
++ {
++ /* Print the list of options in effect. */
++ print_version (asm_out_file, ASM_COMMENT_START);
++ print_switch_values (asm_out_file, 0, MAX_LINE,
++ ASM_COMMENT_START, " ", "\n");
++ /* Add a blank line here so it appears in assembler output but not
++ screen output. */
++ fprintf (asm_out_file, "\n");
++ }
++#endif
++
++ /* Output something to inform GDB that this compilation was by GCC. */
++#ifndef ASM_IDENTIFY_GCC
++ fprintf (asm_out_file, "gcc2_compiled.:\n");
++#else
++ ASM_IDENTIFY_GCC (asm_out_file);
++#endif
++
++ /* Output something to identify which front-end produced this file. */
++#ifdef ASM_IDENTIFY_LANGUAGE
++ ASM_IDENTIFY_LANGUAGE (asm_out_file);
++#endif
++ } /* ! flag_syntax_only */
++
++#ifndef ASM_OUTPUT_SECTION_NAME
++ if (flag_function_sections)
++ {
++ warning ("-ffunction-sections not supported for this target.");
++ flag_function_sections = 0;
++ }
++ if (flag_data_sections)
++ {
++ warning ("-fdata-sections not supported for this target.");
++ flag_data_sections = 0;
++ }
++#endif
++
++ if (flag_function_sections
++ && (profile_flag || profile_block_flag))
++ {
++ warning ("-ffunction-sections disabled; it makes profiling impossible.");
++ flag_function_sections = 0;
++ }
++
++#ifndef OBJECT_FORMAT_ELF
++ if (flag_function_sections && write_symbols != NO_DEBUG)
++ warning ("-ffunction-sections may affect debugging on some targets.");
++#endif
++
++ /* ??? Note: There used to be a conditional here
++ to call assemble_zeros without fail if DBX_DEBUGGING_INFO is defined.
++ This was to guarantee separation between gcc_compiled. and
++ the first function, for the sake of dbx on Suns.
++ However, having the extra zero here confused the Emacs
++ code for unexec, and might confuse other programs too.
++ Therefore, I took out that change.
++ In future versions we should find another way to solve
++ that dbx problem. -- rms, 23 May 93. */
++
++ /* Don't let the first function fall at the same address
++ as gcc_compiled., if profiling. */
++ if (profile_flag || profile_block_flag)
++ {
++ /* It's best if we can write a nop here since some
++ assemblers don't tolerate zeros in the text section. */
++ if (insn_template[CODE_FOR_nop] != 0)
++ output_asm_insn (insn_template[CODE_FOR_nop], NULL_PTR);
++ else
++ assemble_zeros (UNITS_PER_WORD);
++ }
++
++ /* If dbx symbol table desired, initialize writing it
++ and output the predefined types. */
++#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
++ if (write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG)
++ TIMEVAR (symout_time, dbxout_init (asm_out_file, main_input_filename,
++ getdecls ()));
++#endif
++#ifdef SDB_DEBUGGING_INFO
++ if (write_symbols == SDB_DEBUG)
++ TIMEVAR (symout_time, sdbout_init (asm_out_file, main_input_filename,
++ getdecls ()));
++#endif
++#ifdef DWARF_DEBUGGING_INFO
++ if (write_symbols == DWARF_DEBUG)
++ TIMEVAR (symout_time, dwarfout_init (asm_out_file, main_input_filename));
++#endif
++#ifdef DWARF2_UNWIND_INFO
++ if (dwarf2out_do_frame ())
++ dwarf2out_frame_init ();
++#endif
++#ifdef DWARF2_DEBUGGING_INFO
++ if (write_symbols == DWARF2_DEBUG)
++ TIMEVAR (symout_time, dwarf2out_init (asm_out_file, main_input_filename));
++#endif
++
++ /* Initialize yet another pass. */
++
++ init_final (main_input_filename);
++ init_branch_prob (dump_base_name);
++
++ start_time = get_run_time ();
++
++ /* Call the parser, which parses the entire file
++ (calling rest_of_compilation for each function). */
++
++ if (yyparse () != 0)
++ {
++ if (errorcount == 0)
++ notice ("Errors detected in input file (your bison.simple is out of date)\n");
++
++ /* In case there were missing closebraces,
++ get us back to the global binding level. */
++ while (! global_bindings_p ())
++ poplevel (0, 0, 0);
++ }
++
++ /* Compilation is now finished except for writing
++ what's left of the symbol table output. */
++
++ parse_time += get_run_time () - start_time;
++
++ parse_time -= integration_time;
++ parse_time -= varconst_time;
++
++ if (flag_syntax_only)
++ goto finish_syntax;
++
++ globals = getdecls ();
++
++ /* Really define vars that have had only a tentative definition.
++ Really output inline functions that must actually be callable
++ and have not been output so far. */
++
++ {
++ int len = list_length (globals);
++ tree *vec = (tree *) alloca (sizeof (tree) * len);
++ int i;
++ tree decl;
++
++ /* Process the decls in reverse order--earliest first.
++ Put them into VEC from back to front, then take out from front. */
++
++ for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
++ vec[len - i - 1] = decl;
++
++ wrapup_global_declarations (vec, len);
++
++ /* This must occur after the loop to output deferred functions. Else
++ the profiler initializer would not be emitted if all the functions
++ in this compilation unit were deferred.
++
++ output_func_start_profiler can not cause any additional functions or
++ data to need to be output, so it need not be in the deferred function
++ loop above. */
++ output_func_start_profiler ();
++
++ /* Now that all possible functions have been output, we can dump
++ the exception table. */
++
++ output_exception_table ();
++
++ check_global_declarations (vec, len);
++ }
++
++ /* Write out any pending weak symbol declarations. */
++
++ weak_finish ();
++
++ /* Do dbx symbols */
++#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
++ if (write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG)
++ TIMEVAR (symout_time,
++ {
++ dbxout_finish (asm_out_file, main_input_filename);
++ });
++#endif
++
++#ifdef DWARF_DEBUGGING_INFO
++ if (write_symbols == DWARF_DEBUG)
++ TIMEVAR (symout_time,
++ {
++ dwarfout_finish ();
++ });
++#endif
++
++#ifdef DWARF2_UNWIND_INFO
++ if (dwarf2out_do_frame ())
++ dwarf2out_frame_finish ();
++#endif
++
++#ifdef DWARF2_DEBUGGING_INFO
++ if (write_symbols == DWARF2_DEBUG)
++ TIMEVAR (symout_time,
++ {
++ dwarf2out_finish ();
++ });
++#endif
++
++ /* Output some stuff at end of file if nec. */
++
++ end_final (dump_base_name);
++
++ if (branch_prob_dump)
++ open_dump_file (".bp", NULL);
++
++ TIMEVAR (dump_time, end_branch_prob (rtl_dump_file));
++
++ if (branch_prob_dump)
++ close_dump_file (NULL, NULL_RTX);
++
++#ifdef ASM_FILE_END
++ ASM_FILE_END (asm_out_file);
++#endif
++
++
++ /* Language-specific end of compilation actions. */
++ finish_syntax:
++ lang_finish ();
++
++ /* Close the dump files. */
++
++ if (flag_gen_aux_info)
++ {
++ fclose (aux_info_file);
++ if (errorcount)
++ unlink (aux_info_file_name);
++ }
++
++ if (combine_dump)
++ {
++ open_dump_file (".combine", NULL);
++ TIMEVAR (dump_time, dump_combine_total_stats (rtl_dump_file));
++ close_dump_file (NULL, NULL_RTX);
++ }
++
++ /* Close non-debugging input and output files. Take special care to note
++ whether fclose returns an error, since the pages might still be on the
++ buffer chain while the file is open. */
++
++ finish_parse ();
++
++ if (! flag_syntax_only
++ && (ferror (asm_out_file) != 0 || fclose (asm_out_file) != 0))
++ fatal_io_error (asm_file_name);
++
++ /* Do whatever is necessary to finish printing the graphs. */
++ if (graph_dump_format != no_graph)
++ {
++ if (jump_opt_dump)
++ finish_graph_dump_file (dump_base_name, ".jump");
++ if (addressof_dump)
++ finish_graph_dump_file (dump_base_name, ".addressof");
++ if (cse_dump)
++ finish_graph_dump_file (dump_base_name, ".cse");
++ if (loop_dump)
++ finish_graph_dump_file (dump_base_name, ".loop");
++ if (cse2_dump)
++ finish_graph_dump_file (dump_base_name, ".cse2");
++ if (branch_prob_dump)
++ finish_graph_dump_file (dump_base_name, ".bp");
++ if (flow_dump)
++ finish_graph_dump_file (dump_base_name, ".flow");
++ if (combine_dump)
++ finish_graph_dump_file (dump_base_name, ".combine");
++ if (regmove_dump)
++ finish_graph_dump_file (dump_base_name, ".regmove");
++ if (sched_dump)
++ finish_graph_dump_file (dump_base_name, ".sched");
++ if (local_reg_dump)
++ finish_graph_dump_file (dump_base_name, ".lreg");
++ if (global_reg_dump)
++ finish_graph_dump_file (dump_base_name, ".greg");
++ if (flow2_dump)
++ finish_graph_dump_file (dump_base_name, ".flow2");
++ if (sched2_dump)
++ finish_graph_dump_file (dump_base_name, ".sched2");
++ if (jump2_opt_dump)
++ finish_graph_dump_file (dump_base_name, ".jump2");
++#ifdef DELAY_SLOTS
++ if (dbr_sched_dump)
++ finish_graph_dump_file (dump_base_name, ".dbr");
++#endif
++ if (gcse_dump)
++ finish_graph_dump_file (dump_base_name, ".gcse");
++#ifdef STACK_REGS
++ if (stack_reg_dump)
++ finish_graph_dump_file (dump_base_name, ".stack");
++#endif
++#ifdef MACHINE_DEPENDENT_REORG
++ if (mach_dep_reorg_dump)
++ finish_graph_dump_file (dump_base_name, ".mach");
++#endif
++ }
++
++ /* Free up memory for the benefit of leak detectors. */
++ free_reg_info ();
++
++ /* Print the times. */
++
++ if (! quiet_flag)
++ {
++ fprintf (stderr,"\n");
++ print_time ("parse", parse_time);
++
++ print_time ("integration", integration_time);
++ print_time ("jump", jump_time);
++ print_time ("cse", cse_time);
++ print_time ("gcse", gcse_time);
++ print_time ("loop", loop_time);
++ print_time ("cse2", cse2_time);
++ print_time ("branch-prob", branch_prob_time);
++ print_time ("flow", flow_time);
++ print_time ("combine", combine_time);
++ print_time ("regmove", regmove_time);
++ print_time ("sched", sched_time);
++ print_time ("local-alloc", local_alloc_time);
++ print_time ("global-alloc", global_alloc_time);
++ print_time ("flow2", flow2_time);
++ print_time ("sched2", sched2_time);
++#ifdef DELAY_SLOTS
++ print_time ("dbranch", dbr_sched_time);
++#endif
++ print_time ("shorten-branch", shorten_branch_time);
++ print_time ("stack-reg", stack_reg_time);
++ print_time ("final", final_time);
++ print_time ("varconst", varconst_time);
++ print_time ("symout", symout_time);
++ print_time ("dump", dump_time);
++ }
++}
++
++/* This is called from various places for FUNCTION_DECL, VAR_DECL,
++ and TYPE_DECL nodes.
++
++ This does nothing for local (non-static) variables.
++ Otherwise, it sets up the RTL and outputs any assembler code
++ (label definition, storage allocation and initialization).
++
++ DECL is the declaration. If ASMSPEC is nonzero, it specifies
++ the assembler symbol name to be used. TOP_LEVEL is nonzero
++ if this declaration is not within a function. */
++
++void
++rest_of_decl_compilation (decl, asmspec, top_level, at_end)
++ tree decl;
++ const char *asmspec;
++ int top_level;
++ int at_end;
++{
++ /* Declarations of variables, and of functions defined elsewhere. */
++
++/* The most obvious approach, to put an #ifndef around where
++ this macro is used, doesn't work since it's inside a macro call. */
++#ifndef ASM_FINISH_DECLARE_OBJECT
++#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP, END)
++#endif
++
++ /* Forward declarations for nested functions are not "external",
++ but we need to treat them as if they were. */
++ if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)
++ || TREE_CODE (decl) == FUNCTION_DECL)
++ TIMEVAR (varconst_time,
++ {
++ make_decl_rtl (decl, asmspec, top_level);
++ /* Initialized extern variable exists to be replaced
++ with its value, or represents something that will be
++ output in another file. */
++ if (! (TREE_CODE (decl) == VAR_DECL
++ && DECL_EXTERNAL (decl) && TREE_READONLY (decl)
++ && DECL_INITIAL (decl) != 0
++ && DECL_INITIAL (decl) != error_mark_node))
++ /* Don't output anything
++ when a tentative file-scope definition is seen.
++ But at end of compilation, do output code for them. */
++ if (! (! at_end && top_level
++ && (DECL_INITIAL (decl) == 0
++ || DECL_INITIAL (decl) == error_mark_node)))
++ assemble_variable (decl, top_level, at_end, 0);
++ if (decl == last_assemble_variable_decl)
++ {
++ ASM_FINISH_DECLARE_OBJECT (asm_out_file, decl,
++ top_level, at_end);
++ }
++ });
++ else if (DECL_REGISTER (decl) && asmspec != 0)
++ {
++ if (decode_reg_name (asmspec) >= 0)
++ {
++ DECL_RTL (decl) = 0;
++ make_decl_rtl (decl, asmspec, top_level);
++ }
++ else
++ error ("invalid register name `%s' for register variable", asmspec);
++ }
++#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
++ else if ((write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG)
++ && TREE_CODE (decl) == TYPE_DECL)
++ TIMEVAR (symout_time, dbxout_symbol (decl, 0));
++#endif
++#ifdef SDB_DEBUGGING_INFO
++ else if (write_symbols == SDB_DEBUG && top_level
++ && TREE_CODE (decl) == TYPE_DECL)
++ TIMEVAR (symout_time, sdbout_symbol (decl, 0));
++#endif
++}
++
++/* Called after finishing a record, union or enumeral type. */
++
++void
++rest_of_type_compilation (type, toplev)
++#if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO) || defined (SDB_DEBUGGING_INFO)
++ tree type;
++ int toplev;
++#else
++ tree type ATTRIBUTE_UNUSED;
++ int toplev ATTRIBUTE_UNUSED;
++#endif
++{
++#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
++ if (write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG)
++ TIMEVAR (symout_time, dbxout_symbol (TYPE_STUB_DECL (type), !toplev));
++#endif
++#ifdef SDB_DEBUGGING_INFO
++ if (write_symbols == SDB_DEBUG)
++ TIMEVAR (symout_time, sdbout_symbol (TYPE_STUB_DECL (type), !toplev));
++#endif
++}
++
++/* This is called from finish_function (within yyparse)
++ after each top-level definition is parsed.
++ It is supposed to compile that function or variable
++ and output the assembler code for it.
++ After we return, the tree storage is freed. */
++
++void
++rest_of_compilation (decl)
++ tree decl;
++{
++ register rtx insns;
++ int start_time = get_run_time ();
++ int tem;
++ /* Nonzero if we have saved the original DECL_INITIAL of the function,
++ to be restored after we finish compiling the function
++ (for use when compiling inline calls to this function). */
++ tree saved_block_tree = 0;
++ /* Likewise, for DECL_ARGUMENTS. */
++ tree saved_arguments = 0;
++ int failure = 0;
++ int rebuild_label_notes_after_reload;
++
++ /* If we are reconsidering an inline function
++ at the end of compilation, skip the stuff for making it inline. */
++
++ if (DECL_SAVED_INSNS (decl) == 0)
++ {
++ int inlinable = 0;
++ const char *lose;
++
++ /* If requested, consider whether to make this function inline. */
++ if (DECL_INLINE (decl) || flag_inline_functions)
++ TIMEVAR (integration_time,
++ {
++ lose = function_cannot_inline_p (decl);
++ if (lose || ! optimize)
++ {
++ if (warn_inline && DECL_INLINE (decl))
++ warning_with_decl (decl, lose);
++ DECL_ABSTRACT_ORIGIN (decl) = 0;
++ /* Don't really compile an extern inline function.
++ If we can't make it inline, pretend
++ it was only declared. */
++ if (DECL_EXTERNAL (decl))
++ {
++ DECL_INITIAL (decl) = 0;
++ goto exit_rest_of_compilation;
++ }
++ }
++ else
++ /* ??? Note that this has the effect of making it look
++ like "inline" was specified for a function if we choose
++ to inline it. This isn't quite right, but it's
++ probably not worth the trouble to fix. */
++ inlinable = DECL_INLINE (decl) = 1;
++ });
++
++ insns = get_insns ();
++
++ /* Dump the rtl code if we are dumping rtl. */
++
++ if (rtl_dump)
++ {
++ open_dump_file (".rtl", decl_printable_name (decl, 2));
++
++ if (DECL_SAVED_INSNS (decl))
++ fprintf (rtl_dump_file, ";; (integrable)\n\n");
++
++ close_dump_file (print_rtl, insns);
++ }
++
++ /* If we can, defer compiling inlines until EOF.
++ save_for_inline_copying can be extremely expensive. */
++ if (inlinable && ! decl_function_context (decl))
++ DECL_DEFER_OUTPUT (decl) = 1;
++
++ /* If function is inline, and we don't yet know whether to
++ compile it by itself, defer decision till end of compilation.
++ finish_compilation will call rest_of_compilation again
++ for those functions that need to be output. Also defer those
++ functions that we are supposed to defer. We cannot defer
++ functions containing nested functions since the nested function
++ data is in our non-saved obstack. We cannot defer nested
++ functions for the same reason. */
++
++ /* If this is a nested inline, remove ADDRESSOF now so we can
++ finish compiling ourselves. Otherwise, wait until EOF.
++ We have to do this because the purge_addressof transformation
++ changes the DECL_RTL for many variables, which confuses integrate. */
++ if (inlinable)
++ {
++ if (decl_function_context (decl))
++ purge_addressof (insns);
++ else
++ DECL_DEFER_OUTPUT (decl) = 1;
++ }
++
++ if (! current_function_contains_functions
++ && (DECL_DEFER_OUTPUT (decl)
++ || (DECL_INLINE (decl)
++ && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
++ && ! flag_keep_inline_functions)
++ || DECL_EXTERNAL (decl)))))
++ {
++ DECL_DEFER_OUTPUT (decl) = 1;
++
++ /* If -Wreturn-type, we have to do a bit of compilation.
++ However, if we just fall through we will call
++ save_for_inline_copying() which results in excessive
++ memory use. Instead, we just want to call
++ jump_optimize() to figure out whether or not we can fall
++ off the end of the function; we do the minimum amount of
++ work necessary to make that safe. And, we set optimize
++ to zero to keep jump_optimize from working too hard. */
++ if (warn_return_type)
++ {
++ int saved_optimize = optimize;
++ optimize = 0;
++ find_exception_handler_labels ();
++ jump_optimize (get_insns(), !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES,
++ !JUMP_AFTER_REGSCAN);
++ optimize = saved_optimize;
++ }
++
++#ifdef DWARF_DEBUGGING_INFO
++ /* Generate the DWARF info for the "abstract" instance
++ of a function which we may later generate inlined and/or
++ out-of-line instances of. */
++ if (write_symbols == DWARF_DEBUG)
++ {
++ set_decl_abstract_flags (decl, 1);
++ TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 0));
++ set_decl_abstract_flags (decl, 0);
++ }
++#endif
++#ifdef DWARF2_DEBUGGING_INFO
++ /* Generate the DWARF2 info for the "abstract" instance
++ of a function which we may later generate inlined and/or
++ out-of-line instances of. */
++ if (write_symbols == DWARF2_DEBUG)
++ {
++ set_decl_abstract_flags (decl, 1);
++ TIMEVAR (symout_time, dwarf2out_decl (decl));
++ set_decl_abstract_flags (decl, 0);
++ }
++#endif
++ TIMEVAR (integration_time, save_for_inline_nocopy (decl));
++ RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable;
++ goto exit_rest_of_compilation;
++ }
++
++ /* If we have to compile the function now, save its rtl and subdecls
++ so that its compilation will not affect what others get. */
++ if (inlinable || DECL_DEFER_OUTPUT (decl))
++ {
++#ifdef DWARF_DEBUGGING_INFO
++ /* Generate the DWARF info for the "abstract" instance of
++ a function which we will generate an out-of-line instance
++ of almost immediately (and which we may also later generate
++ various inlined instances of). */
++ if (write_symbols == DWARF_DEBUG)
++ {
++ set_decl_abstract_flags (decl, 1);
++ TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 0));
++ set_decl_abstract_flags (decl, 0);
++ }
++#endif
++#ifdef DWARF2_DEBUGGING_INFO
++ /* Generate the DWARF2 info for the "abstract" instance of
++ a function which we will generate an out-of-line instance
++ of almost immediately (and which we may also later generate
++ various inlined instances of). */
++ if (write_symbols == DWARF2_DEBUG)
++ {
++ set_decl_abstract_flags (decl, 1);
++ TIMEVAR (symout_time, dwarf2out_decl (decl));
++ set_decl_abstract_flags (decl, 0);
++ }
++#endif
++ saved_block_tree = DECL_INITIAL (decl);
++ saved_arguments = DECL_ARGUMENTS (decl);
++ TIMEVAR (integration_time, save_for_inline_copying (decl));
++ RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable;
++ }
++
++ /* If specified extern inline but we aren't inlining it, we are
++ done. This goes for anything that gets here with DECL_EXTERNAL
++ set, not just things with DECL_INLINE. */
++ if (DECL_EXTERNAL (decl))
++ goto exit_rest_of_compilation;
++ }
++
++ if (! DECL_DEFER_OUTPUT (decl))
++ TREE_ASM_WRITTEN (decl) = 1;
++
++ /* Now that integrate will no longer see our rtl, we need not distinguish
++ between the return value of this function and the return value of called
++ functions. */
++ rtx_equal_function_value_matters = 0;
++
++ /* Don't return yet if -Wreturn-type; we need to do jump_optimize. */
++ if ((rtl_dump_and_exit || flag_syntax_only) && !warn_return_type)
++ {
++ goto exit_rest_of_compilation;
++ }
++
++ /* Emit code to get eh context, if needed. */
++ emit_eh_context ();
++
++#ifdef FINALIZE_PIC
++ /* If we are doing position-independent code generation, now
++ is the time to output special prologues and epilogues.
++ We do not want to do this earlier, because it just clutters
++ up inline functions with meaningless insns. */
++ if (flag_pic)
++ FINALIZE_PIC;
++#endif
++
++ /* From now on, allocate rtl in current_obstack, not in saveable_obstack.
++ Note that that may have been done above, in save_for_inline_copying.
++ The call to resume_temporary_allocation near the end of this function
++ goes back to the usual state of affairs. This must be done after
++ we've built up any unwinders for exception handling, and done
++ the FINALIZE_PIC work, if necessary. */
++
++ rtl_in_current_obstack ();
++
++ insns = get_insns ();
++
++ /* Copy any shared structure that should not be shared. */
++
++ unshare_all_rtl (current_function_decl, insns);
++
++#ifdef SETJMP_VIA_SAVE_AREA
++ /* This must be performed before virutal register instantiation. */
++ if (current_function_calls_alloca)
++ optimize_save_area_alloca (insns);
++#endif
++
++ /* Instantiate all virtual registers. */
++
++ instantiate_virtual_regs (current_function_decl, get_insns ());
++
++ /* See if we have allocated stack slots that are not directly addressable.
++ If so, scan all the insns and create explicit address computation
++ for all references to such slots. */
++/* fixup_stack_slots (); */
++
++ /* Find all the EH handlers. */
++ find_exception_handler_labels ();
++
++ /* Always do one jump optimization pass to ensure that JUMP_LABEL fields
++ are initialized and to compute whether control can drop off the end
++ of the function. */
++ TIMEVAR (jump_time, reg_scan (insns, max_reg_num (), 0));
++ TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES,
++ JUMP_AFTER_REGSCAN));
++
++ /* Now is when we stop if -fsyntax-only and -Wreturn-type. */
++ if (rtl_dump_and_exit || flag_syntax_only || DECL_DEFER_OUTPUT (decl))
++ goto exit_rest_of_compilation;
++
++ /* Dump rtl code after jump, if we are doing that. */
++
++ if (jump_opt_dump)
++ dump_rtl (".jump", decl, print_rtl, insns);
++
++ /* Perform common subexpression elimination.
++ Nonzero value from `cse_main' means that jumps were simplified
++ and some code may now be unreachable, so do
++ jump optimization again. */
++
++ if (optimize > 0)
++ {
++ if (cse_dump)
++ open_dump_file (".cse", decl_printable_name (decl, 2));
++
++ TIMEVAR (cse_time, reg_scan (insns, max_reg_num (), 1));
++
++ if (flag_thread_jumps)
++ /* Hacks by tiemann & kenner. */
++ TIMEVAR (jump_time, thread_jumps (insns, max_reg_num (), 1));
++
++ TIMEVAR (cse_time, tem = cse_main (insns, max_reg_num (),
++ 0, rtl_dump_file));
++ if (tem || optimize > 1)
++ TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
++ !JUMP_NOOP_MOVES,
++ !JUMP_AFTER_REGSCAN));
++
++ /* Run this after jump optmizations remove all the unreachable code
++ so that unreachable code will not keep values live. */
++ TIMEVAR (cse_time, delete_trivially_dead_insns (insns, max_reg_num ()));
++
++ /* Dump rtl code after cse, if we are doing that. */
++
++ if (cse_dump)
++ {
++ close_dump_file (print_rtl, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".cse", insns);
++ }
++ }
++
++ purge_addressof (insns);
++ reg_scan (insns, max_reg_num (), 1);
++
++ if (addressof_dump)
++ {
++ dump_rtl (".addressof", decl, print_rtl, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".addressof", insns);
++ }
++
++ /* Perform global cse. */
++
++ if (optimize > 0 && flag_gcse)
++ {
++ if (gcse_dump)
++ open_dump_file (".gcse", IDENTIFIER_POINTER (DECL_NAME (decl)));
++
++ TIMEVAR (gcse_time, tem = gcse_main (insns, rtl_dump_file));
++
++ /* If gcse altered any jumps, rerun jump optimizations to clean
++ things up. */
++ if (tem)
++ {
++ TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
++ !JUMP_NOOP_MOVES,
++ !JUMP_AFTER_REGSCAN));
++ }
++
++ if (gcse_dump)
++ {
++ close_dump_file (print_rtl, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".gcse", insns);
++ }
++ }
++ /* Move constant computations out of loops. */
++
++ if (optimize > 0)
++ {
++ if (loop_dump)
++ open_dump_file (".loop", decl_printable_name (decl, 2));
++
++ TIMEVAR
++ (loop_time,
++ {
++ if (flag_rerun_loop_opt)
++ {
++ /* We only want to perform unrolling once. */
++
++ loop_optimize (insns, rtl_dump_file, 0, 0);
++
++
++ /* The first call to loop_optimize makes some instructions
++ trivially dead. We delete those instructions now in the
++ hope that doing so will make the heuristics in loop work
++ better and possibly speed up compilation. */
++ delete_trivially_dead_insns (insns, max_reg_num ());
++
++ /* The regscan pass is currently necessary as the alias
++ analysis code depends on this information. */
++ reg_scan (insns, max_reg_num (), 1);
++ }
++ loop_optimize (insns, rtl_dump_file, flag_unroll_loops, 1);
++ });
++
++ /* Dump rtl code after loop opt, if we are doing that. */
++
++ if (loop_dump)
++ {
++ close_dump_file (print_rtl, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".loop", insns);
++ }
++ }
++
++ if (optimize > 0)
++ {
++ if (cse2_dump)
++ open_dump_file (".cse2", decl_printable_name (decl, 2));
++
++ if (flag_rerun_cse_after_loop)
++ {
++ /* Running another jump optimization pass before the second
++ cse pass sometimes simplifies the RTL enough to allow
++ the second CSE pass to do a better job. Jump_optimize can change
++ max_reg_num so we must rerun reg_scan afterwards.
++ ??? Rework to not call reg_scan so often. */
++ TIMEVAR (jump_time, reg_scan (insns, max_reg_num (), 0));
++ TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
++ !JUMP_NOOP_MOVES,
++ JUMP_AFTER_REGSCAN));
++
++ TIMEVAR (cse2_time, reg_scan (insns, max_reg_num (), 0));
++ TIMEVAR (cse2_time, tem = cse_main (insns, max_reg_num (),
++ 1, rtl_dump_file));
++ if (tem)
++ TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
++ !JUMP_NOOP_MOVES,
++ !JUMP_AFTER_REGSCAN));
++ }
++
++ if (flag_thread_jumps)
++ {
++ /* This pass of jump threading straightens out code
++ that was kinked by loop optimization. */
++ TIMEVAR (jump_time, reg_scan (insns, max_reg_num (), 0));
++ TIMEVAR (jump_time, thread_jumps (insns, max_reg_num (), 0));
++ }
++
++ /* Dump rtl code after cse, if we are doing that. */
++
++ if (cse2_dump)
++ {
++ close_dump_file (print_rtl, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".cse2", insns);
++ }
++ }
++
++ if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities)
++ {
++ if (branch_prob_dump)
++ open_dump_file (".bp", decl_printable_name (decl, 2));
++
++ TIMEVAR
++ (branch_prob_time,
++ {
++ branch_prob (insns, rtl_dump_file);
++ });
++
++ if (branch_prob_dump)
++ {
++ close_dump_file (print_rtl, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".bp", insns);
++ }
++ }
++
++ /* We are no longer anticipating cse in this function, at least. */
++
++ cse_not_expected = 1;
++
++ /* Now we choose between stupid (pcc-like) register allocation
++ (if we got the -noreg switch and not -opt)
++ and smart register allocation. */
++
++ if (optimize > 0) /* Stupid allocation probably won't work */
++ obey_regdecls = 0; /* if optimizations being done. */
++
++ regclass_init ();
++
++ /* Print function header into flow dump now
++ because doing the flow analysis makes some of the dump. */
++
++ if (flow_dump)
++ open_dump_file (".flow", decl_printable_name (decl, 2));
++
++ if (obey_regdecls)
++ {
++ TIMEVAR (flow_time,
++ {
++ regclass (insns, max_reg_num ());
++ stupid_life_analysis (insns, max_reg_num (),
++ rtl_dump_file);
++ });
++ }
++ else
++ {
++ /* Do control and data flow analysis,
++ and write some of the results to dump file. */
++
++ TIMEVAR
++ (flow_time,
++ {
++ find_basic_blocks (insns, max_reg_num (), rtl_dump_file, 1);
++ life_analysis (insns, max_reg_num (), rtl_dump_file, 1);
++ });
++
++ if (warn_uninitialized)
++ {
++ uninitialized_vars_warning (DECL_INITIAL (decl));
++ setjmp_args_warning ();
++ }
++ }
++
++ /* Dump rtl after flow analysis. */
++
++ if (flow_dump)
++ {
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".flow", insns);
++ }
++
++ /* The first life analysis pass has finished. From now on we can not
++ generate any new pseudos. */
++ no_new_pseudos = 1;
++
++ /* If -opt, try combining insns through substitution. */
++
++ if (optimize > 0)
++ {
++ TIMEVAR (combine_time, combine_instructions (insns, max_reg_num ()));
++
++ /* Dump rtl code after insn combination. */
++
++ if (combine_dump)
++ {
++ dump_rtl (".combine", decl, print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".combine", insns);
++ }
++ }
++
++ /* Register allocation pre-pass, to reduce number of moves
++ necessary for two-address machines. */
++ if (optimize > 0 && (flag_regmove || flag_expensive_optimizations))
++ {
++ if (regmove_dump)
++ open_dump_file (".regmove", decl_printable_name (decl, 2));
++
++ TIMEVAR (regmove_time, regmove_optimize (insns, max_reg_num (),
++ rtl_dump_file));
++
++ if (regmove_dump)
++ {
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".regmove", insns);
++ }
++ }
++
++ /* Print function header into sched dump now
++ because doing the sched analysis makes some of the dump. */
++
++ if (optimize > 0 && flag_schedule_insns)
++ {
++ if (sched_dump)
++ open_dump_file (".sched", decl_printable_name (decl, 2));
++
++ /* Do control and data sched analysis,
++ and write some of the results to dump file. */
++
++ TIMEVAR (sched_time, schedule_insns (rtl_dump_file));
++
++ /* Dump rtl after instruction scheduling. */
++
++ if (sched_dump)
++ {
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".sched", insns);
++ }
++ }
++
++ /* Determine if the current function is a leaf before running reload
++ since this can impact optimizations done by the prologue and
++ epilogue thus changing register elimination offsets. */
++ current_function_is_leaf = leaf_function_p ();
++
++ /* Unless we did stupid register allocation,
++ allocate pseudo-regs that are used only within 1 basic block.
++
++ RUN_JUMP_AFTER_RELOAD records whether or not we need to rerun the
++ jump optimizer after register allocation and reloading are finished. */
++
++ if (!obey_regdecls)
++ TIMEVAR (local_alloc_time,
++ {
++ recompute_reg_usage (insns, ! optimize_size);
++ regclass (insns, max_reg_num ());
++ rebuild_label_notes_after_reload = local_alloc ();
++ });
++ else
++ rebuild_label_notes_after_reload = 0;
++
++ /* Dump rtl code after allocating regs within basic blocks. */
++
++ if (local_reg_dump)
++ {
++ open_dump_file (".lreg", decl_printable_name (decl, 2));
++
++ TIMEVAR (dump_time, dump_flow_info (rtl_dump_file));
++ TIMEVAR (dump_time, dump_local_alloc (rtl_dump_file));
++
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".lreg", insns);
++ }
++
++ if (global_reg_dump)
++ open_dump_file (".greg", decl_printable_name (decl, 2));
++
++ /* Unless we did stupid register allocation,
++ allocate remaining pseudo-regs, then do the reload pass
++ fixing up any insns that are invalid. */
++
++ TIMEVAR (global_alloc_time,
++ {
++ if (!obey_regdecls)
++ failure = global_alloc (rtl_dump_file);
++ else
++ failure = reload (insns, 0, rtl_dump_file);
++ });
++
++
++ if (failure)
++ goto exit_rest_of_compilation;
++
++ /* Do a very simple CSE pass over just the hard registers. */
++ if (optimize > 0)
++ reload_cse_regs (insns);
++
++ /* Register allocation and reloading may have turned an indirect jump into
++ a direct jump. If so, we must rebuild the JUMP_LABEL fields of
++ jumping instructions. */
++ if (rebuild_label_notes_after_reload)
++ TIMEVAR (jump_time, rebuild_jump_labels (insns));
++
++ /* If optimizing and we are performing instruction scheduling after
++ reload, then go ahead and split insns now since we are about to
++ recompute flow information anyway.
++
++ reload_cse_regs may expose more splitting opportunities, expecially
++ for double-word operations. */
++ if (optimize > 0 && flag_schedule_insns_after_reload)
++ {
++ rtx insn;
++
++ for (insn = insns; insn; insn = NEXT_INSN (insn))
++ {
++ rtx last;
++
++ if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
++ continue;
++
++ last = try_split (PATTERN (insn), insn, 1);
++
++ if (last != insn)
++ {
++ PUT_CODE (insn, NOTE);
++ NOTE_SOURCE_FILE (insn) = 0;
++ NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
++ }
++ }
++ }
++
++ if (global_reg_dump)
++ {
++ TIMEVAR (dump_time, dump_global_regs (rtl_dump_file));
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".greg", insns);
++ }
++
++ /* Re-create the death notes which were deleted during reload. */
++ if (flow2_dump)
++ open_dump_file (".flow2", decl_printable_name (decl, 2));
++
++ if (optimize)
++ {
++ TIMEVAR
++ (flow2_time,
++ {
++ find_basic_blocks (insns, max_reg_num (), rtl_dump_file, 1);
++ life_analysis (insns, max_reg_num (), rtl_dump_file, 1);
++ });
++ }
++
++ flow2_completed = 1;
++
++ /* On some machines, the prologue and epilogue code, or parts thereof,
++ can be represented as RTL. Doing so lets us schedule insns between
++ it and the rest of the code and also allows delayed branch
++ scheduling to operate in the epilogue. */
++
++ thread_prologue_and_epilogue_insns (insns);
++
++ if (flow2_dump)
++ {
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".flow2", insns);
++ }
++
++ if (optimize > 0 && flag_schedule_insns_after_reload)
++ {
++ if (sched2_dump)
++ open_dump_file (".sched2", decl_printable_name (decl, 2));
++
++ /* Do control and data sched analysis again,
++ and write some more of the results to dump file. */
++
++ TIMEVAR (sched2_time, schedule_insns (rtl_dump_file));
++
++ /* Dump rtl after post-reorder instruction scheduling. */
++
++ if (sched2_dump)
++ {
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".sched2", insns);
++ }
++ }
++
++#ifdef LEAF_REGISTERS
++ current_function_uses_only_leaf_regs
++ = optimize > 0 && only_leaf_regs_used () && leaf_function_p ();
++#endif
++
++ /* One more attempt to remove jumps to .+1
++ left by dead-store-elimination.
++ Also do cross-jumping this time
++ and delete no-op move insns. */
++
++ if (optimize > 0)
++ {
++ TIMEVAR (jump_time, jump_optimize (insns, JUMP_CROSS_JUMP,
++ JUMP_NOOP_MOVES,
++ !JUMP_AFTER_REGSCAN));
++
++ /* Dump rtl code after jump, if we are doing that. */
++
++ if (jump2_opt_dump)
++ {
++ dump_rtl (".jump2", decl, print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".jump2", insns);
++ }
++ }
++
++ /* If a machine dependent reorganization is needed, call it. */
++#ifdef MACHINE_DEPENDENT_REORG
++ MACHINE_DEPENDENT_REORG (insns);
++
++ if (mach_dep_reorg_dump)
++ {
++ dump_rtl (".mach", decl, print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".mach", insns);
++ }
++#endif
++
++ /* If a scheduling pass for delayed branches is to be done,
++ call the scheduling code. */
++
++#ifdef DELAY_SLOTS
++ if (optimize > 0 && flag_delayed_branch)
++ {
++ if (dbr_sched_dump)
++ open_dump_file (".dbr", decl_printable_name (decl, 2));
++
++ TIMEVAR (dbr_sched_time, dbr_schedule (insns, rtl_dump_file));
++
++ if (dbr_sched_dump)
++ {
++ close_dump_file (print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".dbr", insns);
++ }
++ }
++#endif
++
++ /* Shorten branches. */
++ TIMEVAR (shorten_branch_time,
++ {
++ shorten_branches (get_insns ());
++ });
++
++#ifdef STACK_REGS
++ if (stack_reg_dump)
++ open_dump_file (".stack", decl_printable_name (decl, 2));
++
++ TIMEVAR (stack_reg_time, reg_to_stack (insns, rtl_dump_file));
++
++ if (stack_reg_dump)
++ {
++ dump_rtl (".stack", decl, print_rtl_with_bb, insns);
++ if (graph_dump_format != no_graph)
++ print_rtl_graph_with_bb (dump_base_name, ".stack", insns);
++ }
++#endif
++
++ /* Now turn the rtl into assembler code. */
++
++ TIMEVAR (final_time,
++ {
++ rtx x;
++ char *fnname;
++
++ /* Get the function's name, as described by its RTL.
++ This may be different from the DECL_NAME name used
++ in the source file. */
++
++ x = DECL_RTL (decl);
++ if (GET_CODE (x) != MEM)
++ abort ();
++ x = XEXP (x, 0);
++ if (GET_CODE (x) != SYMBOL_REF)
++ abort ();
++ fnname = XSTR (x, 0);
++
++ assemble_start_function (decl, fnname);
++ final_start_function (insns, asm_out_file, optimize);
++ final (insns, asm_out_file, optimize, 0);
++ final_end_function (insns, asm_out_file, optimize);
++ assemble_end_function (decl, fnname);
++ if (! quiet_flag)
++ fflush (asm_out_file);
++
++ /* Release all memory allocated by flow. */
++ free_basic_block_vars (0);
++
++ /* Release all memory held by regsets now */
++ regset_release_memory ();
++ });
++
++ /* Write DBX symbols if requested */
++
++ /* Note that for those inline functions where we don't initially
++ know for certain that we will be generating an out-of-line copy,
++ the first invocation of this routine (rest_of_compilation) will
++ skip over this code by doing a `goto exit_rest_of_compilation;'.
++ Later on, finish_compilation will call rest_of_compilation again
++ for those inline functions that need to have out-of-line copies
++ generated. During that call, we *will* be routed past here. */
++
++#ifdef DBX_DEBUGGING_INFO
++ if (write_symbols == DBX_DEBUG)
++ TIMEVAR (symout_time, dbxout_function (decl));
++#endif
++
++#ifdef DWARF_DEBUGGING_INFO
++ if (write_symbols == DWARF_DEBUG)
++ TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 0));
++#endif
++
++#ifdef DWARF2_DEBUGGING_INFO
++ if (write_symbols == DWARF2_DEBUG)
++ TIMEVAR (symout_time, dwarf2out_decl (decl));
++#endif
++
++ exit_rest_of_compilation:
++
++ free_bb_mem ();
++
++ /* In case the function was not output,
++ don't leave any temporary anonymous types
++ queued up for sdb output. */
++#ifdef SDB_DEBUGGING_INFO
++ if (write_symbols == SDB_DEBUG)
++ sdbout_types (NULL_TREE);
++#endif
++
++ /* Put back the tree of subblocks and list of arguments
++ from before we copied them.
++ Code generation and the output of debugging info may have modified
++ the copy, but the original is unchanged. */
++
++ if (saved_block_tree != 0)
++ {
++ DECL_INITIAL (decl) = saved_block_tree;
++ DECL_ARGUMENTS (decl) = saved_arguments;
++ DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
++ }
++
++ reload_completed = 0;
++ flow2_completed = 0;
++ no_new_pseudos = 0;
++
++ TIMEVAR (final_time,
++ {
++ /* Clear out the insn_length contents now that they are no
++ longer valid. */
++ init_insn_lengths ();
++
++ /* Clear out the real_constant_chain before some of the rtx's
++ it runs through become garbage. */
++ clear_const_double_mem ();
++
++ /* Cancel the effect of rtl_in_current_obstack. */
++ resume_temporary_allocation ();
++
++ /* Show no temporary slots allocated. */
++ init_temp_slots ();
++ });
++
++ /* Make sure volatile mem refs aren't considered valid operands for
++ arithmetic insns. We must call this here if this is a nested inline
++ function, since the above code leaves us in the init_recog state
++ (from final.c), and the function context push/pop code does not
++ save/restore volatile_ok.
++
++ ??? Maybe it isn't necessary for expand_start_function to call this
++ anymore if we do it here? */
++
++ init_recog_no_volatile ();
++
++ /* The parsing time is all the time spent in yyparse
++ *except* what is spent in this function. */
++
++ parse_time -= get_run_time () - start_time;
++
++ /* Reset global variables. */
++ free_basic_block_vars (0);
++}
++
++static void
++display_help ()
++{
++ int undoc;
++ unsigned long i;
++ const char * lang;
++
++#ifndef USE_CPPLIB
++ printf ("Usage: %s input [switches]\n", progname);
++ printf ("Switches:\n");
++#endif
++ printf (" -ffixed-<register> Mark <register> as being unavailable to the compiler\n");
++ printf (" -fcall-used-<register> Mark <register> as being corrupted by function calls\n");
++ printf (" -fcall-saved-<register> Mark <register> as being preserved across functions\n");
++ printf (" -finline-limit-<number> Limits the size of inlined functions to <number>\n");
++
++ for (i = NUM_ELEM (f_options); i--;)
++ {
++ const char * description = f_options[i].description;
++
++ if (description != NULL && * description != 0)
++ printf (" -f%-21s %s\n",
++ f_options[i].string, description);
++ }
++
++ printf (" -O[number] Set optimisation level to [number]\n");
++ printf (" -Os Optimise for space rather than speed\n");
++ printf (" -pedantic Issue warnings needed by strict compliance to ANSI C\n");
++ printf (" -pedantic-errors Like -pedantic except that errors are produced\n");
++ printf (" -w Suppress warnings\n");
++ printf (" -W Enable extra warnings\n");
++
++ for (i = NUM_ELEM (W_options); i--;)
++ {
++ const char * description = W_options[i].description;
++
++ if (description != NULL && * description != 0)
++ printf (" -W%-21s %s\n",
++ W_options[i].string, description);
++ }
++
++ printf (" -Wid-clash-<num> Warn if 2 identifiers have the same first <num> chars\n");
++ printf (" -Wlarger-than-<number> Warn if an object is larger than <number> bytes\n");
++ printf (" -p Enable function profiling\n");
++#if defined (BLOCK_PROFILER) || defined (FUNCTION_BLOCK_PROFILER)
++ printf (" -a Enable block profiling \n");
++#endif
++#if defined (BLOCK_PROFILER) || defined (FUNCTION_BLOCK_PROFILER) || defined FUNCTION_BLOCK_PROFILER_EXIT
++ printf (" -ax Enable jump profiling \n");
++#endif
++ printf (" -o <file> Place output into <file> \n");
++ printf (" -G <number> Put global and static data smaller than <number>\n");
++ printf (" bytes into a special section (on some targets)\n");
++
++ for (i = NUM_ELEM (debug_args); i--;)
++ {
++ if (debug_args[i].description != NULL)
++ printf (" -%-22s %s\n", debug_args[i].arg, debug_args[i].description);
++ }
++
++ printf (" -aux-info <file> Emit declaration info into <file>.X\n");
++ printf (" -quiet Do not display functions compiled or elapsed time\n");
++ printf (" -version Display the compiler's version\n");
++ printf (" -d[letters] Enable dumps from specific passes of the compiler\n");
++ printf (" -dumpbase <file> Base name to be used for dumps from specific passes\n");
++#if defined HAIFA || defined INSN_SCHEDULING
++ printf (" -sched-verbose-<number> Set the verbosity level of the scheduler\n");
++#endif
++ printf (" --help Display this information\n");
++
++ undoc = 0;
++ lang = "language";
++
++ /* Display descriptions of language specific options.
++ If there is no description, note that there is an undocumented option.
++ If the description is empty, do not display anything. (This allows
++ options to be deliberately undocumented, for whatever reason).
++ If the option string is missing, then this is a marker, indicating
++ that the description string is in fact the name of a language, whose
++ language specific options are to follow. */
++
++ if (NUM_ELEM (documented_lang_options) > 1)
++ {
++ printf ("\nLanguage specific options:\n");
++
++ for (i = 0; i < NUM_ELEM (documented_lang_options); i++)
++ {
++ const char * description = documented_lang_options[i].description;
++ const char * option = documented_lang_options[i].option;
++
++ if (description == NULL)
++ {
++ undoc = 1;
++
++ if (extra_warnings)
++ printf (" %-23.23s [undocumented]\n", option);
++ }
++ else if (* description == 0)
++ continue;
++ else if (option == NULL)
++ {
++ if (undoc)
++ printf
++ ("\nThere are undocumented %s specific options as well.\n",
++ lang);
++ undoc = 0;
++
++ printf ("\n Options for %s:\n", description);
++
++ lang = description;
++ }
++ else
++ printf (" %-23.23s %s\n", option, description);
++ }
++ }
++
++ if (undoc)
++ printf ("\nThere are undocumented %s specific options as well.\n", lang);
++
++ if (NUM_ELEM (target_switches) > 1
++#ifdef TARGET_OPTIONS
++ || NUM_ELEM (target_options) > 1
++#endif
++ )
++ {
++ int doc = 0;
++
++ undoc = 0;
++
++ printf ("\nTarget specific options:\n");
++
++ for (i = NUM_ELEM (target_switches); i--;)
++ {
++ const char * option = target_switches[i].name;
++ const char * description = target_switches[i].description;
++
++ if (option == NULL || * option == 0)
++ continue;
++ else if (description == NULL)
++ {
++ undoc = 1;
++
++ if (extra_warnings)
++ printf (" -m%-21.21s [undocumented]\n", option);
++ }
++ else if (* description != 0)
++ doc += printf (" -m%-21.21s %s\n", option, description);
++ }
++
++#ifdef TARGET_OPTIONS
++ for (i = NUM_ELEM (target_options); i--;)
++ {
++ const char * option = target_options[i].prefix;
++ const char * description = target_options[i].description;
++
++ if (option == NULL || * option == 0)
++ continue;
++ else if (description == NULL)
++ {
++ undoc = 1;
++
++ if (extra_warnings)
++ printf (" -m%-21.21s [undocumented]\n", option);
++ }
++ else if (* description != 0)
++ doc += printf (" -m%-21.21s %s\n", option, description);
++ }
++#endif
++ if (undoc)
++ {
++ if (doc)
++ printf ("\nThere are undocumented target specific options as well.\n");
++ else
++ printf (" They exist, but they are not documented.\n");
++ }
++ }
++}
++
++/* Compare the user specified 'option' with the language
++ specific 'lang_option'. Return true if they match, or
++ if 'option' is a viable prefix of 'lang_option'. */
++
++static int
++check_lang_option (option, lang_option)
++ char * option;
++ char * lang_option;
++{
++ lang_independent_options * indep_options;
++ int len;
++ int numopts;
++ long k;
++ char * space;
++
++ /* Ignore NULL entries. */
++ if (option == NULL || lang_option == NULL)
++ return 0;
++
++ if ((space = strchr (lang_option, ' ')) != NULL)
++ len = space - lang_option;
++ else
++ len = strlen (lang_option);
++
++ /* If they do not match to the first n characters then fail. */
++ if (strncmp (option, lang_option, len) != 0)
++ return 0;
++
++ /* Do not accept a lang option, if it matches a normal -f or -W
++ option. Chill defines a -fpack, but we want to support
++ -fpack-struct. */
++
++ /* An exact match is OK */
++ if ((int) strlen (option) == len)
++ return 1;
++
++ /* If it is not an -f or -W option allow the match */
++ if (option[0] != '-')
++ return 1;
++
++ switch (option[1])
++ {
++ case 'f':
++ indep_options = f_options;
++ numopts = NUM_ELEM (f_options);
++ break;
++ case 'W':
++ indep_options = W_options;
++ numopts = NUM_ELEM (W_options);
++ break;
++ default: return 1;
++ }
++
++ /* The option is a -f or -W option.
++ Skip past the prefix and search for the remainder in the
++ appropriate table of options. */
++ option += 2;
++
++ if (option[0] == 'n' && option[1] == 'o' && option[2] == '-')
++ option += 3;
++
++ for (k = numopts; k--;)
++ {
++ if (!strcmp (option, indep_options[k].string))
++ {
++ /* The option matched a language independent option,
++ do not allow the language specific match. */
++
++ return 0;
++ }
++ }
++
++ /* The option matches the start of the langauge specific option
++ and it is not an exact match for a language independent option. */
++ return 1;
++}
++
++/* Entry point of cc1/c++. Decode command args, then call compile_file.
++ Exit code is 35 if can't open files, 34 if fatal error,
++ 33 if had nonfatal errors, else success. */
++
++int
++main (argc, argv)
++ int argc;
++ char **argv;
++{
++ register int i;
++ char *filename = 0;
++ int flag_print_mem = 0;
++ int version_flag = 0;
++ char *p;
++
++ /* save in case md file wants to emit args as a comment. */
++ save_argc = argc;
++ save_argv = argv;
++
++ p = argv[0] + strlen (argv[0]);
++ while (p != argv[0] && p[-1] != '/'
++#ifdef DIR_SEPARATOR
++ && p[-1] != DIR_SEPARATOR
++#endif
++ )
++ --p;
++ progname = p;
++
++#if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT)
++ /* Get rid of any avoidable limit on stack size. */
++ {
++ struct rlimit rlim;
++
++ /* Set the stack limit huge so that alloca does not fail. */
++ getrlimit (RLIMIT_STACK, &rlim);
++ rlim.rlim_cur = rlim.rlim_max;
++ setrlimit (RLIMIT_STACK, &rlim);
++ }
++#endif
++
++#ifdef HAVE_LC_MESSAGES
++ setlocale (LC_MESSAGES, "");
++#endif
++ (void) bindtextdomain (PACKAGE, localedir);
++ (void) textdomain (PACKAGE);
++
++ signal (SIGFPE, float_signal);
++
++#ifdef SIGPIPE
++ signal (SIGPIPE, pipe_closed);
++#endif
++
++ decl_printable_name = decl_name;
++ lang_expand_expr = (lang_expand_expr_t) do_abort;
++
++ /* Initialize whether `char' is signed. */
++ flag_signed_char = DEFAULT_SIGNED_CHAR;
++#ifdef DEFAULT_SHORT_ENUMS
++ /* Initialize how much space enums occupy, by default. */
++ flag_short_enums = DEFAULT_SHORT_ENUMS;
++#endif
++
++ /* Perform language-specific options intialization. */
++ lang_init_options ();
++
++ /* Scan to see what optimization level has been specified. That will
++ determine the default value of many flags. */
++ for (i = 1; i < argc; i++)
++ {
++ if (!strcmp (argv[i], "-O"))
++ {
++ optimize = 1;
++ optimize_size = 0;
++ }
++ else if (argv[i][0] == '-' && argv[i][1] == 'O')
++ {
++ /* Handle -Os, -O2, -O3, -O69, ... */
++ char *p = &argv[i][2];
++
++ if ((p[0] == 's') && (p[1] == 0))
++ {
++ optimize_size = 1;
++
++ /* Optimizing for size forces optimize to be 2. */
++ optimize = 2;
++ }
++ else
++ {
++ const int optimize_val = read_integral_parameter (p, p - 2, -1);
++ if (optimize_val != -1)
++ {
++ optimize = optimize_val;
++ optimize_size = 0;
++ }
++ }
++ }
++ }
++
++ obey_regdecls = (optimize == 0);
++
++ if (optimize >= 1)
++ {
++ flag_defer_pop = 1;
++ flag_thread_jumps = 1;
++#ifdef DELAY_SLOTS
++ flag_delayed_branch = 1;
++#endif
++#ifdef CAN_DEBUG_WITHOUT_FP
++ flag_omit_frame_pointer = 1;
++#endif
++ }
++
++ if (optimize >= 2)
++ {
++ flag_cse_follow_jumps = 1;
++ flag_cse_skip_blocks = 1;
++ flag_gcse = 1;
++ flag_expensive_optimizations = 1;
++ flag_strength_reduce = 1;
++ flag_rerun_cse_after_loop = 1;
++ flag_rerun_loop_opt = 1;
++ flag_caller_saves = 1;
++ flag_force_mem = 1;
++#ifdef INSN_SCHEDULING
++ flag_schedule_insns = 1;
++ flag_schedule_insns_after_reload = 1;
++#endif
++ flag_regmove = 1;
++ }
++
++ if (optimize >= 3)
++ {
++ flag_inline_functions = 1;
++ }
++
++ /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
++ modify it. */
++ target_flags = 0;
++ set_target_switch ("");
++
++#ifdef OPTIMIZATION_OPTIONS
++ /* Allow default optimizations to be specified on a per-machine basis. */
++ OPTIMIZATION_OPTIONS (optimize, optimize_size);
++#endif
++
++ /* Initialize register usage now so switches may override. */
++ init_reg_sets ();
++
++ for (i = 1; i < argc; i++)
++ {
++ size_t j;
++
++ /* If this is a language-specific option,
++ decode it in a language-specific way. */
++ for (j = NUM_ELEM (documented_lang_options); j--;)
++ if (check_lang_option (argv[i], documented_lang_options[j].option))
++ break;
++
++ if (j != (size_t)-1)
++ {
++ /* If the option is valid for *some* language,
++ treat it as valid even if this language doesn't understand it. */
++ int strings_processed = lang_decode_option (argc - i, argv + i);
++
++ if (!strcmp (argv[i], "--help"))
++ {
++ display_help ();
++ exit (0);
++ }
++
++ if (strings_processed != 0)
++ i += strings_processed - 1;
++ }
++ else if (argv[i][0] == '-' && argv[i][1] != 0)
++ {
++ register char *str = argv[i] + 1;
++ if (str[0] == 'Y')
++ str++;
++
++ if (str[0] == 'm')
++ set_target_switch (&str[1]);
++ else if (!strcmp (str, "dumpbase"))
++ {
++ dump_base_name = argv[++i];
++ }
++ else if (str[0] == 'd')
++ {
++ register char *p = &str[1];
++ while (*p)
++ switch (*p++)
++ {
++ case 'a':
++ branch_prob_dump = 1;
++ combine_dump = 1;
++#ifdef DELAY_SLOTS
++ dbr_sched_dump = 1;
++#endif
++ flow_dump = 1;
++ flow2_dump = 1;
++ global_reg_dump = 1;
++ jump_opt_dump = 1;
++ addressof_dump = 1;
++ jump2_opt_dump = 1;
++ local_reg_dump = 1;
++ loop_dump = 1;
++ regmove_dump = 1;
++ rtl_dump = 1;
++ cse_dump = 1, cse2_dump = 1;
++ gcse_dump = 1;
++ sched_dump = 1;
++ sched2_dump = 1;
++#ifdef STACK_REGS
++ stack_reg_dump = 1;
++#endif
++#ifdef MACHINE_DEPENDENT_REORG
++ mach_dep_reorg_dump = 1;
++#endif
++ break;
++ case 'A':
++ flag_debug_asm = 1;
++ break;
++ case 'b':
++ branch_prob_dump = 1;
++ break;
++ case 'c':
++ combine_dump = 1;
++ break;
++#ifdef DELAY_SLOTS
++ case 'd':
++ dbr_sched_dump = 1;
++ break;
++#endif
++ case 'f':
++ flow_dump = 1;
++ break;
++ case 'F':
++ addressof_dump = 1;
++ break;
++ case 'g':
++ global_reg_dump = 1;
++ break;
++ case 'G':
++ gcse_dump = 1;
++ break;
++ case 'j':
++ jump_opt_dump = 1;
++ break;
++ case 'J':
++ jump2_opt_dump = 1;
++ break;
++#ifdef STACK_REGS
++ case 'k':
++ stack_reg_dump = 1;
++ break;
++#endif
++ case 'l':
++ local_reg_dump = 1;
++ break;
++ case 'L':
++ loop_dump = 1;
++ break;
++ case 'm':
++ flag_print_mem = 1;
++ break;
++#ifdef MACHINE_DEPENDENT_REORG
++ case 'M':
++ mach_dep_reorg_dump = 1;
++ break;
++#endif
++ case 'p':
++ flag_print_asm_name = 1;
++ break;
++ case 'r':
++ rtl_dump = 1;
++ break;
++ case 'R':
++ sched2_dump = 1;
++ break;
++ case 's':
++ cse_dump = 1;
++ break;
++ case 'S':
++ sched_dump = 1;
++ break;
++ case 't':
++ cse2_dump = 1;
++ break;
++ case 'N':
++ regmove_dump = 1;
++ break;
++ case 'v':
++ graph_dump_format = vcg;
++ break;
++ case 'w':
++ flow2_dump = 1;
++ break;
++ case 'y':
++ set_yydebug (1);
++ break;
++ case 'x':
++ rtl_dump_and_exit = 1;
++ break;
++ case 'D': /* these are handled by the preprocessor */
++ case 'I':
++ break;
++ default:
++ warning ("unrecognised gcc debugging option: %c", p[-1]);
++ break;
++ }
++ }
++ else if (str[0] == 'f')
++ {
++ register char *p = &str[1];
++ int found = 0;
++
++ /* Some kind of -f option.
++ P's value is the option sans `-f'.
++ Search for it in the table of options. */
++
++ for (j = 0;
++ !found && j < sizeof (f_options) / sizeof (f_options[0]);
++ j++)
++ {
++ if (!strcmp (p, f_options[j].string))
++ {
++ *f_options[j].variable = f_options[j].on_value;
++ /* A goto here would be cleaner,
++ but breaks the vax pcc. */
++ found = 1;
++ }
++ if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
++ && ! strcmp (p+3, f_options[j].string))
++ {
++ *f_options[j].variable = ! f_options[j].on_value;
++ found = 1;
++ }
++ }
++
++ if (found)
++ ;
++ else if (!strncmp (p, "inline-limit-", 13))
++ inline_max_insns =
++ read_integral_parameter (p + 13, p - 2, inline_max_insns);
++#ifdef HAIFA
++#ifdef INSN_SCHEDULING
++ else if (!strncmp (p, "sched-verbose-",14))
++ fix_sched_param("verbose",&p[14]);
++#endif
++#endif /* HAIFA */
++ else if (!strncmp (p, "fixed-", 6))
++ fix_register (&p[6], 1, 1);
++ else if (!strncmp (p, "call-used-", 10))
++ fix_register (&p[10], 0, 1);
++ else if (!strncmp (p, "call-saved-", 11))
++ fix_register (&p[11], 0, 0);
++ else
++ error ("Invalid option `%s'", argv[i]);
++ }
++ else if (str[0] == 'O')
++ {
++ /* Already been treated above. Do nothing. */
++ }
++ else if (!strcmp (str, "pedantic"))
++ pedantic = 1;
++ else if (!strcmp (str, "pedantic-errors"))
++ flag_pedantic_errors = pedantic = 1;
++ else if (!strcmp (str, "quiet"))
++ quiet_flag = 1;
++ else if (!strcmp (str, "version"))
++ version_flag = 1;
++ else if (!strcmp (str, "w"))
++ inhibit_warnings = 1;
++ else if (!strcmp (str, "W"))
++ {
++ extra_warnings = 1;
++ /* We save the value of warn_uninitialized, since if they put
++ -Wuninitialized on the command line, we need to generate a
++ warning about not using it without also specifying -O. */
++ if (warn_uninitialized != 1)
++ warn_uninitialized = 2;
++ }
++ else if (str[0] == 'W')
++ {
++ register char *p = &str[1];
++ int found = 0;
++
++ /* Some kind of -W option.
++ P's value is the option sans `-W'.
++ Search for it in the table of options. */
++
++ for (j = 0;
++ !found && j < sizeof (W_options) / sizeof (W_options[0]);
++ j++)
++ {
++ if (!strcmp (p, W_options[j].string))
++ {
++ *W_options[j].variable = W_options[j].on_value;
++ /* A goto here would be cleaner,
++ but breaks the vax pcc. */
++ found = 1;
++ }
++ if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
++ && ! strcmp (p+3, W_options[j].string))
++ {
++ *W_options[j].variable = ! W_options[j].on_value;
++ found = 1;
++ }
++ }
++
++ if (found)
++ ;
++ else if (!strncmp (p, "id-clash-", 9))
++ {
++ const int id_clash_val
++ = read_integral_parameter (p + 9, p - 2, -1);
++ if (id_clash_val != -1)
++ {
++ id_clash_len = id_clash_val;
++ warn_id_clash = 1;
++ }
++ }
++ else if (!strncmp (p, "larger-than-", 12))
++ {
++ const int larger_than_val
++ = read_integral_parameter (p + 12, p - 2, -1);
++ if (larger_than_val != -1)
++ {
++ larger_than_size = larger_than_val;
++ warn_larger_than = 1;
++ }
++ }
++ else
++ error ("Invalid option `%s'", argv[i]);
++ }
++ else if (!strcmp (str, "p"))
++ {
++ profile_flag = 1;
++ }
++ else if (!strcmp (str, "a"))
++ {
++#if !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER)
++ warning ("`-a' option (basic block profile) not supported");
++#else
++ profile_block_flag = (profile_block_flag < 2) ? 1 : 3;
++#endif
++ }
++ else if (!strcmp (str, "ax"))
++ {
++#if !defined (FUNCTION_BLOCK_PROFILER_EXIT) || !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER)
++ warning ("`-ax' option (jump profiling) not supported");
++#else
++ profile_block_flag = (!profile_block_flag
++ || profile_block_flag == 2) ? 2 : 3;
++#endif
++ }
++ else if (str[0] == 'g')
++ {
++ unsigned level;
++ /* A lot of code assumes write_symbols == NO_DEBUG if the
++ debugging level is 0 (thus -gstabs1 -gstabs0 would lose track
++ of what debugging type has been selected). This records the
++ selected type. It is an error to specify more than one
++ debugging type. */
++ static enum debug_info_type selected_debug_type = NO_DEBUG;
++ /* Non-zero if debugging format has been explicitly set.
++ -g and -ggdb don't explicitly set the debugging format so
++ -gdwarf -g3 is equivalent to -gdwarf3. */
++ static int type_explicitly_set_p = 0;
++ /* Indexed by enum debug_info_type. */
++ static const char *debug_type_names[] =
++ {
++ "none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff"
++ };
++
++ /* The maximum admissible debug level value. */
++ static const unsigned max_debug_level = 3;
++
++ /* Look up STR in the table. */
++ for (da = debug_args; da->arg; da++)
++ {
++ const int da_len = strlen (da->arg);
++
++ if (! strncmp (str, da->arg, da_len))
++ {
++ enum debug_info_type type = da->debug_type;
++ const char *p = str + da_len;
++
++ if (*p && (*p < '0' || *p > '9'))
++ continue;
++
++ /* A debug flag without a level defaults to level 2.
++ Note we do not want to call read_integral_parameter
++ for that case since it will call atoi which
++ will return zero.
++
++ ??? We may want to generalize the interface to
++ read_integral_parameter to better handle this case
++ if this case shows up often. */
++ if (*p)
++ level = read_integral_parameter (p, 0,
++ max_debug_level + 1);
++ else
++ level = 2;
++
++ if (da_len > 1 && *p && !strncmp (str, "gdwarf", da_len))
++ {
++ error ("use -gdwarf -g%d for DWARF v1, level %d",
++ level, level);
++ if (level == 2)
++ error ("use -gdwarf-2 for DWARF v2");
++ }
++
++ if (level > max_debug_level)
++ {
++ warning ("ignoring option `%s' due to invalid debug level specification",
++ str - 1);
++ level = debug_info_level;
++ }
++
++ if (type == NO_DEBUG)
++ {
++ type = PREFERRED_DEBUGGING_TYPE;
++ if (da_len > 1 && strncmp (str, "ggdb", da_len) == 0)
++ {
++#if defined (DWARF2_DEBUGGING_INFO) && !defined (LINKER_DOES_NOT_WORK_WITH_DWARF2)
++ type = DWARF2_DEBUG;
++#else
++#ifdef DBX_DEBUGGING_INFO
++ type = DBX_DEBUG;
++#endif
++#endif
++ }
++ }
++
++ if (type == NO_DEBUG)
++ warning ("`-%s' not supported by this configuration of GCC",
++ str);
++
++ /* Does it conflict with an already selected type? */
++ if (type_explicitly_set_p
++ /* -g/-ggdb don't conflict with anything */
++ && da->debug_type != NO_DEBUG
++ && type != selected_debug_type)
++ warning ("`-%s' ignored, conflicts with `-g%s'",
++ str, debug_type_names[(int) selected_debug_type]);
++ else
++ {
++ /* If the format has already been set, -g/-ggdb
++ only change the debug level. */
++ if (type_explicitly_set_p
++ && da->debug_type == NO_DEBUG)
++ ; /* don't change debugging type */
++ else
++ {
++ selected_debug_type = type;
++ type_explicitly_set_p = da->debug_type != NO_DEBUG;
++ }
++ write_symbols = (level == 0
++ ? NO_DEBUG
++ : selected_debug_type);
++ use_gnu_debug_info_extensions = da->use_extensions_p;
++ debug_info_level = (enum debug_info_level) level;
++ }
++ break;
++ }
++ }
++ if (! da->arg)
++ warning ("`-%s' not supported by this configuration of GCC",
++ str);
++ }
++ else if (!strcmp (str, "o"))
++ {
++ asm_file_name = argv[++i];
++ }
++ else if (str[0] == 'G')
++ {
++ const int g_switch_val = (str[1] != '\0') ?
++ read_integral_parameter(str + 1, 0, -1) :
++ read_integral_parameter(argv[++i], 0, -1);
++
++ if (g_switch_val != -1)
++ {
++ g_switch_set = TRUE;
++ g_switch_value = g_switch_val;
++ }
++ else
++ {
++ error("Invalid option `-%s'",str);
++ }
++ }
++ else if (!strncmp (str, "aux-info", 8))
++ {
++ flag_gen_aux_info = 1;
++ aux_info_file_name = (str[8] != '\0' ? str+8 : argv[++i]);
++ }
++ else if (!strcmp (str, "-help"))
++ {
++ display_help ();
++ exit (0);
++ }
++ else
++ error ("Invalid option `%s'", argv[i]);
++ }
++ else if (argv[i][0] == '+')
++ error ("Invalid option `%s'", argv[i]);
++ else
++ filename = argv[i];
++ }
++
++ /* Checker uses the frame pointer. */
++ if (flag_check_memory_usage)
++ flag_omit_frame_pointer = 0;
++
++ if (optimize == 0)
++ {
++ /* Inlining does not work if not optimizing,
++ so force it not to be done. */
++ flag_no_inline = 1;
++ warn_inline = 0;
++
++ /* The c_decode_option and lang_decode_option functions set
++ this to `2' if -Wall is used, so we can avoid giving out
++ lots of errors for people who don't realize what -Wall does. */
++ if (warn_uninitialized == 1)
++ warning ("-Wuninitialized is not supported without -O");
++ }
++
++#ifdef OVERRIDE_OPTIONS
++ /* Some machines may reject certain combinations of options. */
++ OVERRIDE_OPTIONS;
++#endif
++
++ if (exceptions_via_longjmp == 2)
++ {
++#ifdef DWARF2_UNWIND_INFO
++ exceptions_via_longjmp = ! DWARF2_UNWIND_INFO;
++#else
++ exceptions_via_longjmp = 1;
++#endif
++ }
++
++ if (profile_block_flag == 3)
++ {
++ warning ("`-ax' and `-a' are conflicting options. `-a' ignored.");
++ profile_block_flag = 2;
++ }
++
++ /* Unrolling all loops implies that standard loop unrolling must also
++ be done. */
++ if (flag_unroll_all_loops)
++ flag_unroll_loops = 1;
++ /* Loop unrolling requires that strength_reduction be on also. Silently
++ turn on strength reduction here if it isn't already on. Also, the loop
++ unrolling code assumes that cse will be run after loop, so that must
++ be turned on also. */
++ if (flag_unroll_loops)
++ {
++ flag_strength_reduce = 1;
++ flag_rerun_cse_after_loop = 1;
++ }
++
++ /* Warn about options that are not supported on this machine. */
++#ifndef INSN_SCHEDULING
++ if (flag_schedule_insns || flag_schedule_insns_after_reload)
++ warning ("instruction scheduling not supported on this target machine");
++#endif
++#ifndef DELAY_SLOTS
++ if (flag_delayed_branch)
++ warning ("this target machine does not have delayed branches");
++#endif
++
++ user_label_prefix = USER_LABEL_PREFIX;
++ if (flag_leading_underscore != -1)
++ {
++ /* If the default prefix is more complicated than "" or "_",
++ issue a warning and ignore this option. */
++ if (user_label_prefix[0] == 0 ||
++ (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
++ {
++ user_label_prefix = flag_leading_underscore ? "_" : "";
++ }
++ else
++ warning ("-f%sleading-underscore not supported on this target machine",
++ flag_leading_underscore ? "" : "no-");
++ }
++
++ /* If we are in verbose mode, write out the version and maybe all the
++ option flags in use. */
++ if (version_flag)
++ {
++ print_version (stderr, "");
++ if (! quiet_flag)
++ print_switch_values (stderr, 0, MAX_LINE, "", " ", "\n");
++ }
++
++ compile_file (filename);
++
++#if !defined(OS2) && !defined(VMS) && (!defined(_WIN32) || defined (__CYGWIN__)) && !defined(__INTERIX)
++ if (flag_print_mem)
++ {
++ char *lim = (char *) sbrk (0);
++
++ notice ("Data size %ld.\n", (long) (lim - (char *) &environ));
++ fflush (stderr);
++
++#ifndef __MSDOS__
++#ifdef USG
++ system ("ps -l 1>&2");
++#else /* not USG */
++ system ("ps v");
++#endif /* not USG */
++#endif
++ }
++#endif /* ! OS2 && ! VMS && (! _WIN32 || CYGWIN) && ! __INTERIX */
++
++ if (errorcount)
++ exit (FATAL_EXIT_CODE);
++ if (sorrycount)
++ exit (FATAL_EXIT_CODE);
++ exit (SUCCESS_EXIT_CODE);
++ return 0;
++}
++
++/* Decode -m switches. */
++/* Decode the switch -mNAME. */
++
++static void
++set_target_switch (name)
++ const char *name;
++{
++ register size_t j;
++ int valid_target_option = 0;
++
++ for (j = 0; j < sizeof target_switches / sizeof target_switches[0]; j++)
++ if (!strcmp (target_switches[j].name, name))
++ {
++ if (target_switches[j].value < 0)
++ target_flags &= ~-target_switches[j].value;
++ else
++ target_flags |= target_switches[j].value;
++ valid_target_option = 1;
++ }
++
++#ifdef TARGET_OPTIONS
++ if (!valid_target_option)
++ for (j = 0; j < sizeof target_options / sizeof target_options[0]; j++)
++ {
++ int len = strlen (target_options[j].prefix);
++ if (!strncmp (target_options[j].prefix, name, len))
++ {
++ *target_options[j].variable = name + len;
++ valid_target_option = 1;
++ }
++ }
++#endif
++
++ if (!valid_target_option)
++ error ("Invalid option `%s'", name);
++}
++
++/* Print version information to FILE.
++ Each line begins with INDENT (for the case where FILE is the
++ assembler output file). */
++
++static void
++print_version (file, indent)
++ FILE *file;
++ const char *indent;
++{
++#ifndef __VERSION__
++#define __VERSION__ "[?]"
++#endif
++ fnotice (file,
++#ifdef __GNUC__
++ "%s%s%s version %s (%s) compiled by GNU C version %s.\n"
++#else
++ "%s%s%s version %s (%s) compiled by CC.\n"
++#endif
++ , indent, *indent != 0 ? " " : "",
++ language_string, version_string, TARGET_NAME, __VERSION__);
++}
++
++/* Print an option value and return the adjusted position in the line.
++ ??? We don't handle error returns from fprintf (disk full); presumably
++ other code will catch a disk full though. */
++
++static int
++print_single_switch (file, pos, max, indent, sep, term, type, name)
++ FILE *file;
++ int pos, max;
++ const char *indent, *sep, *term, *type, *name;
++{
++ /* The ultrix fprintf returns 0 on success, so compute the result we want
++ here since we need it for the following test. */
++ int len = strlen (sep) + strlen (type) + strlen (name);
++
++ if (pos != 0
++ && pos + len > max)
++ {
++ fprintf (file, "%s", term);
++ pos = 0;
++ }
++ if (pos == 0)
++ {
++ fprintf (file, "%s", indent);
++ pos = strlen (indent);
++ }
++ fprintf (file, "%s%s%s", sep, type, name);
++ pos += len;
++ return pos;
++}
++
++/* Print active target switches to FILE.
++ POS is the current cursor position and MAX is the size of a "line".
++ Each line begins with INDENT and ends with TERM.
++ Each switch is separated from the next by SEP. */
++
++static void
++print_switch_values (file, pos, max, indent, sep, term)
++ FILE *file;
++ int pos, max;
++ const char *indent, *sep, *term;
++{
++ size_t j;
++ char **p;
++
++ /* Print the options as passed. */
++
++ pos = print_single_switch (file, pos, max, indent, *indent ? " " : "", term,
++ _("options passed: "), "");
++
++ for (p = &save_argv[1]; *p != NULL; p++)
++ if (**p == '-')
++ {
++ /* Ignore these. */
++ if (strcmp (*p, "-o") == 0)
++ {
++ if (p[1] != NULL)
++ p++;
++ continue;
++ }
++ if (strcmp (*p, "-quiet") == 0)
++ continue;
++ if (strcmp (*p, "-version") == 0)
++ continue;
++ if ((*p)[1] == 'd')
++ continue;
++
++ pos = print_single_switch (file, pos, max, indent, sep, term, *p, "");
++ }
++ if (pos > 0)
++ fprintf (file, "%s", term);
++
++ /* Print the -f and -m options that have been enabled.
++ We don't handle language specific options but printing argv
++ should suffice. */
++
++ pos = print_single_switch (file, 0, max, indent, *indent ? " " : "", term,
++ _("options enabled: "), "");
++
++ for (j = 0; j < sizeof f_options / sizeof f_options[0]; j++)
++ if (*f_options[j].variable == f_options[j].on_value)
++ pos = print_single_switch (file, pos, max, indent, sep, term,
++ "-f", f_options[j].string);
++
++ /* Print target specific options. */
++
++ for (j = 0; j < sizeof target_switches / sizeof target_switches[0]; j++)
++ if (target_switches[j].name[0] != '\0'
++ && target_switches[j].value > 0
++ && ((target_switches[j].value & target_flags)
++ == target_switches[j].value))
++ {
++ pos = print_single_switch (file, pos, max, indent, sep, term,
++ "-m", target_switches[j].name);
++ }
++
++#ifdef TARGET_OPTIONS
++ for (j = 0; j < sizeof target_options / sizeof target_options[0]; j++)
++ if (*target_options[j].variable != NULL)
++ {
++ char prefix[256];
++ sprintf (prefix, "-m%s", target_options[j].prefix);
++ pos = print_single_switch (file, pos, max, indent, sep, term,
++ prefix, *target_options[j].variable);
++ }
++#endif
++
++ fprintf (file, "%s", term);
++}
++
++/* Record the beginning of a new source file, named FILENAME. */
++
++void
++debug_start_source_file (filename)
++ register char *filename ATTRIBUTE_UNUSED;
++{
++#ifdef DBX_DEBUGGING_INFO
++ if (write_symbols == DBX_DEBUG)
++ dbxout_start_new_source_file (filename);
++#endif
++#ifdef DWARF_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF_DEBUG)
++ dwarfout_start_new_source_file (filename);
++#endif /* DWARF_DEBUGGING_INFO */
++#ifdef DWARF2_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF2_DEBUG)
++ dwarf2out_start_source_file (filename);
++#endif /* DWARF2_DEBUGGING_INFO */
++#ifdef SDB_DEBUGGING_INFO
++ if (write_symbols == SDB_DEBUG)
++ sdbout_start_new_source_file (filename);
++#endif
++}
++
++/* Record the resumption of a source file. LINENO is the line number in
++ the source file we are returning to. */
++
++void
++debug_end_source_file (lineno)
++ register unsigned lineno ATTRIBUTE_UNUSED;
++{
++#ifdef DBX_DEBUGGING_INFO
++ if (write_symbols == DBX_DEBUG)
++ dbxout_resume_previous_source_file ();
++#endif
++#ifdef DWARF_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF_DEBUG)
++ dwarfout_resume_previous_source_file (lineno);
++#endif /* DWARF_DEBUGGING_INFO */
++#ifdef DWARF2_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF2_DEBUG)
++ dwarf2out_end_source_file ();
++#endif /* DWARF2_DEBUGGING_INFO */
++#ifdef SDB_DEBUGGING_INFO
++ if (write_symbols == SDB_DEBUG)
++ sdbout_resume_previous_source_file ();
++#endif
++}
++
++/* Called from check_newline in c-parse.y. The `buffer' parameter contains
++ the tail part of the directive line, i.e. the part which is past the
++ initial whitespace, #, whitespace, directive-name, whitespace part. */
++
++void
++debug_define (lineno, buffer)
++ register unsigned lineno ATTRIBUTE_UNUSED;
++ register char *buffer ATTRIBUTE_UNUSED;
++{
++#ifdef DWARF_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF_DEBUG)
++ dwarfout_define (lineno, buffer);
++#endif /* DWARF_DEBUGGING_INFO */
++#ifdef DWARF2_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF2_DEBUG)
++ dwarf2out_define (lineno, buffer);
++#endif /* DWARF2_DEBUGGING_INFO */
++}
++
++/* Called from check_newline in c-parse.y. The `buffer' parameter contains
++ the tail part of the directive line, i.e. the part which is past the
++ initial whitespace, #, whitespace, directive-name, whitespace part. */
++
++void
++debug_undef (lineno, buffer)
++ register unsigned lineno ATTRIBUTE_UNUSED;
++ register char *buffer ATTRIBUTE_UNUSED;
++{
++#ifdef DWARF_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF_DEBUG)
++ dwarfout_undef (lineno, buffer);
++#endif /* DWARF_DEBUGGING_INFO */
++#ifdef DWARF2_DEBUGGING_INFO
++ if (debug_info_level == DINFO_LEVEL_VERBOSE
++ && write_symbols == DWARF2_DEBUG)
++ dwarf2out_undef (lineno, buffer);
++#endif /* DWARF2_DEBUGGING_INFO */
++}
+diff -ruNb gcc-2.95.3/gcc/varasm.c gcc-2.95.4/gcc/varasm.c
+--- gcc-2.95.3/gcc/varasm.c 2001-02-19 15:02:02.000000000 +0100
++++ gcc-2.95.4/gcc/varasm.c 2017-11-07 22:10:12.000000000 +0100
+@@ -3495,6 +3495,9 @@
+ pop_obstacks ();
+ }
+
++ if (GET_CODE (x) == LABEL_REF)
++ LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
++
+ /* Allocate a pool constant descriptor, fill it in, and chain it in. */
+
+ pool = (struct pool_constant *) savealloc (sizeof (struct pool_constant));
+diff -ruNb gcc-2.95.3/gcc/version.c gcc-2.95.4/gcc/version.c
+--- gcc-2.95.3/gcc/version.c 2001-03-16 13:52:12.000000000 +0100
++++ gcc-2.95.4/gcc/version.c 2017-11-08 10:03:40.495503051 +0100
+@@ -1 +1 @@
+-char *version_string = "2.95.3 20010315 (release)";
++char *version_string = "2.95.4 20010319 (TechSAT PPC vxWorks 5.5/Tornado 2.2.1 Linux i686 Cross Compiler)";
+diff -ruNb gcc-2.95.3/install/BINARIES gcc-2.95.4/install/BINARIES
+--- gcc-2.95.3/install/BINARIES 2001-03-16 15:15:42.000000000 +0100
++++ gcc-2.95.4/install/BINARIES 1970-01-01 01:00:00.000000000 +0100
+@@ -1,49 +0,0 @@
+-
+- Installing GCC: Binaries
+-
+- We are often asked about pre-compiled versions of GCC. While we cannot
+- provide these for all platforms, below you'll find links to binaries
+- for various platforms where creating them by yourself is not easy due
+- to various reasons.
+-
+- Please note that we did not create these binaries, nor do we support
+- them. If you have any problems installing them, please contact their
+- makers.
+- * [1]AIX
+- * DOS: [2]DJGPP
+- * [3]HP-UX Porting Center
+- * [4]SCO OpenServer/Unixware
+- * Solaris (SPARC, Intel): [5]Sunfreeware
+- * SGI: [6]SGI Freeware
+- * Windows 95, 98, and NT: [7]Cygwin for Windows 95, 98, and NT |
+- [8]GNU Win32 related projects by Mumit Khan
+- * [9]The Written Word offers binaries for Solaris 2.5.1, 2.6,
+- 2.7/SPARC, 2.7/Intel, IRIX 6.2, 6.5, Digital UNIX 4.0D, HP-UX
+- 10.20, and HP-UX 11.00.
+- * Hitachi H8/300[HS]: [10]GNU Development Tools for the Hitachi
+- H8/300[HS] Series
+-
+- In addition to those specific offerings, you can get a binary
+- distribution CD-ROM from the [11]Free Software Foundation. It contains
+- binaries for a number of platforms, and includes not only GCC, but
+- other stuff as well. The current CD does not contain the latest
+- version of GCC, but it should allow bootstrapping the compiler. An
+- updated version of that disk is in the works.
+- _________________________________________________________________
+-
+- [12]Return to the GCC Installation page
+-
+-References
+-
+- 1. http://www-frec.bull.com/docs/download.htm
+- 2. http://www.delorie.com/djgpp/
+- 3. http://hpux.cae.wisc.edu/
+- 4. http://www.sco.com/skunkware/devtools/index.html#gcc
+- 5. http://www.sunfreeware.com/
+- 6. http://freeware.sgi.com/
+- 7. http://sources.redhat.com/cygwin/
+- 8. http://www.xraylith.wisc.edu/~khan/software/gnu-win32/
+- 9. ftp://ftp.thewrittenword.com/packages/free/by-name/gcc-2.95.2/
+- 10. http://www.hdl.co.jp/~kban/h8300-hms/
+- 11. http://www.fsf.org/order/order.html
+- 12. http://gcc.gnu.org/install/index.html
+diff -ruNb gcc-2.95.3/install/binaries.html gcc-2.95.4/install/binaries.html
+--- gcc-2.95.3/install/binaries.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/binaries.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,62 +0,0 @@
+-<html>
+-<head>
+-<title>Installing GCC: Binaries</title>
+-</head>
+-
+-<body>
+-<h1 align="center">Installing GCC: Binaries</h1>
+-
+-<p>We are often asked about pre-compiled versions of GCC. While we cannot
+-provide these for all platforms, below you'll find links to binaries for
+-various platforms where creating them by yourself is not easy due to various
+-reasons.</p>
+-
+-<p>Please note that we did not create these binaries, nor do we
+-support them. If you have any problems installing them, please
+-contact their makers.</p>
+-
+-<ul>
+-<li><a href="http://www-frec.bull.com/docs/download.htm">AIX</a></li>
+-
+-<li>DOS: <a href="http://www.delorie.com/djgpp/">DJGPP</a></li>
+-
+-<li><a href="http://hpux.cae.wisc.edu/">HP-UX Porting Center</a></li>
+-
+-<li><a href="http://www.sco.com/skunkware/devtools/index.html#gcc">SCO
+- OpenServer/Unixware</a></li>
+-
+-<li>Solaris (SPARC, Intel): <a
+- href="http://www.sunfreeware.com/">Sunfreeware</a></li>
+-
+-<li>SGI: <a href="http://freeware.sgi.com/">SGI Freeware</a></li>
+-
+-<li>Windows 95, 98, and NT:
+- <a href="http://sources.redhat.com/cygwin/">Cygwin for Windows 95,
+- 98, and NT</a> |
+- <a href="http://www.xraylith.wisc.edu/~khan/software/gnu-win32/">GNU
+- Win32 related projects</a> by Mumit Khan</li>
+-
+-<li><a href="ftp://ftp.thewrittenword.com/packages/free/by-name/gcc-2.95.2/">The
+-Written Word</a> offers binaries for Solaris 2.5.1, 2.6, 2.7/SPARC, 2.7/Intel,
+-IRIX 6.2, 6.5, Digital UNIX 4.0D, HP-UX 10.20, and HP-UX 11.00.</li>
+-
+-<li>Hitachi H8/300[HS]: <a
+-href="http://www.hdl.co.jp/~kban/h8300-hms/">GNU Development Tools for
+-the Hitachi H8/300[HS] Series</a></li>
+-
+-</ul>
+-
+-<p>In addition to those specific offerings, you can get a binary
+-distribution CD-ROM from the <a
+-href="http://www.fsf.org/order/order.html">Free Software
+-Foundation</a>. It contains binaries for a number of platforms, and
+-includes not only GCC, but other stuff as well. The current CD does
+-not contain the latest version of GCC, but it should allow
+-bootstrapping the compiler. An updated version of that disk is in the
+-works.</p>
+-
+-<hr>
+-<p><a href="./index.html">Return to the GCC Installation page</a></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/BUILD gcc-2.95.4/install/BUILD
+--- gcc-2.95.3/install/BUILD 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/install/BUILD 1970-01-01 01:00:00.000000000 +0100
+@@ -1,89 +0,0 @@
+-
+- Installing GCC: Building
+-
+- Now that GCC is configured, you are ready to build the compiler and
+- runtime libraries.
+-
+- We _highly_ recommend that GCC be built using GNU make; other versions
+- may work, then again they might not.
+-
+- (For example, many broken versions of make will fail if you use the
+- recommended setup where _objdir_ is different from _srcdir_.)
+-
+-Building a native compiler
+-
+- For a native build issue the command `make bootstrap'. This will build
+- the entire GCC system, which includes the following steps:
+- * Build host tools necessary to build the compiler such as texinfo,
+- bison, gperf.
+- * Build target tools for use by the compiler such as binutils (bfd,
+- binutils, gas, gprof, ld, and opcodes)
+- if they have been individually linked or moved into the top level
+- GCC source tree before configuring.
+- * Perform a 3-stage bootstrap of the compiler.
+- * Perform a comparison test of the stage2 and stage3 compilers.
+- * Build runtime libraries using the stage3 compiler from the
+- previous step.
+-
+- If you are short on disk space you might consider `make
+- bootstrap-lean' instead. This is identical to `make bootstrap' except
+- that object files from the stage1 and stage2 of the 3-stage bootstrap
+- of the compiler are deleted as soon as they are no longer needed.
+-
+- If you want to save additional space during the bootstrap and in the
+- final installation as well, you can build the compiler binaries
+- without debugging information with "make CFLAGS='-O' LIBCFLAGS='-g
+- -O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap". This
+- will save roughly 40% of disk space both for the bootstrap and the
+- final installation. (Libraries will still contain debugging
+- information.)
+-
+- If you used the flag --enable-languages=... to restrict the compilers
+- to be built, only those you've actually enabled will be built. This
+- will of course only build those runtime libraries, for which the
+- particular compiler has been built. Please note, that re-defining
+- LANGUAGES when calling `make bootstrap' _*does not*_ work anymore!
+-
+-Building a cross compiler
+-
+- We recommend reading the [1]crossgcc FAQ for information about
+- building cross compilers.
+-
+- When building a cross compiler, it is not generally possible to do a
+- 3-stage bootstrap of the compiler. This makes for an interesting
+- problem as parts of GCC can only be built with GCC.
+-
+- To build a cross compiler, we first recommend building and installing
+- a native compiler. You can then use the native GCC compiler to build
+- the cross compiler.
+-
+- Assuming you have already installed a native copy of GCC and
+- configured your cross compiler, issue the command "make", which
+- performs the following steps:
+- * Build host tools necessary to build the compiler such as texinfo,
+- bison, gperf.
+- * Build target tools for use by the compiler such as binutils (bfd,
+- binutils, gas, gprof, ld, and opcodes)
+- if they have been individually linked or moved into the top level
+- GCC source tree before configuring.
+- * Build the compiler (single stage only).
+- * Build runtime libraries using the compiler from the previous step.
+-
+- Note that if an error occurs in any step the make process will exit.
+-
+-Building in parallel
+-
+- If you have a multiprocessor system you can use `make bootstrap
+- MAKE="make -j 2" -j 2' or just `make -j 2 bootstrap' for GNU Make 3.79
+- and above instead of just `make bootstrap' when building GCC. You can
+- use a bigger number instead of two if you like. In most cases, it
+- won't help to use a number bigger than the number of processors in
+- your machine.
+- _________________________________________________________________
+-
+- [2]Return to the GCC Installation page
+-
+-References
+-
+- 1. http://www.objsw.com/CrossGCC/
+- 2. http://gcc.gnu.org/install/index.html
+diff -ruNb gcc-2.95.3/install/build.html gcc-2.95.4/install/build.html
+--- gcc-2.95.3/install/build.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/build.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,109 +0,0 @@
+-<html>
+-<head>
+-<title>Installing GCC: Building</title>
+-</head>
+-
+-<body>
+-<h1 align="center">Installing GCC: Building</h1>
+-
+-<p>Now that GCC is configured, you are ready to build the compiler and
+-runtime libraries.
+-
+-<p>We <strong>highly</strong> recommend that GCC be built using GNU make;
+-other versions may work, then again they might not.</p>
+-
+-<p>(For example, many broken versions of make will fail if you use the
+-recommended setup where <i>objdir</i> is different from <i>srcdir</i>.)
+-
+-
+-<h2>Building a native compiler</h2>
+-
+-<p>For a native build issue the command `<code>make bootstrap</code>'. This
+-will build the entire GCC system, which includes the following steps:
+-
+-<ul>
+- <li>Build host tools necessary to build the compiler such as texinfo, bison,
+- gperf.</li>
+-
+- <li> Build target tools for use by the compiler such as binutils (bfd,
+- binutils, gas, gprof, ld, and opcodes)<br>
+- if they have been individually linked or moved into the top level GCC source
+- tree before configuring.</li>
+-
+- <li>Perform a 3-stage bootstrap of the compiler.</li>
+-
+- <li>Perform a comparison test of the stage2 and stage3 compilers.</li>
+-
+- <li>Build runtime libraries using the stage3 compiler from the previous
+- step.</li>
+-</ul>
+-
+-<p>If you are short on disk space you might consider `<code>make
+-bootstrap-lean</code>' instead. This is identical to `<code>make
+-bootstrap</code>' except that object files from the stage1 and
+-stage2 of the 3-stage bootstrap of the compiler are deleted as
+-soon as they are no longer needed.
+-
+-<p>If you want to save additional space during the bootstrap and in
+-the final installation as well, you can build the compiler binaries
+-without debugging information with "make CFLAGS='-O' LIBCFLAGS='-g
+--O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap". This will save
+-roughly 40% of disk space both for the bootstrap and the final installation.
+-(Libraries will still contain debugging information.)
+-
+-<p>If you used the flag <code>--enable-languages=...</code> to restrict
+-the compilers to be built, only those you've actually enabled will be
+-built. This will of course only build those runtime libraries, for
+-which the particular compiler has been built. Please note,
+-that re-defining LANGUAGES when calling `<code>make bootstrap</code>'
+-<b>*does not*</b> work anymore!
+-
+-
+-<h2>Building a cross compiler</h2>
+-
+-<p> We recommend reading the
+-<a href="http://www.objsw.com/CrossGCC/">
+-crossgcc FAQ</a> for information about building cross compilers.
+-
+-<p>When building a cross compiler, it is not generally possible to do a
+-3-stage bootstrap of the compiler. This makes for an interesting problem
+-as parts of GCC can only be built with GCC.
+-
+-<p>To build a cross compiler, we first recommend building and installing a
+-native compiler. You can then use the native GCC compiler to build the
+-cross compiler.
+-
+-<p>Assuming you have already installed a native copy of GCC and configured
+-your cross compiler, issue the command "make", which performs the
+-following steps:
+-<ul>
+- <li>Build host tools necessary to build the compiler such as texinfo, bison,
+- gperf.</li>
+-
+- <li>Build target tools for use by the compiler such as binutils (bfd,
+- binutils, gas, gprof, ld, and opcodes)<br>
+- if they have been individually linked or moved into the top level GCC source
+- tree before configuring.</li>
+-
+- <li>Build the compiler (single stage only).</li>
+-
+- <li>Build runtime libraries using the compiler from the previous
+- step.</li>
+-</ul>
+-
+-<p>Note that if an error occurs in any step the make process will exit.
+-
+-<h2>Building in parallel</h2>
+-
+-<p> If you have a multiprocessor system you can use `<code>make bootstrap
+-MAKE="make -j 2" -j 2</code>' or just `<code>make -j 2 bootstrap</code>'
+-for GNU Make 3.79 and above instead of just `<code>make bootstrap</code>'
+-when building GCC. You can use a bigger number instead of two if
+-you like. In most cases, it won't help to use a number bigger than
+-the number of processors in your machine.
+-
+-<hr>
+-<p><a href="./index.html">Return to the GCC Installation page</a></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/CONFIGURE gcc-2.95.4/install/CONFIGURE
+--- gcc-2.95.3/install/CONFIGURE 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/install/CONFIGURE 1970-01-01 01:00:00.000000000 +0100
+@@ -1,161 +0,0 @@
+-
+- Installing GCC: Configuration
+-
+- Like most GNU software, GCC must be configured before it can be built.
+- This document describes the recommended configuration procedure for
+- both native and cross targets.
+-
+- We use _srcdir_ to refer to the toplevel source directory for GCC; we
+- use _objdir_ to refer to the toplevel build/object directory.
+-
+- First, we _highly_ recommend that GCC be built into a separate
+- directory than the sources which does _not_ reside within the source
+- tree. This is how we generally build GCC; building where _srcdir_ ==
+- _objdir_ should still work, but doesn't get extensive testing;
+- building where _objdir_ is a subdirectory of _srcdir_ is unsupported.
+-
+- Second, when configuring a native system, either "cc" or "gcc" must be
+- in your path or you must set CC in your environment before running
+- configure. Otherwise the configuration scripts may fail.
+-
+- To configure GCC:
+-
+- % mkdir _objdir_
+- % cd _objdir_
+- % _srcdir_/configure _[target]_ _[options]_
+-
+- _target specification_
+- * GCC has code to correctly determine the correct value for _target_
+- for nearly all native systems. Therefore, we highly recommend you
+- not provide a configure target when configuring a native compiler.
+- * _target_ must be specified as --target=_target_ when configuring a
+- cross compiler; examples of valid targets would be i960-rtems,
+- m68k-coff, sh-elf, etc.
+- * Specifying just _target_ instead of --target=_target_ implies that
+- the host defaults to _target_.
+-
+- _options specification_
+-
+- Use _options_ to override several configure time options for GCC. A
+- partial list of supported options:
+- * --prefix=_dirname_ -- Specify the toplevel installation directory.
+- This is the recommended way to install the tools into a directory
+- other than the default. The toplevel installation directory
+- defaults to /usr/local.
+- We _highly_ recommend against _prefix_ being the same or a
+- subdirectory of _objdir_ or vice versa.
+- These additional options control where certain parts of the
+- distribution are installed. Normally you should not need to use
+- these options.
+- + --with-local-prefix=_dirname_ -- Specify the installation
+- directory for local include files. The default is /usr/local.
+- + --with-gxx-include-dir=_dirname_ -- Specify the installation
+- directory for g++ header files. The default is
+- /usr/local/include/g++.
+- * --enable-shared -- Build shared versions of the C++ runtime
+- libraries if supported --disable-shared is the default.
+- * --with-gnu-as -- Specify that the compiler should assume that the
+- assembler it finds is the GNU assembler. However, this does not
+- modify the rules to find an assembler and will result in confusion
+- if the found assembler is not actually the GNU assembler. If you
+- have more than one assembler installed on your system, you may
+- want to use this option in connection with --with-as=/path/to/gas.
+- * --with-as=_/path/to/as_ -- Specify that the compiler should use
+- the assembler pointed to by _pathname_, rather than the one found
+- by the standard rules to find an assembler, which are:
+- + Check the _$exec_prefix/lib/gcc-lib/$target/$version_
+- directory, where _$exec_prefix_ defaults to _$prefix_ which
+- defaults to _/usr/local_ unless overridden by the
+- --prefix=/pathname switch described above. _$target_ is the
+- target system triple, such as _sparc-sun-solaris2.7_, and
+- _$version_ denotes the GCC version, such as _2.95.2_.
+- + Check operating system specific directories (e.g.
+- _/usr/ccs/bin_ on Sun Solaris).
+- Note that these rules do not check for the value of _$PATH_. You
+- may want to use --with-as if no assembler is installed in the
+- directories listed above, or if you have multiple assemblers
+- installed and want to choose one that is not found by the above
+- rules.
+- * --with-gnu-ld -- Same as --with-gnu-as but for the linker.
+- * --with-ld=_/path/to/ld_ -- Same as --with-as, but for the linker.
+- * --with-stabs -- Specify that stabs debugging information should be
+- used instead of whatever format the host normally uses. Normally
+- GCC uses the same debug format as the host system.
+- * --enable-multilib -- Specify that multiple target libraries should
+- be built to support different target variants, calling
+- conventions, etc. This is the default.
+- * --enable-threads -- Specify that the target supports threads. This
+- affects the Objective-C compiler and runtime library, and
+- exception handling for other languages like C++ and Java.
+- * --enable-threads=_lib_ -- Specify that _lib_ is the thread support
+- library. This affects the Objective-C compiler and runtime
+- library, and exception handling for other languages like C++ and
+- Java.
+- * --with-cpu=_cpu_ -- Specify which cpu variant the compiler should
+- generate code for by default. This is currently only supported on
+- the some ports, specifically arm, powerpc, and SPARC. If configure
+- does not recognize the model name (e.g. arm700, 603e, or
+- ultrasparc) you provide, please check the configure script for a
+- complete list of supported models.
+- * --enable-target-optspace -- Specify that target libraries should
+- be optimized for code space instead of code speed. This is the
+- default for the m32r platform.
+- * --enable-cpp -- Specify that a shell script which emulates
+- traditional cpp functionality should be installed.
+- * --enable-cpplib -- Specify that the functionality of CPP should be
+- integrated into the compiler itself. This option is not supported
+- by snapshots since November 2000. In snapshots where it is
+- supported, it is not enabled by default, except for snapshots very
+- close to November 2000.
+- * --without-fast-fixincludes -- Specify that the old, slower method
+- of fixing the system header files should be used. EGCS 1.1.x and
+- older releases default to the slow version. GCC 2.95 and newer
+- releases will default to the fast version.
+- * --enable-version-specific-runtime-libs -- Specify that runtime
+- libraries should be installed in the compiler specific
+- subdirectory (${libsubdir}) rather than the usual places. In
+- addition, libstdc++'s include files will be installed in
+- ${libsubdir}/include/g++ unless you overruled it by using
+- --with-gxx-include-dir=_dirname_. Using this option is
+- particularly useful if you intend to use several versions of GCC
+- in parallel. This is currently supported by libf2c and libstdc++.
+- * --enable-languages=_lang1_,_lang2_,... -- Specify that only a
+- particular subset of compilers and their runtime libraries should
+- be built. For a list of valid values for _lang_x you can issue the
+- following command in the gcc directory of your GCC source tree:
+- grep language= */config-lang.in
+- Currently, you can use any of the following: c++, f77, java and
+- objc. CHILL is not currently maintained, and will almost certainly
+- fail to compile. Note that this switch does not work with EGCS
+- 1.1.2 or older versions of egcs. It is supported in GCC 2.95 and
+- newer versions.
+- If you do not pass this flag, all languages available in the gcc
+- sub-tree will be configured. Re-defining LANGUAGES when calling
+- make bootstrap _*does not*_ work anymore, as those language
+- sub-directories might not have been configured!
+- * --with-dwarf2 -- Specify that the compiler should use DWARF2
+- debugging information as the default.
+-
+- Some options which only apply to building cross compilers:
+- * --with-headers=_dir_ -- Specifies a directory which has target
+- include files. _This options is required_ when building a cross
+- compiler, if ${prefix}/${target}/sys-include doesn't pre-exist.
+- These include files will be copied into the gcc install directory.
+- Fixincludes will be run on these files to make them compatible
+- with gcc.
+- * --with-libs=_"dir1 dir2 ... dirN"_ -- Specifies a list of
+- directories which contain the target runtime libraries. These
+- libraries will be copied into the gcc install directory.
+- * --with-newlib -- Specifies that "newlib" is being used as the
+- target C library. This causes __eprintf to be omitted from
+- libgcc.a on the assumption that it will be provided by newlib.
+-
+- Note that each --enable option has a corresponding --disable option
+- and that each --with option has a corresponding --without option.
+- _________________________________________________________________
+-
+- [1]Return to the GCC Installation page
+-
+-References
+-
+- 1. http://gcc.gnu.org/install/index.html
+diff -ruNb gcc-2.95.3/install/configure.html gcc-2.95.4/install/configure.html
+--- gcc-2.95.3/install/configure.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/configure.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,213 +0,0 @@
+-<html>
+-<head>
+-<title>Installing GCC: Configuration</title>
+-</head>
+-<body>
+-<h1 align="center">Installing GCC: Configuration</h1>
+-
+-<p>Like most GNU software, GCC must be configured before it can be built.
+-This document describes the recommended configuration procedure
+-for both native and cross targets.
+-
+-<p>We use <i>srcdir</i> to refer to the toplevel source directory for
+-GCC; we use <i>objdir</i> to refer to the toplevel build/object
+-directory.
+-
+-<p>First, we <b>highly</b> recommend that GCC be built into a
+-separate directory than the sources which does <b>not</b> reside
+-within the source tree. This is how we generally build GCC; building
+-where <i>srcdir</i> == <i>objdir</i> should still work, but doesn't
+-get extensive testing; building where <i>objdir</i> is a subdirectory
+-of <i>srcdir</i> is unsupported.
+-
+-<p>Second, when configuring a native system, either "cc" or "gcc" must be in
+-your path or you must set CC in your environment before running configure.
+-Otherwise the configuration scripts may fail.
+-
+-<p>To configure GCC:
+-
+-<blockquote>
+-<tt>
+- <br>% mkdir <i>objdir</i>
+- <br>% cd <i>objdir</i>
+- <br>% <i>srcdir</i>/configure <b>[target]</b> <b>[options]</b>
+-</tt>
+-</blockquote>
+-
+-
+-<p><b>target specification</b>
+-<ul>
+- <li>GCC has code to correctly determine the correct value for
+- <b>target</b> for nearly all native systems. Therefore, we highly
+- recommend you not provide a configure target when configuring a
+- native compiler.
+-
+- <li> <b>target</b> must be specified as <tt>--target=</tt><i>target</i>
+- when configuring a cross compiler;
+- examples of valid targets would be i960-rtems, m68k-coff, sh-elf, etc.
+-
+- <li>Specifying just <i>target</i> instead of <tt>--target=</tt><i>target</i>
+- implies that the host defaults to <i>target</i>.
+-</ul>
+-
+-
+-<p><b> options specification</b>
+-
+-<p>Use <b>options</b> to override several configure time options for
+-GCC. A partial list of supported <tt>options</tt>:
+-
+-<ul>
+- <li> <tt>--prefix=</tt><i>dirname</i> -- Specify the toplevel installation
+- directory. This is the recommended way to install the tools into a directory
+- other than the default. The toplevel installation directory defaults to
+- /usr/local.
+-
+- <p> We <b>highly</b> recommend against <i>prefix</i> being the same or a
+- subdirectory of <i>objdir</i> or vice versa.
+-
+- <p>These additional options control where certain parts of the distribution
+- are installed. Normally you should not need to use these options.
+- <ul>
+- <li> <tt>--with-local-prefix=</tt><i>dirname</i> -- Specify the installation
+- directory for local include files. The default is /usr/local.
+-
+- <li> <tt>--with-gxx-include-dir=</tt><i>dirname</i> -- Specify the installation
+- directory for g++ header files. The default is /usr/local/include/g++.
+- </ul>
+-
+- <li> <tt>--enable-shared</tt> -- Build shared versions of the C++ runtime
+- libraries if supported <tt>--disable-shared</tt> is the default.
+-
+- <li> <tt>--with-gnu-as</tt> -- Specify that the compiler should
+- assume that the assembler it finds is the GNU assembler. However,
+- this does not modify the rules to find an assembler and will result
+- in confusion if the found assembler is not actually the GNU
+- assembler. If you have more than one assembler installed on your
+- system, you may want to use this option in connection with
+- <tt>--with-as=/path/to/gas</tt>.
+-
+- <li> <tt>--with-as=</tt><i>/path/to/as</i> -- Specify that the compiler
+- should use the assembler pointed to by <i>pathname</i>, rather than
+- the one found by the standard rules to find an assembler, which are:
+- <ul>
+- <li> Check the <i>$exec_prefix/lib/gcc-lib/$target/$version</i>
+- directory, where <i>$exec_prefix</i> defaults to <i>$prefix</i>
+- which defaults to <i>/usr/local</i> unless overridden by the
+- <tt>--prefix=/pathname</tt> switch described above.
+- <i>$target</i> is the target system triple, such as
+- <i>sparc-sun-solaris2.7</i>, and <i>$version</i> denotes the GCC
+- version, such as <i>2.95.2</i>.
+-
+- <li> Check operating system specific directories
+- (e.g. <i>/usr/ccs/bin</i> on Sun Solaris).
+- </ul>
+- Note that these rules do not check for the value of
+- <i>$PATH</i>. You may want to use <tt>--with-as</tt> if no assembler
+- is installed in the directories listed above, or if you have
+- multiple assemblers installed and want to choose one that is not
+- found by the above rules.
+-
+- <li> <tt>--with-gnu-ld</tt> -- Same as <tt>--with-gnu-as</tt> but
+- for the linker.
+-
+- <li> <tt>--with-ld=</tt><i>/path/to/ld</i> -- Same as
+- <tt>--with-as</tt>, but for the linker.
+-
+- <li> <tt>--with-stabs</tt> -- Specify that stabs debugging information should be used
+- instead of whatever format the host normally uses. Normally GCC uses the
+- same debug format as the host system.
+-
+- <li> <tt>--enable-multilib</tt> -- Specify that multiple target libraries
+- should be built to support different target variants, calling conventions,
+- etc. This is the default.
+-
+- <li> <tt>--enable-threads</tt> -- Specify that the target supports threads.
+- This affects the Objective-C compiler and runtime library, and exception
+- handling for other languages like C++ and Java.
+-
+- <li> <tt>--enable-threads=</tt><i>lib</i> -- Specify that <i>lib</i> is the
+- thread support library. This affects the Objective-C compiler and
+- runtime library, and exception handling for other languages like C++ and
+- Java.
+-
+- <li> <tt>--with-cpu=</tt><i>cpu</i> -- Specify which cpu variant the
+- compiler should generate code for by default. This is currently
+- only supported on the some ports, specifically arm, powerpc, and
+- SPARC. If configure does not recognize the model name (e.g. arm700,
+- 603e, or ultrasparc) you provide, please check the configure script
+- for a complete list of supported models.
+-
+- <li> <tt>--enable-target-optspace</tt> -- Specify that target libraries
+- should be optimized for code space instead of code speed. This is the
+- default for the m32r platform.
+-
+- <li> <tt>--enable-cpp</tt> -- Specify that a shell script which emulates
+- traditional cpp functionality should be installed.
+-
+- <li> <tt>--enable-cpplib</tt> -- Specify that the functionality of
+- CPP should be integrated into the compiler itself. This option is
+- not supported by snapshots since November 2000. In snapshots where
+- it is supported, it is not enabled by default, except for snapshots
+- very close to November 2000.
+-
+- <li> <tt>--without-fast-fixincludes</tt> -- Specify that the old, slower
+- method of fixing the system header files should be used.
+- EGCS 1.1.x and older releases default to the slow version. GCC 2.95 and
+- newer releases will default to the fast version.
+-
+- <li> <tt>--enable-version-specific-runtime-libs</tt> -- Specify that runtime
+- libraries should be installed in the compiler specific subdirectory
+- (<tt>${libsubdir}</tt>) rather than the usual places.
+- In addition, libstdc++'s include files will be installed in
+- <tt>${libsubdir}/include/g++</tt> unless you overruled it by using
+- <tt>--with-gxx-include-dir=</tt><i>dirname</i>.
+- Using this option is particularly useful if you intend to use several
+- versions of GCC in parallel. This is currently supported by <tt>libf2c</tt>
+- and <tt>libstdc++</tt>.
+-
+- <li> <tt>--enable-languages=</tt><i>lang1</i><tt>,</tt><i>lang2</i><tt>,...</tt>
+- -- Specify that only a particular subset of compilers and their runtime libraries
+- should be built. For a list of valid values for <i>lang</i><tt>x</tt> you can issue
+- the following command in the <tt>gcc</tt> directory of your GCC source tree:<br>
+- <tt>
+- grep language= */config-lang.in
+- </tt><br>
+- Currently, you can use any of the following: <code>c++</code>,
+- <code>f77</code>, <code>java</code> and <code>objc</code>.
+- <code>CHILL</code> is not currently maintained, and will almost
+- certainly fail to compile. Note that this switch does not work with
+- EGCS 1.1.2 or older versions of egcs. It is supported in GCC 2.95
+- and newer versions. <br>
+- If you do not pass this flag, all languages available in the <tt>gcc</tt> sub-tree
+- will be configured. Re-defining LANGUAGES when calling <tt>make bootstrap</tt>
+- <b>*does not*</b> work anymore, as those language sub-directories might not have been
+- configured!
+- <li> <tt>--with-dwarf2</tt> -- Specify that the compiler should use DWARF2
+- debugging information as the default.
+-
+-</ul>
+-
+-<p>Some options which only apply to building cross compilers:
+-<ul>
+- <li> <tt>--with-headers=</tt><i>dir</i> -- Specifies a directory which has
+- target include files.
+- <em>This options is required</em> when building a cross
+- compiler, if <tt>${prefix}/${target}/sys-include</tt> doesn't pre-exist.
+- These include files will be copied into the gcc install directory.
+- Fixincludes will be run on these files to make them compatible with gcc.
+- <li> <tt>--with-libs=</tt><i>"dir1 dir2 ... dirN"</i> -- Specifies a list of
+- directories which contain the target runtime libraries. These libraries will
+- be copied into the gcc install directory.
+- <li> <tt>--with-newlib</tt> -- Specifies that "newlib" is being used as the target
+- C library. This causes __eprintf to be omitted from libgcc.a on the
+- assumption that it will be provided by newlib.
+-</ul>
+-
+-<p>Note that each <tt>--enable</tt> option has a corresponding <tt>--disable</tt> option and
+-that each <tt>--with</tt> option has a corresponding <tt>--without</tt> option.
+-
+-<hr>
+-<p><a href="./index.html">Return to the GCC Installation page</a></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/dec-osf-shlibstdc++.patch gcc-2.95.4/install/dec-osf-shlibstdc++.patch
+--- gcc-2.95.3/install/dec-osf-shlibstdc++.patch 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/dec-osf-shlibstdc++.patch 1970-01-01 01:00:00.000000000 +0100
+@@ -1,27 +0,0 @@
+-Index: libstdc++/ChangeLog
+-from Alexandre Oliva <oliva@dcc.unicamp.br>
+-
+- * config/dec-osf.ml: Force all of libgcc into libstdc++, to avoid
+- multiply-defined linker errors.
+-
+-Index: libstdc++/config/dec-osf.ml
+-===================================================================
+-RCS file: /egcs/carton/cvsfiles/egcs/libstdc++/config/dec-osf.ml,v
+-retrieving revision 1.2
+-diff -u -r1.2 dec-osf.ml
+---- libstdc++/config/dec-osf.ml 1998/08/30 21:18:41 1.2
+-+++ libstdc++/config/dec-osf.ml 1999/07/15 07:40:11
+-@@ -3,4 +3,12 @@
+-
+- LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
+- DEPLIBS = ../$(SHLIB)
+--SHDEPS = -lm
+-+SHDEPS = -lm -Wl,-all,-lgcc,-none
+-+# Some testcases in the testsuite required symbols from libgcc, say,
+-+# __pure_virtual, that would not have been copied into libstdc++
+-+# without this -Wl switch above. But __pure_virtual depended on other
+-+# symbols of libgcc that had been copied to libstdc++. However,
+-+# DU4.0d's ld would report such symbols as duplicates, and refuse to
+-+# link. Forcing some symbols from libgcc into libstdc++ ensures that
+-+# we don't get such late undefined symbols, avoiding the bogus
+-+# multiple-definition errors.
+diff -ruNb gcc-2.95.3/install/DOWNLOAD gcc-2.95.4/install/DOWNLOAD
+--- gcc-2.95.3/install/DOWNLOAD 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/install/DOWNLOAD 1970-01-01 01:00:00.000000000 +0100
+@@ -1,40 +0,0 @@
+-
+- Downloading GCC
+-
+- GCC is distributed via CVS and FTP tarballs compressed with gzip or
+- bzip2. It is possible to download a full distribution or specific
+- components.
+-
+- Please refer to our [1]releases web page for information on how to
+- obtain GCC.
+-
+- The full distribution includes the C, C++, Objective-C, Fortran, Java,
+- and Chill compilers. The full distribution also includes runtime
+- libraries for C++, Objective-C and Fortran. In the future the GNU
+- compiler testsuites will be included in the full distribution.
+-
+- If you choose to download specific components, you must download the
+- core gcc distribution plus any language specific distributions you
+- wish to use. The core distribution includes the C language front-end
+- as well as the shared components. Each language has a tarball which
+- includes the language front-end as well as the language runtime (when
+- appropriate).
+-
+- Unpack the core distribution as well as any language specific
+- distributions in the same directory.
+-
+- If you also intend to build binutils (either to upgrade an existing
+- installation or for use in place of the corresponding tools of your
+- OS), unpack the binutils distribution either in the same directory or
+- a separate one. In the latter case, add symbolic links to any
+- components of the binutils you intend to build alongside the compiler
+- (bfd, binutils, gas, gprof, ld, opcodes,...) to the directory
+- containing the GCC sources.
+- _________________________________________________________________
+-
+- [2]Return to the GCC Installation page
+-
+-References
+-
+- 1. http://gcc.gnu.org/releases.html
+- 2. http://gcc.gnu.org/install/index.html
+diff -ruNb gcc-2.95.3/install/download.html gcc-2.95.4/install/download.html
+--- gcc-2.95.3/install/download.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/download.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,42 +0,0 @@
+-<html>
+-<head>
+-<title>Downloading GCC</title>
+-</head>
+-
+-<body>
+-<h1 align="center">Downloading GCC</h1>
+-
+-<p>GCC is distributed via CVS and FTP tarballs compressed with gzip or
+-bzip2. It is possible to download a full distribution or specific
+-components.</p>
+-
+-<p>Please refer to our <a href="http://gcc.gnu.org/releases.html">releases
+-web page</a> for information on how to obtain GCC.</p>
+-
+-<p>The full distribution includes the C, C++, Objective-C, Fortran, Java,
+-and Chill compilers. The full distribution also includes runtime libraries
+-for C++, Objective-C and Fortran. In the future the GNU compiler testsuites
+-will be included in the full distribution.</p>
+-
+-<p>If you choose to download specific components, you must download the core
+-gcc distribution plus any language specific distributions you wish to
+-use. The core distribution includes the C language front-end as well as the
+-shared components. Each language has a tarball which includes the language
+-front-end as well as the language runtime (when appropriate).</p>
+-
+-<p>Unpack the core distribution as well as any language specific
+-distributions in the same directory.</p>
+-
+-<P>If you also intend to build binutils (either to upgrade an existing
+-installation or for use in place of the corresponding tools of your
+-OS), unpack the binutils distribution either in the same directory or
+-a separate one. In the latter case, add symbolic links to any
+-components of the binutils you intend to build alongside the compiler
+-(bfd, binutils, gas, gprof, ld, opcodes,...) to the directory containing
+-the GCC sources.</p>
+-
+-<hr>
+-<p><a href="./index.html">Return to the GCC Installation page</a></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/FINALINSTALL gcc-2.95.4/install/FINALINSTALL
+--- gcc-2.95.3/install/FINALINSTALL 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/install/FINALINSTALL 1970-01-01 01:00:00.000000000 +0100
+@@ -1,31 +0,0 @@
+-
+- Installing GCC: Final installation
+-
+- Now that GCC has been built and tested, you can install it with `cd
+- _objdir_; make install' for a native compiler or `cd _objdir_; make
+- install LANGUAGES="c c++"' for a cross compiler (note installing cross
+- compilers will be easier in the next release!).
+-
+- That step completes the installation of GCC; user level binaries can
+- be found in _prefix_/bin where _prefix_ is the value you specified
+- with the --prefix to configure (or /usr/local by default).
+-
+- If you don't mind, please quickly review the [1]build status page. If
+- your system is not listed, send a note to [2]gcc@gcc.gnu.org
+- indicating that you successfully built and installed GCC.
+-
+- Include the output from running _srcdir_/config.guess. (Do not send us
+- the config.guess file itself, just the output from running it!)
+-
+- If you find a bug, please report it following our [3]bug reporting
+- guidelines.
+- _________________________________________________________________
+-
+- [4]Return to the GCC Installation page
+-
+-References
+-
+- 1. http://gcc.gnu.org/gcc-2.95/buildstat.html
+- 2. mailto:gcc@gcc.gnu.org
+- 3. http://gcc.gnu.org/bugs.html
+- 4. http://gcc.gnu.org/install/index.html
+diff -ruNb gcc-2.95.3/install/finalinstall.html gcc-2.95.4/install/finalinstall.html
+--- gcc-2.95.3/install/finalinstall.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/finalinstall.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,35 +0,0 @@
+-<html>
+-<head>
+-<title>Installing GCC: Final installation</title>
+-</head>
+-<body>
+-<h1 align="center">Installing GCC: Final installation</h1>
+-
+-<p>Now that GCC has been built and tested, you can install it with
+-`<code>cd <i>objdir</i>; make install</code>' for a native compiler or
+-`<code>cd <i>objdir</i>; make install LANGUAGES="c c++"</code>' for
+-a cross compiler (note installing cross compilers will be easier in the
+-next release!).</p>
+-
+-<p>That step completes the installation of GCC; user level binaries can
+-be found in <i>prefix</i>/bin where <i>prefix</i> is the value you specified
+-with the --prefix to configure (or /usr/local by default).</p>
+-
+-<p>If you don't mind, please quickly review the <a
+-href="http://gcc.gnu.org/gcc-2.95/buildstat.html">build status page</a>.
+-If your system is not listed, send a note to
+-<a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a> indicating
+-that you successfully built and installed GCC.</p>
+-
+-<p>Include the output from running <i>srcdir</i>/config.guess. (Do not
+-send us the config.guess file itself, just the output from running
+-it!)</p>
+-
+-<p>If you find a bug, please report it following our <a
+-href="../bugs.html">bug reporting guidelines</a>.</p>
+-
+-<hr>
+-<p><a href="./index.html">Return to the GCC Installation page</a></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/glibc-2.2.patch gcc-2.95.4/install/glibc-2.2.patch
+--- gcc-2.95.3/install/glibc-2.2.patch 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/glibc-2.2.patch 1970-01-01 01:00:00.000000000 +0100
+@@ -1,282 +0,0 @@
+-2000-10-11 Jakub Jelinek <jakub@redhat.com>
+-
+- * iostream.cc (ostream::operator<<(double n)) [__GLIBC_MINOR__ >= 2]:
+- Initialize new fields wide and i18n of struct printf_info.
+- (ostream::operator<<(long double n)) [__GLIBC_MINOR__ >= 2]:
+- Likewise.
+-
+-2000-09-23 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+-
+- * stdstreams.cc: Include <libio.h>, not "libio.h".
+- * iolibio.h: Likewise.
+- (_IO_pos_BAD): Use _IO_off_t instead of _IO_fpos_t.
+- * libio.h (_IO_USER_LOCK): Define.
+-
+-1999-12-13 Jakub Jelinek <jakub@redhat.com>
+-
+- * libio.h (_IO_cookie_io_functions_t): Use _IO_off_t instead of
+- _IO_fpos_t.
+- (_IO_seekoff, _IO_seekpos): Likewise. Use _IO_off64_t instead of
+- _IO_fpos64_t.
+- * libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Likewise.
+- (_IO_seekoff, _IO_seekpos): Likewise.
+- (_IO_default_seekoff, _IO_default_seekpos): Likewise.
+- (_IO_default_seek): Likewise.
+- (_IO_file_seekoff, _IO_file_seek, _IO_str_seekoff): Likewise.
+- * streambuf.h (streampos): Typedef to _IO_off_t resp. _IO_off64_t.
+- * parsestream.h (class parsebuf::pos_at_line_start): Change type
+- to _IO_off_t.
+-
+---- gcc-2.95.2/libio/libio.h.jj Mon Jun 29 20:06:26 1998
+-+++ gcc-2.95.2/libio/libio.h Thu Nov 2 17:33:00 2000
+-@@ -136,6 +136,7 @@
+- #define _IO_IS_APPENDING 0x1000
+- #define _IO_IS_FILEBUF 0x2000
+- #define _IO_BAD_SEEN 0x4000
+-+#define _IO_USER_LOCK 0x8000
+-
+- /* These are "formatting flags" matching the iostream fmtflags enum values. */
+- #define _IO_SKIPWS 01
+-@@ -277,7 +278,7 @@ typedef struct
+- {
+- _IO_ssize_t (*read) __PMT ((struct _IO_FILE *, void *, _IO_ssize_t));
+- _IO_ssize_t (*write) __PMT ((struct _IO_FILE *, const void *, _IO_ssize_t));
+-- _IO_fpos_t (*seek) __PMT ((struct _IO_FILE *, _IO_off_t, int));
+-+ _IO_off_t (*seek) __PMT ((struct _IO_FILE *, _IO_off_t, int));
+- int (*close) __PMT ((struct _IO_FILE *));
+- } _IO_cookie_io_functions_t;
+-
+-@@ -348,11 +349,11 @@ extern _IO_ssize_t _IO_padn __P ((_IO_FI
+- extern _IO_size_t _IO_sgetn __P ((_IO_FILE *, void *, _IO_size_t));
+-
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--extern _IO_fpos64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+--extern _IO_fpos64_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos64_t, int));
+-+extern _IO_off64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+-+extern _IO_off64_t _IO_seekpos __P ((_IO_FILE *, _IO_off64_t, int));
+- #else
+--extern _IO_fpos_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+--extern _IO_fpos_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos_t, int));
+-+extern _IO_off_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+-+extern _IO_off_t _IO_seekpos __P ((_IO_FILE *, _IO_off_t, int));
+- #endif
+-
+- extern void _IO_free_backup_area __P ((_IO_FILE *));
+---- gcc-2.95.2/libio/libioP.h.jj Tue May 18 00:58:56 1999
+-+++ gcc-2.95.2/libio/libioP.h Tue Oct 10 11:40:57 2000
+-@@ -146,10 +146,10 @@ typedef _IO_size_t (*_IO_xsgetn_t) __PMT
+- It matches the streambuf::seekoff virtual function.
+- It is also used for the ANSI fseek function. */
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--typedef _IO_fpos64_t (*_IO_seekoff_t) __PMT ((_IO_FILE *FP, _IO_off64_t OFF,
+-+typedef _IO_off64_t (*_IO_seekoff_t) __PMT ((_IO_FILE *FP, _IO_off64_t OFF,
+- int DIR, int MODE));
+- #else
+--typedef _IO_fpos_t (*_IO_seekoff_t) __PMT ((_IO_FILE *FP, _IO_off_t OFF,
+-+typedef _IO_off_t (*_IO_seekoff_t) __PMT ((_IO_FILE *FP, _IO_off_t OFF,
+- int DIR, int MODE));
+- #endif
+- #define _IO_SEEKOFF(FP, OFF, DIR, MODE) JUMP3 (__seekoff, FP, OFF, DIR, MODE)
+-@@ -160,9 +160,9 @@ typedef _IO_fpos_t (*_IO_seekoff_t) __PM
+- It is also used for the ANSI fgetpos and fsetpos functions. */
+- /* The _IO_seek_cur and _IO_seek_end options are not allowed. */
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--typedef _IO_fpos64_t (*_IO_seekpos_t) __PMT ((_IO_FILE *, _IO_fpos64_t, int));
+-+typedef _IO_off64_t (*_IO_seekpos_t) __PMT ((_IO_FILE *, _IO_off64_t, int));
+- #else
+--typedef _IO_fpos_t (*_IO_seekpos_t) __PMT ((_IO_FILE *, _IO_fpos_t, int));
+-+typedef _IO_off_t (*_IO_seekpos_t) __PMT ((_IO_FILE *, _IO_off_t, int));
+- #endif
+- #define _IO_SEEKPOS(FP, POS, FLAGS) JUMP2 (__seekpos, FP, POS, FLAGS)
+-
+-@@ -213,9 +213,9 @@ typedef _IO_ssize_t (*_IO_write_t) __PMT
+- It matches the streambuf::sys_seek virtual function, which is
+- specific to this implementation. */
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--typedef _IO_fpos64_t (*_IO_seek_t) __PMT ((_IO_FILE *, _IO_off64_t, int));
+-+typedef _IO_off64_t (*_IO_seek_t) __PMT ((_IO_FILE *, _IO_off64_t, int));
+- #else
+--typedef _IO_fpos_t (*_IO_seek_t) __PMT ((_IO_FILE *, _IO_off_t, int));
+-+typedef _IO_off_t (*_IO_seek_t) __PMT ((_IO_FILE *, _IO_off_t, int));
+- #endif
+- #define _IO_SYSSEEK(FP, OFFSET, MODE) JUMP2 (__seek, FP, OFFSET, MODE)
+-
+-@@ -298,11 +298,11 @@ struct _IO_FILE_plus
+- /* Generic functions */
+-
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--extern _IO_fpos64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+--extern _IO_fpos64_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos64_t, int));
+-+extern _IO_off64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+-+extern _IO_off64_t _IO_seekpos __P ((_IO_FILE *, _IO_off64_t, int));
+- #else
+--extern _IO_fpos_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+--extern _IO_fpos_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos_t, int));
+-+extern _IO_off_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+-+extern _IO_off_t _IO_seekpos __P ((_IO_FILE *, _IO_off_t, int));
+- #endif
+-
+- extern void _IO_switch_to_main_get_area __P ((_IO_FILE *));
+-@@ -340,22 +340,22 @@ extern _IO_size_t _IO_default_xsputn __P
+- _IO_size_t));
+- extern _IO_size_t _IO_default_xsgetn __P ((_IO_FILE *, void *, _IO_size_t));
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--extern _IO_fpos64_t _IO_default_seekoff __P ((_IO_FILE *,
+-+extern _IO_off64_t _IO_default_seekoff __P ((_IO_FILE *,
+- _IO_off64_t, int, int));
+--extern _IO_fpos64_t _IO_default_seekpos __P ((_IO_FILE *,
+-- _IO_fpos64_t, int));
+-+extern _IO_off64_t _IO_default_seekpos __P ((_IO_FILE *,
+-+ _IO_off64_t, int));
+- #else
+--extern _IO_fpos_t _IO_default_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+--extern _IO_fpos_t _IO_default_seekpos __P ((_IO_FILE *, _IO_fpos_t, int));
+-+extern _IO_off_t _IO_default_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+-+extern _IO_off_t _IO_default_seekpos __P ((_IO_FILE *, _IO_off_t, int));
+- #endif
+- extern _IO_ssize_t _IO_default_write __P ((_IO_FILE *, const void *,
+- _IO_ssize_t));
+- extern _IO_ssize_t _IO_default_read __P ((_IO_FILE *, void *, _IO_ssize_t));
+- extern int _IO_default_stat __P ((_IO_FILE *, void *));
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--extern _IO_fpos64_t _IO_default_seek __P ((_IO_FILE *, _IO_off64_t, int));
+-+extern _IO_off64_t _IO_default_seek __P ((_IO_FILE *, _IO_off64_t, int));
+- #else
+--extern _IO_fpos_t _IO_default_seek __P ((_IO_FILE *, _IO_off_t, int));
+-+extern _IO_off_t _IO_default_seek __P ((_IO_FILE *, _IO_off_t, int));
+- #endif
+- extern int _IO_default_sync __P ((_IO_FILE *));
+- #define _IO_default_close ((_IO_close_t) _IO_default_sync)
+-@@ -389,11 +389,11 @@ extern void _IO_flush_all_linebuffered _
+- extern int _IO_file_doallocate __P ((_IO_FILE *));
+- extern _IO_FILE* _IO_file_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--extern _IO_fpos64_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+--extern _IO_fpos64_t _IO_file_seek __P ((_IO_FILE *, _IO_off64_t, int));
+-+extern _IO_off64_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+-+extern _IO_off64_t _IO_file_seek __P ((_IO_FILE *, _IO_off64_t, int));
+- #else
+--extern _IO_fpos_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+--extern _IO_fpos_t _IO_file_seek __P ((_IO_FILE *, _IO_off_t, int));
+-+extern _IO_off_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+-+extern _IO_off_t _IO_file_seek __P ((_IO_FILE *, _IO_off_t, int));
+- #endif
+- extern _IO_size_t _IO_file_xsputn __P ((_IO_FILE *, const void *, _IO_size_t));
+- extern int _IO_file_stat __P ((_IO_FILE *, void *));
+-@@ -427,9 +427,9 @@ extern int _IO_str_underflow __P ((_IO_F
+- extern int _IO_str_overflow __P ((_IO_FILE *, int));
+- extern int _IO_str_pbackfail __P ((_IO_FILE *, int));
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--extern _IO_fpos64_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+-+extern _IO_off64_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+- #else
+--extern _IO_fpos_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+-+extern _IO_off_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+- #endif
+- extern void _IO_str_finish __P ((_IO_FILE *, int));
+-
+-@@ -544,12 +544,12 @@ extern int _IO_vscanf __P ((const char *
+- where an _IO_fpos_t is a struct.
+- Note that _IO_off_t must be an integral type. */
+-
+--/* _IO_pos_BAD is an _IO_fpos_t value indicating error, unknown, or EOF. */
+-+/* _IO_pos_BAD is an _IO_off_t value indicating error, unknown, or EOF. */
+- #ifndef _IO_pos_BAD
+- # if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+--# define _IO_pos_BAD ((_IO_fpos64_t) -1)
+-+# define _IO_pos_BAD ((_IO_off64_t) -1)
+- # else
+--# define _IO_pos_BAD ((_IO_fpos_t) -1)
+-+# define _IO_pos_BAD ((_IO_off_t) -1)
+- # endif
+- #endif
+- /* _IO_pos_as_off converts an _IO_fpos_t value to an _IO_off_t value. */
+---- gcc-2.95.2/libio/streambuf.h.jj Mon Aug 9 02:07:01 1999
+-+++ gcc-2.95.2/libio/streambuf.h Tue Oct 10 11:40:57 2000
+-@@ -72,10 +72,10 @@ class ostream; class streambuf;
+-
+- #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+- typedef _IO_off64_t streamoff;
+--typedef _IO_fpos64_t streampos;
+-+typedef _IO_off64_t streampos;
+- #else
+- typedef _IO_off_t streamoff;
+--typedef _IO_fpos_t streampos;
+-+typedef _IO_off_t streampos;
+- #endif
+- typedef _IO_ssize_t streamsize;
+-
+---- gcc-2.95.2/libio/parsestream.h.jj Fri Aug 22 00:58:20 1997
+-+++ gcc-2.95.2/libio/parsestream.h Tue Oct 10 11:40:57 2000
+-@@ -42,7 +42,7 @@ extern "C++" {
+-
+- class parsebuf : public streambuf {
+- protected:
+-- _IO_fpos_t pos_at_line_start;
+-+ _IO_off_t pos_at_line_start;
+- long _line_length;
+- unsigned long __line_number;
+- char *buf_start;
+---- gcc-2.95.2/libio/iostream.cc.jj Sat Aug 7 08:01:46 1999
+-+++ gcc-2.95.2/libio/iostream.cc Thu Nov 2 17:33:00 2000
+-@@ -1,5 +1,5 @@
+- /* This is part of libio/iostream, providing -*- C++ -*- input/output.
+-- Copyright (C) 1993, 1997 Free Software Foundation, Inc.
+-+ Copyright (C) 1993, 1997, 2000 Free Software Foundation, Inc.
+-
+- This file is part of the GNU IO Library. This library is free
+- software; you can redistribute it and/or modify it under the
+-@@ -687,6 +687,10 @@ ostream& ostream::operator<<(double n)
+- /* extra: */ 0,
+- #if __GLIBC_MINOR__ >= 1
+- /* is_char: */ 0,
+-+#if __GLIBC_MINOR__ >= 2
+-+ /* wide: */ 0,
+-+ /* i18n: */ 0,
+-+#endif
+- #endif
+- #endif
+- /* pad: */ fill()
+-@@ -793,6 +797,10 @@ ostream& ostream::operator<<(long double
+- /* extra: */ 0,
+- #if __GLIBC_MINOR__ >= 1
+- /* is_char: */ 0,
+-+#if __GLIBC_MINOR__ >= 2
+-+ /* wide: */ 0,
+-+ /* i18n: */ 0,
+-+#endif
+- #endif
+- #endif
+- /* pad: */ fill()
+---- gcc-2.95.2/libio/iolibio.h.jj Tue Feb 24 21:09:50 1998
+-+++ gcc-2.95.2/libio/iolibio.h Thu Nov 2 17:33:00 2000
+-@@ -1,4 +1,4 @@
+--#include "libio.h"
+-+#include <libio.h>
+-
+- /* These emulate stdio functionality, but with a different name
+- (_IO_ungetc instead of ungetc), and using _IO_FILE instead of FILE. */
+-@@ -38,7 +38,11 @@ extern int _IO_obstack_vprintf __P ((str
+- _IO_va_list));
+- extern int _IO_obstack_printf __P ((struct obstack *, const char *, ...));
+- #ifndef _IO_pos_BAD
+--#define _IO_pos_BAD ((_IO_fpos_t)(-1))
+-+# if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
+-+# define _IO_pos_BAD ((_IO_off64_t) -1)
+-+# else
+-+# define _IO_pos_BAD ((_IO_off_t) -1)
+-+# endif
+- #endif
+- #define _IO_clearerr(FP) ((FP)->_flags &= ~(_IO_ERR_SEEN|_IO_EOF_SEEN))
+- #define _IO_fseek(__fp, __offset, __whence) \
+---- gcc-2.95.2/libio/stdstreams.cc.jj Fri Aug 22 00:58:21 1997
+-+++ gcc-2.95.2/libio/stdstreams.cc Thu Nov 2 17:33:00 2000
+-@@ -36,7 +36,7 @@ the executable file might be covered by
+- // then we don't need to, since in that case stdin/stdout/stderr
+- // are identical to _IO_stdin/_IO_stdout/_IO_stderr.
+-
+--#include "libio.h"
+-+#include <libio.h>
+-
+- #ifdef _STDIO_USES_IOSTREAM
+- #define CIN_SBUF _IO_stdin_
+diff -ruNb gcc-2.95.3/install/INDEX gcc-2.95.4/install/INDEX
+--- gcc-2.95.3/install/INDEX 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/install/INDEX 1970-01-01 01:00:00.000000000 +0100
+@@ -1,45 +0,0 @@
+-
+- Installing GCC
+-
+- The latest version of this document is always available at
+- [1]http://gcc.gnu.org/install/.
+-
+- This document describes the generic installation procedure for GCC as
+- well as detailing some target specific installation instructions.
+-
+- GCC includes several components that previously were separate
+- distributions with their own installation instructions. This document
+- supersedes all package specific installation instructions. We provide
+- the component specific installation information in the source
+- distribution for historical reference purposes only.
+-
+- _Before_ starting the build/install procedure please check the
+- [2]host/target specific installation notes. We recommend you browse
+- the entire generic installation instructions before you proceed.
+-
+- The installation procedure itself is broken into five steps.
+- 1. [3]Downloading the source
+- 2. [4]Configuration
+- 3. [5]Building
+- 4. [6]Testing (optional)
+- 5. [7]Final install
+-
+- Please note that GCC does not support `make uninstall` and probably
+- won't do so in the near future as this would open a can of worms.
+- Instead, we suggest that you install GCC into a directory of its own
+- and simply remove that directory when you do not need that specific
+- version of GCC any longer.
+- _________________________________________________________________
+-
+- [8]Return to the GCC Installation page
+-
+-References
+-
+- 1. http://gcc.gnu.org/install/
+- 2. http://gcc.gnu.org/install/specific.html
+- 3. http://gcc.gnu.org/install/download.html
+- 4. http://gcc.gnu.org/install/configure.html
+- 5. http://gcc.gnu.org/install/build.html
+- 6. http://gcc.gnu.org/install/test.html
+- 7. http://gcc.gnu.org/install/finalinstall.html
+- 8. http://gcc.gnu.org/install/index.html
+diff -ruNb gcc-2.95.3/install/index.html gcc-2.95.4/install/index.html
+--- gcc-2.95.3/install/index.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/index.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,45 +0,0 @@
+-<html>
+-<head>
+-<title>Installing GCC</title>
+-</head>
+-<body>
+-<h1 align="center">Installing GCC</h1>
+-
+-<p>The latest version of this document is always available at <a href="
+-http://gcc.gnu.org/install/">http://gcc.gnu.org/install/</a>.
+-
+-<p>This document describes the generic installation procedure for GCC as
+-well as detailing some target specific installation instructions.
+-
+-<p>GCC includes several components that previously were separate distributions
+-with their own installation instructions. This document supersedes all
+-package specific installation instructions. We provide the component specific
+-installation information in the source distribution for historical reference
+-purposes only.
+-
+-<p><em>Before</em> starting the build/install procedure please check
+-the <a href="specific.html">host/target specific installation notes</a>.
+-We recommend you browse the entire generic installation instructions
+-before you proceed.</p>
+-
+-<p>The installation procedure itself is broken into five steps.
+-
+-<ol>
+- <li><a href="download.html">Downloading the source</a></li>
+- <li><a href="configure.html">Configuration</a></li>
+- <li><a href="build.html">Building</a></li>
+- <li><a href="test.html">Testing</a> (optional)</li>
+- <li><a href="finalinstall.html">Final install</a></li>
+-</ol>
+-
+-<p>Please note that GCC does not support <CODE>`make uninstall`</CODE>
+-and probably won't do so in the near future as this would open a can
+-of worms. Instead, we suggest that you install GCC into a directory of
+-its own and simply remove that directory when you do not need that
+-specific version of GCC any longer.
+-
+-<hr>
+-<p><a href="./index.html">Return to the GCC Installation page</a></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/sco_osr5_g77.patch gcc-2.95.4/install/sco_osr5_g77.patch
+--- gcc-2.95.3/install/sco_osr5_g77.patch 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/sco_osr5_g77.patch 1970-01-01 01:00:00.000000000 +0100
+@@ -1,27 +0,0 @@
+-Index: libf2c/libI77/lread.c
+-===================================================================
+-RCS file: /cvs/egcs/egcs/libf2c/libI77/lread.c,v
+-retrieving revision 1.4
+-diff -u -p -r1.4 lread.c
+---- lread.c 1999/03/17 08:21:19 1.4
+-+++ lread.c 1999/07/11 03:42:33
+-@@ -70,7 +70,18 @@ un_getc(int x, FILE *f__cf)
+- #endif
+- { return ungetc(x,f__cf); }
+- #else
+--#define un_getc ungetc
+-+ /* The OpenServer 5.0.5 dynamic linker aborts on g77 programs
+-+ * that link against this object. Simply changing the shape of
+-+ * this relocation is enough to circumvent the bug in the dynamic
+-+ * linker.
+-+ */
+-+#if 0
+-+ #define un_getc ungetc
+-+#else
+-+ typedef int (blah) (int c, FILE *stream);
+-+ blah *un_getc = ungetc;
+-+#endif
+-+
+- #ifdef KR_headers
+- extern int ungetc();
+- #else
+diff -ruNb gcc-2.95.3/install/SPECIFIC gcc-2.95.4/install/SPECIFIC
+--- gcc-2.95.3/install/SPECIFIC 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/install/SPECIFIC 1970-01-01 01:00:00.000000000 +0100
+@@ -1,665 +0,0 @@
+-
+- Host/Target specific installation notes for GCC
+-
+- Please read this document carefully _before_ installing the GNU
+- Compiler Collection on your machine.
+- * [1]alpha*-dec-linux*
+- * [2]alpha*-dec-osf*
+- * [3]avr
+- * [4]DOS
+- * [5]hppa*-hp-hpux*
+- * [6]hppa*-hp-hpux9
+- * [7]hppa*-hp-hpux10
+- * [8]hppa*-hp-hpux11
+- * [9]*-*-linux-gnu
+- * [10]i?86-*-linux*
+- * [11]i?86-*-sco3.2v5*
+- * [12]i?86-*-solaris*
+- * [13]i?86-*-udk
+- * [14]*-ibm-aix*
+- * [15]m68k-*-nextstep*
+- * [16]m68k-sun-sunos4.1.1
+- * [17]mips*-sgi-irix[45]
+- * [18]mips*-sgi-irix6
+- * [19]powerpc-*-linux-gnu*
+- * [20]*-*-solaris*
+- * [21]sparc-sun-solaris*
+- * [22]sparc-sun-solaris2.7
+- * [23]*-sun-solaris2.8
+- * [24]Sun V5.0 Compiler Bugs
+- * [25]sparc-sun-sunos*
+- * [26]sparc-unknown-linux-gnulibc1
+- * [27]sparc64-*-*
+- * [28]Microsoft Windows
+- * [29]OS/2
+-
+- * [30]all ELF targets (SVR4, Solaris, etc.)
+- _________________________________________________________________
+-
+- alpha*-dec-linux*
+-
+- We strongly recommend to upgrade to binutils 2.10 (or newer).
+-
+- The following error:
+- Error: macro requires $at register while noat in effect
+-
+- indicates that you should upgrade to a newer version of the assembler,
+- 2.9 or later. If you can not upgrade the assembler, the compiler
+- option "-Wa,-m21164a" may work around this problem.
+- _________________________________________________________________
+-
+- alpha*-dec-osf*
+-
+- If you install a shared libstdc++ and, when you link a non-trivial C++
+- program (for example, gcc/testsuite/g++.other/delete3.C), the linker
+- reports a couple of errors about multiply-defined symbols (for
+- example, nothrow, __throw and terminate(void)), you've probably got a
+- linker bug, for which there's no known fix. The officially recommended
+- work-around is to remove the shared libstdc++.
+-
+- An alternative solution is to arrange that all symbols from libgcc get
+- copied to the shared libstdc++; see detailed solution below.
+- (Surprising as it may seem, this does indeed fix the problem!) _Beware_
+- that this may bring you binary-compatibility problems in the future,
+- if you don't use the same work-around next time you build libstdc++:
+- if programs start to depend on libstdc++ to provide symbols that used
+- to be only in libgcc, you must arrange that libstdc++ keeps providing
+- them, otherwise the programs will have to be relinked.
+-
+- The magic spell is to add -Wl,-all,-lgcc,-none to the definition of
+- macro SHDEPS in libstdc++/config/dec-osf.ml _before_
+- alpha*-dec-osf*/libstdc++/Makefile is created (a [31]patch that does
+- just that is available). If the Makefile already exists, run
+- ./config.status within directory alpha*-dec-osf*/libstdc++ (and
+- alpha*-dec-osf*/ieee/libstdc++, if it also exists). Remove any
+- existing libstdc++.so* from such directories, and run make
+- all-target-libstdc++ in the top-level directory, then make
+- install-target-libstdc++.
+-
+- If you have already removed the build tree, you may just remove
+- libstdc++.so.2.10.0 from the install tree and re-create it with the
+- command gcc -shared -o libstdc++.so.2.10.0
+- -Wl,-all,-lstdc++,-lgcc,-none -lm. If the ieee sub-directory exists,
+- repeat this command in it, with the additional flag -mieee.
+- _________________________________________________________________
+-
+- avr
+-
+- Use `configure --target=avr --enable-languages="c"' to configure GCC.
+-
+- Further installation notes and other useful information about AVR
+- tools can also be obtained from:
+- * [32]http://home.overta.ru/users/denisc
+- * [33]http://www.itnet.pl/amelektr/avr
+-
+- We strongly recommend to upgrade to binutils 2.11 (or a current
+- snapshot until 2.11 has been released).
+-
+- The following error:
+- Error: register required
+-
+- indicates that you should upgrade to a newer version of the binutils.
+- _________________________________________________________________
+-
+- DOS
+-
+- Please have a look at our [34]binaries page.
+- _________________________________________________________________
+-
+- hppa*-hp-hpux*
+-
+- We _highly_ recommend using gas/binutils-2.8 or newer on all hppa
+- platforms; you may encounter a variety of problems when using the HP
+- assembler.
+-
+- Specifically, -g does not work on HP-UX (since that system uses a
+- peculiar debugging format which GCC does not know about), unless you
+- use GAS and GDB and configure GCC with the --with-gnu-as option.
+-
+- If you wish to use pa-risc 2.0 architecture support, you must use
+- either the HP assembler or a recent [35]snapshot of gas.
+-
+- More specific information to hppa*-hp-hpux* targets follows.
+- _________________________________________________________________
+-
+- hppa*-hp-hpux9
+-
+- The HP assembler has major problems on this platform. We've tried to
+- work around the worst of the problems. However, those workarounds may
+- be causing linker crashes in some circumstances; the workarounds also
+- probably prevent shared libraries from working. Use the GNU assembler
+- to avoid these problems.
+-
+- The configuration scripts for GCC will also trigger a bug in the hpux9
+- shell. To avoid this problem set CONFIG_SHELL to /bin/ksh and SHELL to
+- /bin/ksh in your environment.
+- _________________________________________________________________
+-
+- hppa*-hp-hpux10
+-
+- For hpux10.20, we _highly_ recommend you pick up the latest sed patch
+- PHCO_19798 from HP. HP has two sites which provide patches free of
+- charge:
+- * [36]US, Canada, Asia-Pacific, and Latin-America
+- * [37]Europe
+-
+- The HP assembler on these systems is much better than the hpux9
+- assembler, but still has some problems. Most notably the assembler
+- inserts timestamps into each object file it creates, causing the
+- 3-stage comparison test to fail during a `make bootstrap'. You should
+- be able to continue by saying `make all' after getting the failure
+- from `make bootstrap'.
+- _________________________________________________________________
+-
+- hppa*-hp-hpux11
+-
+- GCC 2.95.2 does not support HP-UX 11, and it cannot generate 64-bit
+- object files. Current (as of late 2000) snapshots and GCC 3.0 do
+- support HP-UX 11.
+- _________________________________________________________________
+-
+- *-*-linux-gnu
+-
+- If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install
+- out-of-the-box. You'll get compile errors while building libstdc++.
+- The patch [38]glibc-2.2.patch, that is to be applied in the GCC source
+- tree, fixes the compatibility problems.
+- _________________________________________________________________
+-
+- i?86-*-linux*
+-
+- You will need binutils-2.9.1.0.15 or newer for exception handling to
+- work.
+-
+- If you receive Signal 11 errors when building on GNU/Linux, then it is
+- possible you have a hardware problem. Further information on this can
+- be found on [39]www.bitwizard.nl.
+- _________________________________________________________________
+-
+- i?86-*-sco3.2v5*
+-
+- Unlike earlier versions of GCC, the ability to generate COFF with this
+- target is no longer provided.
+-
+- Earlier versions of GCC emitted Dwarf-1 when generating ELF to allow
+- the system debugger to be used. That support was too burdensome to
+- maintain. GCC now emits only dwarf-2 for this target. This means you
+- may use either the UDK debugger or GDB to debug programs built by this
+- version of GCC.
+-
+- If you are building languages other than C, you must follow the
+- instructions about invoking `make bootstrap' because the native
+- OpenServer compiler will build a cc1plus that will not correctly parse
+- many valid C++ programs including those in libgcc.a. _You must do a
+- `make bootstrap' if you are building with the native compiler._
+-
+- Use of the `-march-pentiumpro' flag can result in unrecognized opcodes
+- when using the native assembler on OS versions before 5.0.6. (Support
+- for P6 opcodes was added to the native ELF assembler in that version.)
+- While it's rather rare to see these emitted by GCC yet, errors of the
+- basic form:
+- /usr/tmp/ccaNlqBc.s:22:unknown instruction: fcomip
+- /usr/tmp/ccaNlqBc.s:50:unknown instruction: fucomip
+-
+- are symptoms of this problem. You may work around this by not building
+- affected files with that flag, by using the GNU assembler, or by using
+- the assembler provided with the current version of the OS. Users of
+- GNU assembler should see the note below for hazards on doing so.
+-
+- The native SCO assembler that is provided with the OS at no charge is
+- normally required. If, however, you must be able to use the GNU
+- assembler (perhaps you're compiling code with asms that require GAS
+- syntax) you may configure this package using the flags --with-gnu-as.
+- You must use a recent version of GNU binutils; versions past 2.9.1
+- seem to work well. In general, the --with-gnu-as option isn't as well
+- tested as the native assembler.
+-
+- Look in gcc/config/i386/sco5.h (search for "messy") for additional
+- OpenServer-specific flags.
+-
+- Systems based on OpenServer before 5.0.4 (`uname -X' will tell you
+- what you're running) require TLS597 from ftp.sco.com/TLS for C++
+- constructors and destructors to work right.
+-
+- The system linker in (at least) 5.0.4 and 5.0.5 will sometimes do the
+- wrong thing for a construct that GCC will emit for PIC code. This can
+- be seen as execution testsuite failures when using -fPIC on
+- 921215-1.c, 931002-1.c, nestfunc-1.c, and gcov-1.c. For 5.0.5, an
+- updated linker that will cure this problem is available. You must
+- install both [40]ftp://ftp.sco.com/Supplements/rs505a/ and
+- [41]OSS499A.
+-
+- The dynamic linker in OpenServer 5.0.5 (earlier versions may show the
+- same problem) aborts on certain g77-compiled programs. It's
+- particularly likely to be triggered by building Fortran code with the
+- -fPIC flag. Although it's conceivable that the error could be
+- triggered by other code, only G77-compiled code has been observed to
+- cause this abort. If you are getting core dumps immediately upon
+- execution of your g77 program - and especially if it's compiled with
+- -fPIC - try applying [42]`sco_osr5_g77.patch' to your libf2c and
+- rebuilding GCC. Affected faults, when analyzed in a debugger, will
+- show a stack backtrace with a fault occurring in rtld() and the
+- program running as /usr/lib/ld.so.1. This problem has been reported to
+- SCO engineering and will hopefully be addressed in later releases.
+- _________________________________________________________________
+-
+- i?86-*-solaris*
+-
+- GCC 2.95.2, when configured to use the GNU assembler, would invoke it
+- with the -s switch, that GNU as up to 2.9.5.0.12 does not support. If
+- you'd rather not use a newer GNU as nor the native assembler, you'll
+- need the patch [43]`x86-sol2-gas.patch'.
+- _________________________________________________________________
+-
+- i?86-*-udk
+-
+- This target emulates the SCO Universal Development Kit and requires
+- that package be installed. (If it is installed, you will have a
+- /udk/usr/ccs/bin/cc file present.) It's very much like the
+- i?86-*-unixware7* target but is meant to be used when hosting on a
+- system where UDK isn't the default compiler such as OpenServer 5 or
+- Unixware 2. This target will generate binaries that will run on
+- OpenServer, Unixware 2, or Unixware 7, with the same warnings and
+- caveats as the SCO UDK.
+-
+- You can stage1 with either your native compiler or with UDK. If you
+- don't do a full bootstrap when initially building with your native
+- compiler you will have an utterly unusable pile of bits as your
+- reward.
+-
+- This target is a little tricky to build because we have to distinguish
+- it from the native tools (so it gets headers, startups, and libraries
+- from the right place) while making the tools not think we're actually
+- building a cross compiler. The easiest way to do this is with a
+- configure command like this:
+- CC=/udk/usr/ccs/bin/cc _/your/path/to/_gcc/configure --host=i686-pc-udk --tar
+-get=i686-pc-udk --program-prefix=udk-
+-
+- _You should substitute 'i686' in the above command with the
+- appropriate processor for your host._
+-
+- You should follow this with a `make bootstrap' then `make install'.
+- You can then access the UDK-targeted GCC tools by adding udk- before
+- the commonly known name. For example, to invoke the C compiler, you
+- would use `udk-gcc'. They will coexist peacefully with any
+- native-target GCC tools you may have installed.
+- _________________________________________________________________
+-
+- *-ibm-aix*
+-
+- AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or
+- newer is recommended to build on this platform.
+-
+- Errors involving "alloca" when building GCC generally are due to an
+- incorrect definition of CC in the Makefile or mixing files compiled
+- with the native C compiler and GCC. During the stage1 phase of the
+- build, the native AIX compiler _must_ be invoked as "cc" (not "xlc").
+- Once configure has been informed of "xlc", one needs to use "make
+- distclean" to remove the configure cache files and ensure that $CC
+- environment variable does not provide a definition that will confuse
+- configure. If this error occurs during stage2 or later, then the
+- problem most likely is the version of Make (see above).
+-
+- Some versions of the AIX binder (linker) can fail with a relocation
+- overflow severe error when the -bbigtoc option is used to link
+- GCC-produced object files into an executable that overflows the TOC. A
+- fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND
+- -BBIGTOC) is available from IBM Customer Support and from its
+- [44]service.boulder.ibm.com website as PTF U455193.
+-
+- Binutils does not support AIX 4.3 (at least through release 2.9). GNU
+- as and GNU ld will not work properly and one should not configure GCC
+- to use those GNU utilities. Use the native AIX tools which do
+- interoperate with GCC.
+-
+- AIX 4.3 utilizes a new "large format" archive to support both 32-bit
+- and 64-bit object modules. The routines provided in AIX 4.3.0 and AIX
+- 4.3.1 to parse archive libraries did not handle the new format
+- correctly. These routines are used by GCC and result in error messages
+- during linking such as "not a COFF file". The version of the routines
+- shipped with AIX 4.3.1 should work for a 32-bit environment. The -g
+- option of the archive command may be used to create archives of 32-bit
+- objects using the original "small format". A correct version of the
+- routines is shipped with AIX 4.3.2.
+-
+- The initial assembler shipped with AIX 4.3.0 generates incorrect
+- object files. A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM
+- COMPILER FAILS TO ASSEMBLE/BIND) is available from IBM Customer
+- Support and from its [45]service.boulder.ibm.com website as PTF
+- U453956. This fix is incorporated in AIX 4.3.1 and above.
+-
+- The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump
+- core with a segmentation fault when invoked by any version of GCC. A
+- fix for APAR IX87327 is available from IBM Customer Support and from
+- its [46]service.boulder.ibm.com website as PTF U461879. This fix is
+- incorporated in AIX 4.3.3 and above.
+- _________________________________________________________________
+-
+- m68k-*-nextstep*
+-
+- You absolutely _must_ use GNU sed and GNU make on this platform.
+-
+- On NEXTSTEP 3.x where x < 3 the build of GCC will abort during stage1
+- with an error message like this:
+- _eh
+- /usr/tmp/ccbbsZ0U.s:987:Unknown pseudo-op: .section
+- /usr/tmp/ccbbsZ0U.s:987:Rest of line ignored. 1st junk character
+- valued 95 (_).
+-
+- The reason for this is the fact that NeXT's assembler for these
+- versions of the operating system does not support the .section pseudo
+- op that's needed for full C++ exception functionality.
+-
+- As NeXT's assembler is a derived work from GNU as, a free replacement
+- that does can be obtained at
+- [47]ftp://ftp.next.peak.org:/next-ftp/next/apps/devtools/as.3.3.NIHS.s
+- .tar.gz.
+-
+- If you try to build the integrated C++ & C++ runtime libraries on this
+- system you will run into trouble with include files. The way to get
+- around this is to use the following sequence. Note you must have write
+- permission to the directory _prefix_ you specified in the
+- configuration process of GCC for this sequence to work.
+- cd bld-gcc
+- make all-texinfo all-bison all-byacc all-binutils all-gas all-ld
+- cd gcc
+- make bootstrap
+- make install-headers-tar
+- cd ..
+- make bootstrap3
+- _________________________________________________________________
+-
+- m68k-sun-sunos4.1.1
+-
+- It is reported that you may need the GNU assembler on this platform.
+- _________________________________________________________________
+-
+- mips*-sgi-irix[45]
+-
+- You must use GAS on these platforms, as the native assembler can not
+- handle the code for exception handling support. Either of these
+- messages indicates that you are using the MIPS assembler when instead
+- you should be using GAS:
+- as0: Error: ./libgcc2.c, line 1:Badly delimited numeric literal
+- .4byte $LECIE1-$LSCIE1
+- as0: Error: ./libgcc2.c, line 1:malformed statement
+-
+- or:
+- as0: Error: /src/bld-gcc/gcc/libgcc2.c, line 1:undefined symbol in expression
+- .word $LECIE1-$LSCIE1
+-
+- These systems don't have ranlib, which various components in GCC need;
+- you should be able to avoid this problem by installing GNU binutils,
+- which includes a functional ranlib for this system.
+-
+- You may get the following warning on irix4 platforms, it can be safely
+- ignored.
+- warning: foo.o does not have gp tables for all its sections.
+-
+- When building GCC, the build process loops rebuilding cc1 over and
+- over again. This happens on mips-sgi-irix5.2, and possibly other
+- platforms.
+- It has been reported that this is a known bug in the make shipped with
+- IRIX 5.2. We recommend you use GNU make instead of the vendor supplied
+- make program; however, you may have success with "smake" on IRIX 5.2
+- if you do not have GNU make available.
+-
+- See [48]http://reality.sgi.com/ariel/freeware for more information
+- about using GCC on IRIX platforms.
+- _________________________________________________________________
+-
+- mips*-sgi-irix6
+-
+- You must _not_ use GAS on irix6 platforms; doing so will only cause
+- problems.
+-
+- These systems don't have ranlib, which various components in GCC need;
+- you should be able to avoid this problem by making a dummy script
+- called ranlib which just exits with zero status and placing it in your
+- path.
+-
+- If you are using Irix cc as your bootstrap compiler, you must ensure
+- that the N32 ABI is in use. To test this, compile a simple C file with
+- cc and then run file on the resulting object file. The output should
+- look like:
+-
+- test.o: ELF N32 MSB ...
+-
+- If you see:
+-
+- test.o: ELF 32-bit MSB
+-
+- then your version of cc uses the O32 ABI default. You should set the
+- environment variable CC to 'cc -n32' before configuring GCC.
+-
+- GCC does not currently support generating O32 ABI binaries in the
+- mips-sgi-irix6 configurations. It used to be possible to create a GCC
+- with O32 ABI only support by configuring it for the mips-sgi-irix5
+- target. See the link below for details.
+-
+- GCC does not correctly pass/return structures which are smaller than
+- 16 bytes and which are not 8 bytes. The problem is very involved and
+- difficult to fix. It affects a number of other targets also, but IRIX
+- 6 is affected the most, because it is a 64 bit target, and 4 byte
+- structures are common. The exact problem is that structures are being
+- padded at the wrong end, e.g. a 4 byte structure is loaded into the
+- lower 4 bytes of the register when it should be loaded into the upper
+- 4 bytes of the register.
+-
+- GCC is consistent with itself, but not consistent with the SGI C
+- compiler (and the SGI supplied runtime libraries), so the only
+- failures that can happen are when there are library functions that
+- take/return such structures. There are very few such library
+- functions. I can only recall seeing two of them: inet_ntoa, and
+- semctl.
+-
+- See [49]http://reality.sgi.com/ariel/freeware for more information
+- about using GCC on IRIX platforms.
+- _________________________________________________________________
+-
+- powerpc-*-linux-gnu*
+-
+- You will need [50]binutils-2.9.4.0.8 or newer for a working GCC. It is
+- strongly recommended to recompile binutils if you initially built it
+- with gcc-2.7.2.x.
+- _________________________________________________________________
+-
+- *-*-solaris*
+-
+- Starting with Solaris, Sun does not ship a C compiler any more. To
+- bootstrap and install GCC you first have to install a pre-built
+- compiler, see our [51]binaries page for details.
+-
+- Sun as 4.X is broken in that it cannot cope with long symbol names. A
+- typical error message might look similar to the following:
+-
+- /usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: error: can't
+- compute value of an expression involving an external symbol.
+-
+- See the [52]How to work around too long C++ symbol names? FAQ entry
+- for further information.
+-
+- Sun make in all known Solaris 1 (SunOS 4) and Solaris 2 releases has a
+- broken _VPATH_ mechanism, which means you must either:
+- * Use GNU make (recommended), _or:_
+- * Always build in the source directory, _or:_
+- * _(For GCC 2.95.1 only)_ apply the patches mentioned at
+- [53]http://www.gnu.org/software/gcc/extensions.html#sun-make.
+- _________________________________________________________________
+-
+- sparc-sun-solaris*
+-
+- binutils 2.9.1 has known bugs on this platform. We recommend to use
+- binutils 2.10 or the vendor tools (Sun as, Sun ld).
+-
+- Unfortunately, C++ shared libraries, including libstdc++, won't work
+- properly if assembled with Sun as: the linker will complain about
+- relocations in read-only sections, in the definition of virtual
+- tables. Also, Sun as fails to process long symbols resulting from
+- mangling template-heavy C++ function names.
+- _________________________________________________________________
+-
+- sparc-sun-solaris2.7
+-
+- Sun patch 107058-01 (1999-01-13) for SPARC Solaris 7 triggers a bug in
+- the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 and
+- later, including all EGCS releases. Sun formerly recommended 107058-01
+- for all Solaris 7 users, but around 1999-09-01 it started to recommend
+- it only for people who use Sun's compilers.
+-
+- Here are some workarounds to this problem:
+- * Do not install Sun patch 107058-01 until after Sun releases a
+- complete patch for bug 4210064. This is the simplest course to
+- take, unless you must also use Sun's C compiler. Unfortunately
+- 107058-01 is preinstalled on some new Solaris-based hosts, so you
+- may have to back it out.
+- * Copy the original, unpatched Solaris 7 /usr/ccs/bin/as into
+- /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.1/as, adjusting
+- the latter name to fit your local conventions and software version
+- numbers.
+- * Install Sun patch 106950-03 (1999-05-25) or later. Nobody with
+- both 107058-01 and 106950-03 installed has reported the bug with
+- GCC and Sun's dynamic linker. This last course of action is
+- riskiest, for two reasons. First, you must install 106950 on all
+- hosts that run code generated by GCC; it doesn't suffice to
+- install it only on the hosts that run GCC itself. Second, Sun says
+- that 106950-03 is only a partial fix for bug 4210064, but Sun
+- doesn't know whether the partial fix is adequate for GCC. Revision
+- -08 or later should fix the bug, but (as of 1999-10-06) it is
+- still being tested.
+- _________________________________________________________________
+-
+- *-sun-solaris2.8
+-
+- Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or
+- newer: g++ will complain that types are missing. These headers assume
+- that omitting the type means 'int'; this assumption worked for C89 but
+- is wrong for C++, and is now wrong for C99 also.
+-
+- g++ accepts such (illegal) constructs with the option -fpermissive; it
+- will assume that any missing type is 'int' (as defined by C89).
+-
+- For Solaris 8, this is fixed by revision 24 or later of patch 108652
+- (for SPARCs) or 108653 (for Intels).
+- _________________________________________________________________
+-
+- Sun V5.0 Compiler Bugs
+-
+- The Sun V5.0 compilers are known to mis-compile GCC 2.95 and GCC
+- 2.95.1, which in turn causes GCC to fail its bootstrap comparison
+- test. GCC 2.95.2 has a workaround.
+- _________________________________________________________________
+-
+- sparc-sun-sunos*
+-
+- A bug in the SunOS4 linker will cause it to crash when linking -fPIC
+- compiled objects (and will therefore not allow you to build shared
+- libraries).
+-
+- To fix this problem you can either use the most recent version of
+- binutils or get the latest SunOS4 linker patch (patch ID 100170-10)
+- from Sun's patch site.
+- _________________________________________________________________
+-
+- sparc-unknown-linux-gnulibc1
+-
+- It has been reported that you might need [54]binutils-2.8.1.0.23 for
+- this platform, too.
+- _________________________________________________________________
+-
+- sparc64-*-*
+-
+- GCC version 2.95 is not able to compile code correctly for sparc64
+- targets. Users of the Linux kernel, at least, can use the sparc32
+- program to start up a new shell invocation with an environment that
+- causes configure to recognize (via uname -a) the system as sparc-*-*
+- instead.
+- _________________________________________________________________
+-
+- Microsoft Windows (32 bit)
+-
+- A port of GCC 2.95.x is included with the [55]Cygwin environment.
+-
+- Current (as of early 2001) snapshots of GCC will build under Cygwin
+- without modification.
+- _________________________________________________________________
+-
+- OS/2
+-
+- GCC does not currently support OS/2. However, Andrew Zabolotny has
+- been working on a generic OS/2 port with pgcc. The current code code
+- can be found at [56]http://www.goof.com/pcg/os2/.
+-
+- An older copy of GCC 2.8.1 is included with the EMX tools available at
+- [57]ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/.
+- _________________________________________________________________
+-
+- all ELF targets (SVR4, Solaris, etc.)
+-
+- C++ support is significantly better on ELF targets if you use the GNU
+- linker; duplicate copies of inlines, vtables and template
+- instantiations will be discarded automatically.
+- _________________________________________________________________
+-
+- [58]Return to the GCC Installation page
+-
+-References
+-
+- 1. http://gcc.gnu.org/install/specific.html#alpha*-dec-linux*
+- 2. http://gcc.gnu.org/install/specific.html#alpha*-dec-osf*
+- 3. http://gcc.gnu.org/install/specific.html#avr
+- 4. http://gcc.gnu.org/install/specific.html#dos
+- 5. http://gcc.gnu.org/install/specific.html#hppa*-hp-hpux*
+- 6. http://gcc.gnu.org/install/specific.html#hppa*-hp-hpux9
+- 7. http://gcc.gnu.org/install/specific.html#hppa*-hp-hpux10
+- 8. http://gcc.gnu.org/install/specific.html#hppa*-hp-hpux11
+- 9. http://gcc.gnu.org/install/specific.html#*-*-linux-gnu
+- 10. http://gcc.gnu.org/install/specific.html#ix86-*-linux*
+- 11. http://gcc.gnu.org/install/specific.html#ix86-*-sco3.2v5*
+- 12. http://gcc.gnu.org/install/specific.html#ix86-*-solaris*
+- 13. http://gcc.gnu.org/install/specific.html#ix86-*-udk
+- 14. http://gcc.gnu.org/install/specific.html#*-ibm-aix*
+- 15. http://gcc.gnu.org/install/specific.html#m68k-*-nextstep*
+- 16. http://gcc.gnu.org/install/specific.html#m68k-sun-sunos4.1.1
+- 17. http://gcc.gnu.org/install/specific.html#mips*-sgi-irix[45]
+- 18. http://gcc.gnu.org/install/specific.html#mips*-sgi-irix6
+- 19. http://gcc.gnu.org/install/specific.html#powerpc-*-linux-gnu*
+- 20. http://gcc.gnu.org/install/specific.html#*-*-solaris*
+- 21. http://gcc.gnu.org/install/specific.html#sparc-sun-solaris*
+- 22. http://gcc.gnu.org/install/specific.html#sparc-sun-solaris2.7
+- 23. http://gcc.gnu.org/install/specific.html#*-sun-solaris2.8
+- 24. http://gcc.gnu.org/install/specific.html#sunv5
+- 25. http://gcc.gnu.org/install/specific.html#sparc-sun-sunos*
+- 26. http://gcc.gnu.org/install/specific.html#sparc-unknown-linux-gnulibc1
+- 27. http://gcc.gnu.org/install/specific.html#sparc64-*-*
+- 28. http://gcc.gnu.org/install/specific.html#windows
+- 29. http://gcc.gnu.org/install/specific.html#os2
+- 30. http://gcc.gnu.org/install/specific.html#elf_targets
+- 31. http://gcc.gnu.org/install/dec-osf-shlibstdc++.patch
+- 32. http://home.overta.ru/users/denisc
+- 33. http://www.itnet.pl/amelektr/avr
+- 34. http://gcc.gnu.org/install/binaries.html
+- 35. ftp://sources.redhat.com/pub/binutils/snapshots
+- 36. http://us-support.external.hp.com/
+- 37. http://europe-support.external.hp.com/
+- 38. http://gcc.gnu.org/install/glibc-2.2.patch
+- 39. http://www.bitwizard.nl/sig11/
+- 40. ftp://ftp.sco.com/Supplements/rs505a/
+- 41. ftp://ftp.sco.com/SLS/
+- 42. http://gcc.gnu.org/install/sco_osr5_g77.patch
+- 43. http://gcc.gnu.org/install/x86-sol2-gas.patch
+- 44. http://service.boulder.ibm.com/
+- 45. http://service.boulder.ibm.com/
+- 46. http://service.boulder.ibm.com/
+- 47. ftp://ftp.next.peak.org/next-ftp/next/apps/devtools/as.3.3.NIHS.s.tar.gz
+- 48. http://reality.sgi.com/ariel/freeware/
+- 49. http://reality.sgi.com/ariel/freeware/
+- 50. ftp://ftp.varesearch.com/pub/support/hjl/binutils
+- 51. http://gcc.gnu.org/install/binaries.html
+- 52. http://gcc.gnu.org/faq.html#squangle
+- 53. http://www.gnu.org/software/gcc/extensions.html#sun-make
+- 54. ftp://ftp.yggdrasil.com/private/hjl
+- 55. http://www.cygwin.com/
+- 56. http://www.goof.com/pcg/os2/
+- 57. ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/
+- 58. http://gcc.gnu.org/install/index.html
+diff -ruNb gcc-2.95.3/install/specific.html gcc-2.95.4/install/specific.html
+--- gcc-2.95.3/install/specific.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/specific.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,688 +0,0 @@
+-<html>
+-<head>
+-<title>Host/Target specific installation notes for GCC</title>
+-</head>
+-<body>
+-
+-<h1 align="center">Host/Target specific installation notes for GCC</h1>
+-
+-<p>Please read this document carefully <i>before</i> installing the
+-GNU Compiler Collection on your machine.</p>
+-
+-<ul>
+- <li><a href="#alpha*-dec-linux*">alpha*-dec-linux*</a></li>
+- <li><a href="#alpha*-dec-osf*">alpha*-dec-osf*</a></li>
+- <li><a href="#avr">avr</a></li>
+- <li><a href="#dos">DOS</a></li>
+- <li><a href="#hppa*-hp-hpux*">hppa*-hp-hpux*</a></li>
+- <li><a href="#hppa*-hp-hpux9">hppa*-hp-hpux9</a></li>
+- <li><a href="#hppa*-hp-hpux10">hppa*-hp-hpux10</a></li>
+- <li><a href="#hppa*-hp-hpux11">hppa*-hp-hpux11</a></li>
+- <li><a href="#*-*-linux-gnu">*-*-linux-gnu</a></li>
+- <li><a href="#ix86-*-linux*">i?86-*-linux*</a></li>
+- <li><a href="#ix86-*-sco3.2v5*">i?86-*-sco3.2v5*</a></li>
+- <li><a href="#ix86-*-solaris*">i?86-*-solaris*</a></li>
+- <li><a href="#ix86-*-udk">i?86-*-udk</a></li>
+- <li><a href="#*-ibm-aix*">*-ibm-aix*</a></li>
+- <li><a href="#m68k-*-nextstep*">m68k-*-nextstep*</a></li>
+- <li><a href="#m68k-sun-sunos4.1.1">m68k-sun-sunos4.1.1</a></li>
+- <li><a href="#mips*-sgi-irix[45]">mips*-sgi-irix[45]</a></li>
+- <li><a href="#mips*-sgi-irix6">mips*-sgi-irix6</a></li>
+- <li><a href="#powerpc-*-linux-gnu*">powerpc-*-linux-gnu*</a></li>
+- <li><a href="#*-*-solaris*">*-*-solaris*</a></li>
+- <li><a href="#sparc-sun-solaris*">sparc-sun-solaris*</a></li>
+- <li><a href="#sparc-sun-solaris2.7">sparc-sun-solaris2.7</a></li>
+- <li><a href="#*-sun-solaris2.8">*-sun-solaris2.8</a></li>
+- <li><a href="#sunv5">Sun V5.0 Compiler Bugs</a></li>
+- <li><a href="#sparc-sun-sunos*">sparc-sun-sunos*</a></li>
+- <li><a href="#sparc-unknown-linux-gnulibc1">sparc-unknown-linux-gnulibc1</a></li>
+- <li><a href="#sparc64-*-*">sparc64-*-*</a></li>
+- <li><a href="#windows">Microsoft Windows</a></li>
+- <li><a href="#os2">OS/2</a></li>
+-</ul>
+-
+-<ul>
+- <li><a href="#elf_targets">all ELF targets (SVR4, Solaris, etc.)</a></li>
+-</ul>
+-
+-
+-<!-- -------- host/target specific issues start here ---------------- -->
+-
+-
+-<hr>
+-<h3><a name="alpha*-dec-linux*">alpha*-dec-linux*</a></h3>
+-
+-<p>We strongly recommend to upgrade to binutils 2.10 (or newer).</p>
+-
+-<p>The following error:</p>
+-<pre>
+- Error: macro requires $at register while noat in effect
+-</pre>
+-<p>indicates that you should upgrade to a newer version of
+-the assembler, 2.9 or later. If you can not upgrade the assembler, the
+-compiler option "-Wa,-m21164a" may work around this problem.</p>
+-
+-
+-<hr>
+-<h3><a name="alpha*-dec-osf*">alpha*-dec-osf*</a></h3>
+-
+-<p>If you install a shared libstdc++ and, when you link a non-trivial C++
+-program (for example, <code>gcc/testsuite/g++.other/delete3.C</code>),
+-the linker reports a couple of errors about multiply-defined symbols
+-(for example, <code>nothrow</code>, <code>__throw</code> and
+-<code>terminate(void)</code>), you've probably got a linker bug, for
+-which there's no known fix. The officially recommended work-around is
+-to remove the shared libstdc++.</p>
+-
+-<p>An alternative solution is to arrange that all symbols from
+-<code>libgcc</code> get copied to the shared <code>libstdc++</code>;
+-see detailed solution below. (Surprising as it may seem, this does
+-indeed fix the problem!) <em>Beware</em> that this may bring you
+-binary-compatibility problems in the future, if you don't use the same
+-work-around next time you build <code>libstdc++</code>: if programs
+-start to depend on <code>libstdc++</code> to provide symbols that used
+-to be only in <code>libgcc</code>, you must arrange that
+-<code>libstdc++</code> keeps providing them, otherwise the programs
+-will have to be relinked.</p>
+-
+-<p>The magic spell is to add <code>-Wl,-all,-lgcc,-none</code> to the
+-definition of macro <code>SHDEPS</code> in
+-<code>libstdc++/config/dec-osf.ml</code> <em>before</em>
+-<code>alpha*-dec-osf*/libstdc++/Makefile</code> is created (a <a
+-href="dec-osf-shlibstdc++.patch">patch</a> that does just that is
+-available). If the Makefile already exists, run
+-<code>./config.status</code> within directory
+-<code>alpha*-dec-osf*/libstdc++</code> (and
+-<code>alpha*-dec-osf*/ieee/libstdc++</code>, if it also exists).
+-Remove any existing <code>libstdc++.so*</code> from such directories,
+-and run <code>make all-target-libstdc++</code> in the top-level
+-directory, then <code>make install-target-libstdc++</code>.</p>
+-
+-<p>If you have already removed the build tree, you may just remove
+-<code>libstdc++.so.2.10.0</code> from the install tree and re-create
+-it with the command <code>gcc -shared -o libstdc++.so.2.10.0
+--Wl,-all,-lstdc++,-lgcc,-none -lm</code>. If the <code>ieee</code>
+-sub-directory exists, repeat this command in it, with the additional
+-flag <code>-mieee</code>.</p>
+-
+-<hr>
+-<h3><a name="avr">avr</a></h3>
+-
+-<p>Use `configure --target=avr --enable-languages="c"' to configure GCC.</p>
+-<p>Further installation notes and other useful information about AVR tools
+-can also be obtained from: </p>
+-<ul>
+- <li><a href="http://home.overta.ru/users/denisc">
+- http://home.overta.ru/users/denisc</a></li>
+- <li><a href="http://www.itnet.pl/amelektr/avr">
+- http://www.itnet.pl/amelektr/avr</a></li>
+-</ul>
+-
+-<p>We strongly recommend to upgrade to binutils 2.11
+-(or a current snapshot until 2.11 has been released).</p>
+-
+-<p>The following error:</p>
+-<pre>
+- Error: register required
+-</pre>
+-<p>indicates that you should upgrade to a newer version of
+-the binutils.</p>
+-
+-<hr>
+-<h3><a name="dos">DOS</a></h3>
+-
+-<p>Please have a look at our <a href="binaries.html">binaries page</a>.</p>
+-
+-
+-<hr>
+-<h3><a name="hppa*-hp-hpux*">hppa*-hp-hpux*</a></h3>
+-
+-<p>We <em>highly</em> recommend using gas/binutils-2.8 or newer on all hppa
+-platforms; you may encounter a variety of problems when using the HP assembler.</p>
+-
+-<p>Specifically, <code>-g</code> does not work on HP-UX (since that system
+-uses a peculiar debugging format which GCC does not know about), unless you
+-use GAS and GDB and configure GCC with the <code>--with-gnu-as</code>
+-option.</p>
+-
+-<p>If you wish to use pa-risc 2.0 architecture support, you must use either
+-the HP assembler or a recent
+-<a href="ftp://sources.redhat.com/pub/binutils/snapshots">snapshot of
+-gas</a>.</p>
+-
+-<p>More specific information to hppa*-hp-hpux* targets follows.</p>
+-
+-
+-<hr>
+-<h3><a name="hppa*-hp-hpux9">hppa*-hp-hpux9</a></h3>
+-
+-<p>The HP assembler has major problems on this platform. We've tried to work
+-around the worst of the problems. However, those workarounds may be causing
+-linker crashes in some circumstances; the workarounds also probably prevent
+-shared libraries from working. Use the GNU assembler to avoid these problems.</p>
+-
+-<p>The configuration scripts for GCC will also trigger a bug in the hpux9
+-shell. To avoid this problem set CONFIG_SHELL to /bin/ksh and SHELL to
+-/bin/ksh in your environment.</p>
+-
+-
+-<hr>
+-<h3><a name="hppa*-hp-hpux10">hppa*-hp-hpux10</a></h3>
+-
+-<p>For hpux10.20, we <em>highly</em> recommend you pick up the latest sed
+-patch <code>PHCO_19798</code> from HP. HP has two sites which provide patches free of charge:</p>
+-<ul>
+- <li><a href="http://us-support.external.hp.com">US, Canada, Asia-Pacific, and
+-Latin-America</a></li>
+- <li><a href="http://europe-support.external.hp.com">Europe</a></li>
+-</ul>
+-
+-<p>The HP assembler on these systems is much better than the hpux9 assembler,
+-but still has some problems. Most notably the assembler inserts timestamps
+-into each object file it creates, causing the 3-stage comparison test to fail
+-during a `<code>make bootstrap</code>'. You should be able to continue by
+-saying `<code>make all</code>' after getting the failure from `<code>make
+-bootstrap</code>'.</p>
+-
+-
+-<hr>
+-<h3><a name="hppa*-hp-hpux11">hppa*-hp-hpux11</a></h3>
+-
+-<p>GCC 2.95.2 does not support HP-UX 11, and it cannot generate 64-bit
+-object files. Current (as of late 2000) snapshots and GCC 3.0 do support
+-HP-UX 11.</p>
+-
+-
+-<hr>
+-<h3><a name="*-*-linux-gnu">*-*-linux-gnu</a></h3>
+-
+-<p>If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install
+-out-of-the-box. You'll get compile errors while building libstdc++.
+-The patch <a href="glibc-2.2.patch">glibc-2.2.patch</a>, that is to be
+-applied in the GCC source tree, fixes the compatibility problems.</p>
+-
+-<hr>
+-<h3><a name="ix86-*-linux*">i?86-*-linux*</a></h3>
+-
+-<p>You will need binutils-2.9.1.0.15 or newer for exception handling to work.</p>
+-
+-<p>If you receive Signal 11 errors when building on GNU/Linux, then it is
+-possible you have a hardware problem. Further information on this can be
+-found on <a href="http://www.bitwizard.nl/sig11/">www.bitwizard.nl.</a></p>
+-
+-
+-<hr>
+-<h3><a name="ix86-*-sco3.2v5*">i?86-*-sco3.2v5*</a></h3>
+-
+-<p>Unlike earlier versions of GCC, the ability to generate COFF with this
+-target is no longer provided.
+-
+-<p>Earlier versions of GCC emitted Dwarf-1 when generating ELF to allow
+-the system debugger to be used. That support was too burdensome to
+-maintain. GCC now emits only dwarf-2 for this target. This means you
+-may use either the UDK debugger or GDB to debug programs built by this
+-version of GCC.
+-
+-<p>If you are building languages other than C, you must follow the instructions
+-about invoking `<code>make bootstrap</code>' because the native OpenServer
+-compiler will build a <code>cc1plus</code> that will not correctly parse many
+-valid C++ programs including those in <code>libgcc.a</code>. <b>You must do a `<code>make bootstrap</code>' if you are building with the native compiler.</b></p>
+-
+-<p>Use of the `<code>-march-pentiumpro</code>' flag can result in
+-unrecognized opcodes when using the native assembler on OS versions before
+-5.0.6. (Support for P6 opcodes was added to the native ELF assembler in
+-that version.) While it's rather rare to see these emitted by GCC yet,
+-errors of the basic form:</p>
+-<pre>
+- /usr/tmp/ccaNlqBc.s:22:unknown instruction: fcomip
+- /usr/tmp/ccaNlqBc.s:50:unknown instruction: fucomip
+-</pre>
+-
+-<p>are symptoms of this problem. You may work around this by not
+-building affected files with that flag, by using the GNU assembler, or
+-by using the assembler provided with the current version of the OS.
+-Users of GNU assembler should see the note below for hazards on doing
+-so.</p>
+-
+-<p>The native SCO assembler that is provided with the OS at no
+-charge is normally required. If, however, you must be able to use
+-the GNU assembler (perhaps you're compiling code with asms that
+-require GAS syntax) you may configure this package using the flags
+-<code>--with-gnu-as</code>. You must use a recent version of GNU
+-binutils; versions past 2.9.1 seem to work well.
+-
+-In general, the <code>--with-gnu-as</code> option isn't as well tested
+-as the native assembler.</p>
+-
+-<p>Look in <code>gcc/config/i386/sco5.h</code> (search for "messy") for
+-additional OpenServer-specific flags.</p>
+-
+-<p>Systems based on OpenServer before 5.0.4 (`<code>uname -X</code>'
+-will tell you what you're running) require TLS597 from ftp.sco.com/TLS
+-for C++ constructors and destructors to work right.</p>
+-
+-<p>The system linker in (at least) 5.0.4 and 5.0.5 will sometimes
+-do the wrong thing for a construct that GCC will emit for PIC
+-code. This can be seen as execution testsuite failures when using
+--fPIC on 921215-1.c, 931002-1.c, nestfunc-1.c, and gcov-1.c.
+-For 5.0.5, an updated linker that will cure this problem is
+-available. You must install both <a href="ftp://ftp.sco.com/Supplements/rs505a/">
+-ftp://ftp.sco.com/Supplements/rs505a/</a> and <a href="ftp://ftp.sco.com/SLS/">
+-OSS499A</a>.</p>
+-
+-<p>The dynamic linker in OpenServer 5.0.5 (earlier versions may show
+-the same problem) aborts on certain g77-compiled programs. It's particularly
+-likely to be triggered by building Fortran code with the <code>-fPIC</code>
+-flag.
+-Although it's conceivable that the error could be triggered by other
+-code, only G77-compiled code has been observed to cause this abort.
+-If you are getting core dumps immediately upon execution of your
+-g77 program - and especially if it's compiled with -fPIC - try applying
+-<a href="sco_osr5_g77.patch"><code>`sco_osr5_g77.patch'</code></a> to your libf2c and
+-rebuilding
+-GCC. Affected faults, when analyzed in a debugger, will show a stack
+-backtrace with a fault occurring in <code>rtld()</code> and the program
+-running as <code>/usr/lib/ld.so.1</code>. This problem has been reported to SCO engineering
+-and will hopefully be addressed in later releases.</p>
+-
+-
+-<hr>
+-<h3><a name="ix86-*-solaris*">i?86-*-solaris*</a></h3>
+-
+-<p>GCC 2.95.2, when configured to use the GNU assembler, would invoke
+-it with the <code>-s</code> switch, that GNU as up to 2.9.5.0.12 does
+-not support. If you'd rather not use a newer GNU as nor the native
+-assembler, you'll need the patch <a
+-href="x86-sol2-gas.patch"><code>`x86-sol2-gas.patch'</code></a>.</p>
+-
+-
+-<hr>
+-<h3><a name="ix86-*-udk">i?86-*-udk</a></h3>
+-
+-<p>This target emulates the SCO Universal Development Kit and requires that
+-package be installed. (If it is installed, you will have a <code>/udk/usr/ccs/bin/cc </code>file present.) It's very much like the <code>i?86-*-unixware7*</code> target
+-but is meant to be used when hosting on a system where UDK isn't the
+-default compiler such as OpenServer 5 or Unixware 2. This target will
+-generate binaries that will run on OpenServer, Unixware 2, or Unixware 7,
+-with the same warnings and caveats as the SCO UDK.</p>
+-
+-<p>You can stage1 with either your native compiler or with UDK. If you
+-don't do a full bootstrap when initially building with your native compiler
+-you will have an utterly unusable pile of bits as your reward.</p>
+-
+-<p>This target is a little tricky to build because we have to distinguish
+-it from the native tools (so it gets headers, startups, and libraries
+-from the right place) while making the tools not think we're actually
+-building a cross compiler. The easiest way to do this is with a configure
+-command like this:</p>
+-<pre>
+- CC=/udk/usr/ccs/bin/cc <i>/your/path/to/</i>gcc/configure --host=i686-pc-udk --target=i686-pc-udk --program-prefix=udk-
+-</pre>
+-<p><i>You should substitute 'i686' in the above command with the appropriate
+-processor for your host.</i></p>
+-
+-<p>You should follow this with a `<code>make bootstrap</code>' then
+-`<code>make install</code>'. You can then access the UDK-targeted GCC
+-tools by adding <code>udk-</code> before the commonly known name. For example, to invoke the C compiler, you would use `<code>udk-gcc</code>'. They will coexist peacefully with any native-target GCC tools you may have installed.</p>
+-
+-
+-<hr>
+-<h3><a name="*-ibm-aix*">*-ibm-aix*</a></h3>
+-<!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
+-
+-<p>AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or
+-newer is recommended to build on this platform.</p>
+-
+-<p>Errors involving &quot;alloca&quot; when building GCC generally are due
+-to an incorrect definition of <code>CC</code> in the Makefile or mixing files
+-compiled with the native C compiler and GCC. During the stage1 phase of
+-the build, the native AIX compiler <b>must</b> be invoked as &quot;cc&quot;
+-(not &quot;xlc&quot;). Once <code>configure</code> has been informed of
+-&quot;xlc&quot;, one needs to use &quot;make distclean&quot; to remove the
+-configure cache files and ensure that <code>$CC</code> environment variable
+-does not provide a definition that will confuse <code>configure</code>.
+-If this error occurs during stage2 or later, then the problem most likely
+-is the version of Make (see above).</p>
+-
+-<p>Some versions of the AIX binder (linker) can fail with a relocation
+-overflow severe error when the -bbigtoc option is used to link
+-GCC-produced object files into an executable that overflows the TOC. A fix
+-for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is
+-available from IBM Customer Support and from its
+-<a href="http://service.boulder.ibm.com/">service.boulder.ibm.com</a>
+-website as PTF U455193.</p>
+-
+-<p>Binutils does not support AIX 4.3 (at least through release 2.9).
+-GNU as and GNU ld will not work properly and one should not configure GCC
+-to use those GNU utilities. Use the native AIX tools which do interoperate
+-with GCC.</p>
+-
+-<p>AIX 4.3 utilizes a new &quot;large format&quot; archive to support both
+-32-bit and 64-bit object modules. The routines provided in AIX 4.3.0 and
+-AIX 4.3.1 to parse archive libraries did not handle the new format correctly.
+-These routines are used by GCC and result in error messages during linking
+-such as &quot;not a COFF file&quot;. The version of the routines shipped
+-with AIX 4.3.1 should work for a 32-bit environment. The
+-<code>-g</code> option of the archive command may be used to create
+-archives of 32-bit objects using the original "small format". A
+-correct version of the routines is shipped with AIX 4.3.2.</p>
+-
+-<p>The initial assembler shipped with AIX 4.3.0 generates incorrect object
+-files. A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS
+-TO ASSEMBLE/BIND) is available from IBM Customer Support and from its
+-<a href="http://service.boulder.ibm.com/">service.boulder.ibm.com</a>
+-website as PTF U453956. This fix is incorporated in AIX 4.3.1 and above.</p>
+-
+-<p>The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core
+-with a segmentation fault when invoked by any version of GCC. A fix for
+-APAR IX87327 is available from IBM Customer Support and from its
+-<a href="http://service.boulder.ibm.com/">service.boulder.ibm.com</a>
+-website as PTF U461879. This fix is incorporated in AIX 4.3.3 and above.</p>
+-
+-
+-<hr>
+-<h3><a name="m68k-*-nextstep*">m68k-*-nextstep*</a></h3>
+-
+-<p>You absolutely <b>must</b> use GNU sed and GNU make on this platform.</p>
+-
+-<p>On NEXTSTEP 3.x where x &lt; 3 the build of GCC will abort during
+-stage1 with an error message like this:</p>
+-<pre>
+- _eh
+- /usr/tmp/ccbbsZ0U.s:987:Unknown pseudo-op: .section
+- /usr/tmp/ccbbsZ0U.s:987:Rest of line ignored. 1st junk character
+- valued 95 (_).
+-</pre>
+-<p>The reason for this is the fact that NeXT's assembler for these
+-versions of the operating system does not support the .section
+-pseudo op that's needed for full C++ exception functionality.</p>
+-
+-<p>As NeXT's assembler is a derived work from GNU as, a free
+-replacement that does can be obtained at
+-<a href="ftp://ftp.next.peak.org:/next-ftp/next/apps/devtools/as.3.3.NIHS.s.tar.gz">ftp://ftp.next.peak.org:/next-ftp/next/apps/devtools/as.3.3.NIHS.s.tar.gz</a>.
+-</p>
+-
+-<p>If you try to build the integrated C++ & C++ runtime libraries on this system
+-you will run into trouble with include files. The way to get around this is
+-to use the following sequence. Note you must have write permission to
+-the directory <i>prefix</i> you specified in the configuration process of GCC
+-for this sequence to work.</p>
+-<pre>
+- cd bld-gcc
+- make all-texinfo all-bison all-byacc all-binutils all-gas all-ld
+- cd gcc
+- make bootstrap
+- make install-headers-tar
+- cd ..
+- make bootstrap3
+-</pre>
+-
+-
+-<hr>
+-<h3><a name="m68k-sun-sunos4.1.1">m68k-sun-sunos4.1.1</a></h3>
+-
+-<p>It is reported that you may need the GNU assembler on this platform.</p>
+-
+-
+-<hr>
+-<h3><a name="mips*-sgi-irix[45]">mips*-sgi-irix[45]</a></h3>
+-
+-<p>You must use GAS on these platforms, as the native assembler can not handle the code for exception handling support. Either of these messages indicates that you are using the MIPS assembler when instead you should be using GAS:</p>
+-<pre>
+- as0: Error: ./libgcc2.c, line 1:Badly delimited numeric literal
+- .4byte $LECIE1-$LSCIE1
+- as0: Error: ./libgcc2.c, line 1:malformed statement
+-</pre>
+-<p>or:</p>
+-<pre>
+- as0: Error: /src/bld-gcc/gcc/libgcc2.c, line 1:undefined symbol in expression
+- .word $LECIE1-$LSCIE1
+-</pre>
+-
+-<p>These systems don't have ranlib, which various components in GCC need; you
+-should be able to avoid this problem by installing GNU binutils, which includes
+-a functional ranlib for this system.</p>
+-
+-<p>You may get the following warning on irix4 platforms, it can be safely
+-ignored.</p>
+-<pre>
+- warning: foo.o does not have gp tables for all its sections.
+-</pre>
+-
+-<p>When building GCC, the build process loops rebuilding cc1 over and
+-over again. This happens on mips-sgi-irix5.2, and possibly other platforms.<br>
+-It has been reported that this is a known bug in the make shipped with
+-IRIX 5.2. We recommend you use GNU make instead of the vendor supplied
+-make program; however, you may have success with "smake" on IRIX 5.2 if
+-you do not have GNU make available.</p>
+-
+-<p>See <a href="http://reality.sgi.com/ariel/freeware/">
+-http://reality.sgi.com/ariel/freeware</a> for more information about
+-using GCC on IRIX platforms.</p>
+-
+-
+-<hr>
+-<h3><a name="mips*-sgi-irix6">mips*-sgi-irix6</a></h3>
+-
+-<p>You must <i>not</i> use GAS on irix6 platforms; doing so will only
+-cause problems.</p>
+-
+-<p>These systems don't have ranlib, which various components in GCC need; you
+-should be able to avoid this problem by making a dummy script called ranlib
+-which just exits with zero status and placing it in your path.</p>
+-
+-<p>If you are using Irix cc as your bootstrap compiler, you must
+-ensure that the N32 ABI is in use. To test this, compile a simple C
+-file with <CODE>cc</CODE> and then run <CODE>file</CODE> on the
+-resulting object file. The output should look like:</p>
+-
+-<blockquote><code>
+-test.o: ELF N32 MSB ...
+-</code></blockquote>
+-
+-If you see:
+-<blockquote><code>
+-test.o: ELF 32-bit MSB
+-</code></blockquote>
+-
+-<p>then your version of <CODE>cc</CODE> uses the O32 ABI default. You
+-should set the environment variable <CODE>CC</CODE> to 'cc -n32'
+-before configuring GCC.</p>
+-
+-<p>GCC does not currently support generating O32 ABI binaries in the
+-mips-sgi-irix6 configurations. It used to be possible to create a GCC
+-with O32 ABI only support by configuring it for the mips-sgi-irix5
+-target. See the link below for details.</p>
+-
+-<p>GCC does not correctly pass/return structures which are
+-smaller than 16 bytes and which are not 8 bytes. The problem is very
+-involved and difficult to fix. It affects a number of other targets also,
+-but IRIX 6 is affected the most, because it is a 64 bit target, and 4 byte
+-structures are common. The exact problem is that structures are being padded
+-at the wrong end, e.g. a 4 byte structure is loaded into the lower 4 bytes
+-of the register when it should be loaded into the upper 4 bytes of the
+-register. </p>
+-
+-<p>GCC is consistent with itself, but not consistent with the SGI C compiler
+-(and the SGI supplied runtime libraries), so the only failures that can
+-happen are when there are library functions that take/return such
+-structures. There are very few such library functions. I can only recall
+-seeing two of them: inet_ntoa, and semctl. </p>
+-
+-<p>See <a href="http://reality.sgi.com/ariel/freeware/">
+-http://reality.sgi.com/ariel/freeware</a> for more information about
+-using GCC on IRIX platforms.</p>
+-
+-
+-<hr>
+-<h3><a name="powerpc-*-linux-gnu*">powerpc-*-linux-gnu*</a></h3>
+-
+-<p>You will need
+-<a href="ftp://ftp.varesearch.com/pub/support/hjl/binutils">binutils-2.9.4.0.8</a> or newer for a working GCC. It is strongly recommended to recompile binutils
+-if you initially built it with gcc-2.7.2.x.</p>
+-
+-
+-<hr>
+-<h3><a name="*-*-solaris*">*-*-solaris*</a></h3>
+-
+-<p>Starting with Solaris, Sun does not ship a C compiler any more. To
+-bootstrap and install GCC you first have to install a pre-built
+-compiler, see our <a href="binaries.html">binaries page</a> for
+-details.</p>
+-
+-<p>Sun as 4.X is broken in that it cannot cope with long symbol names.
+-A typical error message might look similar to the following:
+-<BLOCKQUOTE><CODE>
+-/usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: error: can't compute
+-value of an expression involving an external symbol.
+-</CODE></BLOCKQUOTE>
+-<p>See the <a href="../faq.html#squangle">How to work around too long C++
+-symbol names?</a> FAQ entry for further information.</p>
+-
+-<p>Sun make in all known Solaris 1 (SunOS 4) and Solaris 2 releases has a
+-broken <i>VPATH</i> mechanism, which means you must either:
+-<ul>
+- <li>Use GNU make (recommended), <em>or:</em></li>
+- <li>Always build in the source directory, <em>or:</em></li>
+- <li><em>(For GCC 2.95.1 only)</em>
+- apply the patches mentioned at
+- <a href="http://www.gnu.org/software/gcc/extensions.html#sun-make">
+- http://www.gnu.org/software/gcc/extensions.html#sun-make</a>.</li>
+-</ul>
+-
+-
+-<hr>
+-<h3><a name="sparc-sun-solaris*">sparc-sun-solaris*</a></h3>
+-
+-<p>binutils 2.9.1 has known bugs on this platform. We recommend to use
+-binutils 2.10 or the vendor tools (Sun as, Sun ld).</p>
+-
+-<p>Unfortunately, C++ shared libraries, including libstdc++, won't work
+-properly if assembled with Sun as: the linker will complain about
+-relocations in read-only sections, in the definition of virtual
+-tables. Also, Sun as fails to process long symbols resulting from
+-mangling template-heavy C++ function names.</p>
+-
+-
+-<hr>
+-<h3><a name="sparc-sun-solaris2.7">sparc-sun-solaris2.7</a></h3>
+-
+-<p>Sun patch 107058-01 (1999-01-13) for SPARC Solaris 7 triggers a bug in
+-the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8
+-and later, including all EGCS releases. Sun formerly recommended
+-107058-01 for all Solaris 7 users, but around 1999-09-01 it started to
+-recommend it only for people who use Sun's compilers.</p>
+-
+-<p>Here are some workarounds to this problem:
+-<ul>
+- <li>Do not install Sun patch 107058-01 until after Sun releases a
+- complete patch for bug 4210064. This is the simplest course to take,
+- unless you must also use Sun's C compiler. Unfortunately 107058-01
+- is preinstalled on some new Solaris-based hosts, so you may have to
+- back it out.</li>
+-
+-<li>Copy the original, unpatched Solaris 7
+- <code>/usr/ccs/bin/as</code> into
+- <code>/usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.1/as</code>,
+- adjusting the latter name to fit your local conventions and software
+- version numbers.</li>
+-
+-<li>Install Sun patch 106950-03 (1999-05-25) or later. Nobody with
+- both 107058-01 and 106950-03 installed has reported the bug with GCC
+- and Sun's dynamic linker. This last course of action is riskiest,
+- for two reasons. First, you must install 106950 on all hosts that
+- run code generated by GCC; it doesn't suffice to install it only on
+- the hosts that run GCC itself. Second, Sun says that 106950-03 is
+- only a partial fix for bug 4210064, but Sun doesn't know whether the
+- partial fix is adequate for GCC. Revision -08 or later should fix
+- the bug, but (as of 1999-10-06) it is still being tested.</li>
+-</ul>
+-
+-
+-<hr>
+-<h3><a name="*-sun-solaris2.8">*-sun-solaris2.8</a></h3>
+-<p><!-- ripped from the same FAQ that I answered -->
+-Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or
+-newer: g++ will complain that types are missing. These headers assume
+-that omitting the type means 'int'; this assumption worked for C89 but
+-is wrong for C++, and is now wrong for C99 also.</p>
+-
+-<p>g++ accepts such (illegal) constructs with the option -fpermissive; it
+-will assume that any missing type is 'int' (as defined by C89).</p>
+-
+-<p>For Solaris 8, this is fixed by revision 24 or later of patch 108652
+-(for SPARCs) or 108653 (for Intels).</p>
+-
+-
+-<hr>
+-<h3><a name="sunv5">Sun V5.0 Compiler Bugs</a></h3>
+-The Sun V5.0 compilers are known to mis-compile GCC 2.95 and GCC 2.95.1,
+-which in turn causes GCC to fail its bootstrap comparison test.
+-GCC 2.95.2 has a workaround.
+-
+-
+-<hr>
+-<h3><a name="sparc-sun-sunos*">sparc-sun-sunos*</a></h3>
+-
+-<p>A bug in the SunOS4 linker will cause it to crash when linking
+--fPIC compiled objects (and will therefore not allow you to build
+-shared libraries).</p>
+-
+-<p>To fix this problem you can either use the most recent version of
+-binutils or get the latest SunOS4 linker patch (patch ID 100170-10)
+-from Sun's patch site.</p>
+-
+-
+-<hr>
+-<h3><a name="sparc-unknown-linux-gnulibc1">sparc-unknown-linux-gnulibc1</a></h3>
+-
+-<p>It has been reported that you might need
+-<a href="ftp://ftp.yggdrasil.com/private/hjl">binutils-2.8.1.0.23</a>
+-for this platform, too.</p>
+-
+-
+-<hr>
+-<h3><a name="sparc64-*-*">sparc64-*-*</a></h3>
+-
+-<p>GCC version 2.95 is not able to compile code correctly for
+-<code>sparc64</code> targets. Users of the Linux kernel, at least,
+-can use the <code>sparc32</code> program to start up a new shell
+-invocation with an environment that causes <code>configure</code> to
+-recognize (via <code>uname -a</code>) the system as
+-<code>sparc-*-*</code> instead.</p>
+-
+-
+-<hr>
+-<h3><a name="windows"></a>Microsoft Windows (32 bit)</h3>
+-
+-<p>A port of GCC 2.95.x is included with the
+-<a href="http://www.cygwin.com/">Cygwin environment</a>.</p>
+-
+-<p>Current (as of early 2001) snapshots of GCC will build under Cygwin
+-without modification.</p>
+-
+-<hr>
+-<h3><a name="os2"></a>OS/2</h3>
+-
+-<p>GCC does not currently support OS/2. However, Andrew Zabolotny has been
+-working on a generic OS/2 port with pgcc. The current code code can be found
+-at <a href="http://www.goof.com/pcg/os2/">http://www.goof.com/pcg/os2/</a>.</p>
+-
+-<p>An older copy of GCC 2.8.1 is included with the EMX tools available at
+-<a href="ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/">
+-ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/</a>.</p>
+-
+-
+-<hr>
+-<h3><a name="elf_targets">all ELF targets (SVR4, Solaris, etc.)</a></h3>
+-
+-<p>C++ support is significantly better on ELF targets if you use the GNU
+-linker; duplicate copies of inlines, vtables and template instantiations
+-will be discarded automatically.</p>
+-
+-
+-<hr>
+-<p><a href="./index.html">Return to the GCC Installation page</a></p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/TEST gcc-2.95.4/install/TEST
+--- gcc-2.95.3/install/TEST 2001-03-16 15:15:43.000000000 +0100
++++ gcc-2.95.4/install/TEST 1970-01-01 01:00:00.000000000 +0100
+@@ -1,104 +0,0 @@
+-
+- Installing GCC: Testing
+-
+- _Please note that this is only applicable to current development
+- versions of GCC and GCC 3.0 or later. GCC 2.95.x does not come with a
+- testsuite._
+-
+- Before you install GCC, you might wish to run the testsuite. This step
+- is optional and may require you to download additional software.
+-
+- First, you must have [1]downloaded the testsuites. The full
+- distribution contains testsuites; only if you downloaded the "core"
+- compiler plus any front ends, you do not have the testsuites.
+-
+- Second, you must have a current version of dejagnu installed; dejagnu
+- 1.3 is not sufficient.
+-
+- Now you may need specific preparations:
+- * In order to run the libio tests on targets which do not fully
+- support Unix/POSIX commands (e.g. Cygwin), the references to the
+- dbz directory have to be deleted from libio/configure.in.
+- * The following environment variables must be set appropriately, as
+- in the following example (which assumes that dejagnu has been
+- installed under /usr/local):
+-
+- TCL_LIBRARY = /usr/local/share/tcl8.0
+- DEJAGNULIBS = /usr/local/share/dejagnu
+- On systems such as Cygwin, these paths are required to be actual
+- paths, not mounts or links; presumably this is due to some lack of
+- portability in the dejagnu code.
+-
+- Finally, you can run the testsuite (which may take a long time):
+-
+- cd _objdir_; make -k check
+-
+- The testing process will try to test as many components in the GCC
+- distribution as possible, including the C, C++ and Fortran compilers
+- as well as the C++ runtime libraries.
+-
+-How can I run the test suite on selected tests?
+-
+- As a first possibility to cut down the number of tests that are run it
+- is possible to use `make check-gcc` or `make check-g++` in the gcc
+- subdirectory of the object directory. To further cut down the tests
+- the following is possible:
+-
+- make check-gcc RUNTESTFLAGS="execute.exp <other options>"
+-
+- This will run all gcc execute tests in the testsuite.
+-
+- make check-g++ RUNTESTFLAGS="old-deja.exp=9805* <other options>"
+-
+- This will run the g++ "old-deja" tests in the testsuite where the
+- filename matches 9805*.
+-
+- The *.exp files are located in the testsuite directories of the GCC
+- source, the most important ones being compile.exp, execute.exp, dg.exp
+- and old-deja.exp. To get a list of the possible *.exp files, pipe the
+- output of `make check` into a file and look at the "Running ... .exp"
+- lines.
+-
+-How to interpret test results
+-
+- After the testsuite has run you'll find various *.sum and *.log files
+- in the testsuite subdirectories. The *.log files contain a detailed
+- log of the compiler invocations and the corresponding results, the
+- *.sum files summarize the results. These summaries list all the tests
+- that have been run with a corresponding status code:
+- * PASS: the test passed as expected
+- * XPASS: the test unexpectedly passed
+- * FAIL: the test unexpectedly failed
+- * XFAIL: the test failed as expected
+- * UNSUPPORTED: the test is not supported on this platform
+- * ERROR: the testsuite detected an error
+- * WARNING: the testsuite detected a possible problem
+-
+- It is normal for some tests to report unexpected failures. At the
+- current time our testing harness does not allow fine grained control
+- over whether or not a test is expected to fail. We expect to fix this
+- problem in future releases.
+-
+-Submitting test results
+-
+- If you want to report the results to the GCC project, use the
+- contrib/test_summary shell script. Start it in the objdir with
+-
+- _srcdir_/contrib/test_summary -p your_commentary.txt -m
+- gcc-testresults@gcc.gnu.org |sh
+-
+- This script uses the Mail program to send the results, so make sure it
+- is in your PATH. The file your_commentary.txt is prepended to the
+- testsuite summary and should contain any special remarks you have on
+- your results or your build environment. Please do not edit the
+- testsuite result block or the subject line, as these messages are
+- automatically parsed and presented at the [2]GCC testresults web page.
+- Here you can also gather information on how specific tests behave on
+- different platforms and compare them with your results. A few failing
+- testcases are possible even on released versions and you should look
+- here first if you think your results are unreasonable.
+-
+-References
+-
+- 1. http://gcc.gnu.org/install/download.html
+- 2. http://gcc.gnu.org/testresults/
+diff -ruNb gcc-2.95.3/install/test.html gcc-2.95.4/install/test.html
+--- gcc-2.95.3/install/test.html 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/test.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,133 +0,0 @@
+-<html>
+-
+-<head>
+-<title>Installing GCC: Testing</title>
+-</head>
+-
+-<body>
+-<h1 align="center">Installing GCC: Testing</h1>
+-
+-<p><strong>Please note that this is only applicable to current development
+-versions of GCC and GCC 3.0 or later. GCC 2.95.x does not come with a
+-testsuite.</strong></p>
+-
+-<p>Before you install GCC, you might wish to run the testsuite. This
+-step is optional and may require you to download additional software.</p>
+-
+-<p>First, you must have <a href="download.html">downloaded the
+-testsuites</a>. The full distribution contains testsuites; only if you
+-downloaded the "core" compiler plus any front ends, you do not have the
+-testsuites.</p>
+-
+-<p>Second, you must have a current version of dejagnu installed;
+-dejagnu 1.3 is not sufficient.</p>
+-
+-<p>Now you may need specific preparations:</p>
+-
+-<ul>
+-
+-<li>
+-In order to run the libio tests on targets which do not fully
+-support Unix/POSIX commands (e.g. Cygwin), the references to the dbz
+-directory have to be deleted from libio/configure.in.
+-</li>
+-
+-<li>
+-<p>The following environment variables must be set appropriately, as in
+-the following example (which assumes that dejagnu has been installed under
+-/usr/local):</p>
+-
+-<blockquote><code>
+-TCL_LIBRARY = /usr/local/share/tcl8.0<br>
+-DEJAGNULIBS = /usr/local/share/dejagnu
+-</code></blockquote>
+-
+-<p>On systems such as Cygwin, these paths are required to be actual
+-paths, not mounts or links; presumably this is due to some lack of
+-portability in the dejagnu code.</p>
+-</li>
+-</ul>
+-
+-<p>Finally, you can run the testsuite (which may take a long time):</p>
+-<blockquote><code>
+-cd <i>objdir</i>; make -k check
+-</code></blockquote>
+-
+-<p>The testing process will try to test as many components in the GCC
+-distribution as possible, including the C, C++ and Fortran compilers as
+-well as the C++ runtime libraries.</p>
+-
+-
+-<h2>How can I run the test suite on selected tests?</h2>
+-
+-<p>As a first possibility to cut down the number of tests that are run it is
+-possible to use `<code>make check-gcc</code>` or `<code>make check-g++</code>`
+-in the gcc subdirectory of the object directory. To further cut down the
+-tests the following is possible:</p>
+-
+-<blockquote><code>
+- make check-gcc RUNTESTFLAGS="execute.exp &lt;other options&gt;"
+-</code></blockquote>
+-
+-<p>This will run all gcc execute tests in the testsuite.</p>
+-
+-<blockquote><code>
+- make check-g++ RUNTESTFLAGS="old-deja.exp=9805* &lt;other options&gt;"
+-</code></blockquote>
+-
+-<p>This will run the g++ "old-deja" tests in the testsuite where the filename
+-matches 9805*.</p>
+-
+-<p>The *.exp files are located in the testsuite directories of the GCC
+-source, the most important ones being compile.exp, execute.exp, dg.exp
+-and old-deja.exp. To get a list of the possible *.exp files, pipe the
+-output of `<code>make check</code>` into a file and look at the
+-"<code>Running ... .exp</code>" lines.
+-
+-
+-<h2>How to interpret test results</h2>
+-
+-<p>After the testsuite has run you'll find various *.sum and *.log
+-files in the testsuite subdirectories. The *.log files contain a
+-detailed log of the compiler invocations and the corresponding
+-results, the *.sum files summarize the results. These summaries list
+-all the tests that have been run with a corresponding status code:</p>
+-
+-<ul>
+-<li>PASS: the test passed as expected</li>
+-<li>XPASS: the test unexpectedly passed</li>
+-<li>FAIL: the test unexpectedly failed</li>
+-<li>XFAIL: the test failed as expected</li>
+-<li>UNSUPPORTED: the test is not supported on this platform</li>
+-<li>ERROR: the testsuite detected an error</li>
+-<li>WARNING: the testsuite detected a possible problem</li>
+-</ul>
+-
+-<p> It is normal for some tests to report
+-unexpected failures. At the current time our testing harness does not allow
+-fine grained control over whether or not a test is expected to fail. We expect
+-to fix this problem in future releases.</p>
+-
+-
+-<h2>Submitting test results</h2>
+-
+-<p>If you want to report the results to the GCC project, use the
+-<code>contrib/test_summary</code> shell script. Start it in the objdir with</p>
+-<blockquote><code>
+-<i>srcdir</i>/contrib/test_summary -p your_commentary.txt -m gcc-testresults@gcc.gnu.org |sh
+-</code></blockquote>
+-
+-<p>This script uses the <code>Mail</code> program to send the results, so
+-make sure it is in your PATH. The file your_commentary.txt is
+-prepended to the testsuite summary and should contain any special
+-remarks you have on your results or your build environment. Please
+-do not edit the testsuite result block or the subject line, as these
+-messages are automatically parsed and presented at the <a
+-href="http://gcc.gnu.org/testresults/">GCC testresults</a> web
+-page. Here you can also gather information on how specific tests
+-behave on different platforms and compare them with your results. A
+-few failing testcases are possible even on released versions and you
+-should look here first if you think your results are unreasonable.</p>
+-
+-</body>
+-</html>
+diff -ruNb gcc-2.95.3/install/x86-sol2-gas.patch gcc-2.95.4/install/x86-sol2-gas.patch
+--- gcc-2.95.3/install/x86-sol2-gas.patch 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/install/x86-sol2-gas.patch 1970-01-01 01:00:00.000000000 +0100
+@@ -1,70 +0,0 @@
+-Index: gcc/ChangeLog
+-from Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+-
+- * config/i386/sol2gas.h: I had installed the wrong version of Sept
+- 22's patch in the release branch. Fixed.
+- * configure.in: Likewise.
+- * configure: Rebuilt.
+- Reported by Jason Beardsley <jbeardsley@origin.ea.com>
+-
+-Index: gcc/configure.in
+-===================================================================
+-RCS file: /cvs/gcc/egcs/gcc/configure.in,v
+-retrieving revision 1.246.4.12
+-diff -u -r1.246.4.12 configure.in
+---- gcc/configure.in 1999/10/13 07:58:02 1.246.4.12
+-+++ gcc/configure.in 1999/10/28 23:05:38
+-@@ -1399,11 +1399,10 @@
+- changequote([,])dnl
+- xm_file="xm-siglist.h xm-alloca.h ${xm_file}"
+- xm_defines="USG POSIX SMALL_ARG_MAX"
+-+ tm_file=i386/sol2.h
+- if test x$gas = xyes; then
+- # Only needed if gas does not support -s
+-- tm_file=i386/sol2gas.h
+-- else
+-- tm_file=i386/sol2.h
+-+ tm_file="i386/sol2gas.h ${tm_file}"
+- fi
+- tmake_file=i386/t-sol2
+- extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
+-Index: gcc/config/i386/sol2gas.h
+-===================================================================
+-RCS file: /cvs/gcc/egcs/gcc/config/i386/sol2gas.h,v
+-retrieving revision 1.1.2.1
+-diff -u -r1.1.2.1 sol2gas.h
+---- gcc/config/i386/sol2gas.h 1999/09/22 10:44:21 1.1.2.1
+-+++ gcc/config/i386/sol2gas.h 1999/10/28 23:05:38
+-@@ -4,8 +4,6 @@
+- Copyright (C) 1999 Free Software Foundation, Inc.
+- */
+-
+--#ifndef GAS_DOES_NOT_SUPPORT_MINUS_S
+--#define GAS_DOES_NOT_SUPPORT_MINUS_S 1
+-+#ifndef GAS_REJECTS_MINUS_S
+-+#define GAS_REJECTS_MINUS_S 1
+- #endif
+--
+--#include "i386/sol2.h"
+-Index: gcc/configure
+-===================================================================
+-RCS file: /cvs/gcc/egcs/gcc/configure,v
+-retrieving revision 1.242.4.12
+-diff -u -r1.242.4.12 configure
+---- gcc/configure 1999/10/13 07:58:02 1.242.4.12
+-+++ gcc/configure 1999/10/28 23:10:32
+-@@ -3750,11 +3750,11 @@
+- i[34567]86-*-solaris2*)
+- xm_file="xm-siglist.h xm-alloca.h ${xm_file}"
+- xm_defines="USG POSIX SMALL_ARG_MAX"
+-+ tm_file=i386/sol2.h
+- if test x$gas = xyes; then
+- # Only needed if gas does not support -s
+-- tm_file=i386/sol2gas.h
+-- else
+-- tm_file=i386/sol2.h
+-+ tm_file="i386/sol2gas.h ${tm_file}"
+-+ #
+- fi
+- tmake_file=i386/t-sol2
+- extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
+diff -ruNb gcc-2.95.3/INSTALL/README gcc-2.95.4/INSTALL/README
+--- gcc-2.95.3/INSTALL/README 2001-03-16 15:14:20.000000000 +0100
++++ gcc-2.95.4/INSTALL/README 2017-11-07 22:10:12.000000000 +0100
+@@ -1,10 +1,9 @@
+-The installation instructions are no longer in this directory. Instead
+-they can be found in the "install" directory at the toplevel of the GCC
+-distribution (ie gcc-2.95/install). For HTML browsing start with
+-install/index.html, for plaintext, start with install/INDEX.
++This directory has been obsoleted for egcs snapshots and CVS access.
+
+-Moving the installation instructions in this manner makes it significantly
+-easier to share code between the distribution and the web pages.
++Instead check out the toplevel "wwwdocs" as a sibling of your egcs
++tree or read these files via the egcs web site
++http://www.gnu.org/software/gcc/
+
+-This directory (INSTALL) will be completely removed in the next major
+-GCC release.
++
++Copies of the relevant files will be copied into this directory for
++releases.
+diff -ruNb gcc-2.95.3/libf2c/libF77/Version.c gcc-2.95.4/libf2c/libF77/Version.c
+--- gcc-2.95.3/libf2c/libF77/Version.c 2001-03-16 13:52:18.000000000 +0100
++++ gcc-2.95.4/libf2c/libF77/Version.c 2017-11-07 22:10:13.000000000 +0100
+@@ -3,7 +3,7 @@
+ /*
+ */
+
+-char __G77_LIBF77_VERSION__[] = "0.5.25 20010315 (release)";
++char __G77_LIBF77_VERSION__[] = "0.5.25 20010319 (prerelease)";
+
+ /*
+ 2.00 11 June 1980. File version.c added to library.
+diff -ruNb gcc-2.95.3/libf2c/libI77/Version.c gcc-2.95.4/libf2c/libI77/Version.c
+--- gcc-2.95.3/libf2c/libI77/Version.c 2001-03-16 13:52:18.000000000 +0100
++++ gcc-2.95.4/libf2c/libI77/Version.c 2017-11-07 22:10:13.000000000 +0100
+@@ -3,7 +3,7 @@
+ /*
+ */
+
+-char __G77_LIBI77_VERSION__[] = "0.5.25 20010315 (release)";
++char __G77_LIBI77_VERSION__[] = "0.5.25 20010319 (prerelease)";
+
+ /*
+ 2.01 $ format added
+diff -ruNb gcc-2.95.3/libf2c/libU77/Version.c gcc-2.95.4/libf2c/libU77/Version.c
+--- gcc-2.95.3/libf2c/libU77/Version.c 2001-03-16 13:52:18.000000000 +0100
++++ gcc-2.95.4/libf2c/libU77/Version.c 2017-11-07 22:10:13.000000000 +0100
+@@ -1,6 +1,6 @@
+ static char junk[] = "\n@(#) LIBU77 VERSION 19980709\n";
+
+-char __G77_LIBU77_VERSION__[] = "0.5.25 20010315 (release)";
++char __G77_LIBU77_VERSION__[] = "0.5.25 20010319 (prerelease)";
+
+ #include <stdio.h>
+
+diff -ruNb gcc-2.95.3/libiberty/ChangeLog gcc-2.95.4/libiberty/ChangeLog
+--- gcc-2.95.3/libiberty/ChangeLog 2001-03-16 13:52:19.000000000 +0100
++++ gcc-2.95.4/libiberty/ChangeLog 2017-11-07 22:10:12.000000000 +0100
+@@ -1,3 +1,7 @@
++2001-03-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
++
++ * memchr.c (memchr): Adjust condition to avoid infinite loop.
++
+ Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
+
+ * gcc-2.95.3 Released.
+diff -ruNb gcc-2.95.3/libiberty/memchr.c gcc-2.95.4/libiberty/memchr.c
+--- gcc-2.95.3/libiberty/memchr.c 1998-12-14 08:00:53.000000000 +0100
++++ gcc-2.95.4/libiberty/memchr.c 2017-11-07 22:10:12.000000000 +0100
+@@ -50,7 +50,7 @@
+ {
+ const unsigned char *src = (const unsigned char *)src_void;
+
+- while (--length >= 0)
++ while (length-- > 0)
+ {
+ if (*src == c)
+ return (PTR)src;
+diff -ruNb gcc-2.95.3/libio/dbz/dbzmain.c gcc-2.95.4/libio/dbz/dbzmain.c
+--- gcc-2.95.3/libio/dbz/dbzmain.c 1998-02-01 13:20:13.000000000 +0100
++++ gcc-2.95.4/libio/dbz/dbzmain.c 2017-11-07 22:10:11.000000000 +0100
+@@ -19,7 +19,7 @@
+ #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
+
+ #ifndef lint
+-static char RCSid[] = "$Header: /egcs/carton/cvsfiles/egcs/./libio/dbz/dbzmain.c,v 1.1.1.1 1997/08/21 22:58:23 jason Exp $";
++static char RCSid[] = "$Header: /cvs/gcc/gcc/libio/dbz/dbzmain.c,v 1.2 1998/02/01 12:20:13 law Exp $";
+ #endif
+
+ char *progname;
+diff -ruNb gcc-2.95.3/libio/dbz/fake.c gcc-2.95.4/libio/dbz/fake.c
+--- gcc-2.95.3/libio/dbz/fake.c 1997-08-22 00:58:23.000000000 +0200
++++ gcc-2.95.4/libio/dbz/fake.c 2017-11-07 22:10:11.000000000 +0100
+@@ -13,7 +13,7 @@
+ #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
+
+ #ifndef lint
+-static char RCSid[] = "$Header: /rel/cvsfiles/devo/libio/dbz/fake.c,v 1.2 1993/10/25 20:02:42 bothner Exp $";
++static char RCSid[] = "$Header: /cvs/gcc/gcc/libio/dbz/fake.c,v 1.1.1.1 1997/08/21 22:58:23 jason Exp $";
+ #endif
+
+ int midonly = 0; /* just message ids, rest not realistic */
+diff -ruNb gcc-2.95.3/libio/editbuf.cc gcc-2.95.4/libio/editbuf.cc
+--- gcc-2.95.3/libio/editbuf.cc 1997-08-22 00:58:14.000000000 +0200
++++ gcc-2.95.4/libio/editbuf.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -31,6 +31,7 @@
+ #include "editbuf.h"
+ #include <stddef.h>
+ #include <stdlib.h>
++#include <string.h>
+
+ /* NOTE: Some of the code here is taken from GNU emacs */
+ /* Hence this file falls under the GNU License! */
+diff -ruNb gcc-2.95.3/libio/filebuf.cc gcc-2.95.4/libio/filebuf.cc
+--- gcc-2.95.3/libio/filebuf.cc 1999-12-21 19:13:32.000000000 +0100
++++ gcc-2.95.4/libio/filebuf.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -30,6 +30,10 @@
+ #include <fcntl.h>
+ #include <errno.h>
+ #include "builtinbuf.h"
++/* We replace new by new (nothrow) when exceptions aren't turned on */
++#ifndef _IO_THROW
++#include <new>
++#endif
+
+ void filebuf::init()
+ {
+diff -ruNb gcc-2.95.3/libio/filedoalloc.c gcc-2.95.4/libio/filedoalloc.c
+--- gcc-2.95.3/libio/filedoalloc.c 1999-04-12 20:27:48.000000000 +0200
++++ gcc-2.95.4/libio/filedoalloc.c 2017-11-07 22:10:11.000000000 +0100
+@@ -1,3 +1,4 @@
++
+ /* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
+ This file is part of the GNU IO Library.
+
+diff -ruNb gcc-2.95.3/libio/fileops.c gcc-2.95.4/libio/fileops.c
+--- gcc-2.95.3/libio/fileops.c 1999-04-12 20:27:49.000000000 +0200
++++ gcc-2.95.4/libio/fileops.c 2017-11-07 22:10:11.000000000 +0100
+@@ -415,6 +415,9 @@
+ fp->_offset = _IO_pos_BAD;
+ /* FIXME: Cleanup - can this be shared? */
+ /* setg(base(), ptr, ptr); */
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return retval;
+ }
+diff -ruNb gcc-2.95.3/libio/gen-params gcc-2.95.4/libio/gen-params
+--- gcc-2.95.3/libio/gen-params 1999-03-24 00:58:21.000000000 +0100
++++ gcc-2.95.4/libio/gen-params 2017-11-07 22:10:11.000000000 +0100
+@@ -55,8 +55,8 @@
+ then echo ${gccdir}/xgcc -B${gccdir}/ ; \
+ else echo gcc ; fi`}
+ CPP=${CPP-`echo ${CC} -E`}
+-CONFIG_NM=${CONFIG_NM-`if [ -f ${binutilsdir}/nm.new ] ; \
+- then echo ${binutilsdir}/nm.new ; \
++CONFIG_NM=${CONFIG_NM-`if [ -f ${binutilsdir}/nm-new ] ; \
++ then echo ${binutilsdir}/nm-new ; \
+ else echo nm ; fi`}
+
+ cat <<!EOF!
+@@ -710,13 +710,14 @@
+
+ # A little test program to check if __printf_fp is available.
+ cat >dummy.c <<EOF
++#include <printf.h>
+ int main()
+ {
+ return __printf_fp ();
+ }
+ EOF
+
+-if ${CC} dummy.c >/dev/null 2>&1 ; then
++if ${CC} dummy.c -Wimplicit -Werror >/dev/null 2>&1 ; then
+ echo "#define ${macro_prefix}HAVE_PRINTF_FP 1"
+ echo "#define ${macro_prefix}HAVE_LONG_DOUBLE_IO 1"
+ else
+diff -ruNb gcc-2.95.3/libio/ioextend.cc gcc-2.95.4/libio/ioextend.cc
+--- gcc-2.95.3/libio/ioextend.cc 1997-08-22 00:58:16.000000000 +0200
++++ gcc-2.95.4/libio/ioextend.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -23,6 +23,10 @@
+ the executable file might be covered by the GNU General Public License. */
+
+ #include <iostream.h>
++/* We replace new by new (nothrow) when exceptions aren't turned on */
++#ifndef _IO_THROW
++#include <new>
++#endif
+
+ static int __xalloc = 0;
+
+diff -ruNb gcc-2.95.3/libio/iofclose.c gcc-2.95.4/libio/iofclose.c
+--- gcc-2.95.3/libio/iofclose.c 1999-03-05 01:19:09.000000000 +0100
++++ gcc-2.95.4/libio/iofclose.c 2017-11-07 22:10:11.000000000 +0100
+@@ -43,6 +43,9 @@
+ else
+ status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
+ _IO_FINISH (fp);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
+ {
+diff -ruNb gcc-2.95.3/libio/iofflush.c gcc-2.95.4/libio/iofflush.c
+--- gcc-2.95.3/libio/iofflush.c 1997-09-06 09:42:58.000000000 +0200
++++ gcc-2.95.4/libio/iofflush.c 2017-11-07 22:10:11.000000000 +0100
+@@ -39,6 +39,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ result = _IO_SYNC (fp) ? EOF : 0;
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/iofgetpos.c gcc-2.95.4/libio/iofgetpos.c
+--- gcc-2.95.3/libio/iofgetpos.c 1997-09-06 09:43:00.000000000 +0200
++++ gcc-2.95.4/libio/iofgetpos.c 2017-11-07 22:10:11.000000000 +0100
+@@ -37,6 +37,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ if (pos == _IO_pos_BAD)
+ {
+diff -ruNb gcc-2.95.3/libio/iofgets.c gcc-2.95.4/libio/iofgets.c
+--- gcc-2.95.3/libio/iofgets.c 1997-09-06 09:43:01.000000000 +0200
++++ gcc-2.95.4/libio/iofgets.c 2017-11-07 22:10:11.000000000 +0100
+@@ -47,6 +47,9 @@
+ buf[count] = '\0';
+ result = buf;
+ }
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/iofputs.c gcc-2.95.4/libio/iofputs.c
+--- gcc-2.95.3/libio/iofputs.c 1997-09-06 09:43:06.000000000 +0200
++++ gcc-2.95.4/libio/iofputs.c 2017-11-07 22:10:11.000000000 +0100
+@@ -40,6 +40,9 @@
+ result = EOF;
+ else
+ result = 1;
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/iofread.c gcc-2.95.4/libio/iofread.c
+--- gcc-2.95.3/libio/iofread.c 1997-09-06 09:43:08.000000000 +0200
++++ gcc-2.95.4/libio/iofread.c 2017-11-07 22:10:11.000000000 +0100
+@@ -40,6 +40,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return bytes_requested == bytes_read ? count : bytes_read / size;
+ }
+diff -ruNb gcc-2.95.3/libio/iofsetpos.c gcc-2.95.4/libio/iofsetpos.c
+--- gcc-2.95.3/libio/iofsetpos.c 1997-09-06 09:43:10.000000000 +0200
++++ gcc-2.95.4/libio/iofsetpos.c 2017-11-07 22:10:11.000000000 +0100
+@@ -47,6 +47,9 @@
+ }
+ else
+ result = 0;
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/ioftell.c gcc-2.95.4/libio/ioftell.c
+--- gcc-2.95.3/libio/ioftell.c 1997-09-06 09:43:12.000000000 +0200
++++ gcc-2.95.4/libio/ioftell.c 2017-11-07 22:10:11.000000000 +0100
+@@ -36,6 +36,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ if (pos == _IO_pos_BAD)
+ {
+diff -ruNb gcc-2.95.3/libio/iofwrite.c gcc-2.95.4/libio/iofwrite.c
+--- gcc-2.95.3/libio/iofwrite.c 1997-09-06 09:43:13.000000000 +0200
++++ gcc-2.95.4/libio/iofwrite.c 2017-11-07 22:10:11.000000000 +0100
+@@ -40,6 +40,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ written = _IO_sputn (fp, (const char *) buf, request);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ /* Many traditional implementations return 0 if size==0 && count > 0,
+ but ANSI requires us to return count in this case. */
+diff -ruNb gcc-2.95.3/libio/iogetc.c gcc-2.95.4/libio/iogetc.c
+--- gcc-2.95.3/libio/iogetc.c 1999-03-05 01:19:12.000000000 +0100
++++ gcc-2.95.4/libio/iogetc.c 2017-11-07 22:10:11.000000000 +0100
+@@ -37,6 +37,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ result = _IO_getc_unlocked (fp);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/iogetdelim.c gcc-2.95.4/libio/iogetdelim.c
+--- gcc-2.95.3/libio/iogetdelim.c 1997-09-06 09:43:17.000000000 +0200
++++ gcc-2.95.4/libio/iogetdelim.c 2017-11-07 22:10:11.000000000 +0100
+@@ -115,6 +115,9 @@
+ result = cur_len;
+
+ unlock_return:
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/iogets.c gcc-2.95.4/libio/iogets.c
+--- gcc-2.95.3/libio/iogets.c 1997-09-06 09:43:20.000000000 +0200
++++ gcc-2.95.4/libio/iogets.c 2017-11-07 22:10:11.000000000 +0100
+@@ -58,6 +58,10 @@
+ buf[count] = 0;
+ retval = buf;
+ unlock_return:
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (
++ _IO_stdin);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return retval;
+ }
+diff -ruNb gcc-2.95.3/libio/ioputc.c gcc-2.95.4/libio/ioputc.c
+--- gcc-2.95.3/libio/ioputc.c 1999-03-05 01:19:13.000000000 +0100
++++ gcc-2.95.4/libio/ioputc.c 2017-11-07 22:10:11.000000000 +0100
+@@ -31,6 +31,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ result = _IO_putc_unlocked (c, fp);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/ioputs.c gcc-2.95.4/libio/ioputs.c
+--- gcc-2.95.3/libio/ioputs.c 1997-09-06 09:43:26.000000000 +0200
++++ gcc-2.95.4/libio/ioputs.c 2017-11-07 22:10:11.000000000 +0100
+@@ -40,6 +40,10 @@
+ result = len + 1;
+ else
+ result = EOF;
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (
++ _IO_stdout);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/ioseekoff.c gcc-2.95.4/libio/ioseekoff.c
+--- gcc-2.95.3/libio/ioseekoff.c 1997-09-16 18:00:21.000000000 +0200
++++ gcc-2.95.4/libio/ioseekoff.c 2017-11-07 22:10:11.000000000 +0100
+@@ -49,6 +49,9 @@
+ }
+ retval = _IO_SEEKOFF (fp, offset, dir, mode);
+
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return retval;
+ }
+diff -ruNb gcc-2.95.3/libio/ioseekpos.c gcc-2.95.4/libio/ioseekpos.c
+--- gcc-2.95.3/libio/ioseekpos.c 1997-09-16 18:00:23.000000000 +0200
++++ gcc-2.95.4/libio/ioseekpos.c 2017-11-07 22:10:11.000000000 +0100
+@@ -43,6 +43,9 @@
+ _IO_free_backup_area (fp);
+ retval = _IO_SEEKPOS (fp, pos, mode);
+
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return retval;
+ }
+diff -ruNb gcc-2.95.3/libio/iosetbuffer.c gcc-2.95.4/libio/iosetbuffer.c
+--- gcc-2.95.3/libio/iosetbuffer.c 1997-09-06 09:43:30.000000000 +0200
++++ gcc-2.95.4/libio/iosetbuffer.c 2017-11-07 22:10:11.000000000 +0100
+@@ -38,6 +38,9 @@
+ if (!buf)
+ size = 0;
+ (void) _IO_SETBUF (fp, buf, size);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ }
+
+diff -ruNb gcc-2.95.3/libio/iosetvbuf.c gcc-2.95.4/libio/iosetvbuf.c
+--- gcc-2.95.3/libio/iosetvbuf.c 1997-09-06 09:43:32.000000000 +0200
++++ gcc-2.95.4/libio/iosetvbuf.c 2017-11-07 22:10:11.000000000 +0100
+@@ -91,6 +91,9 @@
+ }
+ result = _IO_SETBUF (fp, buf, size) == NULL ? EOF : 0;
+ unlock_return:
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/iostream.cc gcc-2.95.4/libio/iostream.cc
+--- gcc-2.95.3/libio/iostream.cc 2000-12-10 18:45:08.000000000 +0100
++++ gcc-2.95.4/libio/iostream.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -361,6 +361,8 @@
+ READ_INT(bool)
+ #endif
+
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ istream& istream::operator>>(long double& x)
+ {
+ if (ipfx0())
+@@ -379,6 +381,8 @@
+ }
+ return *this;
+ }
++#endif
++/* End VxWorks specific */
+
+ istream& istream::operator>>(double& x)
+ {
+@@ -761,6 +765,8 @@
+ return *this;
+ }
+
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ #if _G_HAVE_LONG_DOUBLE_IO
+ ostream& ostream::operator<<(long double n)
+ {
+@@ -819,6 +825,8 @@
+ return *this;
+ }
+ #endif
++#endif
++/* End VxWorks specific */
+
+ ostream& ostream::operator<<(const char *s)
+ {
+diff -ruNb gcc-2.95.3/libio/iostream.h gcc-2.95.4/libio/iostream.h
+--- gcc-2.95.3/libio/iostream.h 1999-08-07 08:01:46.000000000 +0200
++++ gcc-2.95.4/libio/iostream.h 2017-11-07 22:10:11.000000000 +0100
+@@ -98,11 +98,16 @@
+ #endif
+ ostream& operator<<(double n);
+ ostream& operator<<(float n) { return operator<<((double)n); }
++
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ #if _G_HAVE_LONG_DOUBLE_IO
+ ostream& operator<<(long double n);
+ #else
+ ostream& operator<<(long double n) { return operator<<((double)n); }
+ #endif
++#endif
++/* End VxWorks specific */
+ ostream& operator<<(__omanip func) { return (*func)(*this); }
+ ostream& operator<<(__manip func) {(*func)(*this); return *this;}
+ ostream& operator<<(streambuf*);
+@@ -218,7 +223,11 @@
+ #endif
+ istream& operator>>(float&);
+ istream& operator>>(double&);
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ istream& operator>>(long double&);
++#endif
++/* End VxWorks specific */
+ istream& operator>>( __manip func) {(*func)(*this); return *this;}
+ istream& operator>>(__imanip func) { return (*func)(*this); }
+ istream& operator>>(streambuf*);
+diff -ruNb gcc-2.95.3/libio/ioungetc.c gcc-2.95.4/libio/ioungetc.c
+--- gcc-2.95.3/libio/ioungetc.c 1997-09-06 09:43:37.000000000 +0200
++++ gcc-2.95.4/libio/ioungetc.c 2017-11-07 22:10:11.000000000 +0100
+@@ -37,6 +37,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ result = _IO_sputbackc (fp, (unsigned char) c);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/iovsprintf.c gcc-2.95.4/libio/iovsprintf.c
+--- gcc-2.95.3/libio/iovsprintf.c 1999-03-05 01:19:14.000000000 +0100
++++ gcc-2.95.4/libio/iovsprintf.c 2017-11-07 22:10:11.000000000 +0100
+@@ -48,6 +48,9 @@
+ _IO_flockfile (&sf._sbf._f);
+ ret = _IO_vfprintf (&sf._sbf._f, format, args);
+ _IO_putc_unlocked ('\0', &sf._sbf._f);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (&sf._sbf._f);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return ret;
+ }
+diff -ruNb gcc-2.95.3/libio/iovsscanf.c gcc-2.95.4/libio/iovsscanf.c
+--- gcc-2.95.3/libio/iovsscanf.c 1999-03-05 01:19:15.000000000 +0100
++++ gcc-2.95.4/libio/iovsscanf.c 2017-11-07 22:10:11.000000000 +0100
+@@ -44,6 +44,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, &sf);
+ _IO_flockfile (&sf._sbf._f);
+ ret = _IO_vfscanf (&sf._sbf._f, format, args, NULL);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (&sf._sbf._f);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return ret;
+ }
+diff -ruNb gcc-2.95.3/libio/isgetline.cc gcc-2.95.4/libio/isgetline.cc
+--- gcc-2.95.3/libio/isgetline.cc 1999-08-07 08:01:46.000000000 +0200
++++ gcc-2.95.4/libio/isgetline.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -25,6 +25,10 @@
+ #include <libioP.h>
+ #include "iostream.h"
+ #include <string.h>
++/* We replace new by new (nothrow) when exceptions aren't turned on */
++#ifndef _IO_THROW
++#include <new>
++#endif
+
+ istream& istream::getline(char* buf, int len, char delim)
+ {
+diff -ruNb gcc-2.95.3/libio/libio.h gcc-2.95.4/libio/libio.h
+--- gcc-2.95.3/libio/libio.h 2000-12-10 18:45:08.000000000 +0100
++++ gcc-2.95.4/libio/libio.h 2017-11-07 22:10:11.000000000 +0100
+@@ -160,9 +160,19 @@
+
+ struct _IO_jump_t; struct _IO_FILE;
+
++#ifdef __vxworks
++#define _IO_VXW_THREADS
++#define _IO_MTSAFE_IO
++#endif
++
+ /* Handle lock. */
+ #ifdef _IO_MTSAFE_IO
+-# if defined __GLIBC__ && __GLIBC__ >= 2
++/* Begin VxWorks specific */
++# ifdef _IO_VXW_THREADS
++# include <stdio-lock.h>
++/* End VxWorks specific */
++# else
++# if (defined __GLIBC__ && __GLIBC__ >= 2) || defined(_IO_VXW_THREADS)
+ # if __GLIBC_MINOR__ > 0
+ # include <bits/stdio-lock.h>
+ # else
+@@ -171,8 +181,6 @@
+ # define _IO_LOCK_T _IO_lock_t *
+ # else
+ /*# include <comthread.h>*/
+-# endif
+-#else
+ # if defined(__GLIBC__) && __GLIBC__ >= 2
+ typedef void _IO_lock_t;
+ # define _IO_LOCK_T void *
+@@ -185,7 +193,8 @@
+ # endif
+ # endif
+ #endif
+-
++# endif
++#endif
+
+ /* A streammarker remembers a position in a buffer. */
+
+@@ -327,9 +336,13 @@
+ #define _IO_PENDING_OUTPUT_COUNT(_fp) \
+ ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
+
++/* Begin VxWorks specific */
++#if !(defined(_IO_MTSAFE_IO) && defined(_IO_VXW_THREADS))
+ extern void _IO_flockfile __P ((_IO_FILE *));
+ extern void _IO_funlockfile __P ((_IO_FILE *));
+ extern int _IO_ftrylockfile __P ((_IO_FILE *));
++#endif
++/* End VxWorks specific */
+
+ #ifdef _IO_MTSAFE_IO
+ # define _IO_peekc(_fp) _IO_peekc_locked (_fp)
+diff -ruNb gcc-2.95.3/libio/parsestream.cc gcc-2.95.4/libio/parsestream.cc
+--- gcc-2.95.3/libio/parsestream.cc 1997-09-06 09:43:48.000000000 +0200
++++ gcc-2.95.4/libio/parsestream.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -30,6 +30,11 @@
+ #include "libioP.h"
+ #include "parsestream.h"
+ #include <stdlib.h>
++#include <string.h>
++/* We replace new by new (nothrow) when exceptions aren't turned on */
++#ifndef _IO_THROW
++#include <new>
++#endif
+
+ streambuf* parsebuf::setbuf(char*, int)
+ {
+diff -ruNb gcc-2.95.3/libio/peekc.c gcc-2.95.4/libio/peekc.c
+--- gcc-2.95.3/libio/peekc.c 1997-09-06 09:43:49.000000000 +0200
++++ gcc-2.95.4/libio/peekc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -37,6 +37,9 @@
+ _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+ _IO_flockfile (fp);
+ result = _IO_peekc_unlocked (fp);
++#ifdef _IO_VXW_THREADS
++ _IO_funlockfile (fp);
++#endif /* _IO_VXW_THREADS */
+ _IO_cleanup_region_end (1);
+ return result;
+ }
+diff -ruNb gcc-2.95.3/libio/stdio-lock.h gcc-2.95.4/libio/stdio-lock.h
+--- gcc-2.95.3/libio/stdio-lock.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-2.95.4/libio/stdio-lock.h 2017-11-08 08:43:50.000000000 +0100
+@@ -0,0 +1,103 @@
++/* stdio-lock.h - multithreaded iostreams header file */
++
++/* Copyright 1998 Wind River Systems, Inc. */
++
++/*
++modification history
++--------------------
++01d,04may99,sn make safe for 'C'
++01c,05may98,sn cleaned up to use the new class vxw_mutex
++01b,27apr98,sn corrected behaviour of _IO_lock_init and _IO_lock_fini
++01a,02mar98,sn wrote
++*/
++
++/* This file defines what is needed for VxWorks multithread safe iostreams.
++ * This version of iostreams is actually thread safe at the object level,
++ * meaning that each stream mutation operation is either already atomic
++ * or composed of atomic operations each of which leave the stream
++ * is a sensible state. In particular individual "insertions" into
++ * a stream are atomic.
++
++ * In the interests of efficiency, our implementation has strayed somewhat
++ * from the existing multithreaded GNU libio framework.
++ */
++
++#ifndef __INCstdio_lockh
++#define __INCstdio_lockh
++
++#include <vxwMutex.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++typedef struct vxw_mutex_t _IO_lock_t;
++#define _IO_LOCK_T _IO_lock_t *
++
++/* In the GNU scheme of things cin/cout/cerr are initialized statically
++ * in a way that simulates construction. In particular a pointer to a lock
++ * object (of type _IO_lock_t) is stored. The lock object itself is
++ * initialized at runtime when
++ * constructors for static objects are called, via the magic of a line like
++ * _IO_lock_t mylock = _IO_lock_initializer;
++ * Note that (given the definition below) this is an alternative syntax for
++ * _IO_lock_t mylock;
++ */
++#ifdef __cplusplus
++#define _IO_lock_initializer _IO_lock_t ()
++#else
++/* This isn't quite as bogus as it looks: the underlying
++ * implementation for _IO_lock_t (vxw_mutex_t) has a
++ * no-op constructor.
++ */
++#define _IO_lock_initializer {0}
++#endif
++
++/* The existing multithreaded architecture has the concept of
++ * cleanup regions. The idea is we save away the address of a function
++ * the kernel should call in case we get deleted. In practice this
++ * is used exclusively to avoid a task being deleted while it is
++ * holding a streambuf's mutex. Since we use VxWorks deletion safe
++ * mutexes we really do not need this protection. Unfortunately
++ * there does not seem to be any way of making the _IO_cleanup_region
++ * macros do the cleanup work for us (unlocking the mutex) without
++ * incurring all sorts of unecessary overhead so we set them to no-ops.
++ * The cleanup work must be done explicitly in any particular case: for example
++ *
++ * _IO_cleanup_region_start (_IO_funlockfile, fp)
++ * ... do some stuff ...
++ * _IO_cleanup_region_end (_doit)
++ *
++ * should be immediately followed by the lines.
++ *
++ * #ifdef _IO_VXW_THREADS
++ * if (_doit) _IO_funlockfile (fp);
++ * #endif
++ *
++ */
++
++#define _IO_cleanup_region_start(_fct, _fp)
++#define _IO_cleanup_region_end(_doit)
++
++
++/* locking primitives */
++/* _IO_lock_init and _IO_lock_fini are not used by iostreams proper
++ * but are needed by the "stdio like environment", described in
++ * iostdio.h, which is used to test iostreams. They take the
++ * place of C++ constructors and destructors in C code.
++ */
++#define _IO_lock_init vxw_mutex_init
++#define _IO_lock_fini vxw_mutex_fini
++#define _IO_lock_lock vxw_mutex_lock
++#define _IO_lock_unlock vxw_mutex_unlock
++
++/* These take an _IO_FILE * */
++#define _IO_flockfile(_fp) _IO_lock_lock (*((_fp) -> _lock))
++#define _IO_funlockfile(_fp) _IO_lock_unlock (*((_fp) -> _lock))
++#define _IO_ftrylockfile(_fp) /* not used */
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* __INCstdio_lockh */
+diff -ruNb gcc-2.95.3/libio/stdstrbufs.cc gcc-2.95.4/libio/stdstrbufs.cc
+--- gcc-2.95.3/libio/stdstrbufs.cc 1997-11-18 17:53:45.000000000 +0100
++++ gcc-2.95.4/libio/stdstrbufs.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -69,6 +69,13 @@
+ DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file,
+ _IO_NO_READS+_IO_UNBUFFERED);
+
++/* Begin VxWorks specific */
++/* We define this because we want the standard streams to use streambufs
++ * (that write to file descriptors which are valid across all threads) rather
++ * than stdiobufs */
++#define _STDIO_USES_IOSTREAM
++/* End VxWorks specific */
++
+ #ifdef _STDIO_USES_IOSTREAM
+ _IO_FILE *_IO_list_all = &_IO_stderr_.file;
+ #else /* !_STDIO_USES_IOSTREAM */
+@@ -104,11 +111,10 @@
+
+ #ifdef _IO_MTSAFE_IO
+ #define DEF_STDIOFILE(NAME, FD, FILE, FLAGS, CHAIN) \
+- static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
+ struct _IO_fake_stdiobuf NAME = \
+ {{{ _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+_IO_UNBUFFERED+FLAGS, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, FD, \
+- 0, 0, 0, 0, { 0 }, _IO_stdfile_##FD##_lock},\
++ 0, 0, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock},\
+ &stdiobuf_vtable}, FILE}
+ #else
+ #define DEF_STDIOFILE(NAME, FD, FILE, FLAGS, CHAIN) \
+diff -ruNb gcc-2.95.3/libio/stdstreams.cc gcc-2.95.4/libio/stdstreams.cc
+--- gcc-2.95.3/libio/stdstreams.cc 2000-12-10 18:45:08.000000000 +0100
++++ gcc-2.95.4/libio/stdstreams.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -38,6 +38,17 @@
+
+ #include <libio.h>
+
++/* Begin VxWorks specific */
++/* We define this because we want the standard streams to use streambufs
++ * (that write to file descriptors which are valid across all threads) rather
++ * than stdiobufs
++ * VxWorks has thread private stdio FILE structures. On other hand
++ * cout/cin/cerr are global to all threads. We must therefore initialize
++ * them with streambufs (that write to thread global file descriptors)
++ * rather than stdiobufs. */
++#define _STDIO_USES_IOSTREAM
++/* End VxWorks specific */
++
+ #ifdef _STDIO_USES_IOSTREAM
+ #define CIN_SBUF _IO_stdin_
+ #define COUT_SBUF _IO_stdout_
+diff -ruNb gcc-2.95.3/libio/streambuf.cc gcc-2.95.4/libio/streambuf.cc
+--- gcc-2.95.3/libio/streambuf.cc 1998-05-06 23:08:52.000000000 +0200
++++ gcc-2.95.4/libio/streambuf.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -1,3 +1,4 @@
++
+ /* This is part of libio/iostream, providing -*- C++ -*- input/output.
+ Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation
+
+@@ -24,6 +25,19 @@
+
+ /* Written by Per Bothner (bothner@cygnus.com). */
+
++/*
++ * This hack ensures that VxWorks contains a symbol called fd. Customers
++ * often want to type
++ * -> fd = 0
++ * at the Wind Shell. Because of the screwy way the Wind Shell
++ * lexer looks up names in the symbol table this will give
++ * a syntax error due to the conflict between fd and filebuf::fd -
++ * unless `fd' is already in the symbol table.
++ * Here we define fd as a `common' symbol so customers can
++ * still use fd in their code.
++ */
++int fd;
++
+ #define _STREAM_COMPAT
+ #ifdef __GNUG__
+ #pragma implementation
+@@ -35,6 +49,10 @@
+ #ifndef errno
+ extern int errno;
+ #endif
++/* We replace new by new (nothrow) when exceptions aren't turned on */
++#ifndef _IO_THROW
++#include <new>
++#endif
+
+ void streambuf::_un_link() { _IO_un_link(this); }
+
+diff -ruNb gcc-2.95.3/libio/streambuf.h gcc-2.95.4/libio/streambuf.h
+--- gcc-2.95.3/libio/streambuf.h 2000-12-10 18:45:08.000000000 +0100
++++ gcc-2.95.4/libio/streambuf.h 2017-11-07 22:10:11.000000000 +0100
+@@ -35,6 +35,7 @@
+ extern "C" {
+ #include <libio.h>
+ }
++#include <string.h>
+ //#include <_G_config.h>
+ #ifdef _G_NEED_STDARG_H
+ #include <stdarg.h>
+diff -ruNb gcc-2.95.3/libio/strstream.cc gcc-2.95.4/libio/strstream.cc
+--- gcc-2.95.3/libio/strstream.cc 1997-08-22 00:58:22.000000000 +0200
++++ gcc-2.95.4/libio/strstream.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -30,6 +30,10 @@
+ #include "iostreamP.h"
+ #include "strstream.h"
+ #include <string.h>
++/* We replace new by new (nothrow) when exceptions aren't turned on */
++#ifndef _IO_THROW
++#include <new>
++#endif
+
+ static void* default_alloc(_IO_size_t size)
+ {
+diff -ruNb gcc-2.95.3/libio/tests/tiomisc.cc gcc-2.95.4/libio/tests/tiomisc.cc
+--- gcc-2.95.3/libio/tests/tiomisc.cc 1997-08-22 00:58:30.000000000 +0200
++++ gcc-2.95.4/libio/tests/tiomisc.cc 2017-11-07 22:10:11.000000000 +0100
+@@ -128,7 +128,10 @@
+ reread_test ()
+ { // This is PR 5486.
+ int tag_char;
+- char *fname = "Makefile";
++#if 0
++#define FNAME "Makefile"
++#endif
++ char *fname = FNAME;
+ int mode = O_RDONLY;
+ filebuf file_p;
+
+diff -ruNb gcc-2.95.3/libio/testsuite/libio.tests/tiomisc.exp gcc-2.95.4/libio/testsuite/libio.tests/tiomisc.exp
+--- gcc-2.95.3/libio/testsuite/libio.tests/tiomisc.exp 1997-08-22 00:58:31.000000000 +0200
++++ gcc-2.95.4/libio/testsuite/libio.tests/tiomisc.exp 2017-11-07 22:10:11.000000000 +0100
+@@ -1 +1,2 @@
+-test_libio tiomisc.cc "-w" "" tiomisc.exp ""
++set FNAME [remote_download target "Makefile"]
++test_libio tiomisc.cc "-w -DFNAME=\\\"$FNAME\\\"" "" tiomisc.exp ""
+diff -ruNb gcc-2.95.3/libstdc++/ChangeLog gcc-2.95.4/libstdc++/ChangeLog
+--- gcc-2.95.3/libstdc++/ChangeLog 2001-03-16 13:52:21.000000000 +0100
++++ gcc-2.95.4/libstdc++/ChangeLog 2017-11-07 22:10:12.000000000 +0100
+@@ -1,3 +1,10 @@
++2001-04-06 Matthias Klose <doko@debian.org>
++
++ From <sicard@bigruth.solsoft.fr>:
++ * std/bastring.h: remove some compiler warnings.
++ * std/bastring.cc: Likewise.
++ * stl/stl_hashtable.h: Likewise.
++
+ Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
+
+ * gcc-2.95.3 Released.
+diff -ruNb gcc-2.95.3/libstdc++/cinst.cc gcc-2.95.4/libstdc++/cinst.cc
+--- gcc-2.95.3/libstdc++/cinst.cc 1998-08-23 14:47:19.000000000 +0200
++++ gcc-2.95.4/libstdc++/cinst.cc 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,10 @@
+ // Instantiation file for the -*- C++ -*- complex number classes.
+ // Copyright (C) 1994 Free Software Foundation
+
++/* Begin VxWorks specific */
++#if !defined (_NO_LONG_DOUBLE_) || ! defined (LD)
++/* End VxWorks specific */
++
+ #ifdef F
+ typedef float f;
+ #endif
+@@ -152,3 +156,6 @@
+ #ifdef INSERT
+ template ostream& operator<< (ostream&, const complex<f>&);
+ #endif
++/* Begin VxWorks specific */
++#endif /* #if !defined (_NO_LONG_DOUBLE_) || !defined (LD)
++/* End VxWorks specific */
+diff -ruNb gcc-2.95.3/libstdc++/cmath gcc-2.95.4/libstdc++/cmath
+--- gcc-2.95.3/libstdc++/cmath 1997-08-22 00:58:32.000000000 +0200
++++ gcc-2.95.4/libstdc++/cmath 2017-11-07 22:10:12.000000000 +0100
+@@ -69,8 +69,11 @@
+ long double tan (long double);
+ long double tanh (long double);
+ #endif
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ inline long double abs (long double x) { return fabs (x); }
+-
++#endif
++/* End VxWorks specific */
+ } // extern "C++"
+
+ #endif
+diff -ruNb gcc-2.95.3/libstdc++/complex gcc-2.95.4/libstdc++/complex
+--- gcc-2.95.3/libstdc++/complex 1997-08-22 00:58:33.000000000 +0200
++++ gcc-2.95.4/libstdc++/complex 2017-11-07 22:10:12.000000000 +0100
+@@ -12,7 +12,11 @@
+ // ANSI complex types
+ typedef complex<float> float_complex;
+ typedef complex<double> double_complex;
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ typedef complex<long double> long_double_complex;
++#endif
++/* End VxWorks specific */
+ }
+
+ #endif
+diff -ruNb gcc-2.95.3/libstdc++/std/bastring.cc gcc-2.95.4/libstdc++/std/bastring.cc
+--- gcc-2.95.3/libstdc++/std/bastring.cc 1999-12-15 08:42:12.000000000 +0100
++++ gcc-2.95.4/libstdc++/std/bastring.cc 2017-11-07 22:10:12.000000000 +0100
+@@ -116,19 +116,19 @@
+ basic_string <charT, traits, Allocator>&
+ basic_string <charT, traits, Allocator>::
+ replace (size_type pos1, size_type n1,
+- const basic_string& str, size_type pos2, size_type n2)
++ const basic_string& _str, size_type pos2, size_type n2)
+ {
+- const size_t len2 = str.length ();
++ const size_t len2 = _str.length ();
+
+ if (pos1 == 0 && n1 >= length () && pos2 == 0 && n2 >= len2)
+- return operator= (str);
++ return operator= (_str);
+
+ OUTOFRANGE (pos2 > len2);
+
+ if (n2 > len2 - pos2)
+ n2 = len2 - pos2;
+
+- return replace (pos1, n1, str.data () + pos2, n2);
++ return replace (pos1, n1, _str.data () + pos2, n2);
+ }
+
+ template <class charT, class traits, class Allocator>
+@@ -394,21 +394,21 @@
+
+ template <class charT, class traits, class Allocator>
+ int basic_string <charT, traits, Allocator>::
+-compare (const basic_string& str, size_type pos, size_type n) const
++compare (const basic_string& _str, size_type pos, size_type n) const
+ {
+ OUTOFRANGE (pos > length ());
+
+ size_t rlen = length () - pos;
+ if (rlen > n)
+ rlen = n;
+- if (rlen > str.length ())
+- rlen = str.length ();
+- int r = traits::compare (data () + pos, str.data (), rlen);
++ if (rlen > _str.length ())
++ rlen = _str.length ();
++ int r = traits::compare (data () + pos, _str.data (), rlen);
+ if (r != 0)
+ return r;
+ if (rlen == n)
+ return 0;
+- return (length () - pos) - str.length ();
++ return (length () - pos) - _str.length ();
+ }
+
+ template <class charT, class traits, class Allocator>
+@@ -476,7 +476,7 @@
+ {
+ if (is.ipfx1 ())
+ {
+- _IO_size_t count = 0;
++ _IO_size_t _count = 0;
+ streambuf *sb = is.rdbuf ();
+ s.resize (0);
+
+@@ -485,13 +485,13 @@
+ int ch = sb->sbumpc ();
+ if (ch == EOF)
+ {
+- is.setstate (count == 0
++ is.setstate (_count == 0
+ ? (ios::failbit|ios::eofbit)
+ : ios::eofbit);
+ break;
+ }
+
+- ++count;
++ ++_count;
+
+ if (ch == delim)
+ break;
+@@ -507,7 +507,7 @@
+ }
+
+ // We need to be friends with istream to do this.
+- // is._gcount = count;
++ // is._gcount = _count;
+ is.isfx ();
+
+ return is;
+diff -ruNb gcc-2.95.3/libstdc++/std/bastring.h gcc-2.95.4/libstdc++/std/bastring.h
+--- gcc-2.95.3/libstdc++/std/bastring.h 2000-03-12 17:36:14.000000000 +0100
++++ gcc-2.95.4/libstdc++/std/bastring.h 2017-11-07 22:10:12.000000000 +0100
+@@ -169,9 +169,9 @@
+ }
+
+ explicit basic_string (): dat (nilRep.grab ()) { }
+- basic_string (const basic_string& str): dat (str.rep ()->grab ()) { }
+- basic_string (const basic_string& str, size_type pos, size_type n = npos)
+- : dat (nilRep.grab ()) { assign (str, pos, n); }
++ basic_string (const basic_string& _str): dat (_str.rep ()->grab ()) { }
++ basic_string (const basic_string& _str, size_type pos, size_type n = npos)
++ : dat (nilRep.grab ()) { assign (_str, pos, n); }
+ basic_string (const charT* s, size_type n)
+ : dat (nilRep.grab ()) { assign (s, n); }
+ basic_string (const charT* s)
+@@ -191,9 +191,9 @@
+
+ void swap (basic_string &s) { charT *d = dat; dat = s.dat; s.dat = d; }
+
+- basic_string& append (const basic_string& str, size_type pos = 0,
++ basic_string& append (const basic_string& _str, size_type pos = 0,
+ size_type n = npos)
+- { return replace (length (), 0, str, pos, n); }
++ { return replace (length (), 0, _str, pos, n); }
+ basic_string& append (const charT* s, size_type n)
+ { return replace (length (), 0, s, n); }
+ basic_string& append (const charT* s)
+@@ -346,8 +346,8 @@
+ size_type find (const basic_string& str, size_type pos = 0) const
+ { return find (str.data(), pos, str.length()); }
+ size_type find (const charT* s, size_type pos, size_type n) const;
+- size_type find (const charT* s, size_type pos = 0) const
+- { return find (s, pos, traits::length (s)); }
++ size_type find (const charT* _s, size_type pos = 0) const
++ { return find (_s, pos, traits::length (_s)); }
+ size_type find (charT c, size_type pos = 0) const;
+
+ size_type rfind (const basic_string& str, size_type pos = npos) const
+@@ -469,36 +469,36 @@
+ operator+ (const basic_string <charT, traits, Allocator>& lhs,
+ const basic_string <charT, traits, Allocator>& rhs)
+ {
+- basic_string <charT, traits, Allocator> str (lhs);
+- str.append (rhs);
+- return str;
++ basic_string <charT, traits, Allocator> _str (lhs);
++ _str.append (rhs);
++ return _str;
+ }
+
+ template <class charT, class traits, class Allocator>
+ inline basic_string <charT, traits, Allocator>
+ operator+ (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
+ {
+- basic_string <charT, traits, Allocator> str (lhs);
+- str.append (rhs);
+- return str;
++ basic_string <charT, traits, Allocator> _str (lhs);
++ _str.append (rhs);
++ return _str;
+ }
+
+ template <class charT, class traits, class Allocator>
+ inline basic_string <charT, traits, Allocator>
+ operator+ (charT lhs, const basic_string <charT, traits, Allocator>& rhs)
+ {
+- basic_string <charT, traits, Allocator> str (1, lhs);
+- str.append (rhs);
+- return str;
++ basic_string <charT, traits, Allocator> _str (1, lhs);
++ _str.append (rhs);
++ return _str;
+ }
+
+ template <class charT, class traits, class Allocator>
+ inline basic_string <charT, traits, Allocator>
+ operator+ (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
+ {
+- basic_string <charT, traits, Allocator> str (lhs);
+- str.append (rhs);
+- return str;
++ basic_string <charT, traits, Allocator> _str (lhs);
++ _str.append (rhs);
++ return _str;
+ }
+
+ template <class charT, class traits, class Allocator>
+diff -ruNb gcc-2.95.3/libstdc++/std/complext.h gcc-2.95.4/libstdc++/std/complext.h
+--- gcc-2.95.3/libstdc++/std/complext.h 1997-09-28 21:21:47.000000000 +0200
++++ gcc-2.95.4/libstdc++/std/complext.h 2017-11-07 22:10:12.000000000 +0100
+@@ -74,7 +74,11 @@
+ // Declare specializations.
+ class complex<float>;
+ class complex<double>;
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ class complex<long double>;
++#endif
++/* End VxWorks specific */
+
+ template <class _FLT>
+ inline complex<_FLT>&
+@@ -319,7 +323,13 @@
+ template <class _FLT> inline _FLT
+ abs (const complex<_FLT>& x)
+ {
++/* Begin VxWorks specific */
++#ifndef __vxworks
+ return hypot (real (x), imag (x));
++#else
++ return sqrt (real (x) * real (x) + imag (x) * imag (x));
++#endif
++/* End VxWorks specific */
+ }
+
+ template <class _FLT> inline _FLT
+@@ -395,6 +405,9 @@
+
+ #include <std/fcomplex.h>
+ #include <std/dcomplex.h>
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ #include <std/ldcomplex.h>
+-
++#endif
++/* End VxWorks specific */
+ #endif
+diff -ruNb gcc-2.95.3/libstdc++/std/dcomplex.h gcc-2.95.4/libstdc++/std/dcomplex.h
+--- gcc-2.95.3/libstdc++/std/dcomplex.h 1997-10-10 08:56:55.000000000 +0200
++++ gcc-2.95.4/libstdc++/std/dcomplex.h 2017-11-07 22:10:12.000000000 +0100
+@@ -38,7 +38,12 @@
+ public:
+ complex (double r = 0, double i = 0): re (r), im (i) { }
+ complex (const complex<float>& r): re (r.real ()), im (r.imag ()) { }
++
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ explicit complex (const complex<long double>& r);
++#endif
++/* End VxWorks specific */
+
+ complex& operator+= (const complex& r) { return __doapl (this, r); }
+ complex& operator-= (const complex& r) { return __doami (this, r); }
+diff -ruNb gcc-2.95.3/libstdc++/std/fcomplex.h gcc-2.95.4/libstdc++/std/fcomplex.h
+--- gcc-2.95.3/libstdc++/std/fcomplex.h 1997-10-10 08:56:55.000000000 +0200
++++ gcc-2.95.4/libstdc++/std/fcomplex.h 2017-11-07 22:10:12.000000000 +0100
+@@ -38,7 +38,11 @@
+ public:
+ complex (float r = 0, float i = 0): re (r), im (i) { }
+ explicit complex (const complex<double>& r);
++/* Begin VxWorks specific */
++#ifndef _NO_LONG_DOUBLE_
+ explicit complex (const complex<long double>& r);
++#endif
++/* End VxWorks specific */
+
+ complex& operator+= (const complex& r) { return __doapl (this, r); }
+ complex& operator-= (const complex& r) { return __doami (this, r); }
+diff -ruNb gcc-2.95.3/libstdc++/stl/stl_alloc.h gcc-2.95.4/libstdc++/stl/stl_alloc.h
+--- gcc-2.95.3/libstdc++/stl/stl_alloc.h 1999-05-07 12:13:28.000000000 +0200
++++ gcc-2.95.4/libstdc++/stl/stl_alloc.h 2017-11-07 22:10:12.000000000 +0100
+@@ -38,18 +38,25 @@
+ // The allocation primitives are intended to allocate individual objects,
+ // not larger arenas as with the original STL allocators.
+
+-#if 0
++#ifdef __STL_USE_EXCEPTIONS
+ # include <new>
+ # define __THROW_BAD_ALLOC throw bad_alloc()
+ #elif !defined(__THROW_BAD_ALLOC)
++#ifdef __vxworks
++# define __THROW_BAD_ALLOC return (void *) 0
++#elif
+ # include <iostream.h>
+ # define __THROW_BAD_ALLOC cerr << "out of memory" << endl; exit(1)
+ #endif
++#endif
+
+ #ifdef __STL_WIN32THREADS
+ # include <windows.h>
+ #endif
+-
++#ifdef __STL_VXW_THREADS
++# include <taskLib.h>
++# include <vxwMutex.h>
++#endif
+ #include <stddef.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -58,12 +65,45 @@
+ # define __RESTRICT
+ #endif
+
++/* Begin VxWorks specific */
+ #if !defined(__STL_PTHREADS) && !defined(__STL_SOLTHREADS) \
+ && !defined(_NOTHREADS) \
+- && !defined(__STL_SGI_THREADS) && !defined(__STL_WIN32THREADS)
++ && !defined(__STL_SGI_THREADS) && !defined(__STL_WIN32THREADS) \
++ && !defined(__STL_VXW_THREADS)
++/* End VxWorks specific */
+ # define _NOTHREADS
+ #endif
+
++/* Begin VxWorks specific */
++#ifdef __STL_VXW_THREADS
++
++/* In this scheme every __default_alloc_template class gets its mutex
++ * initialized when the static member _S_node_allocator_lock is constructed.
++ */
++
++# define __NODE_ALLOCATOR_LOCK \
++ if (threads) _S_node_allocator_lock.lock();
++# define __NODE_ALLOCATOR_UNLOCK \
++ if (threads) _S_node_allocator_lock.unlock();
++# define __NODE_ALLOCATOR_THREADS true
++# define __VOLATILE volatile // may not be needed
++
++#ifdef __STL_TEMPLATE_NESTED_CLASS_BUG
++template <bool threads, int inst>
++class vxw_lock
++{
++public:
++ static vxw_mutex_t& _S_node_allocator_lock;
++ vxw_lock () { __NODE_ALLOCATOR_LOCK; }
++ ~vxw_lock () { __NODE_ALLOCATOR_UNLOCK; }
++};
++
++
++#endif /* __STL_TEMPLATE_NESTED_CLASS_BUG */
++
++#endif /* __STL_VXW_THREADS */
++/* End VxWorks specific */
++
+ # ifdef __STL_PTHREADS
+ // POSIX Threads
+ // This is dubious, since this is likely to be a high contention
+@@ -358,6 +398,12 @@
+ static char* _S_end_free;
+ static size_t _S_heap_size;
+
++/* Begin VxWorks specific */
++# ifdef __STL_VXW_THREADS
++ static vxw_mutex_t _S_node_allocator_lock;
++# endif
++/* End VxWorks specific */
++
+ # ifdef __STL_SGI_THREADS
+ static volatile unsigned long _S_node_allocator_lock;
+ static void _S_lock(volatile unsigned long*);
+@@ -388,11 +434,16 @@
+ private:
+ # endif
+
++
++#ifndef __STL_TEMPLATE_NESTED_CLASS_BUG
+ class _Lock {
+ public:
+ _Lock() { __NODE_ALLOCATOR_LOCK; }
+ ~_Lock() { __NODE_ALLOCATOR_UNLOCK; }
+ };
++#else
++ typedef vxw_lock<threads, inst> _Lock;
++#endif
+ friend class _Lock;
+
+ public:
+@@ -574,6 +625,19 @@
+ return(__result);
+ }
+
++/* Begin VxWorks specific */
++#ifdef __STL_VXW_THREADS
++ template <bool threads, int inst>
++ vxw_mutex_t __default_alloc_template<threads, inst>::_S_node_allocator_lock;
++
++#ifdef __STL_TEMPLATE_NESTED_CLASS_BUG
++template <bool threads, int inst>
++ vxw_mutex_t& vxw_lock<threads, inst>::_S_node_allocator_lock = __default_alloc_template<threads, inst>::_S_node_allocator_lock;
++#endif
++
++#endif
++/* End VxWorks specific */
++
+ #ifdef __STL_PTHREADS
+ template <bool __threads, int __inst>
+ pthread_mutex_t
+diff -ruNb gcc-2.95.3/libstdc++/stl/stl_config.h gcc-2.95.4/libstdc++/stl/stl_config.h
+--- gcc-2.95.3/libstdc++/stl/stl_config.h 1999-05-18 01:03:48.000000000 +0200
++++ gcc-2.95.4/libstdc++/stl/stl_config.h 2017-11-07 22:10:12.000000000 +0100
+@@ -104,6 +104,10 @@
+ # define __STL_SOLTHREADS
+ #endif
+
++#ifdef __vxworks
++# define __STL_VXW_THREADS
++#endif
++
+ # if defined(__sgi) && !defined(__GNUC__)
+ # if !defined(_BOOL)
+ # define __STL_NO_BOOL
+diff -ruNb gcc-2.95.3/libstdc++/stl/stl_hashtable.h gcc-2.95.4/libstdc++/stl/stl_hashtable.h
+--- gcc-2.95.3/libstdc++/stl/stl_hashtable.h 1998-09-02 19:24:53.000000000 +0200
++++ gcc-2.95.4/libstdc++/stl/stl_hashtable.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1014,14 +1014,14 @@
+ __STL_TRY {
+ for (size_type __i = 0; __i < __ht._M_buckets.size(); ++__i) {
+ if (const _Node* __cur = __ht._M_buckets[__i]) {
+- _Node* __copy = _M_new_node(__cur->_M_val);
+- _M_buckets[__i] = __copy;
++ _Node* ___copy = _M_new_node(__cur->_M_val);
++ _M_buckets[__i] = ___copy;
+
+ for (_Node* __next = __cur->_M_next;
+ __next;
+ __cur = __next, __next = __cur->_M_next) {
+- __copy->_M_next = _M_new_node(__next->_M_val);
+- __copy = __copy->_M_next;
++ ___copy->_M_next = _M_new_node(__next->_M_val);
++ ___copy = ___copy->_M_next;
+ }
+ }
+ }
+diff -ruNb gcc-2.95.3/libstdc++/stl/stl_rope.h gcc-2.95.4/libstdc++/stl/stl_rope.h
+--- gcc-2.95.3/libstdc++/stl/stl_rope.h 2001-01-01 18:48:22.000000000 +0100
++++ gcc-2.95.4/libstdc++/stl/stl_rope.h 2017-11-07 22:10:12.000000000 +0100
+@@ -32,6 +32,11 @@
+ # ifdef __STL_SGI_THREADS
+ # include <mutex.h>
+ # endif
++/* Begin VxWorks specific */
++# ifdef __STL_VXW_THREADS
++# include <taskLib.h>
++# endif
++/* End VxWorks specific */
+
+ __STL_BEGIN_NAMESPACE
+
+@@ -466,6 +471,23 @@
+ pthread_mutex_unlock(&_M_refcount_lock);
+ return __result;
+ }
++# elif defined(__STL_VXW_THREADS)
++ // Begin VxWorks specific code
++ void _M_init_refcount_lock() { }
++ void _M_incr_refcount ()
++ {
++ taskLock ();
++ ++_M_refcount;
++ taskUnlock ();
++ }
++ size_t _M_decr_refcount ()
++ {
++ size_t __result;
++ taskLock ();
++ __result = --_M_refcount;
++ taskUnlock ();
++ return __result;
++ }
+ # else
+ void _M_init_refcount_lock() {}
+ void _M_incr_refcount ()
+@@ -1314,6 +1336,16 @@
+ pthread_mutex_unlock(&_S_swap_lock);
+ return __result;
+ }
++/* Begin VxWorks specific */
++# elif defined(__STL_VXW_THREADS)
++ static _Cstrptr _S_atomic_swap(_Cstrptr* __p, _Cstrptr __q) {
++ taskLock ();
++ _Cstrptr __result = *__p;
++ *__p = __q;
++ taskUnlock ();
++ return __result;
++ }
++/* End VxWorks specific */
+ # else
+ static _Cstrptr _S_atomic_swap(_Cstrptr* __p, _Cstrptr __q) {
+ _Cstrptr __result = *__p;
+diff -ruNb gcc-2.95.3/libstdc++/stlinst.cc gcc-2.95.4/libstdc++/stlinst.cc
+--- gcc-2.95.3/libstdc++/stlinst.cc 1999-05-07 12:13:49.000000000 +0200
++++ gcc-2.95.4/libstdc++/stlinst.cc 2017-11-07 22:10:12.000000000 +0100
+@@ -1,10 +1,23 @@
+ // Instantiation file for the -*- C++ -*- Standard Library allocator templates
+ // This file is part of the GNU ANSI C++ Library.
+
++#if 0
+ #include <alloc.h>
+
+ #ifndef __USE_MALLOC
+-template class __default_alloc_template<__NODE_ALLOCATOR_THREADS, 0>;
++#ifdef VXW_EXPLICIT_TEMPLATES
++/* These classes cannot be instantiated implicitly on
++ * some targets because static template data must
++ * be defined in exactly one module. We
++ * explicitly instantiate the most common usages.
++ */
++template class __default_alloc_template<false, 0>;
++template class __default_alloc_template<true, 0>;
++#ifdef __STL_TEMPLATE_NESTED_CLASS_BUG
++template class vxw_lock <false, 0>;
++template class vxw_lock <true, 0>;
++#endif
+ #endif
+-
+ template class __malloc_alloc_template<0>;
++#endif
++#endif
+diff -ruNb gcc-2.95.3/texinfo/configure.in gcc-2.95.4/texinfo/configure.in
+--- gcc-2.95.3/texinfo/configure.in 1999-07-01 13:47:14.000000000 +0200
++++ gcc-2.95.4/texinfo/configure.in 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ dnl Process this file with autoconf to produce a configure script.
+-dnl $Id: configure.in,v 1.7 1998/03/26 10:30:41 law Exp $
++dnl $Id: configure.in,v 1.8.10.1 1999/07/01 11:47:14 oliva Exp $
+ dnl
+ AC_INIT(makeinfo/makeinfo.c)
+ AC_PREREQ(2.12)dnl Minimum Autoconf version required.
+diff -ruNb gcc-2.95.3/texinfo/cygnus/texinfo.tex gcc-2.95.4/texinfo/cygnus/texinfo.tex
+--- gcc-2.95.3/texinfo/cygnus/texinfo.tex 1998-03-24 19:05:29.000000000 +0100
++++ gcc-2.95.4/texinfo/cygnus/texinfo.tex 2017-11-07 22:10:12.000000000 +0100
+@@ -1,4 +1,4 @@
+-%$Id: texinfo.tex,v 1.1.1.1 1998/03/23 04:42:12 law Exp $
++%$Id: texinfo.tex,v 1.2 1998/03/24 18:05:29 law Exp $
+ % Cover file to permit easy management of FSF texinfo.tex and use of
+ % Cygnus local revisions.
+ % First we get the official FSF one:
+diff -ruNb gcc-2.95.3/texinfo/cygnus/texiplus.tex gcc-2.95.4/texinfo/cygnus/texiplus.tex
+--- gcc-2.95.3/texinfo/cygnus/texiplus.tex 1998-03-24 19:05:30.000000000 +0100
++++ gcc-2.95.4/texinfo/cygnus/texiplus.tex 2017-11-07 22:10:12.000000000 +0100
+@@ -2,7 +2,7 @@
+ %% Cygnus revisions to texinfo.tex, TeX macros to handle texinfo files
+ % Copyright (C) 1991 Free Software Foundation, Inc.
+ %% Maintained at Cygnus Support as:
+-%%$Id: texiplus.tex,v 1.1.1.1 1998/03/23 04:42:12 law Exp $
++%%$Id: texiplus.tex,v 1.2 1998/03/24 18:05:30 law Exp $
+
+ %This texi+.tex file is free software; you can redistribute it and/or
+ %modify it under the terms of the GNU General Public License as
+diff -ruNb gcc-2.95.3/texinfo/dir gcc-2.95.4/texinfo/dir
+--- gcc-2.95.3/texinfo/dir 1998-03-24 19:05:03.000000000 +0100
++++ gcc-2.95.4/texinfo/dir 1998-03-24 19:05:03.000000000 +0100
+@@ -1,4 +1,4 @@
+-$Id: dir,v 1.2 1998/03/24 17:58:17 law Exp $
++$Id: dir,v 1.3 1998/03/24 18:05:03 law Exp $
+ This is the file .../info/dir, which contains the topmost node of the
+ Info hierarchy. The first time you invoke Info you start off
+ looking at that node, which is (dir)Top.
+diff -ruNb gcc-2.95.3/texinfo/dir-example gcc-2.95.4/texinfo/dir-example
+--- gcc-2.95.3/texinfo/dir-example 1998-03-24 20:40:32.000000000 +0100
++++ gcc-2.95.4/texinfo/dir-example 1998-03-24 20:40:32.000000000 +0100
+@@ -6,7 +6,7 @@
+ If you have dir entries for Texinfo manuals you'd like to be added here,
+ please send them to karl@gnu.org.
+
+-$Id: dir-example,v 1.1.1.3 1998/03/24 18:19:30 law Exp $
++$Id: dir-example,v 1.4 1998/03/24 19:40:32 law Exp $
+ 
+ File: dir, Node: Top, This is the top of the INFO tree.
+
+diff -ruNb gcc-2.95.3/texinfo/doc/info-stnd.texi gcc-2.95.4/texinfo/doc/info-stnd.texi
+--- gcc-2.95.3/texinfo/doc/info-stnd.texi 1998-03-24 20:40:38.000000000 +0100
++++ gcc-2.95.4/texinfo/doc/info-stnd.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -9,7 +9,7 @@
+ @synindex fn cp
+ @synindex ky cp
+ @comment %**end of header
+-@comment $Id: info-stnd.texi,v 1.1.1.2 1998/03/24 18:20:36 law Exp $
++@comment $Id: info-stnd.texi,v 1.3 1998/03/24 19:40:38 law Exp $
+
+ @dircategory Texinfo documentation system
+ @direntry
+diff -ruNb gcc-2.95.3/texinfo/doc/info.texi gcc-2.95.4/texinfo/doc/info.texi
+--- gcc-2.95.3/texinfo/doc/info.texi 1998-03-24 20:40:40.000000000 +0100
++++ gcc-2.95.4/texinfo/doc/info.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -3,7 +3,7 @@
+ @setfilename info.info
+ @settitle Info 1.0
+ @comment %**end of header
+-@comment $Id: info.texi,v 1.1.1.2 1998/03/24 18:20:37 law Exp $
++@comment $Id: info.texi,v 1.3 1998/03/24 19:40:40 law Exp $
+
+ @dircategory Texinfo documentation system
+ @direntry
+diff -ruNb gcc-2.95.3/texinfo/doc/Makefile.am gcc-2.95.4/texinfo/doc/Makefile.am
+--- gcc-2.95.3/texinfo/doc/Makefile.am 1998-03-24 20:40:35.000000000 +0100
++++ gcc-2.95.4/texinfo/doc/Makefile.am 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ ## Makefile.am for texinfo/emacs.
+-## $Id: Makefile.am,v 1.1.1.2 1998/03/24 18:20:38 law Exp $
++## $Id: Makefile.am,v 1.3 1998/03/24 19:40:35 law Exp $
+ ## Run automake in .. to produce Makefile.in from this.
+
+ info_TEXINFOS = info-stnd.texi info.texi texinfo.txi
+diff -ruNb gcc-2.95.3/texinfo/doc/texinfo.tex gcc-2.95.4/texinfo/doc/texinfo.tex
+--- gcc-2.95.3/texinfo/doc/texinfo.tex 1998-03-24 20:40:41.000000000 +0100
++++ gcc-2.95.4/texinfo/doc/texinfo.tex 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ % texinfo.tex -- TeX macros to handle Texinfo files.
+-% $Id: texinfo.tex,v 1.1.1.2 1998/03/24 18:20:39 law Exp $
++% $Id: texinfo.tex,v 1.3 1998/03/24 19:40:41 law Exp $
+ %
+ % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98
+ % Free Software Foundation, Inc.
+@@ -44,7 +44,7 @@
+
+ % This automatically updates the version number based on RCS.
+ \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
+-\deftexinfoversion$Revision: 1.1.1.2 $
++\deftexinfoversion$Revision: 1.3 $
+ \message{Loading texinfo package [Version \texinfoversion]:}
+
+ % If in a .fmt file, print the version number
+diff -ruNb gcc-2.95.3/texinfo/doc/texinfo.texi gcc-2.95.4/texinfo/doc/texinfo.texi
+--- gcc-2.95.3/texinfo/doc/texinfo.texi 1998-03-24 19:05:41.000000000 +0100
++++ gcc-2.95.4/texinfo/doc/texinfo.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ \input texinfo.tex @c -*-texinfo-*-
+-@c $Id: texinfo.texi,v 1.1.1.1 1998/03/23 04:42:12 law Exp $
++@c $Id: texinfo.texi,v 1.2 1998/03/24 18:05:41 law Exp $
+ @c %**start of header
+
+ @c All text is ignored before the setfilename.
+diff -ruNb gcc-2.95.3/texinfo/doc/texinfo.txi gcc-2.95.4/texinfo/doc/texinfo.txi
+--- gcc-2.95.3/texinfo/doc/texinfo.txi 1998-03-25 03:20:38.000000000 +0100
++++ gcc-2.95.4/texinfo/doc/texinfo.txi 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ \input texinfo.tex @c -*-texinfo-*-
+-@c $Id: texinfo.txi,v 1.50 1998/02/27 21:21:34 karl Exp $
++@c $Id: texinfo.txi,v 1.1.1.1 1998/03/25 02:20:38 law Exp $
+ @c %**start of header
+
+ @c All text is ignored before the setfilename.
+diff -ruNb gcc-2.95.3/texinfo/emacs/elisp-comp gcc-2.95.4/texinfo/emacs/elisp-comp
+--- gcc-2.95.3/texinfo/emacs/elisp-comp 1998-03-24 19:05:49.000000000 +0100
++++ gcc-2.95.4/texinfo/emacs/elisp-comp 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ #!/bin/sh
+-# $Id: elisp-comp,v 1.1.1.1 1997/08/21 22:57:57 jason Exp $
++# $Id: elisp-comp,v 1.2 1998/03/24 18:05:49 law Exp $
+ # Trivial script to compile the Elisp files.
+ setpath=${TMPDIR-/tmp}/elc.$$
+ echo "(setq load-path (cons nil load-path))" > $setpath
+diff -ruNb gcc-2.95.3/texinfo/emacs/Makefile.am gcc-2.95.4/texinfo/emacs/Makefile.am
+--- gcc-2.95.3/texinfo/emacs/Makefile.am 1998-03-24 19:05:45.000000000 +0100
++++ gcc-2.95.4/texinfo/emacs/Makefile.am 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ ## Makefile.am for texinfo/emacs.
+-## $Id: Makefile.am,v 1.1.1.1 1998/03/23 04:42:12 law Exp $
++## $Id: Makefile.am,v 1.2 1998/03/24 18:05:45 law Exp $
+ ## Run automake in .. to produce Makefile.in from this.
+
+ # Do not byte compile our Elisp files by default.
+diff -ruNb gcc-2.95.3/texinfo/info/clib.c gcc-2.95.4/texinfo/info/clib.c
+--- gcc-2.95.3/texinfo/info/clib.c 1998-03-24 19:06:02.000000000 +0100
++++ gcc-2.95.4/texinfo/info/clib.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* clib.c: Functions which we normally expect to find in the C library.
+- $Id: clib.c,v 1.1.1.1 1997/08/21 22:57:59 jason Exp $
++ $Id: clib.c,v 1.2 1998/03/24 18:06:02 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/dir.c gcc-2.95.4/texinfo/info/dir.c
+--- gcc-2.95.3/texinfo/info/dir.c 1998-03-24 19:06:04.000000000 +0100
++++ gcc-2.95.4/texinfo/info/dir.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* dir.c -- How to build a special "dir" node from "localdir" files.
+- $Id: dir.c,v 1.1.1.2 1998/03/22 20:42:22 law Exp $
++ $Id: dir.c,v 1.2 1998/03/24 18:06:04 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/display.c gcc-2.95.4/texinfo/info/display.c
+--- gcc-2.95.3/texinfo/info/display.c 1998-03-24 19:06:05.000000000 +0100
++++ gcc-2.95.4/texinfo/info/display.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* display.c -- How to display Info windows.
+- $Id: display.c,v 1.1.1.2 1998/03/22 20:42:23 law Exp $
++ $Id: display.c,v 1.2 1998/03/24 18:06:05 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/display.h gcc-2.95.4/texinfo/info/display.h
+--- gcc-2.95.3/texinfo/info/display.h 1998-03-24 19:06:06.000000000 +0100
++++ gcc-2.95.4/texinfo/info/display.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* display.h -- How the display in Info is done.
+- $Id: display.h,v 1.1.1.2 1998/03/22 20:42:24 law Exp $
++ $Id: display.h,v 1.2 1998/03/24 18:06:06 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/echo-area.c gcc-2.95.4/texinfo/info/echo-area.c
+--- gcc-2.95.3/texinfo/info/echo-area.c 1998-03-24 20:40:46.000000000 +0100
++++ gcc-2.95.4/texinfo/info/echo-area.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* echo-area.c -- How to read a line in the echo area.
+- $Id: echo-area.c,v 1.1.1.2 1998/03/24 18:20:08 law Exp $
++ $Id: echo-area.c,v 1.3 1998/03/24 19:40:46 law Exp $
+
+ Copyright (C) 1993, 97, 98 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/echo-area.h gcc-2.95.4/texinfo/info/echo-area.h
+--- gcc-2.95.3/texinfo/info/echo-area.h 1998-03-24 20:40:48.000000000 +0100
++++ gcc-2.95.4/texinfo/info/echo-area.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* echo-area.h -- Functions used in reading information from the echo area.
+- $Id: echo-area.h,v 1.1.1.2 1998/03/24 18:20:09 law Exp $
++ $Id: echo-area.h,v 1.3 1998/03/24 19:40:48 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/filesys.c gcc-2.95.4/texinfo/info/filesys.c
+--- gcc-2.95.3/texinfo/info/filesys.c 1998-03-24 20:40:49.000000000 +0100
++++ gcc-2.95.4/texinfo/info/filesys.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* filesys.c -- File system specific functions for hacking this system.
+- $Id: filesys.c,v 1.1.1.3 1998/03/24 18:20:10 law Exp $
++ $Id: filesys.c,v 1.3 1998/03/24 19:40:49 law Exp $
+
+ Copyright (C) 1993, 97, 98 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/filesys.h gcc-2.95.4/texinfo/info/filesys.h
+--- gcc-2.95.3/texinfo/info/filesys.h 1998-03-24 19:06:17.000000000 +0100
++++ gcc-2.95.4/texinfo/info/filesys.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* filesys.h -- External declarations of functions and vars in filesys.c.
+- $Id: filesys.h,v 1.1.1.2 1998/03/22 20:42:28 law Exp $
++ $Id: filesys.h,v 1.2 1998/03/24 18:06:17 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/footnotes.c gcc-2.95.4/texinfo/info/footnotes.c
+--- gcc-2.95.3/texinfo/info/footnotes.c 1998-03-24 19:06:18.000000000 +0100
++++ gcc-2.95.4/texinfo/info/footnotes.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* footnotes.c -- Some functions for manipulating footnotes.
+- $Id: footnotes.c,v 1.1.1.2 1998/03/22 20:42:29 law Exp $
++ $Id: footnotes.c,v 1.2 1998/03/24 18:06:18 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/footnotes.h gcc-2.95.4/texinfo/info/footnotes.h
+--- gcc-2.95.3/texinfo/info/footnotes.h 1998-03-24 19:06:19.000000000 +0100
++++ gcc-2.95.4/texinfo/info/footnotes.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* footnotes.h -- Some functions for manipulating footnotes.
+- $Id: footnotes.h,v 1.1.1.2 1998/03/22 20:42:30 law Exp $
++ $Id: footnotes.h,v 1.2 1998/03/24 18:06:19 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/gc.h gcc-2.95.4/texinfo/info/gc.h
+--- gcc-2.95.3/texinfo/info/gc.h 1998-03-24 19:06:22.000000000 +0100
++++ gcc-2.95.4/texinfo/info/gc.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* gc.h -- Functions for garbage collecting unused node contents.
+- $Id: gc.h,v 1.1.1.2 1998/03/22 20:42:32 law Exp $
++ $Id: gc.h,v 1.2 1998/03/24 18:06:22 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/indices.c gcc-2.95.4/texinfo/info/indices.c
+--- gcc-2.95.3/texinfo/info/indices.c 1998-03-24 19:06:24.000000000 +0100
++++ gcc-2.95.4/texinfo/info/indices.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* indices.c -- Commands for dealing with an Info file Index.
+- $Id: indices.c,v 1.1.1.2 1998/03/22 20:42:33 law Exp $
++ $Id: indices.c,v 1.2 1998/03/24 18:06:24 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/indices.h gcc-2.95.4/texinfo/info/indices.h
+--- gcc-2.95.3/texinfo/info/indices.h 1998-03-24 19:06:25.000000000 +0100
++++ gcc-2.95.4/texinfo/info/indices.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* indices.h -- Functions defined in indices.c.
+- $Id: indices.h,v 1.1.1.2 1998/03/22 20:42:34 law Exp $
++ $Id: indices.h,v 1.2 1998/03/24 18:06:25 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/info.c gcc-2.95.4/texinfo/info/info.c
+--- gcc-2.95.3/texinfo/info/info.c 1998-03-24 20:40:51.000000000 +0100
++++ gcc-2.95.4/texinfo/info/info.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* info.c -- Display nodes of Info files in multiple windows.
+- $Id: info.c,v 1.1.1.3 1998/03/24 18:20:13 law Exp $
++ $Id: info.c,v 1.3 1998/03/24 19:40:51 law Exp $
+
+ Copyright (C) 1993, 96, 97, 98 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/infodoc.c gcc-2.95.4/texinfo/info/infodoc.c
+--- gcc-2.95.3/texinfo/info/infodoc.c 1998-03-24 19:06:33.000000000 +0100
++++ gcc-2.95.4/texinfo/info/infodoc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* infodoc.c -- Functions which build documentation nodes.
+- $Id: infodoc.c,v 1.1.1.2 1998/03/22 20:42:39 law Exp $
++ $Id: infodoc.c,v 1.2 1998/03/24 18:06:33 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/info.h gcc-2.95.4/texinfo/info/info.h
+--- gcc-2.95.3/texinfo/info/info.h 1998-03-24 20:40:52.000000000 +0100
++++ gcc-2.95.4/texinfo/info/info.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* info.h -- Header file which includes all of the other headers.
+- $Id: info.h,v 1.1.1.3 1998/03/24 18:20:14 law Exp $
++ $Id: info.h,v 1.3 1998/03/24 19:40:52 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/infomap.c gcc-2.95.4/texinfo/info/infomap.c
+--- gcc-2.95.3/texinfo/info/infomap.c 1998-03-24 19:06:34.000000000 +0100
++++ gcc-2.95.4/texinfo/info/infomap.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* infomap.c -- Keymaps for Info.
+- $Id: infomap.c,v 1.1.1.2 1998/03/22 20:42:40 law Exp $
++ $Id: infomap.c,v 1.2 1998/03/24 18:06:34 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/info-stnd.texi gcc-2.95.4/texinfo/info/info-stnd.texi
+--- gcc-2.95.3/texinfo/info/info-stnd.texi 1998-03-24 19:06:26.000000000 +0100
++++ gcc-2.95.4/texinfo/info/info-stnd.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -9,7 +9,7 @@
+ @synindex fn cp
+ @synindex ky cp
+ @comment %**end of header
+-@comment $Id: info-stnd.texi,v 1.1.1.1 1997/08/21 22:58:01 jason Exp $
++@comment $Id: info-stnd.texi,v 1.2 1998/03/24 18:06:26 law Exp $
+
+ @dircategory Texinfo documentation system
+ @direntry
+diff -ruNb gcc-2.95.3/texinfo/info/info.texi gcc-2.95.4/texinfo/info/info.texi
+--- gcc-2.95.3/texinfo/info/info.texi 1998-03-24 19:06:32.000000000 +0100
++++ gcc-2.95.4/texinfo/info/info.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -3,7 +3,7 @@
+ @setfilename info.info
+ @settitle Info 1.0
+ @comment %**end of header
+-@comment $Id: info.texi,v 1.1.1.1 1997/08/21 22:58:02 jason Exp $
++@comment $Id: info.texi,v 1.2 1998/03/24 18:06:32 law Exp $
+
+ @ifinfo
+ @c This is a dir.info fragment to support semi-automated addition of
+diff -ruNb gcc-2.95.3/texinfo/info/info-utils.h gcc-2.95.4/texinfo/info/info-utils.h
+--- gcc-2.95.3/texinfo/info/info-utils.h 1998-03-24 19:06:28.000000000 +0100
++++ gcc-2.95.4/texinfo/info/info-utils.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* info-utils.h -- Exported functions and variables from info-util.c.
+- $Id: info-utils.h,v 1.1.1.2 1998/03/22 20:42:36 law Exp $
++ $Id: info-utils.h,v 1.2 1998/03/24 18:06:28 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/makedoc.c gcc-2.95.4/texinfo/info/makedoc.c
+--- gcc-2.95.3/texinfo/info/makedoc.c 1998-03-24 19:06:38.000000000 +0100
++++ gcc-2.95.4/texinfo/info/makedoc.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* makedoc.c -- Make doc.c and funs.h from input files.
+- $Id: makedoc.c,v 1.1.1.2 1998/03/22 20:42:43 law Exp $
++ $Id: makedoc.c,v 1.2 1998/03/24 18:06:38 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/Makefile.am gcc-2.95.4/texinfo/info/Makefile.am
+--- gcc-2.95.3/texinfo/info/Makefile.am 1998-03-24 20:40:42.000000000 +0100
++++ gcc-2.95.4/texinfo/info/Makefile.am 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ ## Makefile.am for texinfo/info.
+-## $Id: Makefile.am,v 1.1.1.2 1998/03/24 18:20:06 law Exp $
++## $Id: Makefile.am,v 1.3 1998/03/24 19:40:42 law Exp $
+ ## Run automake in .. to produce Makefile.in from this.
+
+ noinst_PROGRAMS = makedoc
+diff -ruNb gcc-2.95.3/texinfo/info/man.c gcc-2.95.4/texinfo/info/man.c
+--- gcc-2.95.3/texinfo/info/man.c 1998-03-24 19:06:39.000000000 +0100
++++ gcc-2.95.4/texinfo/info/man.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* man.c: How to read and format man files.
+- $Id: man.c,v 1.5 1998/03/22 22:35:19 law Exp $
++ $Id: man.c,v 1.6 1998/03/24 18:06:39 law Exp $
+
+ Copyright (C) 1995, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/man.h gcc-2.95.4/texinfo/info/man.h
+--- gcc-2.95.3/texinfo/info/man.h 1998-03-24 19:06:41.000000000 +0100
++++ gcc-2.95.4/texinfo/info/man.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* man.h: Defines and external function declarations for man.c.
+- $Id: man.h,v 1.1.1.2 1998/03/22 20:42:46 law Exp $
++ $Id: man.h,v 1.2 1998/03/24 18:06:41 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/m-x.c gcc-2.95.4/texinfo/info/m-x.c
+--- gcc-2.95.3/texinfo/info/m-x.c 1998-03-24 19:06:37.000000000 +0100
++++ gcc-2.95.4/texinfo/info/m-x.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* m-x.c -- Meta-X minibuffer reader.
+- $Id: m-x.c,v 1.1.1.2 1998/03/22 20:42:42 law Exp $
++ $Id: m-x.c,v 1.2 1998/03/24 18:06:37 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/nodemenu.c gcc-2.95.4/texinfo/info/nodemenu.c
+--- gcc-2.95.3/texinfo/info/nodemenu.c 1998-03-24 19:06:40.000000000 +0100
++++ gcc-2.95.4/texinfo/info/nodemenu.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* nodemenu.c -- Produce a menu of all visited nodes.
+- $Id: nodemenu.c,v 1.1.1.2 1998/03/22 20:42:47 law Exp $
++ $Id: nodemenu.c,v 1.2 1998/03/24 18:06:40 law Exp $
+
+ Copyright (C) 1993, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/nodes.h gcc-2.95.4/texinfo/info/nodes.h
+--- gcc-2.95.3/texinfo/info/nodes.h 1998-03-24 19:06:43.000000000 +0100
++++ gcc-2.95.4/texinfo/info/nodes.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* nodes.h -- How we represent nodes internally.
+- $Id: nodes.h,v 1.1.1.2 1998/03/22 20:42:49 law Exp $
++ $Id: nodes.h,v 1.2 1998/03/24 18:06:43 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/search.h gcc-2.95.4/texinfo/info/search.h
+--- gcc-2.95.3/texinfo/info/search.h 1998-03-24 19:06:45.000000000 +0100
++++ gcc-2.95.4/texinfo/info/search.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* search.h -- Structure used to search large bodies of text, with bounds.
+- $Id: search.h,v 1.1.1.2 1998/03/22 20:42:51 law Exp $
++ $Id: search.h,v 1.2 1998/03/24 18:06:45 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/session.c gcc-2.95.4/texinfo/info/session.c
+--- gcc-2.95.3/texinfo/info/session.c 1998-03-24 20:40:53.000000000 +0100
++++ gcc-2.95.4/texinfo/info/session.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* session.c -- The user windowing interface to Info.
+- $Id: session.c,v 1.1.1.3 1998/03/24 18:20:15 law Exp $
++ $Id: session.c,v 1.3 1998/03/24 19:40:53 law Exp $
+
+ Copyright (C) 1993, 96, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/info/signals.h gcc-2.95.4/texinfo/info/signals.h
+--- gcc-2.95.3/texinfo/info/signals.h 1998-03-24 19:06:49.000000000 +0100
++++ gcc-2.95.4/texinfo/info/signals.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* signals.h -- Header to include system dependent signal definitions.
+- $Id: signals.h,v 1.1.1.2 1998/03/22 20:42:55 law Exp $
++ $Id: signals.h,v 1.2 1998/03/24 18:06:49 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/termdep.h gcc-2.95.4/texinfo/info/termdep.h
+--- gcc-2.95.3/texinfo/info/termdep.h 1998-04-02 20:30:53.000000000 +0200
++++ gcc-2.95.4/texinfo/info/termdep.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* termdep.h -- System things that terminal.c depends on.
+- $Id: termdep.h,v 1.5 1998/03/24 19:40:54 law Exp $
++ $Id: termdep.h,v 1.6 1998/04/02 18:30:53 wilson Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/terminal.c gcc-2.95.4/texinfo/info/terminal.c
+--- gcc-2.95.3/texinfo/info/terminal.c 1998-03-24 20:40:55.000000000 +0100
++++ gcc-2.95.4/texinfo/info/terminal.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* terminal.c -- How to handle the physical terminal for Info.
+- $Id: terminal.c,v 1.1.1.3 1998/03/24 18:20:18 law Exp $
++ $Id: terminal.c,v 1.5 1998/03/24 19:40:55 law Exp $
+
+ Copyright (C) 1988, 89, 90, 91, 92, 93, 96, 97, 98
+ Free Software Foundation, Inc.
+diff -ruNb gcc-2.95.3/texinfo/info/tilde.c gcc-2.95.4/texinfo/info/tilde.c
+--- gcc-2.95.3/texinfo/info/tilde.c 1998-03-24 20:40:56.000000000 +0100
++++ gcc-2.95.4/texinfo/info/tilde.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* tilde.c -- Tilde expansion code (~/foo := $HOME/foo).
+- $Id: tilde.c,v 1.1.1.3 1998/03/24 18:20:19 law Exp $
++ $Id: tilde.c,v 1.3 1998/03/24 19:40:56 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/variables.c gcc-2.95.4/texinfo/info/variables.c
+--- gcc-2.95.3/texinfo/info/variables.c 1998-03-24 19:06:57.000000000 +0100
++++ gcc-2.95.4/texinfo/info/variables.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* variables.c -- How to manipulate user visible variables in Info.
+- $Id: variables.c,v 1.1.1.2 1998/03/22 20:43:01 law Exp $
++ $Id: variables.c,v 1.2 1998/03/24 18:06:57 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/variables.h gcc-2.95.4/texinfo/info/variables.h
+--- gcc-2.95.3/texinfo/info/variables.h 1998-03-24 19:06:58.000000000 +0100
++++ gcc-2.95.4/texinfo/info/variables.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* variables.h -- Description of user visible variables in Info.
+- $Id: variables.h,v 1.1.1.2 1998/03/22 20:43:02 law Exp $
++ $Id: variables.h,v 1.2 1998/03/24 18:06:58 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/window.c gcc-2.95.4/texinfo/info/window.c
+--- gcc-2.95.3/texinfo/info/window.c 1998-03-24 20:40:57.000000000 +0100
++++ gcc-2.95.4/texinfo/info/window.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* window.c -- Windows in Info.
+- $Id: window.c,v 1.1.1.3 1998/03/24 18:20:20 law Exp $
++ $Id: window.c,v 1.3 1998/03/24 19:40:57 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/info/window.h gcc-2.95.4/texinfo/info/window.h
+--- gcc-2.95.3/texinfo/info/window.h 1998-03-24 19:07:00.000000000 +0100
++++ gcc-2.95.4/texinfo/info/window.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* window.h -- Structure and flags used in manipulating Info windows.
+- $Id: window.h,v 1.1.1.2 1998/03/22 20:43:04 law Exp $
++ $Id: window.h,v 1.2 1998/03/24 18:07:00 law Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+diff -ruNb gcc-2.95.3/texinfo/lib/Makefile.am gcc-2.95.4/texinfo/lib/Makefile.am
+--- gcc-2.95.3/texinfo/lib/Makefile.am 1998-03-24 20:41:15.000000000 +0100
++++ gcc-2.95.4/texinfo/lib/Makefile.am 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ ## Makefile.am for texinfo/lib.
+-## $Id: Makefile.am,v 1.1.1.2 1998/03/24 18:19:49 law Exp $
++## $Id: Makefile.am,v 1.3 1998/03/24 19:41:15 law Exp $
+ ## Run automake in .. to produce Makefile.in from this.
+
+ noinst_LIBRARIES = libtxi.a
+diff -ruNb gcc-2.95.3/texinfo/lib/system.h gcc-2.95.4/texinfo/lib/system.h
+--- gcc-2.95.3/texinfo/lib/system.h 1999-07-01 02:44:57.000000000 +0200
++++ gcc-2.95.4/texinfo/lib/system.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* system.h: System-dependent declarations. Include this first.
+- $Id: system.h,v 1.1.1.2 1998/03/24 18:19:53 law Exp $
++ $Id: system.h,v 1.3.10.1 1999/07/01 00:44:57 law Exp $
+
+ Copyright (C) 1997 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/libtxi/Makefile.in gcc-2.95.4/texinfo/libtxi/Makefile.in
+--- gcc-2.95.3/texinfo/libtxi/Makefile.in 1998-03-24 19:07:40.000000000 +0100
++++ gcc-2.95.4/texinfo/libtxi/Makefile.in 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ # Makefile for GNU texinfo/libtxi. -*- Indented-Text -*-
+-# $Id: Makefile.in,v 1.4 1998/01/13 20:31:57 law Exp $
++# $Id: Makefile.in,v 1.5 1998/03/24 18:07:40 law Exp $
+
+ # Copyright (C) 1993, 96, 98 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/Makefile.am gcc-2.95.4/texinfo/Makefile.am
+--- gcc-2.95.3/texinfo/Makefile.am 1999-06-24 23:05:55.000000000 +0200
++++ gcc-2.95.4/texinfo/Makefile.am 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ ## Makefile.am for texinfo.
+-## $Id: Makefile.am,v 1.5 1998/04/10 00:37:57 law Exp $
++## $Id: Makefile.am,v 1.6.6.1 1999/06/24 21:05:55 law Exp $
+ ## Process this file with automake to produce Makefile.in in all directories.
+
+ # Be sure we're using the right version of Automake.
+diff -ruNb gcc-2.95.3/texinfo/makeinfo/Makefile.am gcc-2.95.4/texinfo/makeinfo/Makefile.am
+--- gcc-2.95.3/texinfo/makeinfo/Makefile.am 1998-11-19 23:39:54.000000000 +0100
++++ gcc-2.95.4/texinfo/makeinfo/Makefile.am 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ ## Makefile.am for texinfo/makeinfo.
+-## $Id: Makefile.am,v 1.3 1998/03/24 19:41:22 law Exp $
++## $Id: Makefile.am,v 1.4 1998/11/19 22:39:54 manfred Exp $
+ ## Run automake in .. to produce Makefile.in from this.
+
+ noinst_PROGRAMS = makeinfo
+diff -ruNb gcc-2.95.3/texinfo/makeinfo/makeinfo.c gcc-2.95.4/texinfo/makeinfo/makeinfo.c
+--- gcc-2.95.3/texinfo/makeinfo/makeinfo.c 1999-05-28 04:10:10.000000000 +0200
++++ gcc-2.95.4/texinfo/makeinfo/makeinfo.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Makeinfo -- convert Texinfo source files into Info files.
+- $Id: makeinfo.c,v 1.11 1998/07/06 21:58:00 law Exp $
++ $Id: makeinfo.c,v 1.11.10.1 1999/05/28 02:10:10 law Exp $
+
+ Copyright (C) 1987, 92, 93, 94, 95, 96, 97, 98
+ Free Software Foundation, Inc.
+diff -ruNb gcc-2.95.3/texinfo/makeinfo/makeinfo.h gcc-2.95.4/texinfo/makeinfo/makeinfo.h
+--- gcc-2.95.3/texinfo/makeinfo/makeinfo.h 1998-03-24 19:07:56.000000000 +0100
++++ gcc-2.95.4/texinfo/makeinfo/makeinfo.h 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* makeinfo.h -- Declarations for Makeinfo.
+- $Id: makeinfo.h,v 1.1.1.2 1998/03/22 20:43:08 law Exp $
++ $Id: makeinfo.h,v 1.2 1998/03/24 18:07:56 law Exp $
+
+ Copyright (C) 1996, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/makeinfo/makeinfo.texi gcc-2.95.4/texinfo/makeinfo/makeinfo.texi
+--- gcc-2.95.3/texinfo/makeinfo/makeinfo.texi 1998-03-24 19:07:55.000000000 +0100
++++ gcc-2.95.4/texinfo/makeinfo/makeinfo.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -4,7 +4,7 @@
+ @set VERSION 1.61
+ @paragraphindent none
+ @comment %**start of header
+-@comment $Id: makeinfo.texi,v 1.1.1.1 1997/08/21 22:58:08 jason Exp $
++@comment $Id: makeinfo.texi,v 1.2 1998/03/24 18:07:55 law Exp $
+
+ @ifinfo
+ @format
+diff -ruNb gcc-2.95.3/texinfo/makeinfo/multi.c gcc-2.95.4/texinfo/makeinfo/multi.c
+--- gcc-2.95.3/texinfo/makeinfo/multi.c 1998-05-06 23:09:06.000000000 +0200
++++ gcc-2.95.4/texinfo/makeinfo/multi.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* multi.c -- multitable stuff for makeinfo.
+- $Id: multi.c,v 1.2 1998/03/24 18:07:57 law Exp $
++ $Id: multi.c,v 1.3 1998/05/06 21:09:06 law Exp $
+
+ Copyright (C) 1996, 97 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/mkinstalldirs gcc-2.95.4/texinfo/mkinstalldirs
+--- gcc-2.95.3/texinfo/mkinstalldirs 1998-03-24 20:40:34.000000000 +0100
++++ gcc-2.95.4/texinfo/mkinstalldirs 2017-11-07 22:10:12.000000000 +0100
+@@ -4,7 +4,7 @@
+ # Created: 1993-05-16
+ # Public domain
+
+-# $Id: mkinstalldirs,v 1.1.1.2 1998/03/24 18:19:28 law Exp $
++# $Id: mkinstalldirs,v 1.4 1998/03/24 19:40:34 law Exp $
+
+ errstatus=0
+
+Binary files gcc-2.95.3/texinfo/po/de.gmo and gcc-2.95.4/texinfo/po/de.gmo differ
+Binary files gcc-2.95.3/texinfo/po/fr.gmo and gcc-2.95.4/texinfo/po/fr.gmo differ
+diff -ruNb gcc-2.95.3/texinfo/texinfo.tex gcc-2.95.4/texinfo/texinfo.tex
+--- gcc-2.95.3/texinfo/texinfo.tex 1998-03-24 19:05:24.000000000 +0100
++++ gcc-2.95.4/texinfo/texinfo.tex 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ %% TeX macros to handle Texinfo files.
+-%% $Id: texinfo.tex,v 1.2 1998/03/24 17:58:28 law Exp $
++%% $Id: texinfo.tex,v 1.3 1998/03/24 18:05:24 law Exp $
+
+ % Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
+ % 94, 95, 96, 97 Free Software Foundation, Inc.
+@@ -36,7 +36,7 @@
+
+ % This automatically updates the version number based on RCS.
+ \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
+-\deftexinfoversion$Revision: 1.2 $
++\deftexinfoversion$Revision: 1.3 $
+ \message{Loading texinfo package [Version \texinfoversion]:}
+
+ % If in a .fmt file, print the version number
+diff -ruNb gcc-2.95.3/texinfo/texinfo.texi gcc-2.95.4/texinfo/texinfo.texi
+--- gcc-2.95.3/texinfo/texinfo.texi 1998-03-24 19:05:26.000000000 +0100
++++ gcc-2.95.4/texinfo/texinfo.texi 2017-11-07 22:10:12.000000000 +0100
+@@ -13,7 +13,7 @@
+ @paragraphindent 2
+ @finalout
+ @comment %**end of header
+-@comment $Id: texinfo.texi,v 1.2 1998/03/24 17:58:30 law Exp $
++@comment $Id: texinfo.texi,v 1.3 1998/03/24 18:05:26 law Exp $
+
+ @c Before release, run C-u C-c C-u C-a (texinfo-all-menus-update with a
+ @c prefix arg). This updates the node pointers, which texinfmt.el needs.
+diff -ruNb gcc-2.95.3/texinfo/util/gen-dir-node gcc-2.95.4/texinfo/util/gen-dir-node
+--- gcc-2.95.3/texinfo/util/gen-dir-node 1998-03-24 19:08:43.000000000 +0100
++++ gcc-2.95.4/texinfo/util/gen-dir-node 1998-03-24 19:08:43.000000000 +0100
+@@ -1,5 +1,5 @@
+ #!/bin/sh
+-# $Id: gen-dir-node,v 1.1.1.2 1998/03/22 20:43:12 law Exp $
++# $Id: gen-dir-node,v 1.2 1998/03/24 18:08:43 law Exp $
+ # Generate the top-level Info node, given a directory of Info files
+ # and (optionally) a skeleton file. The output will be suitable for a
+ # top-level dir file. The skeleton file contains info topic names in the
+diff -ruNb gcc-2.95.3/texinfo/util/install-info.c gcc-2.95.4/texinfo/util/install-info.c
+--- gcc-2.95.3/texinfo/util/install-info.c 1998-03-24 20:41:39.000000000 +0100
++++ gcc-2.95.4/texinfo/util/install-info.c 1998-03-24 20:41:39.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* install-info -- create Info directory entry(ies) for an Info file.
+- $Id: install-info.c,v 1.1.1.3 1998/03/24 18:20:30 law Exp $
++ $Id: install-info.c,v 1.6 1998/03/24 19:41:39 law Exp $
+
+ Copyright (C) 1996, 97, 98 Free Software Foundation, Inc.
+
+diff -ruNb gcc-2.95.3/texinfo/util/Makefile.am gcc-2.95.4/texinfo/util/Makefile.am
+--- gcc-2.95.3/texinfo/util/Makefile.am 1999-02-01 11:33:57.000000000 +0100
++++ gcc-2.95.4/texinfo/util/Makefile.am 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ ## Makefile.am for texinfo/util.
+-## $Id: Makefile.am,v 1.3 1998/03/24 19:41:36 law Exp $
++## $Id: Makefile.am,v 1.4 1999/02/01 10:33:57 manfred Exp $
+ ## Run automake in .. to produce Makefile.in from this.
+
+ noinst_PROGRAMS = install-info texindex
+diff -ruNb gcc-2.95.3/texinfo/util/mkinstalldirs gcc-2.95.4/texinfo/util/mkinstalldirs
+--- gcc-2.95.3/texinfo/util/mkinstalldirs 1998-03-24 19:08:45.000000000 +0100
++++ gcc-2.95.4/texinfo/util/mkinstalldirs 2017-11-07 22:10:12.000000000 +0100
+@@ -4,7 +4,7 @@
+ # Created: 1993-05-16
+ # Public domain
+
+-# $Id: mkinstalldirs,v 1.1.1.1 1997/08/21 22:58:12 jason Exp $
++# $Id: mkinstalldirs,v 1.2 1998/03/24 18:08:45 law Exp $
+
+ errstatus=0
+
+diff -ruNb gcc-2.95.3/texinfo/util/texi2dvi gcc-2.95.4/texinfo/util/texi2dvi
+--- gcc-2.95.3/texinfo/util/texi2dvi 1998-03-24 20:41:41.000000000 +0100
++++ gcc-2.95.4/texinfo/util/texi2dvi 2017-11-07 22:10:12.000000000 +0100
+@@ -1,6 +1,6 @@
+ #! /bin/sh
+ # texi2dvi --- smartly produce DVI files from texinfo sources
+-# $Id: texi2dvi,v 1.1.1.3 1998/03/24 18:20:32 law Exp $
++# $Id: texi2dvi,v 1.3 1998/03/24 19:41:41 law Exp $
+ #
+ # Copyright (C) 1992, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+ #
+@@ -45,7 +45,7 @@
+ progname=`echo "$0" | sed -e 's/[^\/]*\///g'`
+
+ # This string is expanded by rcs automatically when this file is checked out.
+-rcs_revision='$Revision: 1.1.1.3 $'
++rcs_revision='$Revision: 1.3 $'
+ version=`set - $rcs_revision; echo $2`
+
+ # To prevent hairy quoting and escaping later.
+diff -ruNb gcc-2.95.3/texinfo/util/texindex.c gcc-2.95.4/texinfo/util/texindex.c
+--- gcc-2.95.3/texinfo/util/texindex.c 1998-03-24 20:41:42.000000000 +0100
++++ gcc-2.95.4/texinfo/util/texindex.c 2017-11-07 22:10:12.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Prepare TeX index dribble output into an actual index.
+- $Id: texindex.c,v 1.1.1.3 1998/03/24 18:20:31 law Exp $
++ $Id: texindex.c,v 1.3 1998/03/24 19:41:42 law Exp $
+
+ Copyright (C) 1987, 91, 92, 96, 97, 98 Free Software Foundation, Inc.
+