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" - - 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,}" - - 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 .new to be changed to - -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 - 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 - - 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 class foo { - friend void bar(foo); -} - - 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) { /* ... */ } -void bar(foo) { /* ... */ } - - 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 -class foo; - -template -void bar(foo); - -template -class foo { - friend void bar<>(foo); -}; - -template -void bar(foo) { /* ... */ } - - 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 @@ - - -GCC Frequently Asked Questions - - - -

GCC Frequently Asked Questions

- -

The latest version of this document is always available at 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 -comp.lang.c FAQ, - -comp.lang.c++ FAQ, - -comp.std.c++ FAQ, and the Fortran Information -page.

- -
- -

Questions

-
    -
  1. General information -
      -
    1. What is the relationship between GCC and EGCS
    2. -
    3. What is the relationship between GCC and Cygnus
    4. -
    5. What is an open development model?
    6. -
    7. How to report bugs
    8. -
    9. How do I get a bug fixed or a feature added?
    10. -
  2. - -
  3. Installation -
      -
    1. Problems building the Fortran compiler
    2. -
    3. How to install multiple versions of GCC
    4. -
    5. Dynamic linker is unable to find GCC libraries
    6. -
    7. libstdc++/libio tests fail badly with --enable-shared
    8. -
    9. GCC can not find GNU as/GNU ld
    10. -
    11. cpp: Usage:... Error
    12. -
  4. - -
  5. Testsuite problems -
      -
    1. Why is there no testsuite in GCC 2.95
    2. -
    3. Unable to run the testsuite
    4. -
    5. How do I pass flags like - -fnew-abi to the testsuite?
    6. -
    7. How can I run the test suite with multiple options?
    8. -
  6. - -
  7. Platform-specific issues -
      -
    1. Problems with exception handling on x86 platforms
    2. -
    3. Problems with Invalid `asm' statements
    4. -
    5. Building Linux kernels
    6. -
    7. How do I compile X11 headers with g++
    8. -
    9. How to build a cross compiler
    10. -
  8. - -
  9. Bugs and Non-Bugs -
      -
    1. FD_ZERO macro
    2. -
    3. Octave 2.0.13 does not compile
    4. -
    5. Why can't I initialize a static variable with stdin?
    6. -
    7. Why can't I use #if here?
    8. -
  10. - -
  11. Miscellaneous -
      -
    1. Virtual memory exhausted
    2. -
    3. Snapshots, how, when, why
    4. -
    5. Friend Templates
    6. -
    7. Where to find libg++
    8. -
    9. Why do I need autoconf, bison, xgettext, automake, etc
    10. -
    11. Problems debugging GCC code
    12. -
    13. Conflicts when using cvs update
    14. -
    15. Using GCC with GNAT/Ada
    16. -
    17. Using GCC with GNU Pascal
    18. -
    19. Using CVS to download snapshots
    20. -
    21. Why can't I build a shared library?
    22. -
    23. Dealing with spam on the lists
    24. -
    25. How to work around too long C++ symbol names? - (-fsquangle)
    26. -
    27. When building from CVS sources, I see 'gperf: invalid option -- F', - even with the most current version of gperf.
    28. -
    29. When building C++, the linker says my constructors, destructors or virtual tables are undefined, but I defined them
    30. -
    31. What is libstdc++-v3 and how can I use it with g++?
    32. -
  12. -
- - -
- -

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 -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 -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[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 ``The - Cathedral and the Bazaar''. The paper is a useful starting point - for discussions. -
- -
-

How to report bugs

- -

There are complete instructions in the -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 -BUGS -included with the GCC source code.

- -

Before you report a bug for the C++ compiler, please check -the 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 gcc-bugs@gcc.gnu.org or -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 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, 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 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 - -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 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 -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 - 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 -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 patch -which fixes some of the asm problems. You will also want to change -asm constructs to 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 -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 list of well-known bugs -describing known deficiencies. Naturally we'd like that list to be of -zero length.

- -

To report a bug, see How to report bugs.

- -
-

FD_ZERO macro

- -

The FD_ZERO macro in (e.g.) libc-5.4.46 is incorrect. It uses 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 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 - -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 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 -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 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 - -http://sourceware.cygnus.com/autoconf/; have a look at - -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 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 - -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 -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 -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 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. -
  3. Build and install libstdc++-v3
  4. -
  5. Use compiler flags to use the new libstdc++
  6. -
-

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 libstdc++-v3 homepage

- -
- -

Return to the GCC home page

-

Last modified: October 19, 1999

- - - 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 + + 2000-10-17 Franz Sirl + * function.c (locate_and_pad_parm): Don't align stack unconditionally. + + Thu Oct 28 10:20:02 1999 Geoffrey Keating + * 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 + + Fri Nov 5 10:07:25 1999 Nick Clifton + * 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 + + 2001-03-16 Jakub Jelinek + * 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 + * 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 + * 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 + * reload1.c (reload_combine_note_use): Handle return register USEs. + REG case: Handle multi-hard-register hard regs. + +2001-03-30 Bernd Schmidt + + * 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 + * mips.md: Define conditional move patterns for floating point + operands and DI mode conditions. + + 2000-11-25 Jakub Jelinek + * config/sparc/sparc.md (muldi3_v8plus): Remove H constraint. + Handle CONST_INT as second argument. + +2001-03-28 Bernd Schmidt + + * 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 + + 1999-11-30 Kaveh R. Ghazi + * 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 + + from 2000-07-12 Zack Weinberg + * 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 + * config/i386/freebsd.h (NO_PROFILE_COUNTERS): Define. + +2001-03-19 Bernd Schmidt + + * version.c: Bump. + + 2000-01-18 Martin v. Löwis + * 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 + * 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 $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 #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 +#endif #else /* not MSDOS, or __TURBOC__ */ #if defined(_AIX) -#include +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include */ #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 @@ ¤t_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 + +#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 +#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 + +#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 +#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 +#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 */ + #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, + ¤t_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 init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers %type maybe_attribute attributes attribute attribute_list attrib -%type any_word +%type any_word extension %type 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 = $1; } + { RESTORE_WARN_FLAGS ($1); } ; datadef: @@ -448,7 +459,7 @@ /* __extension__ turns off -pedantic for following primary. */ | extension cast_expr %prec UNARY { $$ = $2; - pedantic = $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 = $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 = $1; } + RESTORE_WARN_FLAGS ($1); } ; components: @@ -2426,8 +2437,9 @@ extension: EXTENSION - { $$ = 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 init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers %type maybe_attribute attributes attribute attribute_list attrib -%type any_word +%type any_word extension %type 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 = $1; } + { RESTORE_WARN_FLAGS ($1); } ; datadef: @@ -403,7 +414,7 @@ /* __extension__ turns off -pedantic for following primary. */ | extension cast_expr %prec UNARY { $$ = $2; - pedantic = $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 = $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 = $1; } + RESTORE_WARN_FLAGS ($1); } ; components: @@ -2231,8 +2242,9 @@ extension: EXTENSION - { $$ = 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 \\\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\",,"; +}; /* * Fix VxWorks to not require including . @@ -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 \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 (®_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 (®_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 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 . + +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;' 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= 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;), + 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 ? 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 #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 +#endif #else /* not MSDOS, or __TURBOC__ */ #if defined(_AIX) -#include +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include */ #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 @@ ¤t_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 init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers %type maybe_attribute attributes attribute attribute_list attrib -%type any_word +%type any_word extension %type 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 = $1; } + { RESTORE_WARN_FLAGS ($1); } ; datadef: @@ -406,7 +417,7 @@ /* __extension__ turns off -pedantic for following primary. */ | extension cast_expr %prec UNARY { $$ = $2; - pedantic = $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 = $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 = $1; } + RESTORE_WARN_FLAGS ($1); } ; components: @@ -2340,8 +2351,9 @@ extension: EXTENSION - { $$ = 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 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 . - -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;' 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= 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;), - 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 ? 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 , 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 \n" -"Language-Team: LANGUAGE \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, )" -msgstr "" - -#: c-pragma.c:135 -#, c-format -msgid "" -"#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, " -")" -msgstr "" - -#: c-pragma.c:269 -msgid "malformed `#pragma pack'" -msgstr "" - -#: c-pragma.c:278 -msgid "malformed '#pragma pack(push[,id],)'" -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" -" ... ...\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 ' !" -msgstr "" - -#: cccp.c:4518 cpplib.c:1011 -#, c-format -msgid "`#%s' expects \"FILENAME\" or " -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>' 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 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 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 '" -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 '" -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 ; 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 " -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 ] [ filename ... ]'\n" -msgstr "" - -#: protoize.c:830 -#, c-format -msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ 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 + + * 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 + + * gcc.c-torture/compile/990519-1.c: New test. + +1999-05-17 Andreas Schwab + + * 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 + + * gcc.dg/noreturn-1.c: New test. + +Thu May 13 02:02:46 1999 Andreas Schwab + + * gcc.c-torture/execute/990513-1.c: New test. + +1999-05-10 Richard Henderson + + * g++.old-deja/g++.other/null1.C (g): Add overload for long. + +1999-05-10 Craig Burley + + * g77.f-torture/execute/erfc.f: Use small single-precision + values, to avoid problems on Alphas when not -mieee. + +1999-05-08 Craig Burley + + * gcc.dg/990506-0.c: New test. + +1999-05-08 Richard Henderson + + * 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 + + * g77.f-torture/execute/u77-test.f (main): Declare ABORT as + intrinsic. + +1999-05-03 Craig Burley + + * 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 + + * gcc.dg/compare1.c: New test. + +1999-05-02 Joseph S. Myers + + * gcc.dg/cast-qual-1.c, gcc.dg/return-type-1.c, gcc.dg/unused-1.c: + New tests. + +1999-05-02 Craig Burley + + * g77.f-torture/compile/19990502-1.f: New test. + +1999-05-02 Craig Burley + + * g77.f-torture/compile/19990502-0.f: New test. + +Sun May 2 01:38:50 1999 Craig Burley + + * g77.f-torture/execute/u77-test.f (main): Declare FTELL as + intrinsic. + +Sun May 2 01:13:37 1999 Craig Burley + + * 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 + + * 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 + + * 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 + + * 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 + + * gcc.dg/990424-1.c: New test. + +1999-04-24 Craig Burley + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * g77.f-torture/execute/19990313-2.f: New test. + * g77.f-torture/execute/19990313-3.f: New test. + +1999-03-13 Craig Burley + + * g77.f-torture/execute/19990313-0.f: New test. + * g77.f-torture/execute/19990313-1.f: New test. + +1999-03-08 Craig Burley + + * g77.f-torture/execute/19981119-0.f: Improve testiness. + +1999-03-08 Craig Burley + + * g77.f-torture/compile/19990305-0.f: New test. + * g77.f-torture/execute/19981119-0.f: New test. + +1999-03-08 Craig Burley + + * 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 + + * g77.f-torture/compile/960317-1.f: Moved from being + in execute/. (Somehow I didn't notice "SUBROUTINE...".) + +1999-03-06 Craig Burley + + * 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 + + * 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 + + * lib/g++.exp: Don't add incdir=$base_dir/../include to + ALWAYS_CXXFLAGS. + +1999-02-24 Craig Burley + + * 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 + + * 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 + + * g77.f-torture/compile/19990218-0.f: New test. + * g77.f-torture/noncompile/19990218-1.f: New test. + +1999-02-18 Craig Burley + + * 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 + + * 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 + + * 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 + + * 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 + + * gcc.c-torture/execute/990208-1.c: New test. + +1999-02-07 Jonathan Larmour + + * 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 + + * 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 + + * 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 + + * gcc.c-torture/compile/981223-1.c: New test. + +Tue Dec 29 11:33:25 1998 Richard Henderson + + * gcc.c-torture/execute/bcp-1.c (bad10): Rename from opt3. + (opt3): Rename from opt4 and disable. + +1998-12-20 Alexandre Oliva + + * g++.old-deja/g++.pt/ptrmem5.C: New test. + +1998-12-15 Alexandre Oliva + + * 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 + + * gcc.c-torture/compile/981211-1.c: New test. + +1998-12-09 Alexandre Oliva + + * 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 + + * 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 + + * gcc.dg/ultrasp1.c: New test. + +Sun Dec 6 00:40:12 1998 Richard Henderson + + * gcc.c-torture/execute/981206.c: New test. + +1998-12-06 Alexandre Oliva + + * 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 + + * 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 + + * 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 + + * g++.old-deja/g++.pt/lookup6.C: New test. + +1998-11-27 Alexandre Oliva + + * 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 + + * 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 + + * 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 + + * g77.f-torture/compile/981117-1.f: New test. + +1998-11-16 Alexandre Oliva + + * g++.old-deja/g++.eh/throw2.C: New test. CV-qualifiers are not + properly discarded. + +1998-11-07 Gerald Pfeifer + + * 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 + + * gcc.c-torture/compile/981107-1.c: New test. + +Mon Nov 2 11:16:03 1998 Doug Evans + + * execute/memcpy-bi.c: New testcase. + +1998-10-31 Alexandre Oliva + + * 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 + + * 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 + + * lib/old-dejagnu.exp (old-dejagnu): Document `Additional sources'. + +Thu Oct 22 16:01:44 1998 Andreas Schwab + + * 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 + + * lib/objc-torture.exp (objc-torture-execute): Add -I so we can + find objc headers. + +1998-10-14 Andreas Schwab + + * compile/981001-4.c: Remove use of GCC extension that triggers a + compiler bug. + +1998-10-13 Alexandre Oliva + + * lib/old-dejagnu.exp (old-dejagnu): Support `Additional sources:'. + +1998-10-12 Alexandre Oliva + + * 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 + + * 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 + + * g++.old-deja/g++.ext/typeof1.C: New test; typeof based on + template-dependent type + +1998-10-10 Alexandre Oliva + + * 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 + + * gcc.dg/dll-?.c Add thumb to target list. + Fix assembler scan patterns to match current assembler output. + +1998-10-08 Alexandre Oliva + + * 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 + + * gcc.c-torture/compile/981007-1.c: New test for irix6 -O0 core dump. + +1998-10-06 Alexandre Oliva + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/objc.exp (objc_target_compile): Add -L during compiles for + multilibbed hosts. Idea grafted from g77.exp. + +1998-09-30 Dave Love + + * g77.f-torture/execute/u77-test.f (main): Excise `hostnm' to + avoid losing on systems which need -lsocket. + +1998-09-28 Alexandre Oliva + + * 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 + + * g++.old-deja/g++.other/bitfld1.C: Built-in operator!= should be + preferred over template operator!= for enum bitfields. + +1998-09-18 Alexandre Oliva + + * 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 + + * 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 + + * 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 + + * 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 + + * g77.f-torture/execute/u77-test.f: Fix bad consistency checks. + +1998-09-08 Dave Love + + * g77.f-torture/execute/u77-test.f (main): New file, somewhat + altered from libf2c/libU77 version. + +1998-09-06 Dave Love + + * g77.f-torture/execute/io0.f: Test formatted direct i/o too. + +1998-09-04 Reid M. Pinchback , Alexandre Oliva + + * 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 + + * lib/{objc.exp,objc-torture.exp}: New files for objc testing harness. + * objc: ObjC testsuite. + +Mon Aug 31 15:19:32 1998 Nick Clifton + + * 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 + + * 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 + + * 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 + + * lib/old-dejagnu.exp (old-dejagnu): Remove sig6/sig11 handling + code. + +1998-08-09 Mark Mitchell + + * 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 + + * g77.f-torture/compile/980729-0.f: New test. + +1998-07-30 Ken Raeburn + + * 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 + + * 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 + + * g77.f-torture/execute/io0.f: New test. + +Fri Jul 17 14:19:32 1998 Nick Clifton + + * 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 + + * g77.f-torture/execute/auto0.f, g77.f-torture/execute/auto1.f: + New test from Craig. + +1998-07-12 Dave Love + + * 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 + + * g++.other/singleton.C: Return error value instead of taking + SIGSEGV. + +Fri Jul 10 10:02:03 1998 Klaus-Georg Adams + + * g++.other/singleton.C: New test. Warning is under dispute. + Runtime crash is not. + +Thu Jul 9 23:07:45 1998 Martin von Loewis + + * 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 + + * 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 + + * 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 + + * gcc.c-torture/compile/980706-1.c: New test. + +1998-07-01 Dave Love + + * 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 + + * g++.old-deja/g++.robertl/eb132.C: New test. + * g++.old-deja/g++.robertl/eb133.C: Likewise. + +1998-06-29 Dave Love + + * 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 + + * 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 + + * 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 + + * 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 + + *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 + + * 970125-0.f: Fix per JCB. Add commentary. + +Fri May 29 01:10:12 1998 Peter Leven + + * gcc.c-torture/execute/ieee/fp-cmp-1.c: Set up signal handler + earlier. + +Thu May 28 00:17:42 1998 Catherine Moore + + * gcc.c-torture/execute/980526-3.c: New test. + +1998-05-27 Manfred Hollstein + + * 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 + + * 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 + + * g77.f-torture/execute/alpha2.f: Add runtime test. + +1998-05-24 Jason Merrill + + * 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 + + * g77.f-torture/compile/970915-0.f: New test. + +1998-05-23 Jason Merrill + + * 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 + + * 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 + + * g77.f-torture/execute/980520-1.f: New test. + +1998-05-15 Dave Love + + * 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 + + * 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 + + * lib/c-torture.exp (TORTURE_OPTIONS): Add -Os to options. + * lib/f-torture.exp (TORTURE_OPTIONS): Ditto. + +1998-04-29 Dave Love + + * g77.f-torture/compile/980419-1.f: Removed since doesn't compile. + +1998-04-27 Dave Love + + * g77.f-torture/compile/980427-0.f: New test. + +1998-04-24 Dave Love + + * g77.f-torture/compile/980424-0.f: New test. + +1998-04-19 Dave Love + + * 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 + + * 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 + + * 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 + + * 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 + + * g++.old-deja/g++.other/friend1.C: New test. + +1998-02-18 Dave Love + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 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 + + * 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 + + * 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 + + * gcc.prms/5403.c: Allow CRLFs to occur at the start of the output + too. + +Mon Jun 16 15:27:06 1997 Bob Manson + + * 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 + + * lib/plumhall.exp: Remove random include, and add a few + verbose messages for debugging. + +Fri Jun 6 14:23:24 1997 Bob Manson + + * 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 + + * gcc.prms/5403.c: Made regexp a bit less strict. + +Tue Jun 3 15:12:39 1997 Bob Manson + + * 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 + + * 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 + + * lib/gcc.exp (gcc_target_compile): If gcc,no_varargs, define + NO_VARARGS when compiling. + +Thu May 1 14:49:19 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * g++.law/operators4.exp: Don't use LIBS. + +Sat Feb 8 14:45:55 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * lib/g++.exp(g++_init): target_compile no longer returns the + filename of the result. + +Sun Feb 2 14:42:34 1997 Bob Manson + + * 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 + + * gcc.c-torture/special/special.exp: Correct misspelling in last + change. + +Sat Feb 1 12:34:23 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/plumhall.exp (ph_make): Use CFLAGS and ANSICFLAGS when linking. + (ph_linker): Likewise. + +Wed Nov 13 16:04:19 1996 Joern Rennecke + + * 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 + + * 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 + + * 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 + + * config/vx.exp (${tool}_load): Fix syntax of `$shell_id < 0'. + +Mon Jul 8 15:45:58 1996 Jim Wilson + + * 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 + + * 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 + + * lib/g++.exp (default_g++_start): Don't pass LDFLAGS, LIBS if -c. + +Wed Jun 26 14:15:55 1996 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/c-torture.exp (c-torture-execute): Declare "output" as + global. + +Fri Nov 17 20:01:19 1995 Doug Evans + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/g++.exp (CXX): Default to run `c++' instead of `g++'. + +Tue Oct 17 15:24:47 1995 Brendan Kehoe + + * 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 + + * lib/c-torture.exp (c-torture-execute): Ensure CFLAGS restored. + +Mon Oct 16 23:13:32 1995 Brendan Kehoe + + * lib/mike-g++.exp (postbase): Pay attention to the status of + g++_load. + +Mon Oct 16 19:28:32 1995 Brendan Kehoe + + * g++.old-deja/old-deja.exp: Add $LIBS at the end of the args. + +Mon Oct 16 13:48:58 1995 Doug Evans + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/mike-{gcc,g++}.exp (postbase): Restore CFLAGS, CXX_FLAGS, LIBS + if not supported target. + +Fri Sep 22 09:22:07 1995 Brendan Kehoe + + * 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 + + * lib/plumhall.exp (PHSRC, PHDST): Allow config files to override. + +Tue Sep 19 17:26:07 1995 Brendan Kehoe + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * config/win32.exp: New file. + * lib/c-torture.exp (c-torture-execute): Handle $exe_ext. + +Fri Aug 4 15:39:54 1995 Doug Evans + + * 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 + + * 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 + + * 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 + + * 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 + + * config/sim.exp: Increase time limit from 120 seconds to 240. + +Thu Jul 6 11:07:38 1995 Jeffrey A. Law + + * 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 + + * 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 + + * 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 + + * 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 + + * config/sim.exp (${tool}_load): Hack in call to bash to get a + cpu limit. + +Fri May 12 18:57:54 1995 Torbjorn Granlund + + * gcc.c-torture/execute/{950511-1.c,950512-1.c}: New tests. + +Thu May 4 14:23:54 1995 Torbjorn Granlund + + 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 + + * 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 + + * 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 + + * config/rom68k.exp: Renamed from config/idp.exp + +Tue Apr 18 13:33:26 1995 Torbjorn Granlund + + * c-torture/compile/921109-2.c + +Tue Apr 18 10:45:12 1995 Mike Stump + + * lib/old-dejagnu.exp: We expect Execution test failure if we expected + excess errors. + +Sat Apr 15 11:16:58 1995 Doug Evans + + * 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 + + * gcc.c-torture/compile/950329-1.c: New test. + +Tue Mar 28 16:10:33 1995 J.T. Conklin + + * 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 + + * gcc.c-torture/execute/950322-1.c: New test. + +Tue Mar 21 21:24:49 1995 Doug Evans + + * 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 + + * lib/c-torture.exp (c-torture-execute): Pass same text to pass/fail. + +Mon Mar 13 14:49:42 1995 Mike Stump + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/dg.exp (dg-do): Support `preprocess'. + (dg-test): Likewise. + +Mon Feb 13 15:18:10 1995 J.T. Conklin + + * 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 + + * lib/mike-g++.exp: Add -lm to LIBS. + +Tue Feb 7 17:09:50 1995 Doug Evans + + * lib/c-torture.exp (c-torture): Allow relative pathname in $srcdir. + +Mon Jan 30 14:33:25 1995 Jason Merrill + + * lib/mike-g++.exp: Add -lstdc++ to LIBS. + +Thu Jan 12 16:41:34 1995 Doug Evans + + * 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 + + * 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 + + * lib/dg.exp (dg-test): Fix typo in last patch. + +Wed Nov 30 13:25:32 1994 Doug Evans + + * lib/dg.exp (dg-test): Fix pattern that searches for expected output + (handles multiple occurrences). + +Thu Nov 24 19:48:38 1994 Doug Evans + + * 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 + + * lib/netware.exp: Only attach to NetWare i386 systems. + +Wed Nov 16 11:27:00 1994 Doug Evans + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 , not . + * 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 +* 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 +* 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 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 +* 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 +C Date: 02 Dec 1997 18:11:35 +0000 +C Message-ID: +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 +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 +C To: egcs-bugs@cygnus.com +C Subject: g77 crashes compiling Dungeon +C Message-ID: +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 +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 +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 +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" +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 +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 +* 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" +* 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 +* 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 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 +* 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 +* 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 +* 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 +* 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 +* 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 +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 + + * execute/920501-7.c (main): Delete __I960__ ifndef. + +Mon Mar 22 14:55:58 1999 Jim Wilson + + * execute/bf-sign-2.c (main): Replace struct sizeof test with 4. + +Wed Mar 17 12:22:39 1999 Richard Henderson + + * gcc.c-torture/execute/ieee/980619-1.x: New. Expected fail on x86. + +Fri Mar 12 16:17:28 1999 Jim Wilson + + * 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 + + * 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 + + * 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 + + * execute/990128-1.c: New test. + +1999-01-27 Michael Meissner + + * execute/990127-{1,2}.c: New tests. + +1998-12-14 Nick Clifton + + * execute/920501-4.c (main): Fix typo: replace | with ||. + +1998-11-30 Nick Clifton + + * execute/981130-1.c: New test. + * execute/981130-1.x: New test failure expectations. + +Sun Oct 11 05:04:28 1998 Ken Raeburn + + * execute/memcheck: New directory of tests for + -fcheck-memory-usage. + +1998-10-06 Ken Raeburn + + * 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 + + * compile/981001-1.c: New test. + * execute/981001-1.c: New test. + +Mon Aug 31 12:00:00 1998 Catherine Moore + + * execute/941014-1.x: New file. + +Wed Aug 26 16:10:00 1997 J"orn Rennecke + + * execute/loop-4b.c: New test. + +Mon Aug 24 14:20:32 1998 Nick Clifton + + * 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 + + * 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 + + * execute/comp-goto-1.c (main): Make main() return an int. + +Thu Jun 18 15:12:30 1998 Michael Meissner + + * execute/980618-{1,2}.c: New tests that showed up m32r bugs. + +Fri Jun 5 21:54:26 1997 J"orn Rennecke + + * execute/980605-1.c: New test. + +Sun May 31 23:23:29 1998 Michael Meissner + + * execute/ieee/mzero2.c: New test to better test IEEE -0 support. + +Wed Apr 8 13:09:15 1998 Jim Wilson + + * execute/980407-1.c: Delete test. Is duplicate of loop-4.c. + +Tue Apr 7 12:01:24 1998 Jim Wilson + + * execute/980407-1.c: New test from Joern Rennecke. + +Fri Apr 3 12:27:49 1998 Jim Wilson + + * compile/980329-1.c: New test. + +Mon Feb 23 15:16:53 1998 Robert Lipe + From Bruno Haible : + * execute/980223.c: New test. + +Fri Feb 6 14:30:48 1998 Jim Wilson + + * execute/980205.c: New test. + +Mon Dec 8 23:55:26 1997 J"orn Rennecke + + * 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 + + * 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 + + * 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 + + * conversion.c (test_float_to_integer): Make double precision tests + dependent on sizeof (double). + +Tue Jun 17 22:11:16 1997 J"orn Rennecke + + * compile/961203-1.cexp: New script. + +Wed Jun 4 03:38:50 1997 J"orn Rennecke + + * execute/ieee/ieee.exp: Set -mieee for SH. + +Thu May 15 14:00:04 1997 Mike Meissner + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * execute/961017-1.c: Add missing exit (0). + +Fri Dec 6 19:38:57 1996 Torbjorn Granlund + + * execute/961206-1.c: New test. + +Wed Nov 13 17:13:05 1996 Torbjorn Granlund + + * execute/loop-2[ef].c: Misc portability changes + (from amylaar@cygnus.co.uk). + +Tue Nov 12 15:00:42 1996 Torbjorn Granlund + + * 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 + + * 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 + + * execute/960311-3.c: #include . + * 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 + + * execute/dbra-1.c: New test. + +Mon Oct 28 02:31:10 1996 Torbjorn Granlund + + * 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 + + * execute/960801-1.c: Generalize. + +Fri Oct 18 04:14:01 1996 Torbjorn Granlund + + * 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 + + * execute/arith-rand.c (main): Decrease the number of iteration to + 1000. + +Fri Oct 11 16:40:44 1996 Torbjorn Granlund + + * compile/961010-1.c: New test (from ian@cygnus.com). + +Fri Oct 4 18:29:00 1996 Torbjorn Granlund + + * 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 + + * execute/fp-cmp-1.c: Move signal handler setup to after == and != + compares. + +Wed Oct 2 04:53:54 1996 Torbjorn Granlund + + * execute/fp-cmp-1.c: New test. + +Mon Sep 30 01:11:06 1996 Torbjorn Granlund + + * compile/960620-1.c: Delete test. + +Fri Sep 13 12:12:30 1996 Ian Lance Taylor + + * execute/ieee/920810-1.c: Include . + +Mon Sep 9 18:56:33 1996 Torbjorn Granlund + + * execute/960909-1.c: New test. + +Fri Aug 30 06:31:25 1996 Torbjorn Granlund + + * execute/960830-1.c: New test. + +Thu Aug 29 22:06:49 1996 Torbjorn Granlund + + * compile/960829-1.c: New test. + +Tue Aug 13 19:23:06 1996 Torbjorn Granlund + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + * execute/960608-1.c: New test (from law@cygnus.com). + +Tue Apr 2 23:18:51 1996 Torbjorn Granlund + + * 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 + + * execute/960327-1.c: New test (from law@cygnus.com). + +Tue Mar 26 22:57:34 1996 Torbjorn Granlund + + * 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 + + * 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 + + * special/doit (960224-1, 960224-2): New tests. + +Wed Feb 21 07:18:19 1996 Torbjorn Granlund + + * 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 + + * 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 + + * execute/960218-1.c: New test. + +Sat Feb 10 03:07:04 1996 Torbjorn Granlund + + * execute/960209-1.c: New test (from law@cygnus.com). + +Wed Jan 24 23:23:05 1996 Torbjorn Granlund + + * 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 + + * noncompile/930714-1.c: Moved from compile. + +Mon Jan 22 19:08:04 1996 Paul Eggert + + * special/doit (920717-1): Make sure `not found' message is ignored + when invoking cc. + +Tue Jan 16 14:24:36 1996 Torbjorn Granlund + + * 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 + + * execute/widechar-1.c: New test (from eggert). + +Tue Jan 9 12:44:21 1996 Torbjorn Granlund + + * compile/960106-1.c: New test. + +Mon Dec 25 19:21:08 1995 Torbjorn Granlund + + * compile/951222-1.c: New test (from kenner). + +Wed Dec 20 14:45:42 1995 Torbjorn Granlund + + * compile/951220-1.c: New test. + +Wed Dec 6 13:46:17 1995 Torbjorn Granlund + + From Alan Modra: + * utils/ctest.c (main): mktemp needs 6 X's on some systems. + +Mon Dec 4 21:39:39 1995 Torbjorn Granlund + + * 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 + + * execute/bf-layout-1.c: New test. + +Wed Nov 22 21:38:25 1995 Torbjorn Granlund + + * noncompile/951123-1.c: New test. + +Wed Nov 16 23:31:23 1995 Torbjorn Granlund + + * compile/951116-1.c: New test. + +Wed Nov 15 20:34:03 1995 Torbjorn Granlund + + * 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 + + * 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 + + * compile/951106-1.c: New test (MIPS3). + +Sun Nov 5 12:22:20 1995 Torbjorn Granlund + + * utils/runtests.c (run_a_test): Don't print exit status for failing + noncompile test. + +Thu Oct 26 00:45:43 1995 Torbjorn Granlund + + * 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 + + * utils/runtests.c (main): Fix typo testing `execute_these_files'. + +Tue Oct 10 17:41:47 1995 Torbjorn Granlund + + * execute/950714-1.c (main): Call exit(0). + + * compile/951004-1.c: New test. + +Tue Oct 3 22:59:13 1995 Torbjorn Granlund + + * 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 + + * 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 + + * 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 + + * utils/runtests.c (set_watchdog): Actually use `seconds' parameter. + +Sat Sep 23 00:08:33 1995 Torbjorn Granlund + + * compile/950922-1.c: New test. + +Thu Sep 21 12:25:40 1995 Torbjorn Granlund + + * 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 + + * execute/920501-7.c (STACK_SIZE): Check for and use to limit + depth of recursion. + +Mon Sep 18 23:43:28 1995 Torbjorn Granlund + + * 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 + + * execute/divconst-3.c: New test. + +Mon Sep 11 12:48:04 1995 Torbjorn Granlund + + * compat/struct-ret-1.c: Add prototype for f. + * compat/strct-layout.c: Conditionalize main. + +Sun Sep 10 20:47:34 1995 Torbjorn Granlund + + * 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 + + * 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 + + * compat/strct-layout.c (main): Add missing call to exit. + +Tue Sep 5 15:23:14 1995 Torbjorn Granlund + + 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 + + * */doit: Add -run 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 + + * execute/950710-1.c: New test (from meyering). + +Wed Jul 5 16:03:45 1995 Torbjorn Granlund + + * 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 + + * 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 + + * execute/cbrt.c: Disable for vax. + +Fri Jun 9 21:49:58 1995 Torbjorn Granlund + + * execute/940115-1.c: Cast parameters to char *. + +Thu Jun 8 00:33:51 1995 Torbjorn Granlund + + * 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 + + * 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 + + * 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(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<= 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;ji->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 + +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 +#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 + +/* 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 +#include + +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 + +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 + +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 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 +#include + +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 +#include +#include + +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 + +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=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 +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 + +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 + +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 + +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 + +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 + +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 + +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 + +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 +#include + +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 + +#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 + +#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 + +#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 +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 + +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 + +__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 + +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 + +#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 + +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 +#include +#include + +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 + +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 + +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 */ + +/* 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 + +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 + +#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 + +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 +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 + +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 + +f(m) +{ + int i,s=0; + for(i=0;i + +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 + +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 + +#ifdef __unix__ /* ??? Is that good enough? */ +#include +#include +#include +#include +#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 + +#ifdef __unix__ /* ??? Is that good enough? */ +#include +#include +#include +#include +#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 + +#ifdef __unix__ /* ??? Is that good enough? */ +#include +#include +#include +#include +#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 + +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 + +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 + +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, "", 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 + +#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 + +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 + +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 +#define va_alist int x_attr, ... +#define va_dcl +#else +#include +#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 +#include + +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 + +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 + +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 + +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 + +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 + +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 + +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 +#include +#include + +/* 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 +#include +#include + +/* 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 +#include +#include + +/* 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 +#include +#include + +/* 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 +#include +#include + +/* 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;svalid==0x0){l1_base= +mmu_base[Level1(va)]->(u.p_tablep)=p_alloc();mmu_base[Level1(va)]->valid= +0x3;for(idx=0;idxvalid=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;idxvalid=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 + +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 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 + +#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 + +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 + +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 */ + +/* { 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 + +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 + +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 + +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 + +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 + +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 + +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 +#include +*/ /* 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 + /* 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/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 +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 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 class latin_america; + +class peru +{ + friend class latin_america; // Particular template class friend works + template 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 + 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; 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 +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 + +int main() { + cout<<"hi"< + +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 + +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 &) +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 + +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(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 +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 + + +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 + +#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 +struct X_tem { + T rank; + X_tem(T init = T(64) ) : rank(init) { } + ~X_tem() { ++counter; } + typedef X_tem classtype_tem; +}; +typedef X_tem 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 xto1 ; + X_tem *pxt = &xto1; + pxt->~X_tem(); //unqualified + + typedef X_tem 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 xto3 (68); + pxt = &xto3; + pxt->~classtype_tem(); + + X_tem xto4 (70); + pxt = &xto4; + pxt->~globaltype_tem(); + + // + // templatized, non-pointer + // + X_tem xto5 ; + xto5.~X_tem(); //unqualified + + localtype_tem xto6 (66); + xto6.~localtype_tem(); + + X_tem xto7 (68); + xto7.~classtype_tem(); + + X_tem 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 +class ref_counter { +public: + ref_counter() : p_refcnt(new unsigned int(N)) {} + ref_counter(const ref_counter& x) : p_refcnt(x.p_refcnt) { + ++*p_refcnt; + } + ref_counter& operator=(const ref_counter& 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 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& 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& lhs, + const ref_pointer& rhs) { + return lhs.the_p == rhs.the_p; + } + friend bool operator!=(const ref_pointer& lhs, + const ref_pointer& 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& refCount() {return ref_count;} + +private: + + ref_counter ref_count; + T* the_p; +}; + +template +ref_pointer& ref_pointer::operator=(const ref_pointer& 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 +ref_pointer& ref_pointer::operator=(T* just_newed) { + if (unique()) delete the_p; + the_p = just_newed; + ref_count = ref_counter(); + return *this; +} + + + +template +class CountedObjPtr : public ref_pointer { +public: + CountedObjPtr() {} + CountedObjPtr(T* just_newed) : ref_pointer(just_newed) {} + CountedObjPtr(T* the_p_arg, ref_counter<1>& ref_count_arg) + : ref_pointer(the_p_arg, ref_count_arg) {} + CountedObjPtr& operator=(T* rhs) { + ref_pointer::operator=(rhs); + return *this; + } + CountedObjPtr& operator=(const CountedObjPtr& rhs) { + ref_pointer::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; 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 struct char_traits; +template struct char_traits { }; +template<> struct char_traits; +template<> struct char_traits { }; + +template > class istreambuf_iterator; + + +template + class istreambuf_iterator +{ + public: + typedef _Traits traits_type; + class _Proxy; + public: + inline istreambuf_iterator() throw(); + inline istreambuf_iterator(const _Proxy& __p) throw(); +}; + + +template + 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 friend class istreambuf_iterator; + + //ok -g++ + //ok -edg + //friend class istreambuf_iterator<_CharT>; + +}; + + + +//explicit instantiation of a nested class +template class istreambuf_iterator >::_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 // 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 friend bool isequal (Xone& lhs, Xone& rhs); + // this is not ok: + template friend bool isequal (Xone& lhs, Xone& rhs);// ERROR - .* +}; + + +// 02 +// nested template class +template // 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 nested {// ERROR - .* + T6 value; + public: + nested(): value( T6(0)) {} + }; +}; + + +// 03 +// member templates +template // ERROR - .* +class Xthree { +protected: + T8* next; + T8* prev; + T8 value; +public: + Xthree(): next(0), prev(0), value(1999){} + Xthree(T8 init): value(init) {} + + template 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 struct Xfour {// ERROR - .* + int T10; // ERROR - .* + void f(){ + char T10; + } +}; + + +// 05 +// using different tempate-parms for out-of-line defs +template struct Xfive { + void f(); +}; + +template void Xfive::f() {// ERROR - .* + int T13; // ERROR - .* + int T12; //should be ok +} + + +// 06 +// multiple names at the same level +template class Xsix { // ERROR - .* +private: +public: + void f(); +}; + + +// 07 +// multiple names, one in template parameter one in class-name +template class T12; // ERROR - .* + + +// 08 +// with multiple template params, and second (third) one is redeclared +template class Xseven { // ERROR - .* +private: + char T161; // ERROR - .* +public: + template + friend bool fooy(U u); + + template + friend bool foo(T161 u) + { + Xseven obj; + return (obj.inst == u.inst); + } + +}; + + +// 09 +// check for correct scoping of member templates +template +struct S1 +{ + template + void f(U u) + { + S1 s2u(u); + s2u.g(); + } + + template //ok + void f2(U u) + { + S1 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 Xten {// ERROR - .* + float i; // ERROR - .* +}; + + +// 11 +// declared friend template, non-type parameters +template // ERROR - .* +class Xeleven { +public: + template friend bool isequal (Xeleven<5> lhs, Xeleven<5> rhs); // ERROR - .* +}; + + + +// 12 +// nested template class, non-type parameters +template // ERROR - .* +class Xtwelve { +public: + template class nested {// ERROR - . + long value; + public: + nested(): value(0) {} + }; +}; + + +// 13 +// member templates, non-type parameters +template // ERROR - .* +struct Xthirteen { + template 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 // ERROR - .* +class Xfourteen { +protected: + T4 value; +public: + Xfourteen(T4 init): value(init) {} + template