From e4c17a382593714e42171d99d8963f691c3f18b7 Mon Sep 17 00:00:00 2001 From: Joerg Koenig Date: Wed, 8 Nov 2017 12:14:38 +0100 Subject: Switched to working gcc 2.95.4 and binutils 2.10.1; Only 32-Bit Compiler supported Change-Id: I22a948e77bab02451539a1f5a280420e5e71a8ee --- Makefile | 80 +- Makefile.7.2 | 116 - SOURCES/binutils-2.29.tar.bz2 | Bin 29073316 -> 0 bytes SOURCES/bison-1.28.tar.gz | Bin 0 -> 420341 bytes SOURCES/fdmatch.patch | 11 + SOURCES/gcc-2.95.3.tar.gz | Bin 0 -> 12911721 bytes SOURCES/gcc-3.0.4.tar.gz | Bin 18435440 -> 0 bytes SOURCES/gcc-7.2.0.tar.gz | Bin 111997123 -> 0 bytes SOURCES/gcc2.95.3-2.95.4vxw55.patch | 179363 +++++++++++++++++++++++++ SOURCES/gcc304.patch | 164 - SOURCES/gcc304.patch.2 | 16 - SOURCES/gcc304.patch.3 | 11 - SOURCES/gcc72-vxworks.patch | 43 - SOURCES/gcc72-vxworks55-config.patch | 11 - SOURCES/gcc72-vxworks55-libgcc-config.patch | 11 - SOURCES/gmp-6.1.2.tar.gz | Bin 3208236 -> 0 bytes SOURCES/isl-0.18.tar.bz2 | Bin 1658291 -> 0 bytes SOURCES/mpc-1.0.3.tar.gz | Bin 669925 -> 0 bytes SOURCES/mpfr-3.1.6.tar.bz2 | Bin 1287202 -> 0 bytes SOURCES/sed-3.02.tar.gz | Bin 0 -> 264236 bytes SOURCES/vx-ppc-gcc.2.95.3.diff | 25289 ---- 21 files changed, 179434 insertions(+), 25681 deletions(-) delete mode 100644 Makefile.7.2 delete mode 100644 SOURCES/binutils-2.29.tar.bz2 create mode 100644 SOURCES/bison-1.28.tar.gz create mode 100644 SOURCES/fdmatch.patch create mode 100644 SOURCES/gcc-2.95.3.tar.gz delete mode 100644 SOURCES/gcc-3.0.4.tar.gz delete mode 100644 SOURCES/gcc-7.2.0.tar.gz create mode 100644 SOURCES/gcc2.95.3-2.95.4vxw55.patch delete mode 100644 SOURCES/gcc304.patch delete mode 100644 SOURCES/gcc304.patch.2 delete mode 100644 SOURCES/gcc304.patch.3 delete mode 100644 SOURCES/gcc72-vxworks.patch delete mode 100644 SOURCES/gcc72-vxworks55-config.patch delete mode 100644 SOURCES/gcc72-vxworks55-libgcc-config.patch delete mode 100644 SOURCES/gmp-6.1.2.tar.gz delete mode 100644 SOURCES/isl-0.18.tar.bz2 delete mode 100644 SOURCES/mpc-1.0.3.tar.gz delete mode 100644 SOURCES/mpfr-3.1.6.tar.bz2 create mode 100644 SOURCES/sed-3.02.tar.gz delete mode 100755 SOURCES/vx-ppc-gcc.2.95.3.diff diff --git a/Makefile b/Makefile index df574ca..960769d 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,14 @@ +####################################################################### +# +# Makefile to build a linux hosted PPC cross compiler for +# PPC vxWorks 5.5.1 / Tornado 2.2.1 +# +# Note: +# To build the toolchain on newer linux systems, +# we need to temporary install 'sed' and 'bison' to be +# compatible for gcc configure and make scripts. +# +####################################################################### CWD = $(shell readlink -f .) ifeq ($(BUILD_NUMBER),) @@ -15,10 +26,10 @@ HOST=i686-pc-linux-gnu GCC_TARGET=powerpc-wrs-vxworks55 MASCH=$(shell uname -m) INSTDIR=$(CWD)/inst/crossppc -GCC_VERSION=3.0.4 -LANGUAGES=c -PACKAGE=$(CWD)/vxw55-crossppc-$(GCC_VERSION)-$(BUILD_NO)-$(HOST).tar.gz - +GCC_VERSION=2.95.3 +GCC_TARGET_VERSION=2.95.4 +LANGUAGES=c,c++ +PACKAGE=$(CWD)/vxw55-crossppc-$(GCC_TARGET_VERSION)-$(BUILD_NO)-$(HOST).tar.gz ifeq ($(WIND_BASE),) $(error WIND_BASE not specified ) @@ -27,38 +38,63 @@ endif JOBS=-j4 -all: prepare binutils xgcc pack clean +all: prepare mktools binutils xgcc uninsttools pack clean prepare: mkdir -p $(BUILDDIR) mkdir -p $(INSTDIR) rm -Rf $(CWD)/unpacked - mkdir -p $(CWD)/unpacked + mkdir -p $(CWD)/unpacked/sys-includes + cp -Rvf $(WIND_BASE)/target/h/* $(CWD)/unpacked/sys-includes + cd $(CWD)/unpacked/sys-includes/sys && \ + patch -p0 < $(SRCDIR)/fdmatch.patch cd $(CWD)/unpacked && \ - tar -zxf $(SRCDIR)/gcc-$(GCC_VERSION).tar.gz - cd $(CWD)/unpacked/gcc-$(GCC_VERSION) && \ - patch -p1 < $(SRCDIR)/gcc304.patch - cd $(CWD)/unpacked/gcc-$(GCC_VERSION) && \ - patch -p2 < $(SRCDIR)/gcc304.patch.2 + tar -zxf $(SRCDIR)/gcc-2.95.3.tar.gz cd $(CWD)/unpacked/gcc-$(GCC_VERSION) && \ - patch -p1 < $(SRCDIR)/gcc304.patch.3 + patch -p1 < $(SRCDIR)/gcc2.95.3-2.95.4vxw55.patch + cd $(CWD)/unpacked && \ + tar -zxf $(SRCDIR)/sed-3.02.tar.gz + cd $(CWD)/unpacked && \ + tar -zxf $(SRCDIR)/bison-1.28.tar.gz cd $(CWD)/unpacked && \ tar -zxf $(SRCDIR)/binutils-2.10.1.tar.gz cd $(CWD)/unpacked/binutils-* && \ patch -p1 < $(SRCDIR)/vx-ppc-binutils-2.10.diff +mktools: + cd $(CWD)/unpacked/sed-* && \ + CC="gcc -m32 -std=gnu89" \ + CXX="g++ -m32" \ + ./configure --prefix=$(INSTDIR) && \ + make && make install + cd $(CWD)/unpacked/bison-* && \ + CC="gcc -m32 -std=gnu89" \ + CXX="g++ -m32" \ + ./configure --prefix=$(INSTDIR) && \ + make && make install + +uninsttools: + cd $(CWD)/unpacked/sed-* && \ + make uninstall + cd $(CWD)/unpacked/bison-* && \ + make uninstall + binutils: rm -Rf $(BUILDDIR)/binutils mkdir -p $(BUILDDIR)/binutils cd $(BUILDDIR)/binutils && \ - CFLAGS="-m32" LDFLAGS="-m32" \ + export PATH=$(INSTDIR)/bin:$(PATH) && \ + CC="gcc -m32 -std=gnu89" \ + CXX="g++ -m32" \ + HOST_LD_FLAGS="-m32" \ $(CWD)/unpacked/binutils-2.10.1/configure \ - --build=$(HOST) \ - --host=$(HOST) \ - --prefix=$(INSTDIR) \ - --target=$(GCC_TARGET) \ - --with-headers=$(WIND_BASE)/target/h \ + --build=$(HOST) \ + --host=$(HOST) \ + --prefix=$(INSTDIR) \ + --target=$(GCC_TARGET) \ + --with-headers=$(CWD)/unpacked/sys-includes \ --with-libs=$(WIND_BASE)/target/lib cd $(BUILDDIR)/binutils && \ + export PATH=$(INSTDIR)/bin:$(PATH) && \ make $(JOBS) && \ make install @@ -69,13 +105,17 @@ xgcc: export WIND_BASE=$(WIND_BASE) && \ export WIND_USR=$(WIND_USR) && \ export PATH=$(INSTDIR)/bin:$(PATH) && \ - CC="gcc -m32" CXX="g++ -m32" HOST_CXXFLAGS="-m32" HOST_CFLAGS="-m32" HOST_LD_FLAGS="-m32" \ + export YACC="$(INSTDIR)/bin/bison -y" && \ + bison --version && \ + CC="gcc -m32 -std=gnu89" \ + CXX="g++ -m32" \ + HOST_LD_FLAGS="-m32" \ $(CWD)/unpacked/gcc-$(GCC_VERSION)/configure \ --build=$(HOST) \ --host=$(HOST) \ --prefix=$(INSTDIR) \ --target=$(GCC_TARGET) \ - --with-headers=$(WIND_BASE)/target/h \ + --with-headers=$(CWD)/unpacked/sys-includes \ --with-libs=$(WIND_BASE)/target/lib \ --enable-languages="$(LANGUAGES)" \ --disable-multilib \ diff --git a/Makefile.7.2 b/Makefile.7.2 deleted file mode 100644 index 511b8fb..0000000 --- a/Makefile.7.2 +++ /dev/null @@ -1,116 +0,0 @@ -CWD = $(shell readlink -f .) - -ifeq ($(BUILD_NUMBER),) -BUILD_NO=unoffical -else -BUILD_NO=$(BUILD_NUMBER) -endif - -VERSION=0.4.1 -SRCDIR=$(CWD)/SOURCES -BUILDDIR=$(CWD)/build -WIND_USR=$(WIND_BASE)/target -GCC_TARGET=powerpc-wrs-vxworks55 -MASCH=$(shell uname -m) -GCC_VERSION=7.2.0 -HOST=$(MASCH)-pc-linux-gnu -GCC_PKGVERSION="TechSAT VxWorks 5.5/Tornado 2.2.1 Cross-Toolchain [Build $(BUILD_NO)] $(MASCH) v$(VERSION)" -INSTDIR=$(CWD)/inst/$(MASCH)/crossppc -PACKAGE=$(CWD)/vxw55-crossppc-$(GCC_VERSION)-$(BUILD_NO)-$(HOST).tar.gz - - -ifeq ($(WIND_BASE),) -$(error WIND_BASE not specified ) -endif - -JOBS=-j4 - -all: prepare binutils xgcc pack clean - -prepare: - mkdir -p $(BUILDDIR) - mkdir -p $(INSTDIR) - rm -Rf $(CWD)/unpacked - mkdir -p $(CWD)/unpacked - cd $(CWD)/unpacked && \ - tar -zxf $(SRCDIR)/gcc-$(GCC_VERSION).tar.gz - cd $(CWD)/unpacked/gcc-$(GCC_VERSION) && \ - patch -p1 < $(SRCDIR)/gcc72-vxworks.patch - cd $(CWD)/unpacked/gcc-$(GCC_VERSION) && \ - patch -p1 < $(SRCDIR)/gcc72-vxworks55-config.patch - cd $(CWD)/unpacked/gcc-$(GCC_VERSION) && \ - patch -p1 < $(SRCDIR)/gcc72-vxworks55-libgcc-config.patch - cd $(CWD)/unpacked && \ - tar -zxf $(SRCDIR)/gmp-6.1.2.tar.gz - cd $(CWD)/unpacked && \ - tar -jxf $(SRCDIR)/binutils-2.29.tar.bz2 - cd $(CWD)/unpacked && \ - tar -jxf $(SRCDIR)/isl-0.18.tar.bz2 - cd $(CWD)/unpacked && \ - tar -zxf $(SRCDIR)/mpc-1.0.3.tar.gz - cd $(CWD)/unpacked && \ - tar -jxf $(SRCDIR)/mpfr-3.1.6.tar.bz2 - mv $(CWD)/unpacked/gmp-6.1.2 $(CWD)/unpacked/gcc-$(GCC_VERSION)/gmp - mv $(CWD)/unpacked/isl-0.18 $(CWD)/unpacked/gcc-$(GCC_VERSION)/isl - mv $(CWD)/unpacked/mpc-1.0.3 $(CWD)/unpacked/gcc-$(GCC_VERSION)/mpc - mv $(CWD)/unpacked/mpfr-3.1.6 $(CWD)/unpacked/gcc-$(GCC_VERSION)/mpfr - -binutils: - rm -Rf $(BUILDDIR)/binutils - mkdir -p $(BUILDDIR)/binutils - cd $(BUILDDIR)/binutils && \ - $(CWD)/unpacked/binutils-2.29/configure \ - --with-pkgversion=$(GCC_PKGVERSION) \ - --prefix=$(INSTDIR) \ - --host=$(HOST) \ - --build=$(HOST) \ - --target=$(GCC_TARGET) \ - --with-headers=$(WIND_BASE)/target/h \ - --with-libs=$(WIND_BASE)/target/lib - cd $(BUILDDIR)/binutils && \ - make $(JOBS) && \ - make install-strip - -xgcc: - rm -Rf $(BUILDDIR)/gcc - mkdir -p $(BUILDDIR)/gcc - cd $(BUILDDIR)/gcc && \ - export WIND_BASE=$(WIND_BASE) && \ - export WIND_USR=$(WIND_USR) && \ - export PATH=$(INSTDIR)/bin:$(PATH) && \ - LDFLAGS="-static-libgcc -static-libstdc++" \ - $(CWD)/unpacked/gcc-$(GCC_VERSION)/configure \ - --with-pkgversion=$(GCC_PKGVERSION) \ - --prefix=$(INSTDIR) \ - --host=$(HOST) \ - --build=$(HOST) \ - --target=$(GCC_TARGET) \ - --with-headers=$(WIND_BASE)/target/h \ - --with-libs=$(WIND_BASE)/target/lib \ - --disable-plugin \ - --enable-languages="c,c++" \ - --disable-multilib \ - --with-endian=big \ - --with-gnu-as \ - --with-gnu-ld \ - --enable-threads=vxworks - cd $(BUILDDIR)/gcc && \ - export WIND_BASE=$(WIND_BASE) && \ - export WIND_USR=$(WIND_USR) && \ - export PATH=$(INSTDIR)/bin:$(PATH) && \ - make $(JOBS) && \ - make install-strip - rm -Rf $(INSTDIR)/$(GCC_TARGET)/sys-include - rm -f $(INSTDIR)/bin/powerpc-wrs-vxworks55-gccbug - strip $(INSTDIR)/bin/$(GCC_TARGET)-* - -pack: - cd $(INSTDIR) && \ - tar -zcf $(PACKAGE) . - -clean: - rm -Rf $(BUILDDIR) - rm -Rf $(CWD)/unpacked - rm -Rf $(CWD)/inst - - diff --git a/SOURCES/binutils-2.29.tar.bz2 b/SOURCES/binutils-2.29.tar.bz2 deleted file mode 100644 index 6194a45..0000000 Binary files a/SOURCES/binutils-2.29.tar.bz2 and /dev/null differ diff --git a/SOURCES/bison-1.28.tar.gz b/SOURCES/bison-1.28.tar.gz new file mode 100644 index 0000000..75931d5 Binary files /dev/null and b/SOURCES/bison-1.28.tar.gz differ diff --git a/SOURCES/fdmatch.patch b/SOURCES/fdmatch.patch new file mode 100644 index 0000000..f7effb4 --- /dev/null +++ b/SOURCES/fdmatch.patch @@ -0,0 +1,11 @@ +--- stat.h.orig 2017-11-08 08:25:07.392031236 +0100 ++++ stat.h 2017-11-08 08:25:35.263933686 +0100 +@@ -32,6 +32,8 @@ + extern "C" { + #endif + ++#include ++ + #if ((CPU_FAMILY==I960) && (defined __GNUC__)) + #pragma align 1 /* tell gcc960 not to optimize alignments */ + #endif /* CPU_FAMILY==I960 */ diff --git a/SOURCES/gcc-2.95.3.tar.gz b/SOURCES/gcc-2.95.3.tar.gz new file mode 100644 index 0000000..5ef3366 Binary files /dev/null and b/SOURCES/gcc-2.95.3.tar.gz differ diff --git a/SOURCES/gcc-3.0.4.tar.gz b/SOURCES/gcc-3.0.4.tar.gz deleted file mode 100644 index c184ea4..0000000 Binary files a/SOURCES/gcc-3.0.4.tar.gz and /dev/null differ diff --git a/SOURCES/gcc-7.2.0.tar.gz b/SOURCES/gcc-7.2.0.tar.gz deleted file mode 100644 index 0b9824d..0000000 Binary files a/SOURCES/gcc-7.2.0.tar.gz and /dev/null differ diff --git a/SOURCES/gcc2.95.3-2.95.4vxw55.patch b/SOURCES/gcc2.95.3-2.95.4vxw55.patch new file mode 100644 index 0000000..2378298 --- /dev/null +++ b/SOURCES/gcc2.95.3-2.95.4vxw55.patch @@ -0,0 +1,179363 @@ +diff -ruNb gcc-2.95.3/.brik gcc-2.95.4/.brik +--- gcc-2.95.3/.brik 2001-03-16 15:15:43.000000000 +0100 ++++ gcc-2.95.4/.brik 1970-01-01 01:00:00.000000000 +0100 +@@ -1,2781 +0,0 @@ +-# Whole file CRCs generated by Brik v2.0. Use "brik -C" to verify them. +- +-# CRC-32 filename +-# ------ -------- +- +- 40745673b ./ChangeLog +-2773723724b ./config/ChangeLog +-4130389924b ./config.guess +-2969147338b ./config.if +-3007349820b ./config/mh-a68bsd +-1442196770b ./config/mh-aix386 +-4076175188b ./config/mh-aix43 +-3054121875b ./config/mh-apollo68 +-3478341494b ./config/mh-armpic +-1811916229b ./config/mh-cxux +-3020282061b ./config/mh-cygwin +-2180612469b ./config/mh-decstation +- 973727842b ./config/mh-delta88 +-2133351807b ./config/mh-dgux +- 746894734b ./config/mh-dgux386 +-4215267871b ./config/mh-djgpp +-3478341494b ./config/mh-elfalphapic +- 41994544b ./config/mh-hp300 +- 318860404b ./config/mh-hpux +- 318860404b ./config/mh-hpux8 +-2339341800b ./config/mh-interix +-3277888801b ./config/mh-irix4 +-1357357208b ./config/mh-irix5 +-1330768880b ./config/mh-irix6 +-2624861245b ./config/mh-lynxos +-1194372982b ./config/mh-lynxrs6k +-3265825290b ./config/mh-m68kpic +-1904254329b ./config/mh-mingw32 +-3317263548b ./config/mh-ncr3000 +-2638893829b ./config/mh-ncrsvr43 +-4287527672b ./config/mh-necv4 +-3478341494b ./config/mh-papic +-3478341494b ./config/mh-ppcpic +- 136062744b ./config/mh-riscos +- 407821128b ./config/mh-sco +-2015316329b ./config/mh-solaris +- 203083803b ./config/mh-sparcpic +- 889431517b ./config/mh-sun3 +-1253937510b ./config/mh-sysv +-3104599531b ./config/mh-sysv4 +-2519884023b ./config/mh-sysv5 +- 456622165b ./config/mh-vaxult2 +-3265825290b ./config/mh-x86pic +-3703830219b ./config-ml.in +-2763692045b ./config/mpw/ChangeLog +-4005879853b ./config/mpw/forward-include +- 439409833b ./config/mpw/g-mpw-make.sed +- 198559626b ./config/mpw-mh-mpw +-3145098931b ./config/mpw/MoveIfChange +-2800114792b ./config/mpw/mpw-touch +-3832565257b ./config/mpw/mpw-true +- 792347706b ./config/mpw/null-command +-3439853311b ./config/mpw/open-brace +-1476422091b ./config/mpw/README +- 779160003b ./config/mpw/tr-7to8-src +-3832565257b ./config/mpw/true +- 536974328b ./config/mt-armpic +- 536974328b ./config/mt-elfalphapic +- 690722699b ./config/mt-linux +- 771382916b ./config/mt-m68kpic +-2548851201b ./config/mt-netware +- 971016637b ./config/mt-ospace +- 536974328b ./config/mt-papic +- 536974328b ./config/mt-ppcpic +- 828136936b ./config/mt-sparcpic +- 787786243b ./config/mt-v810 +- 771382916b ./config/mt-x86pic +- 372693157b ./config.sub +- 753136214b ./configure +-1212521209b ./configure.in +-2741109168b ./contrib/ChangeLog +- 550196746b ./contrib/compare_tests +-3828788345b ./contrib/egcs_update +-1060321676b ./contrib/gperf-2.7-19981006.pat +- 904867939b ./contrib/index-prop +-3040114942b ./contrib/test_installed +-3207566234b ./contrib/test_summary +-1176279968b ./contrib/warn_summary +- 430871781b ./COPYING +-2637011133b ./COPYING.LIB +-4237809446b ./.cvsignore +-1599808887b ./etc/aclocal.m4 +-1997310358b ./etc/ChangeLog +-2024299803b ./etc/configure +- 597781507b ./etc/configure.in +-4027299794b ./etc/Makefile.in +-1601906984b ./etc/make-stds.texi +-1110151395b ./etc/standards.texi +-2012678829b ./FAQ +-3959848447b ./faq.html +-2163082026b ./gcc/ABOUT-GCC-NLS +-1014730298b ./gcc/ABOUT-NLS +-2199018716b ./gcc/acconfig.h +-4190083916b ./gcc/aclocal.m4 +-3617713225b ./gcc/alias.c +-4179046188b ./gcc/assert.h +-3227020286b ./gcc/basic-block.h +-2897689365b ./gcc/bitmap.c +-1092830340b ./gcc/bitmap.h +-1471330941b ./gcc/BUGS +-3514329314b ./gcc/build-make +-1297227555b ./gcc/caller-save.c +-1105896127b ./gcc/calls.c +-2833192624b ./gcc/c-aux-info.c +-1031499251b ./gcc/cccp.1 +-3931978756b ./gcc/cccp.c +-1769823897b ./gcc/c-common.c +-3351004599b ./gcc/c-convert.c +-3097530966b ./gcc/c-decl.c +-2374568197b ./gcc/cexp.c +-1259037984b ./gcc/cexp.y +-3172609301b ./gcc/c-gperf.h +- 72814584b ./gcc/ch/actions.c +-3268996754b ./gcc/ch/actions.h +-1489002859b ./gcc/ChangeLog +-1908191848b ./gcc/ChangeLog.0 +-1942935930b ./gcc/ChangeLog.lib +-3896853117b ./gcc/ch/ChangeLog +-2055591891b ./gcc/ch/chill.brochure +- 262452143b ./gcc/ch/chill.in +-1068085425b ./gcc/ch/chill.texi +-1266350782b ./gcc/ch/ch-tree.def +-3431963368b ./gcc/ch/ch-tree.h +- 666006412b ./gcc/ch/config-lang.in +-3382766792b ./gcc/ch/configure +-1217043291b ./gcc/ch/convert.c +- 780342204b ./gcc/ch/decl.c +-2380641592b ./gcc/ch/except.c +- 797109334b ./gcc/ch/expr.c +-3658339269b ./gcc/ch/gperf +-1763938881b ./gcc/ch/grant.c +-1554207802b ./gcc/ch/hash.h +- 455841629b ./gcc/ch/inout.c +- 916936107b ./gcc/ch/lang.c +-2818159896b ./gcc/ch/lang-options.h +-3676798508b ./gcc/ch/lang-specs.h +- 607676058b ./gcc/ch/lex.c +- 56655465b ./gcc/ch/lex.h +-4068433180b ./gcc/ch/loop.c +-3840952328b ./gcc/ch/Makefile.in +-3668056982b ./gcc/ch/Make-lang.in +-1502935023b ./gcc/ch/nloop.c +- 729034310b ./gcc/ch/parse.c +- 634606057b ./gcc/ch/parse.h +- 860743420b ./gcc/ch/README +-1720320140b ./gcc/ch/satisfy.c +-1539445801b ./gcc/ch/tasking.c +-2604102496b ./gcc/ch/tasking.h +-4069785574b ./gcc/ch/timing.c +- 272436253b ./gcc/ch/tree.c +-2688980962b ./gcc/ch/typeck.c +-4020668406b ./gcc/ch/xtypeck.c +-3829210531b ./gcc/c-iterate.c +-1221346333b ./gcc/c-lang.c +-4038532167b ./gcc/c-lex.c +-1368444824b ./gcc/c-lex.h +-1724648154b ./gcc/collect2.c +-1699818163b ./gcc/collect2.h +- 495045693b ./gcc/combine.c +-1434596660b ./gcc/conditions.h +-4106504689b ./gcc/config/1750a/1750a.c +-3234129706b ./gcc/config/1750a/1750a.h +-3095377682b ./gcc/config/1750a/1750a.md +-2477730384b ./gcc/config/1750a/ms1750.inc +-1693851368b ./gcc/config/1750a/xm-1750a.h +-3821624618b ./gcc/config/a29k/a29k.c +-4174995942b ./gcc/config/a29k/a29k.h +-3852750578b ./gcc/config/a29k/a29k.md +-2307933459b ./gcc/config/a29k/t-a29k +-3566307489b ./gcc/config/a29k/t-a29kbare +-3165685760b ./gcc/config/a29k/t-vx29k +-2502433193b ./gcc/config/a29k/udi.h +-2011164678b ./gcc/config/a29k/unix.h +-1666542577b ./gcc/config/a29k/vx29k.h +-2996218177b ./gcc/config/a29k/xm-a29k.h +-2472430666b ./gcc/config/a29k/xm-unix.h +- 144752292b ./gcc/config/a29k/x-unix +- 193538505b ./gcc/config/alpha/alpha32.h +-1514879972b ./gcc/config/alpha/alpha.c +-3100261546b ./gcc/config/alpha/alpha.h +-3742075344b ./gcc/config/alpha/alpha-interix.h +- 754462921b ./gcc/config/alpha/alpha.md +- 795597665b ./gcc/config/alpha/config-nt.sed +-3567833533b ./gcc/config/alpha/crtbegin.asm +-1312076907b ./gcc/config/alpha/crtend.asm +-3042700248b ./gcc/config/alpha/elf.h +-2715664516b ./gcc/config/alpha/lib1funcs.asm +-1763018017b ./gcc/config/alpha/linux-ecoff.h +-3273041531b ./gcc/config/alpha/linux-elf.h +- 812092393b ./gcc/config/alpha/linux.h +-3777698255b ./gcc/config/alpha/netbsd-elf.h +- 5367058b ./gcc/config/alpha/netbsd.h +-4065475375b ./gcc/config/alpha/openbsd.h +-1792826440b ./gcc/config/alpha/osf12.h +-1928873630b ./gcc/config/alpha/osf2or3.h +-1470207174b ./gcc/config/alpha/osf.h +-2118184540b ./gcc/config/alpha/t-crtbe +-3128522514b ./gcc/config/alpha/t-ieee +-3927015616b ./gcc/config/alpha/t-interix +-1500154793b ./gcc/config/alpha/t-vms +-3660437230b ./gcc/config/alpha/va_list.h +-4010999121b ./gcc/config/alpha/vms.h +-1402142372b ./gcc/config/alpha/vms-tramp.asm +-1904467114b ./gcc/config/alpha/vxworks.h +-2487176671b ./gcc/config/alpha/win-nt.h +-1758618093b ./gcc/config/alpha/x-alpha +-2339893992b ./gcc/config/alpha/xm-alpha.h +-4139273463b ./gcc/config/alpha/xm-alpha-interix.h +-2208381303b ./gcc/config/alpha/xm-openbsd.h +-2295823330b ./gcc/config/alpha/xm-vms.h +- 822385833b ./gcc/config/alpha/xm-winnt.h +- 662120966b ./gcc/config/aoutos.h +-2898703135b ./gcc/config/arc/arc.c +-3275327813b ./gcc/config/arc/arc.h +-4242839641b ./gcc/config/arc/arc.md +- 631838986b ./gcc/config/arc/initfini.c +-3301435163b ./gcc/config/arc/lib1funcs.asm +-2984223315b ./gcc/config/arc/t-arc +- 819474010b ./gcc/config/arc/xm-arc.h +-1005732185b ./gcc/config/arm/aof.h +-2774813096b ./gcc/config/arm/aout.h +-2860349734b ./gcc/config/arm/arm.c +-2608240560b ./gcc/config/arm/arm.h +-4087133611b ./gcc/config/arm/arm.md +-2488881798b ./gcc/config/arm/coff.h +-1087283327b ./gcc/config/arm/ecos-elf.h +-3886798812b ./gcc/config/arm/elf.h +- 951700778b ./gcc/config/arm/lib1funcs.asm +- 184992847b ./gcc/config/arm/lib1thumb.asm +-1327962964b ./gcc/config/arm/linux-aout.h +-3689484926b ./gcc/config/arm/linux-elf26.h +-1081224307b ./gcc/config/arm/linux-elf.h +-1629076541b ./gcc/config/arm/linux-gas.h +-1687883437b ./gcc/config/arm/linux-oldld.h +- 309925977b ./gcc/config/arm/netbsd.h +-2885119589b ./gcc/config/arm/README-interworking +-2714546048b ./gcc/config/arm/riscix1-1.h +-2757393750b ./gcc/config/arm/riscix.h +-1910088041b ./gcc/config/arm/rix-gas.h +- 211210124b ./gcc/config/arm/semiaof.h +-3032000292b ./gcc/config/arm/semi.h +-2293704459b ./gcc/config/arm/t-arm-elf +- 378848060b ./gcc/config/arm/t-bare +- 63378260b ./gcc/config/arm/tcoff.h +- 271105747b ./gcc/config/arm/thumb.c +-2006315119b ./gcc/config/arm/thumb.h +-3116482299b ./gcc/config/arm/thumb.md +-3774122170b ./gcc/config/arm/t-linux +-2612005796b ./gcc/config/arm/t-netbsd +-3806050362b ./gcc/config/arm/t-pe +-1885831441b ./gcc/config/arm/t-riscix +- 106908213b ./gcc/config/arm/t-semi +-2293966688b ./gcc/config/arm/t-semiaof +- 252266176b ./gcc/config/arm/t-thumb +-3966028695b ./gcc/config/arm/unknown-elf.h +-3578020456b ./gcc/config/arm/unknown-elf-oabi.h +-1413665446b ./gcc/config/arm/vxarm.h +- 125476982b ./gcc/config/arm/xm-arm.h +-1599844562b ./gcc/config/arm/xm-linux.h +- 639443881b ./gcc/config/arm/xm-netbsd.h +-1103633380b ./gcc/config/arm/xm-thumb.h +-2097180198b ./gcc/config/arm/x-riscix +-1681095721b ./gcc/config/c4x/c4x.c +-2648849385b ./gcc/config/c4x/c4x.h +- 814641753b ./gcc/config/c4x/c4x.md +-2962364141b ./gcc/config/c4x/libgcc.S +-1295106107b ./gcc/config/c4x/t-c4x +-1038140439b ./gcc/config/c4x/xm-c4x.h +-3174983832b ./gcc/config/clipper/clipper.c +-2640842176b ./gcc/config/clipper/clipper.h +-1853885182b ./gcc/config/clipper/clipper.md +-2762198740b ./gcc/config/clipper/clix.h +-4019777817b ./gcc/config/clipper/x-clix +-2301931530b ./gcc/config/clipper/xm-clix.h +- 584983496b ./gcc/config/convex/convex.c +-3987576977b ./gcc/config/convex/convex.h +- 232165835b ./gcc/config/convex/convex.md +- 861253244b ./gcc/config/convex/fixinc.convex +-2034360953b ./gcc/config/convex/x-convex +- 944974965b ./gcc/config/convex/xm-convex.h +-2118339989b ./gcc/config/dbxcoff.h +- 719087325b ./gcc/config/dbxelf.h +- 186717254b ./gcc/config/dbx.h +-1049830767b ./gcc/config/dsp16xx/dsp16xx.c +-2057916657b ./gcc/config/dsp16xx/dsp16xx.h +-2894810547b ./gcc/config/dsp16xx/dsp16xx.md +-3197918419b ./gcc/config/dsp16xx/xm-dsp16xx.h +-3235410430b ./gcc/config/elfos.h +- 462661649b ./gcc/config/elxsi/elxsi.c +- 228348883b ./gcc/config/elxsi/elxsi.h +-3851060193b ./gcc/config/elxsi/elxsi.md +-3748147985b ./gcc/config/elxsi/x-elxsi +-3591452694b ./gcc/config/elxsi/xm-elxsi.h +-1167713510b ./gcc/config/float-i128.h +- 957662487b ./gcc/config/float-i32.h +-1481742865b ./gcc/config/float-i386.h +-2712611887b ./gcc/config/float-i64.h +-3579227961b ./gcc/config/float-m68k.h +-2467893270b ./gcc/config/float-sh.h +-4263954902b ./gcc/config/float-vax.h +-1136609705b ./gcc/config/fp-bit.c +-1280702759b ./gcc/config/fx80/fx80.c +-3838483130b ./gcc/config/fx80/fx80.h +-2305138390b ./gcc/config/fx80/fx80.md +-1737158293b ./gcc/config/fx80/xm-fx80.h +- 286920157b ./gcc/config/gmicro/gmicro.c +- 242691700b ./gcc/config/gmicro/gmicro.h +- 608028190b ./gcc/config/gmicro/gmicro.md +- 192108986b ./gcc/config/gnu.h +-3358057730b ./gcc/config/gofast.h +-1315260558b ./gcc/config.guess +- 73377905b ./gcc/config/h8300/h8300.c +-4067077485b ./gcc/config/h8300/h8300.h +-1910118754b ./gcc/config/h8300/h8300.md +- 519828525b ./gcc/config/h8300/lib1funcs.asm +-3869818599b ./gcc/config/h8300/t-h8300 +-3636250675b ./gcc/config/h8300/xm-h8300.h +-2978687204b ./gcc/config/i370/i370.c +-1879962558b ./gcc/config/i370/i370.h +-2691575732b ./gcc/config/i370/i370.md +-1901725621b ./gcc/config/i370/t-i370 +-2084959845b ./gcc/config/i370/xm-i370.h +-1895569515b ./gcc/config/i386/386bsd.h +-3277790510b ./gcc/config/i386/aix386.h +-3639481346b ./gcc/config/i386/aix386ng.h +-2339764147b ./gcc/config/i386/att.h +-2102389190b ./gcc/config/i386/bsd386.h +-2582980211b ./gcc/config/i386/bsd.h +-3010444208b ./gcc/config/i386/config-nt.sed +-1755486995b ./gcc/config/i386/crtdll.h +-3943560803b ./gcc/config/i386/cygwin.asm +-1990906306b ./gcc/config/i386/cygwin.h +- 72827188b ./gcc/config/i386/dgux.c +-2430932709b ./gcc/config/i386/dgux.h +-1357324982b ./gcc/config/i386/djgpp.h +-3567816533b ./gcc/config/i386/djgpp-rtems.h +-1265439821b ./gcc/config/i386/freebsd-elf.h +- 914300508b ./gcc/config/i386/freebsd.h +-2875212455b ./gcc/config/i386/gas.h +- 456755261b ./gcc/config/i386/gmon-sol2.c +-2847664881b ./gcc/config/i386/gnu.h +- 166489147b ./gcc/config/i386/gstabs.h +-3985340307b ./gcc/config/i386/i386-aout.h +-2508343420b ./gcc/config/i386/i386.c +-4111667020b ./gcc/config/i386/i386-coff.h +-2250291155b ./gcc/config/i386/i386.h +-1460528421b ./gcc/config/i386/i386-interix.h +-1750576911b ./gcc/config/i386/i386.md +- 736772779b ./gcc/config/i386/interix.c +-3165191846b ./gcc/config/i386/isccoff.h +- 231729323b ./gcc/config/i386/iscdbx.h +-3245573839b ./gcc/config/i386/isc.h +- 26710255b ./gcc/config/i386/linux-aout.h +-2953089825b ./gcc/config/i386/linux.h +-4113338393b ./gcc/config/i386/linux-oldld.h +-3496788786b ./gcc/config/i386/lynx.h +-3286906750b ./gcc/config/i386/lynx-ng.h +- 346786519b ./gcc/config/i386/mach.h +- 679000007b ./gcc/config/i386/mingw32.h +- 700471847b ./gcc/config/i386/moss.h +-1935753147b ./gcc/config/i386/netbsd.h +-2405970032b ./gcc/config/i386/next.h +-2030227922b ./gcc/config/i386/openbsd.h +- 407886013b ./gcc/config/i386/os2.h +-2999570618b ./gcc/config/i386/osf1-ci.asm +-2303041887b ./gcc/config/i386/osf1-cn.asm +-3380650348b ./gcc/config/i386/osf1elfgdb.h +-3591132822b ./gcc/config/i386/osf1elf.h +- 779598425b ./gcc/config/i386/osfelf.h +- 719827043b ./gcc/config/i386/osfrose.h +-1380319377b ./gcc/config/i386/perform.h +- 237958676b ./gcc/config/i386/ptx4-i.h +-1746945386b ./gcc/config/i386/rtemself.h +-3828816383b ./gcc/config/i386/rtems.h +-4154426458b ./gcc/config/i386/sco4dbx.h +- 31982113b ./gcc/config/i386/sco4.h +- 508494106b ./gcc/config/i386/sco5gas.h +-1991449500b ./gcc/config/i386/sco5.h +-2105078551b ./gcc/config/i386/scodbx.h +-2829001020b ./gcc/config/i386/sco.h +-1518390266b ./gcc/config/i386/seq2-sysv3.h +-2260828739b ./gcc/config/i386/seq-gas.h +- 31216179b ./gcc/config/i386/seq-sysv3.h +-3863801861b ./gcc/config/i386/sequent.h +- 892782158b ./gcc/config/i386/sol2-c1.asm +-1565106149b ./gcc/config/i386/sol2-ci.asm +-4008317666b ./gcc/config/i386/sol2-cn.asm +-3651800257b ./gcc/config/i386/sol2gas.h +-1864202258b ./gcc/config/i386/sol2-gc1.asm +-4034476801b ./gcc/config/i386/sol2.h +-1545753253b ./gcc/config/i386/sun386.h +- 684374459b ./gcc/config/i386/sun.h +-3556123079b ./gcc/config/i386/svr3dbx.h +-1910703073b ./gcc/config/i386/svr3gas.h +-3846064431b ./gcc/config/i386/svr3.ifile +-1523044645b ./gcc/config/i386/svr3z.ifile +- 619283818b ./gcc/config/i386/sysv3.h +-2388432403b ./gcc/config/i386/sysv4.h +-1735529466b ./gcc/config/i386/sysv5.h +-2437302600b ./gcc/config/i386/t-crtpic +-2246944266b ./gcc/config/i386/t-crtstuff +-2509644115b ./gcc/config/i386/t-cygwin +-2849008235b ./gcc/config/i386/t-dgux +- 482628910b ./gcc/config/i386/t-djgpp +-2949021345b ./gcc/config/i386/t-i386bare +-3987266175b ./gcc/config/i386/t-interix +-4056914306b ./gcc/config/i386/t-mingw32 +-3437455964b ./gcc/config/i386/t-next +-1186749595b ./gcc/config/i386/t-osf +-1520459705b ./gcc/config/i386/t-osf1elf +-3439196704b ./gcc/config/i386/t-sco5 +-2010697006b ./gcc/config/i386/t-sco5gas +-1755709893b ./gcc/config/i386/t-sol2 +-3128852740b ./gcc/config/i386/t-svr3dbx +-2977164768b ./gcc/config/i386/t-udk +-1023926647b ./gcc/config/i386/t-uwin +- 482628910b ./gcc/config/i386/t-vsta +-1281402728b ./gcc/config/i386/t-winnt +-2348843648b ./gcc/config/i386/udk.h +- 524084667b ./gcc/config/i386/unix.h +-2149794869b ./gcc/config/i386/uwin.asm +- 470472226b ./gcc/config/i386/uwin.h +-1243186138b ./gcc/config/i386/v3gas.h +-2327961737b ./gcc/config/i386/vsta.h +-2176070711b ./gcc/config/i386/vxi386.h +-1626352388b ./gcc/config/i386/win32.h +-3439334875b ./gcc/config/i386/winnt.c +-2860761703b ./gcc/config/i386/win-nt.h +-3474740080b ./gcc/config/i386/x-aix +- 237037873b ./gcc/config/i386/x-cygwin +- 745721423b ./gcc/config/i386/x-dgux +- 231807750b ./gcc/config/i386/x-djgpp +-4175788105b ./gcc/config/i386/x-isc +-1331677327b ./gcc/config/i386/x-isc3 +- 446547808b ./gcc/config/i386/xm-aix.h +-4250296631b ./gcc/config/i386/xm-bsd386.h +-2549976913b ./gcc/config/i386/xm-cygwin.h +-2515568374b ./gcc/config/i386/xm-dgux.h +-3764892052b ./gcc/config/i386/xm-djgpp.h +-3045936467b ./gcc/config/i386/xm-dos.h +-2787520086b ./gcc/config/i386/xm-freebsd.h +-2990995265b ./gcc/config/i386/xm-gnu.h +- 767722837b ./gcc/config/i386/xm-i386.h +- 256026568b ./gcc/config/i386/xm-i386-interix.h +-3899420493b ./gcc/config/i386/xm-isc.h +-3801083047b ./gcc/config/i386/xm-linux.h +-2830832587b ./gcc/config/i386/xm-lynx.h +-2453552783b ./gcc/config/i386/xm-mingw32.h +-3487707401b ./gcc/config/i386/xm-next.h +-1218154368b ./gcc/config/i386/xm-openbsd.h +- 587932334b ./gcc/config/i386/xm-os2.h +- 412013975b ./gcc/config/i386/xm-osf1elf.h +- 446547808b ./gcc/config/i386/xm-osf.h +-3701039150b ./gcc/config/i386/xm-sco5.h +- 262721373b ./gcc/config/i386/xm-sco.h +-1933101345b ./gcc/config/i386/xm-sun.h +-1551498273b ./gcc/config/i386/xm-sysv3.h +-3083140420b ./gcc/config/i386/xm-sysv4.h +-1404515293b ./gcc/config/i386/xm-vsta.h +-2531169178b ./gcc/config/i386/xm-winnt.h +-1612131512b ./gcc/config/i386/x-ncr3000 +-2391387330b ./gcc/config/i386/x-next +-4245915723b ./gcc/config/i386/x-osf1elf +- 42414247b ./gcc/config/i386/x-osfrose +-2268838873b ./gcc/config/i386/x-sco +-2587996311b ./gcc/config/i386/x-sco4 +-1611173336b ./gcc/config/i386/x-sco5 +-1036967407b ./gcc/config/i386/x-sysv3 +-1769627032b ./gcc/config/i386/x-vsta +-3691699076b ./gcc/config/i860/bsd-gas.h +-3097443514b ./gcc/config/i860/bsd.h +-1268798206b ./gcc/config/i860/fx2800.h +-2072638444b ./gcc/config/i860/i860.c +- 39968499b ./gcc/config/i860/i860.h +-3044441094b ./gcc/config/i860/i860.md +-1007699151b ./gcc/config/i860/mach.h +-2175963603b ./gcc/config/i860/paragon.h +- 697020478b ./gcc/config/i860/sysv3.h +-2497417089b ./gcc/config/i860/sysv4.h +- 269024431b ./gcc/config/i860/t-fx2800 +-3969131493b ./gcc/config/i860/x-fx2800 +- 994204119b ./gcc/config/i860/xm-fx2800.h +-2507432460b ./gcc/config/i860/xm-i860.h +- 878205655b ./gcc/config/i860/x-sysv3 +-3510916973b ./gcc/config/i860/x-sysv4 +-2802625596b ./gcc/config/i960/i960.c +-2870836375b ./gcc/config/i960/i960-coff.h +-2742207675b ./gcc/config/i960/i960.h +-2585178812b ./gcc/config/i960/i960.md +-4195280424b ./gcc/config/i960/rtems.h +- 933294565b ./gcc/config/i960/t-960bare +-3946187942b ./gcc/config/i960/t-vxworks960 +-2626110515b ./gcc/config/i960/vx960-coff.h +-1895495318b ./gcc/config/i960/vx960.h +-2616292576b ./gcc/config/i960/xm-i960.h +- 411742057b ./gcc/config.in +-1336130822b ./gcc/config/interix.h +-3065028535b ./gcc/config/libgloss.h +-1240514243b ./gcc/config/linux-aout.h +-1742048094b ./gcc/config/linux.h +-1209329151b ./gcc/config/lynx.h +-1966627403b ./gcc/config/lynx-ng.h +- 620755617b ./gcc/config/m32r/initfini.c +-2225186460b ./gcc/config/m32r/m32r.c +-2292829039b ./gcc/config/m32r/m32r.h +-4221416263b ./gcc/config/m32r/m32r.md +-4179023172b ./gcc/config/m32r/t-m32r +-3744202374b ./gcc/config/m32r/xm-m32r.h +-2069430788b ./gcc/config/m68k/3b1g.h +- 403759046b ./gcc/config/m68k/3b1.h +- 656990409b ./gcc/config/m68k/altos3068.h +-2258908566b ./gcc/config/m68k/amix.h +-3696604588b ./gcc/config/m68k/apollo68.h +-3575263056b ./gcc/config/m68k/atari.h +-2970953465b ./gcc/config/m68k/auxas.h +- 303618558b ./gcc/config/m68k/aux-crt1.c +- 189508427b ./gcc/config/m68k/aux-crt2.asm +- 118144777b ./gcc/config/m68k/aux-crtn.asm +- 141176279b ./gcc/config/m68k/aux-exit.c +-1158552592b ./gcc/config/m68k/auxgas.h +- 922288695b ./gcc/config/m68k/auxgld.h +-2113609688b ./gcc/config/m68k/a-ux.h +-2685530303b ./gcc/config/m68k/auxld.h +-2164284366b ./gcc/config/m68k/aux-low.gld +-2715416885b ./gcc/config/m68k/aux-mcount.c +-3169632395b ./gcc/config/m68k/ccur-GAS.h +- 351312764b ./gcc/config/m68k/coff.h +- 207482095b ./gcc/config/m68k/crds.h +-2722243824b ./gcc/config/m68k/ctix.h +-2770446786b ./gcc/config/m68k/dpx2cdbx.h +-1165167071b ./gcc/config/m68k/dpx2g.h +- 603423256b ./gcc/config/m68k/dpx2.h +-2216029984b ./gcc/config/m68k/dpx2.ifile +-2518640661b ./gcc/config/m68k/fpgnulib.c +-1510706425b ./gcc/config/m68k/hp2bsd.h +-4247760656b ./gcc/config/m68k/hp310g.h +-1601304406b ./gcc/config/m68k/hp310.h +-3645108527b ./gcc/config/m68k/hp320g.h +-4114232317b ./gcc/config/m68k/hp320.h +-4063375962b ./gcc/config/m68k/hp3bsd44.h +-1601216299b ./gcc/config/m68k/hp3bsd.h +-2864047424b ./gcc/config/m68k/hpux7.h +- 683427592b ./gcc/config/m68k/isi.h +-3484500543b ./gcc/config/m68k/isi-nfp.h +-2393398106b ./gcc/config/m68k/lb1sf68.asm +-1287467488b ./gcc/config/m68k/linux-aout.h +-2513852382b ./gcc/config/m68k/linux.h +-1765384748b ./gcc/config/m68k/lynx.h +-2275885553b ./gcc/config/m68k/lynx-ng.h +-2810980833b ./gcc/config/m68k/m68020-elf.h +- 388266224b ./gcc/config/m68k/m68k-aout.h +-1327340244b ./gcc/config/m68k/m68k.c +-1018776699b ./gcc/config/m68k/m68k-coff.h +-3736322150b ./gcc/config/m68k/m68kelf.h +-2590349266b ./gcc/config/m68k/m68kemb.h +- 853341913b ./gcc/config/m68k/m68k.h +- 782535168b ./gcc/config/m68k/m68k.md +-3855098247b ./gcc/config/m68k/m68k-none.h +-2991007317b ./gcc/config/m68k/m68k-psos.h +-2788206253b ./gcc/config/m68k/m68kv4.h +-4281215928b ./gcc/config/m68k/mot3300-crt0.S +- 811675754b ./gcc/config/m68k/mot3300.h +-3413791584b ./gcc/config/m68k/mot3300Mcrt0.S +-3624312269b ./gcc/config/m68k/netbsd.h +-2598124463b ./gcc/config/m68k/news3gas.h +- 895337217b ./gcc/config/m68k/news3.h +-2644657409b ./gcc/config/m68k/newsgas.h +-4208572343b ./gcc/config/m68k/news.h +-1968305925b ./gcc/config/m68k/next21.h +-2862451568b ./gcc/config/m68k/next.h +-3770709000b ./gcc/config/m68k/openbsd.h +- 384160690b ./gcc/config/m68k/pbb.h +-3798721722b ./gcc/config/m68k/plexus.h +-3980656405b ./gcc/config/m68k/rtems.h +-2022844005b ./gcc/config/m68k/sgs.h +- 608572165b ./gcc/config/m68k/sun2.h +- 34831333b ./gcc/config/m68k/sun2o4.h +-2871755703b ./gcc/config/m68k/sun3.h +-4094912646b ./gcc/config/m68k/sun3mach.h +- 864417723b ./gcc/config/m68k/sun3n3.h +- 120628064b ./gcc/config/m68k/sun3n.h +-2298299278b ./gcc/config/m68k/sun3o3.h +-2211291190b ./gcc/config/m68k/t-aux +-1601671577b ./gcc/config/m68k/t-linux +-1601671577b ./gcc/config/m68k/t-linux-aout +-1477854374b ./gcc/config/m68k/t-lynx +- 997035079b ./gcc/config/m68k/t-m68kbare +-1431188037b ./gcc/config/m68k/t-m68kelf +-2312371323b ./gcc/config/m68k/t-mot3300 +-1359551415b ./gcc/config/m68k/t-mot3300-gald +-1936444177b ./gcc/config/m68k/t-mot3300-gas +-2294965883b ./gcc/config/m68k/t-mot3300-gld +- 249897538b ./gcc/config/m68k/t-next +-2026708872b ./gcc/config/m68k/tower-as.h +- 551679654b ./gcc/config/m68k/tower.h +-2967405432b ./gcc/config/m68k/t-vxworks68 +-2987165266b ./gcc/config/m68k/vxm68k.h +- 878205655b ./gcc/config/m68k/x-alloca-c +-4096453725b ./gcc/config/m68k/x-amix +-1325510234b ./gcc/config/m68k/x-apollo68 +-4088761460b ./gcc/config/m68k/x-ccur +-1762620255b ./gcc/config/m68k/x-crds +-1170864157b ./gcc/config/m68k/x-dpx2 +-1240963087b ./gcc/config/m68k/x-hp2bsd +-4196102339b ./gcc/config/m68k/x-hp320 +- 59330584b ./gcc/config/m68k/x-hp320g +-2280950471b ./gcc/config/m68k/xm-3b1.h +- 832557662b ./gcc/config/m68k/xm-altos3068.h +-4285982649b ./gcc/config/m68k/xm-amix.h +-1707292853b ./gcc/config/m68k/xm-atari.h +-3022058994b ./gcc/config/m68k/xm-aux.h +- 732179410b ./gcc/config/m68k/xm-crds.h +- 391190612b ./gcc/config/m68k/xm-hp320.h +-1829956157b ./gcc/config/m68k/xm-linux.h +-3417287401b ./gcc/config/m68k/xm-lynx.h +-1368515139b ./gcc/config/m68k/xm-m68k.h +- 7692108b ./gcc/config/m68k/xm-m68kv.h +-2316649618b ./gcc/config/m68k/xm-mot3300.h +-3626208384b ./gcc/config/m68k/xm-next.h +-2596148490b ./gcc/config/m68k/xm-openbsd.h +-3404524005b ./gcc/config/m68k/x-mot3300 +-3170569156b ./gcc/config/m68k/x-mot3300-gas +-4033365544b ./gcc/config/m68k/xm-plexus.h +-3728255284b ./gcc/config/m68k/xm-sun3.h +-1429673665b ./gcc/config/m68k/xm-tower.h +- 805482102b ./gcc/config/m68k/x-next +- 263693140b ./gcc/config/m68k/x-tower +- 559413212b ./gcc/config/m88k/dguxbcs.h +-1119083995b ./gcc/config/m88k/dgux.h +-3298414170b ./gcc/config/m88k/dgux.ld +-2075050065b ./gcc/config/m88k/dolph.h +-1558967450b ./gcc/config/m88k/dolphin.ld +-3853566566b ./gcc/config/m88k/luna.h +-2278453924b ./gcc/config/m88k/m88k-aout.h +-2203562636b ./gcc/config/m88k/m88k.c +- 963743779b ./gcc/config/m88k/m88k-coff.h +- 766388925b ./gcc/config/m88k/m88k.h +- 462097294b ./gcc/config/m88k/m88k.md +-2372325319b ./gcc/config/m88k/m88k-move.sh +- 898184603b ./gcc/config/m88k/sysv3.h +-1993010118b ./gcc/config/m88k/sysv4.h +-4060219622b ./gcc/config/m88k/t-bug +-3683187732b ./gcc/config/m88k/t-dgux +-4032605278b ./gcc/config/m88k/t-dguxbcs +-1298890126b ./gcc/config/m88k/t-dgux-gas +-2796441735b ./gcc/config/m88k/tekXD88.h +- 173867895b ./gcc/config/m88k/tekXD88.ld +-3651584303b ./gcc/config/m88k/t-luna +- 270918189b ./gcc/config/m88k/t-luna-gas +-4060219622b ./gcc/config/m88k/t-m88k +-2588594092b ./gcc/config/m88k/t-m88k-gas +-3886447115b ./gcc/config/m88k/t-sysv4 +-3129976968b ./gcc/config/m88k/x-dgux +- 487572801b ./gcc/config/m88k/x-dguxbcs +-3447263593b ./gcc/config/m88k/x-dolph +- 581988232b ./gcc/config/m88k/xm-m88k.h +-1950046494b ./gcc/config/m88k/xm-sysv3.h +- 432446889b ./gcc/config/m88k/x-sysv3 +-2614770624b ./gcc/config/m88k/x-sysv4 +-2762110114b ./gcc/config/m88k/x-tekXD88 +- 962826654b ./gcc/config/mips/abi64.h +-2723281235b ./gcc/config/mips/bsd-4.h +- 616617104b ./gcc/config/mips/bsd-5.h +- 930726788b ./gcc/config/mips/cross64.h +-2579679484b ./gcc/config/mips/dec-bsd.h +-3807606487b ./gcc/config/mips/dec-osf1.h +- 260679193b ./gcc/config/mips/ecoff.h +-3551974985b ./gcc/config/mips/ecoffl.h +-4007015481b ./gcc/config/mips/elf64.h +-3480170287b ./gcc/config/mips/elf.h +-1175169006b ./gcc/config/mips/elfl64.h +-4118432176b ./gcc/config/mips/elfl.h +- 452497001b ./gcc/config/mips/elflorion.h +-4210328521b ./gcc/config/mips/elforion.h +-1143331470b ./gcc/config/mips/gnu.h +-2568626403b ./gcc/config/mips/iris3.h +- 63757439b ./gcc/config/mips/iris4.h +-2743944992b ./gcc/config/mips/iris4loser.h +-3875094584b ./gcc/config/mips/iris5gas.h +-1976320964b ./gcc/config/mips/iris5.h +-2588991547b ./gcc/config/mips/iris6.h +-3852135655b ./gcc/config/mips/linux.h +-3291569396b ./gcc/config/mips/mips16.S +-3652751219b ./gcc/config/mips/mips-5.h +-3997122313b ./gcc/config/mips/mips.c +- 828076041b ./gcc/config/mips/mips.h +-2095290633b ./gcc/config/mips/mips.md +-3494806728b ./gcc/config/mips/netbsd.h +-1852349798b ./gcc/config/mips/news4.h +-2469834027b ./gcc/config/mips/news5.h +- 189783361b ./gcc/config/mips/nws3250v4.h +-1289842549b ./gcc/config/mips/osfrose.h +- 858594634b ./gcc/config/mips/r3900.h +-1769321451b ./gcc/config/mips/rtems64.h +- 17103592b ./gcc/config/mips/sni-gas.h +- 714779279b ./gcc/config/mips/sni-svr4.h +-1455158868b ./gcc/config/mips/svr3-4.h +-2338194654b ./gcc/config/mips/svr3-5.h +-1184753564b ./gcc/config/mips/svr4-4.h +- 896761812b ./gcc/config/mips/svr4-5.h +-3657782110b ./gcc/config/mips/svr4-t.h +-2138831918b ./gcc/config/mips/t-bsd +-2520217533b ./gcc/config/mips/t-bsd-gas +-3490072647b ./gcc/config/mips/t-cross64 +-3774028077b ./gcc/config/mips/t-ecoff +-3053489673b ./gcc/config/mips/t-elf +-1208402514b ./gcc/config/mips/t-iris6 +-4226487252b ./gcc/config/mips/t-mips +- 491943219b ./gcc/config/mips/t-mips-gas +-4226487252b ./gcc/config/mips/t-osfrose +-3302752934b ./gcc/config/mips/t-r3900 +-2969870919b ./gcc/config/mips/t-svr3 +-3458446551b ./gcc/config/mips/t-svr3-gas +-1830179068b ./gcc/config/mips/t-svr4 +- 745314483b ./gcc/config/mips/t-svr4-gas +-2170716316b ./gcc/config/mips/t-ultrix +- 210779045b ./gcc/config/mips/ultrix.h +-3227136420b ./gcc/config/mips/vxworks.h +-1093662493b ./gcc/config/mips/x-dec-osf1 +-3056692151b ./gcc/config/mips/x-iris +- 490324532b ./gcc/config/mips/x-iris3 +- 755414710b ./gcc/config/mips/x-iris6 +-1433979648b ./gcc/config/mips/x-mips +-2375550941b ./gcc/config/mips/xm-iris3.h +-3197006010b ./gcc/config/mips/xm-iris4.h +-3440296848b ./gcc/config/mips/xm-iris5.h +-1279762689b ./gcc/config/mips/xm-iris6.h +-1940209380b ./gcc/config/mips/xm-mips.h +-2988484388b ./gcc/config/mips/xm-news.h +-1980789011b ./gcc/config/mips/xm-nws3250v4.h +- 220014071b ./gcc/config/mips/xm-sysv4.h +-1007989765b ./gcc/config/mips/xm-sysv.h +-2162788729b ./gcc/config/mips/x-netbsd +-3800034921b ./gcc/config/mips/x-nws3250v4 +-2621150460b ./gcc/config/mips/x-osfrose +-4105797367b ./gcc/config/mips/x-sni-svr4 +-2028727147b ./gcc/config/mips/x-sony +- 823835751b ./gcc/config/mips/x-sysv +-1093662493b ./gcc/config/mips/x-ultrix +-4083711028b ./gcc/config/mn10200/divmod.c +-2305385178b ./gcc/config/mn10200/lib1funcs.asm +-2755654897b ./gcc/config/mn10200/mn10200.c +-1559142282b ./gcc/config/mn10200/mn10200.h +-2370806672b ./gcc/config/mn10200/mn10200.md +-3225600650b ./gcc/config/mn10200/t-mn10200 +- 937080303b ./gcc/config/mn10200/udivmod.c +-2590328114b ./gcc/config/mn10200/udivmodsi4.c +-3653374278b ./gcc/config/mn10200/xm-mn10200.h +-1173396001b ./gcc/config/mn10300/mn10300.c +-1638577090b ./gcc/config/mn10300/mn10300.h +-2317569146b ./gcc/config/mn10300/mn10300.md +-2469174526b ./gcc/config/mn10300/t-mn10300 +-3653298513b ./gcc/config/mn10300/xm-mn10300.h +-1434800528b ./gcc/config/msdos/configur.bat +- 650685154b ./gcc/config/msdos/libgcc.mak +- 196042059b ./gcc/config/msdos/mklibgcc.c +-3152790587b ./gcc/config/msdos/top.sed +-4102769563b ./gcc/config/netbsd.h +- 669336809b ./gcc/config/nextstep21.h +-1550360365b ./gcc/config/nextstep.c +-2540764799b ./gcc/config/nextstep.h +-3464103330b ./gcc/config/ns32k/encore.h +-3670330882b ./gcc/config/ns32k/genix.h +-3696144992b ./gcc/config/ns32k/merlin.h +-2407747597b ./gcc/config/ns32k/netbsd.h +-3755726328b ./gcc/config/ns32k/ns32k.c +-3496268242b ./gcc/config/ns32k/ns32k.h +-2181731591b ./gcc/config/ns32k/ns32k.md +-2256914403b ./gcc/config/ns32k/pc532.h +-3442532179b ./gcc/config/ns32k/pc532-mach.h +-3083546287b ./gcc/config/ns32k/pc532-min.h +-2013512481b ./gcc/config/ns32k/sequent.h +-4197473842b ./gcc/config/ns32k/tek6000.h +-4027331813b ./gcc/config/ns32k/tek6100.h +-1177977755b ./gcc/config/ns32k/tek6200.h +- 605655032b ./gcc/config/ns32k/x-genix +-1596660922b ./gcc/config/ns32k/xm-genix.h +-2335084315b ./gcc/config/ns32k/xm-netbsd.h +-4055093539b ./gcc/config/ns32k/xm-ns32k.h +- 876936455b ./gcc/config/ns32k/xm-pc532-min.h +-2430321650b ./gcc/config/openbsd.h +-1628773348b ./gcc/config/pa/ee.asm +-2905526493b ./gcc/config/pa/ee_fp.asm +-2928231280b ./gcc/config/pa/lib1funcs.asm +- 531910520b ./gcc/config/pa/lib2funcs.asm +-1025741261b ./gcc/config/pa/pa1.h +- 509609341b ./gcc/config/pa/pa.c +-3698457987b ./gcc/config/pa/pa-gas.h +-3381529477b ./gcc/config/pa/pa.h +-3488257955b ./gcc/config/pa/pa-hiux.h +-2717205711b ./gcc/config/pa/pa-hpux10.h +-3105643464b ./gcc/config/pa/pa-hpux7.h +-3124002443b ./gcc/config/pa/pa-hpux9.h +- 642326892b ./gcc/config/pa/pa-hpux.h +-3791939783b ./gcc/config/pa/pa.md +-3618123809b ./gcc/config/pa/pa-oldas.h +- 14614223b ./gcc/config/pa/pa-osf.h +-4033897959b ./gcc/config/pa/pa-pro-end.h +-2922201548b ./gcc/config/pa/pa-pro.h +-3985707980b ./gcc/config/pa/rtems.h +-1117935804b ./gcc/config/pa/t-dce-thr +-1863456120b ./gcc/config/pa/t-pa +-2490743349b ./gcc/config/pa/t-pro +-4249254077b ./gcc/config/pa/xm-pa.h +-3466885422b ./gcc/config/pa/xm-pahpux.h +-2372326382b ./gcc/config/pa/xm-papro.h +-2143426929b ./gcc/config/pa/x-pa +-4046545344b ./gcc/config/pa/x-pa-hpux +- 743608944b ./gcc/config/pdp11/2bsd.h +-2014002809b ./gcc/config/pdp11/pdp11.c +-3794653707b ./gcc/config/pdp11/pdp11.h +-2913094405b ./gcc/config/pdp11/pdp11.md +-2225205890b ./gcc/config/pdp11/t-pdp11 +-3333372393b ./gcc/config/pdp11/xm-pdp11.h +-2211300902b ./gcc/config/psos.h +-3407049614b ./gcc/config/ptx4.h +-3526974131b ./gcc/config/pyr/pyr.c +- 339012099b ./gcc/config/pyr/pyr.h +-2905092864b ./gcc/config/pyr/pyr.md +-2986118067b ./gcc/config/pyr/xm-pyr.h +- 840485037b ./gcc/config/pyr/x-pyr +-3917072699b ./gcc/config/README +-2499666444b ./gcc/config/romp/romp.c +-1477332049b ./gcc/config/romp/romp.h +- 713610882b ./gcc/config/romp/romp.md +-2880448747b ./gcc/config/romp/x-mach +-3484447782b ./gcc/config/romp/xm-romp.h +-2947038505b ./gcc/config/romp/x-romp +-3112884702b ./gcc/config/rs6000/aix31.h +-1675087546b ./gcc/config/rs6000/aix3newas.h +-1494702623b ./gcc/config/rs6000/aix41.h +-2970024935b ./gcc/config/rs6000/aix43.h +-3242211636b ./gcc/config/rs6000/beos.h +-3794273341b ./gcc/config/rs6000/cygwin.h +- 112343096b ./gcc/config/rs6000/eabiaix.h +-3043603887b ./gcc/config/rs6000/eabi.asm +-3373760176b ./gcc/config/rs6000/eabi-ci.asm +-1240044824b ./gcc/config/rs6000/eabi-cn.asm +-2033395004b ./gcc/config/rs6000/eabi-ctors.c +-2983890082b ./gcc/config/rs6000/eabi.h +-2310432239b ./gcc/config/rs6000/eabile.h +-4040254220b ./gcc/config/rs6000/eabilesim.h +-1593983191b ./gcc/config/rs6000/eabisim.h +-2577382176b ./gcc/config/rs6000/linux.h +- 751612125b ./gcc/config/rs6000/lynx.h +-1525754465b ./gcc/config/rs6000/mach.h +-1820610909b ./gcc/config/rs6000/milli.exp +-1063992963b ./gcc/config/rs6000/netware.h +-1545361972b ./gcc/config/rs6000/nt-ci.asm +-2111607652b ./gcc/config/rs6000/nt-cn.asm +-3066888831b ./gcc/config/rs6000/ntstack.asm +-1852442917b ./gcc/config/rs6000/rs6000.c +-2374964851b ./gcc/config/rs6000/rs6000.h +-3719637212b ./gcc/config/rs6000/rs6000.md +-4257252017b ./gcc/config/rs6000/rtems.h +-3407572927b ./gcc/config/rs6000/sol2.h +-1289418179b ./gcc/config/rs6000/sol-c0.c +-1695016479b ./gcc/config/rs6000/sol-ci.asm +-1927994766b ./gcc/config/rs6000/sol-cn.asm +-2287335055b ./gcc/config/rs6000/sysv4.h +-1454776131b ./gcc/config/rs6000/sysv4le.h +-1059562469b ./gcc/config/rs6000/t-aix43 +-3218787192b ./gcc/config/rs6000/t-beos +-4097422602b ./gcc/config/rs6000/t-newas +-3994014594b ./gcc/config/rs6000/t-ppc +-4272756841b ./gcc/config/rs6000/t-ppccomm +-2868568113b ./gcc/config/rs6000/t-ppcgas +-1283581552b ./gcc/config/rs6000/t-ppcos +-1717019755b ./gcc/config/rs6000/tramp.asm +-3065325019b ./gcc/config/rs6000/t-rs6000 +-1874501442b ./gcc/config/rs6000/t-winnt +-1415019668b ./gcc/config/rs6000/t-xnewas +-3152886293b ./gcc/config/rs6000/t-xrs6000 +-1984878317b ./gcc/config/rs6000/vxppc.h +-2069671306b ./gcc/config/rs6000/win-nt.h +- 489691602b ./gcc/config/rs6000/x-aix31 +- 465478449b ./gcc/config/rs6000/x-aix41 +-2206127307b ./gcc/config/rs6000/x-aix41-gld +-2363753655b ./gcc/config/rs6000/x-aix43 +-1379999620b ./gcc/config/rs6000/x-beos +-4218694447b ./gcc/config/rs6000/x-cygwin +- 176036232b ./gcc/config/rs6000/x-lynx +-1119193055b ./gcc/config/rs6000/x-mach +-4091924904b ./gcc/config/rs6000/xm-beos.h +-3277280620b ./gcc/config/rs6000/xm-cygwin.h +-1387161565b ./gcc/config/rs6000/xm-lynx.h +-2311049093b ./gcc/config/rs6000/xm-mach.h +- 277319235b ./gcc/config/rs6000/xm-rs6000.h +-1198144020b ./gcc/config/rs6000/xm-sysv4.h +- 443641603b ./gcc/config/rs6000/x-rs6000 +-1861191694b ./gcc/config/rs6000/x-sysv4 +-1070214752b ./gcc/config/sh/elf.h +-3820397636b ./gcc/config/sh/lib1funcs.asm +- 859670236b ./gcc/config/sh/rtemself.h +-1030877040b ./gcc/config/sh/rtems.h +- 828900658b ./gcc/config/sh/sh.c +-1962148926b ./gcc/config/sh/sh.h +- 216149670b ./gcc/config/sh/sh.md +-3454560745b ./gcc/config/sh/t-sh +-1840124650b ./gcc/config/sh/xm-sh.h +-3025821674b ./gcc/config/sparc/aout.h +-2582541021b ./gcc/config/sparc/bsd.h +-4145941549b ./gcc/config/sparc/elf.h +-3649780127b ./gcc/config/sparc/gmon-sol2.c +-3746795534b ./gcc/config/sparc/hal.h +- 671302508b ./gcc/config/sparc/lb1spc.asm +- 892412538b ./gcc/config/sparc/lb1spl.asm +-3829792761b ./gcc/config/sparc/linux64.h +-1432771552b ./gcc/config/sparc/linux-aout.h +- 928257827b ./gcc/config/sparc/linux.h +-3340219233b ./gcc/config/sparc/litecoff.h +- 529818954b ./gcc/config/sparc/lite.h +-3270410192b ./gcc/config/sparc/lynx.h +-2353689337b ./gcc/config/sparc/lynx-ng.h +-2136616646b ./gcc/config/sparc/netbsd.h +-2977280248b ./gcc/config/sparc/openbsd.h +-1461652436b ./gcc/config/sparc/pbd.h +-1610828060b ./gcc/config/sparc/rtems.h +-1463670426b ./gcc/config/sparc/sol2-c1.asm +-3288323690b ./gcc/config/sparc/sol2-ci.asm +-2004370404b ./gcc/config/sparc/sol2-cn.asm +-2182182911b ./gcc/config/sparc/sol2-g1.asm +-1699311045b ./gcc/config/sparc/sol2.h +-1938337838b ./gcc/config/sparc/sol2-sld-64.h +- 407406271b ./gcc/config/sparc/sol2-sld.h +-2121730699b ./gcc/config/sparc/sp64-aout.h +- 824364328b ./gcc/config/sparc/sp64-elf.h +- 8979159b ./gcc/config/sparc/sparc.c +-1457594704b ./gcc/config/sparc/sparc.h +-1589963960b ./gcc/config/sparc/sparc.md +- 703944495b ./gcc/config/sparc/splet.h +-2679804272b ./gcc/config/sparc/sun4gas.h +-3455486806b ./gcc/config/sparc/sun4o3.h +-3455986086b ./gcc/config/sparc/sunos4.h +-1528721564b ./gcc/config/sparc/sysv4.h +-2688036523b ./gcc/config/sparc/t-elf +-1582758741b ./gcc/config/sparc/t-halos +-3692140246b ./gcc/config/sparc/t-linux64 +-1215655583b ./gcc/config/sparc/t-sol2 +-3160382849b ./gcc/config/sparc/t-sol2-64 +-1887691100b ./gcc/config/sparc/t-sp64 +-3603106515b ./gcc/config/sparc/t-sparcbare +- 473489933b ./gcc/config/sparc/t-sparclite +-3724398884b ./gcc/config/sparc/t-splet +-2014088017b ./gcc/config/sparc/t-sunos40 +-1401640619b ./gcc/config/sparc/t-sunos41 +-2219277944b ./gcc/config/sparc/t-vxsparc +-1400348246b ./gcc/config/sparc/vxsim.h +-3525766313b ./gcc/config/sparc/vxsparc.h +-2878609946b ./gcc/config/sparc/xm-linux.h +-2943271346b ./gcc/config/sparc/xm-lynx.h +-1370920631b ./gcc/config/sparc/xm-openbsd.h +-1348380296b ./gcc/config/sparc/xm-pbd.h +-1880319471b ./gcc/config/sparc/xm-sol2.h +-3012493389b ./gcc/config/sparc/xm-sp64.h +- 859610969b ./gcc/config/sparc/xm-sparc.h +- 623960805b ./gcc/config/sparc/xm-sysv4-64.h +-2019316444b ./gcc/config/sparc/xm-sysv4.h +-1861191694b ./gcc/config/sparc/x-sysv4 +- 931170751b ./gcc/config/spur/spur.c +-3404301551b ./gcc/config/spur/spur.h +- 597536974b ./gcc/config/spur/spur.md +-1910933143b ./gcc/config/spur/xm-spur.h +-3683970223b ./gcc/config/svr3.h +- 166319006b ./gcc/config/svr4.h +- 8262563b ./gcc/config/tahoe/harris.h +-3522173108b ./gcc/config/tahoe/tahoe.c +- 144796843b ./gcc/config/tahoe/tahoe.h +-2208590758b ./gcc/config/tahoe/tahoe.md +-2537862710b ./gcc/config/tahoe/xm-tahoe.h +- 613804065b ./gcc/config/t-freebsd +-1372994999b ./gcc/config/t-gnu +-3050012299b ./gcc/config/t-install-cpp +- 64239056b ./gcc/config/t-libc-ok +-1224602530b ./gcc/config/t-linux +- 144067535b ./gcc/config/t-linux-aout +-4111896717b ./gcc/config/t-linux-gnulibc1 +-4220164823b ./gcc/config/tm-dwarf2.h +-1586139693b ./gcc/config/t-netbsd +-2947277325b ./gcc/config/t-openbsd +-2917904648b ./gcc/config/t-openbsd-thread +-2026867792b ./gcc/config/t-rtems +- 182724490b ./gcc/config/t-svr4 +- 729030691b ./gcc/configure +-1467935606b ./gcc/configure.bat +-3600082583b ./gcc/configure.frag +-2231754695b ./gcc/configure.in +-4241351077b ./gcc/configure.lang +-4096035368b ./gcc/config/v850/lib1funcs.asm +-3022592642b ./gcc/config/v850/t-v850 +-1702566744b ./gcc/config/v850/v850.c +-1471160936b ./gcc/config/v850/v850.h +-1499354909b ./gcc/config/v850/v850.md +-2933253285b ./gcc/config/v850/xm-v850.h +-2123647130b ./gcc/config/vax/netbsd.h +-2401956814b ./gcc/config/vax/ultrix.h +-3589827963b ./gcc/config/vax/vax.c +- 365755773b ./gcc/config/vax/vax.h +-2537275953b ./gcc/config/vax/vax.md +-1907305315b ./gcc/config/vax/vaxv.h +- 560554680b ./gcc/config/vax/vms.h +-4187728168b ./gcc/config/vax/xm-vax.h +- 542222840b ./gcc/config/vax/xm-vaxv.h +-3712454462b ./gcc/config/vax/xm-vms.h +-4031022191b ./gcc/config/vax/x-vax +- 691896710b ./gcc/config/we32k/we32k.c +- 780806124b ./gcc/config/we32k/we32k.h +-1852804001b ./gcc/config/we32k/we32k.md +- 913664286b ./gcc/config/we32k/xm-we32k.h +- 878205655b ./gcc/config/we32k/x-we32k +- 490686036b ./gcc/config/winnt/config-nt.bat +-3197194599b ./gcc/config/winnt/config-nt.sed +- 809816903b ./gcc/config/winnt/dirent.c +-1113635205b ./gcc/config/winnt/dirent.h +-3250316811b ./gcc/config/winnt/fixinc-nt.c +-3566040139b ./gcc/config/winnt/headers.mak +-4109881128b ./gcc/config/winnt/ld.c +- 417261367b ./gcc/config/winnt/libgcc.mak +-1908002483b ./gcc/config/winnt/mklibgcc.c +- 567319218b ./gcc/config/winnt/oldnames.c +- 82504535b ./gcc/config/winnt/spawnv.c +-3392973061b ./gcc/config/winnt/win-nt.h +-4170164852b ./gcc/config/winnt/xm-winnt.h +-3270923317b ./gcc/config/winnt/x-winnt +-1670851102b ./gcc/config/x-interix +-4012259237b ./gcc/config/x-linux +-1881475236b ./gcc/config/x-linux-aout +- 462930175b ./gcc/config/x-lynx +-3779976015b ./gcc/config/xm-alloca.h +-2675300859b ./gcc/config/xm-freebsd.h +-4234308852b ./gcc/config/xm-gnu.h +-4177190957b ./gcc/config/xm-interix.h +- 462145913b ./gcc/config/xm-linux.h +-2194049066b ./gcc/config/xm-lynx.h +-2284065217b ./gcc/config/xm-openbsd.h +-1897551220b ./gcc/config/xm-siglist.h +- 802838955b ./gcc/config/xm-std32.h +-4091214272b ./gcc/config/xm-svr3.h +-1558379184b ./gcc/config/xm-svr4.h +-3288074061b ./gcc/config/x-svr4 +-1334832587b ./gcc/convert.c +-1632185071b ./gcc/convert.h +- 430871781b ./gcc/COPYING +-2637011133b ./gcc/COPYING.LIB +-3899289930b ./gcc/c-parse.c +-2368083768b ./gcc/c-parse.gperf +-1926476024b ./gcc/c-parse.h +- 340564841b ./gcc/c-parse.in +-3783741055b ./gcc/c-parse.y +-3190531650b ./gcc/cp/call.c +-1952182420b ./gcc/cp/ChangeLog +- 1903584b ./gcc/cp/ChangeLog.1 +-2546444747b ./gcc/cp/ChangeLog.egcs +- 941182275b ./gcc/cp/class.c +- 929318629b ./gcc/cp/config-lang.in +-2143071361b ./gcc/cp/cp-tree.def +-3069657971b ./gcc/cp/cp-tree.h +-3745672818b ./gcc/cp/cvt.c +-3019623049b ./gcc/cp/decl2.c +-2086595854b ./gcc/cp/decl.c +-1834949211b ./gcc/cp/decl.h +-1993063104b ./gcc/cp/errfn.c +-2668207772b ./gcc/cp/error.c +- 754102681b ./gcc/cp/except.c +-2791579071b ./gcc/cp/exception.cc +- 599886420b ./gcc/cp/expr.c +-3912802234b ./gcc/cp/friend.c +- 330559424b ./gcc/cp/g++.1 +- 906886763b ./gcc/cp/g++spec.c +-2485046839b ./gcc/cp/gxx.gperf +-3164527837b ./gcc/cp/gxxint.texi +-3710853552b ./gcc/cp/hash.h +-2019685383b ./gcc/cp/inc/exception +-1487179368b ./gcc/cp/inc/new +-3630756522b ./gcc/cp/inc/new.h +-3294064502b ./gcc/cp/inc/typeinfo +- 268408042b ./gcc/cp/init.c +-2911540108b ./gcc/cp/input.c +-1403991879b ./gcc/cp/lang-options.h +-4290678525b ./gcc/cp/lang-specs.h +-2935609916b ./gcc/cp/lex.c +-2424823976b ./gcc/cp/lex.h +- 158340958b ./gcc/cp/Makefile.in +-3839226273b ./gcc/cp/Make-lang.in +- 269758178b ./gcc/cp/method.c +- 701335209b ./gcc/cp/mpw-config.in +-4041177245b ./gcc/cp/mpw-make.sed +-1347809285b ./gcc/cp/new1.cc +- 763929332b ./gcc/cp/new2.cc +- 119869254b ./gcc/cp/new.cc +- 138293205b ./gcc/cp/NEWS +-1051873022b ./gcc/cpp.1 +-1779232657b ./gcc/cppalloc.c +-3338459664b ./gcc/cp/parse.c +-3062677783b ./gcc/cp/parse.h +-2577897311b ./gcc/cp/parse.y +- 139709880b ./gcc/cpperror.c +- 648505131b ./gcc/cppexp.c +-4235899301b ./gcc/cppfiles.c +- 123396535b ./gcc/cpp.fns +-1291958784b ./gcc/cpphash.c +-1865911541b ./gcc/cpphash.h +-2347217111b ./gcc/cppinit.c +-1768596306b ./gcc/cpplib.c +-2418435131b ./gcc/cpplib.h +-3024485355b ./gcc/cppmain.c +-3072272242b ./gcc/cppspec.c +-2750165306b ./gcc/cp/pt.c +-4208968267b ./gcc/cpp.texi +- 967651156b ./gcc/cp/ptree.c +-2516388891b ./gcc/cppulp.c +- 53358206b ./gcc/c-pragma.c +-1262846233b ./gcc/c-pragma.h +-1480301647b ./gcc/cp/repo.c +-1645340049b ./gcc/cp/rtti.c +-3565280411b ./gcc/cp/search.c +-3374588244b ./gcc/cp/semantics.c +-1746248077b ./gcc/cp/sig.c +- 779245834b ./gcc/cp/spew.c +- 16743387b ./gcc/cp/tinfo2.cc +- 73383706b ./gcc/cp/tinfo.cc +-3171371984b ./gcc/cp/tinfo.h +-1418938862b ./gcc/cp/tree.c +-2135311010b ./gcc/cp/typeck2.c +- 589534504b ./gcc/cp/typeck.c +-2393908139b ./gcc/cp/xref.c +-3116343499b ./gcc/cross-make +-1382500598b ./gcc/crtstuff.c +-2173739158b ./gcc/cse.c +- 216805921b ./gcc/cstamp-h.in +-2068306093b ./gcc/c-tree.h +-1582700145b ./gcc/c-typeck.c +-4133825901b ./gcc/.cvsignore +-3702737678b ./gcc/dbxout.c +-2366622993b ./gcc/dbxout.h +-1104788844b ./gcc/dbxstclass.h +-1802831352b ./gcc/defaults.h +-1670301955b ./gcc/doprint.c +-2791449994b ./gcc/doschk.c +-3438566628b ./gcc/dostage2 +-1965038258b ./gcc/dostage3 +-1720349471b ./gcc/dwarf2.h +-1447985163b ./gcc/dwarf2out.c +-3867635452b ./gcc/dwarf2out.h +-2763771626b ./gcc/dwarf.h +- 861331011b ./gcc/dwarfout.c +- 950151195b ./gcc/dwarfout.h +- 872252559b ./gcc/dyn-string.c +-3812644023b ./gcc/dyn-string.h +-3381131814b ./gcc/eh-common.h +-2781325359b ./gcc/emit-rtl.c +-1440444349b ./gcc/enquire.c +-1291816693b ./gcc/except.c +-2158248277b ./gcc/except.h +-2261541831b ./gcc/exgettext +- 791151591b ./gcc/explow.c +- 560380472b ./gcc/expmed.c +-4170598620b ./gcc/expr.c +-3261810763b ./gcc/expr.h +-1075776863b ./gcc/extend.texi +- 217416175b ./gcc/f/ansify.c +-2726691361b ./gcc/f/assert.j +- 473141573b ./gcc/f/bad.c +- 378349261b ./gcc/f/bad.def +-2944793883b ./gcc/f/bad.h +-1691322623b ./gcc/f/bit.c +- 787197484b ./gcc/f/bit.h +- 535953754b ./gcc/f/bld.c +- 806295869b ./gcc/f/bld.h +-2128697889b ./gcc/f/bld-op.def +-4256541113b ./gcc/f/BUGS +- 235013049b ./gcc/f/bugs0.texi +-1622614290b ./gcc/f/bugs.texi +- 381563979b ./gcc/f/ChangeLog +-4225493150b ./gcc/f/ChangeLog.0 +- 70432011b ./gcc/f/com.c +-1897164499b ./gcc/f/com.h +-1558553523b ./gcc/f/com-rt.def +-3702808499b ./gcc/f/config.j +-1975190636b ./gcc/f/config-lang.in +- 508204516b ./gcc/f/convert.j +- 618178673b ./gcc/f/data.c +- 224874956b ./gcc/f/data.h +-2449531320b ./gcc/f/equiv.c +- 500183067b ./gcc/f/equiv.h +- 779312674b ./gcc/f/expr.c +-2989892382b ./gcc/f/expr.h +-4214340594b ./gcc/f/ffe.texi +-3980765198b ./gcc/f/fini.c +-3358911103b ./gcc/f/flags.j +-2954450194b ./gcc/f/g77.1 +- 517049530b ./gcc/f/g77install.texi +- 439964818b ./gcc/f/g77spec.c +-2370700560b ./gcc/f/g77.texi +-1124705383b ./gcc/f/glimits.j +-1736110997b ./gcc/f/global.c +- 368896602b ./gcc/f/global.h +-1434858771b ./gcc/f/hconfig.j +-3914027293b ./gcc/f/implic.c +-2480459444b ./gcc/f/implic.h +-2403284330b ./gcc/final.c +-2287601317b ./gcc/f/info-b.def +-1125228698b ./gcc/f/info.c +-3911039718b ./gcc/f/info.h +-2157151689b ./gcc/f/info-k.def +-2242176401b ./gcc/f/info-w.def +-1909977580b ./gcc/f/input.j +-1052051833b ./gcc/f/INSTALL +-2706065712b ./gcc/f/install0.texi +-1553671025b ./gcc/f/intdoc.c +-2865476752b ./gcc/f/intdoc.in +-1518221274b ./gcc/f/intdoc.texi +-1388558014b ./gcc/f/intrin.c +- 602300071b ./gcc/f/intrin.def +-1323435971b ./gcc/f/intrin.h +-3072760907b ./gcc/fixcpp +-2559193818b ./gcc/fix-header.c +-1149682325b ./gcc/fixinc/fixinc.dgux +-3961460258b ./gcc/fixinc/fixinc.interix +-4036402473b ./gcc/fixinc/fixinc.irix +- 656477185b ./gcc/fixinc/fixincl.c +- 895346234b ./gcc/fixinc/fixincl.sh +-1486812617b ./gcc/fixinc/fixincl.tpl +-1991057534b ./gcc/fixinc/fixincl.x +-4278535406b ./gcc/fixinc/fixinc.ptx +-2691944848b ./gcc/fixinc/fixinc.sco +-4088989114b ./gcc/fixinc/fixinc.svr4 +-3500071236b ./gcc/fixinc/fixinc.winnt +-2119627668b ./gcc/fixinc/fixinc.wrap +-3531147889b ./gcc/fixinc/fixinc.x86-linux-gnu +-3096339196b ./gcc/fixinc/genfixes +-3678653058b ./gcc/fixinc/gnu-regex.c +- 916937206b ./gcc/fixinc/gnu-regex.h +-1738055537b ./gcc/fixinc/hackshell.tpl +-1500496790b ./gcc/fixinc/inclhack.def +-2612327374b ./gcc/fixinc/inclhack.sh +-1368845910b ./gcc/fixinc/inclhack.tpl +-3007430561b ./gcc/fixincludes +- 489448684b ./gcc/fixinc/Makefile.in +-1847384514b ./gcc/fixinc/mkfixinc.sh +- 851356889b ./gcc/fixinc-nt.sed +-1534809572b ./gcc/fixinc/procopen.c +-1839369333b ./gcc/fixinc/README +-3334153107b ./gcc/fixinc/server.c +-2227780997b ./gcc/fixinc/server.h +-1852958240b ./gcc/fixproto +-1861938661b ./gcc/f/lab.c +-1912790643b ./gcc/f/lab.h +-1510998759b ./gcc/flags.h +- 371449608b ./gcc/f/lang-options.h +- 480638506b ./gcc/f/lang-specs.h +-2754711212b ./gcc/f/lex.c +-3648980141b ./gcc/f/lex.h +- 14144180b ./gcc/floatlib.c +-1901335397b ./gcc/flow.c +-1081048037b ./gcc/f/Makefile.in +-3240533767b ./gcc/f/Make-lang.in +-1427501723b ./gcc/f/malloc.c +-3829974116b ./gcc/f/malloc.h +-2687881356b ./gcc/f/name.c +-2439587488b ./gcc/f/name.h +-1381266112b ./gcc/f/NEWS +-3453379674b ./gcc/f/news0.texi +-2527995912b ./gcc/f/news.texi +-4151647125b ./gcc/fold-const.c +-2165020172b ./gcc/f/output.j +-3852951627b ./gcc/f/parse.c +- 370126662b ./gcc/f/proj.c +-1775989584b ./gcc/f/proj.h +-1074929281b ./gcc/fp-test.c +-1166799302b ./gcc/frame.c +-2039949872b ./gcc/frame.h +- 281424983b ./gcc/f/README +-2710292864b ./gcc/f/RELEASE-PREP +- 853676495b ./gcc/f/root.texi +-4136399389b ./gcc/f/rtl.j +-3694162803b ./gcc/FSFChangeLog +- 232745070b ./gcc/FSFChangeLog.10 +-2525829644b ./gcc/FSFChangeLog.11 +-3041074607b ./gcc/f/src.c +- 95224294b ./gcc/f/src.h +-3725562111b ./gcc/f/sta.c +-4016204844b ./gcc/f/sta.h +- 160388911b ./gcc/f/stb.c +-2971641335b ./gcc/f/stb.h +-3466162958b ./gcc/f/st.c +- 931308304b ./gcc/f/stc.c +- 495996435b ./gcc/f/stc.h +-2353122658b ./gcc/f/std.c +-1726735653b ./gcc/f/std.h +-2696390307b ./gcc/f/ste.c +- 480358952b ./gcc/f/ste.h +-1121987325b ./gcc/f/st.h +-1100581971b ./gcc/f/storag.c +-2376153183b ./gcc/f/storag.h +-2404416327b ./gcc/f/stp.c +-1012274389b ./gcc/f/stp.h +-3722860946b ./gcc/f/str-1t.fin +-2828127862b ./gcc/f/str-2t.fin +- 920153914b ./gcc/f/str.c +-4215029898b ./gcc/f/str-fo.fin +-2319274141b ./gcc/f/str.h +- 281471485b ./gcc/f/str-io.fin +-3735910053b ./gcc/f/str-nq.fin +-3134124633b ./gcc/f/str-op.fin +-2608567153b ./gcc/f/str-ot.fin +-1385497101b ./gcc/f/sts.c +- 776207233b ./gcc/f/sts.h +- 854662715b ./gcc/f/stt.c +-3890711200b ./gcc/f/stt.h +-2668056056b ./gcc/f/stu.c +-2872877005b ./gcc/f/stu.h +- 857063390b ./gcc/f/stv.c +- 939390778b ./gcc/f/stv.h +-2156320080b ./gcc/f/stw.c +-1162160075b ./gcc/f/stw.h +- 589544660b ./gcc/f/symbol.c +-1323122026b ./gcc/f/symbol.def +-4185634583b ./gcc/f/symbol.h +-2622255846b ./gcc/f/system.j +-1226777705b ./gcc/f/target.c +- 79936810b ./gcc/f/target.h +-3340806137b ./gcc/f/tconfig.j +-1211026091b ./gcc/f/tm.j +-1216551947b ./gcc/f/top.c +-1098457131b ./gcc/f/top.h +- 419208514b ./gcc/f/toplev.j +- 252823133b ./gcc/f/tree.j +-3443401298b ./gcc/f/type.c +-1269043734b ./gcc/f/type.h +- 931660813b ./gcc/function.c +-3875594368b ./gcc/function.h +-1945284764b ./gcc/future.options +-1685579004b ./gcc/f/version.c +-1880947867b ./gcc/f/version.h +- 106965244b ./gcc/f/where.c +-2325578298b ./gcc/f/where.h +- 970542118b ./gcc/gansidecl.h +-2917485219b ./gcc/gbl-ctors.h +-3430444432b ./gcc/gcc.1 +-1943415070b ./gcc/gcc.c +-3891935819b ./gcc/gcc.hlp +-3125776691b ./gcc/gccspec.c +-3065898977b ./gcc/gcc.texi +- 664852402b ./gcc/gcov.c +-2459769831b ./gcc/gcov-io.h +-3179576637b ./gcc/gcov.texi +- 294189760b ./gcc/gcse.c +-3926621640b ./gcc/.gdbinit +-1025000942b ./gcc/genattr.c +- 169320310b ./gcc/genattrtab.c +- 842498962b ./gcc/gencheck.c +-1894551849b ./gcc/gencodes.c +- 231213526b ./gcc/genconfig.c +-1669866800b ./gcc/genemit.c +- 778908439b ./gcc/genextract.c +-1659224190b ./gcc/genflags.c +- 926730582b ./gcc/gengenrtl.c +-1595340092b ./gcc/genmultilib +- 310947624b ./gcc/genopinit.c +-3963015372b ./gcc/genoutput.c +-3774435322b ./gcc/genpeep.c +-2750373510b ./gcc/gen-protos.c +-3049217266b ./gcc/genrecog.c +- 793444673b ./gcc/getpwd.c +-3231952244b ./gcc/ginclude/iso646.h +-2766673945b ./gcc/ginclude/math-3300.h +-3047408322b ./gcc/ginclude/math-68881.h +- 460526048b ./gcc/ginclude/ppc-asm.h +-2576905081b ./gcc/ginclude/proto.h +-3051986061b ./gcc/ginclude/stdarg.h +- 415638091b ./gcc/ginclude/stdbool.h +-2283270051b ./gcc/ginclude/stddef.h +- 453330149b ./gcc/ginclude/va-alpha.h +- 933079081b ./gcc/ginclude/va-arc.h +-3120669586b ./gcc/ginclude/va-c4x.h +- 236728305b ./gcc/ginclude/va-clipper.h +-4090551750b ./gcc/ginclude/va-h8300.h +-3217212262b ./gcc/ginclude/va-i860.h +-3914487993b ./gcc/ginclude/va-i960.h +- 575389008b ./gcc/ginclude/va-m32r.h +-3820174378b ./gcc/ginclude/va-m88k.h +-3838446084b ./gcc/ginclude/va-mips.h +-1429231627b ./gcc/ginclude/va-mn10200.h +-2800466058b ./gcc/ginclude/va-mn10300.h +-1416963815b ./gcc/ginclude/va-pa.h +-4212798237b ./gcc/ginclude/va-ppc.h +- 192835038b ./gcc/ginclude/va-pyr.h +-1142757302b ./gcc/ginclude/varargs.h +-2372760626b ./gcc/ginclude/va-sh.h +- 264710164b ./gcc/ginclude/va-sparc.h +-3150115362b ./gcc/ginclude/va-spur.h +-1552889664b ./gcc/ginclude/va-v850.h +-1634989919b ./gcc/glimits.h +-2899801624b ./gcc/global.c +-4118591518b ./gcc/gmon.c +-1559802185b ./gcc/graph.c +-2127526719b ./gcc/gstab.h +-2040904551b ./gcc/gsyms.h +- 808024354b ./gcc/gsyslimits.h +-2263169284b ./gcc/gthr-dce.h +- 157579409b ./gcc/gthr.h +- 305150265b ./gcc/gthr-posix.h +-4129564918b ./gcc/gthr-single.h +- 303295415b ./gcc/gthr-solaris.h +- 387661304b ./gcc/gthr-vxworks.h +-3033261248b ./gcc/haifa-sched.c +-2043477270b ./gcc/halfpic.c +- 819272895b ./gcc/halfpic.h +-2507465025b ./gcc/hard-reg-set.h +-3356619194b ./gcc/hash.c +- 56239559b ./gcc/hash.h +-3658640867b ./gcc/hwint.h +-3443517934b ./gcc/input.h +- 551406095b ./gcc/INSTALL +- 462692392b ./gcc/install1.texi +-2303893284b ./gcc/install.texi +- 171434603b ./gcc/integrate.c +- 662482660b ./gcc/integrate.h +-1855120889b ./gcc/intl/bindtextdom.c +-1933110400b ./gcc/intl.c +-2763549264b ./gcc/intl/cat-compat.c +-3384575285b ./gcc/intl/ChangeLog +-4073502146b ./gcc/intl/dcgettext.c +-1792432593b ./gcc/intl/dgettext.c +-2307224772b ./gcc/intl/explodename.c +-3238681487b ./gcc/intl/finddomain.c +-1265937805b ./gcc/intl/gettext.c +- 789935145b ./gcc/intl/gettext.h +-3071290636b ./gcc/intl/gettextP.h +-1326021680b ./gcc/intl.h +-2389284831b ./gcc/intl/hash-string.h +-1443767269b ./gcc/intl/intl-compat.c +- 93883941b ./gcc/intl/l10nflist.c +-1703356123b ./gcc/intl/libgettext.h +-3263658828b ./gcc/intl/linux-msg.sed +-3800232883b ./gcc/intl/loadinfo.h +-3035183298b ./gcc/intl/loadmsgcat.c +-2553840489b ./gcc/intl/localealias.c +- 834956016b ./gcc/intl/Makefile.in +- 223588995b ./gcc/intl/po2tbl.sed.in +-4175310706b ./gcc/intl/textdomain.c +-1035788439b ./gcc/intl/VERSION +-2960721199b ./gcc/intl/xopen-msg.sed +-3254236658b ./gcc/invoke.texi +-2541917855b ./gcc/java/buffer.c +-4285191557b ./gcc/java/buffer.h +-2798115754b ./gcc/java/ChangeLog +-3944613375b ./gcc/java/check-init.c +-2172553547b ./gcc/java/class.c +-2150049623b ./gcc/java/config-lang.in +- 263606155b ./gcc/java/constants.c +-2645981469b ./gcc/java/convert.h +-3898411597b ./gcc/java/decl.c +- 464463881b ./gcc/java/except.c +- 488529983b ./gcc/java/expr.c +-2221104313b ./gcc/java/gjavah.c +-3168623072b ./gcc/java/java-except.h +-1953641142b ./gcc/java/java-opcodes.h +-2538410445b ./gcc/java/javaop.def +-2319028764b ./gcc/java/javaop.h +-1839221595b ./gcc/java/java-tree.def +-4020305543b ./gcc/java/java-tree.h +-2908509252b ./gcc/java/jcf-depend.c +-2265467689b ./gcc/java/jcf-dump.c +-3601445887b ./gcc/java/jcf.h +- 681476223b ./gcc/java/jcf-io.c +-3801318363b ./gcc/java/jcf-parse.c +-3550312270b ./gcc/java/jcf-path.c +-1450387783b ./gcc/java/jcf-reader.c +-3501416255b ./gcc/java/jcf-write.c +-1032226897b ./gcc/java/jvgenmain.c +-4180971331b ./gcc/java/jv-scan.c +-1757675418b ./gcc/java/jvspec.c +-2610912080b ./gcc/java/keyword.gperf +- 566474720b ./gcc/java/keyword.h +-1163192502b ./gcc/java/lang.c +-1495202455b ./gcc/java/lang-options.h +-2734008933b ./gcc/java/lang-specs.h +-3982191419b ./gcc/java/lex.c +-1006043234b ./gcc/java/lex.h +-2987027027b ./gcc/java/Makefile.in +-1080111953b ./gcc/java/Make-lang.in +-2197076845b ./gcc/java/mangle.c +-2978497967b ./gcc/java/parse.c +-4054432291b ./gcc/java/parse.h +-2568809376b ./gcc/java/parse-scan.c +- 753887653b ./gcc/java/parse-scan.y +-4132497179b ./gcc/java/parse.y +- 154882617b ./gcc/java/typeck.c +- 820833694b ./gcc/java/verify.c +- 617116283b ./gcc/java/xref.c +-1445939964b ./gcc/java/xref.h +-2739979461b ./gcc/java/zextract.c +- 314700945b ./gcc/java/zipfile.h +-3936538134b ./gcc/jump.c +-1567003496b ./gcc/just-fixinc +-2771840517b ./gcc/LANGUAGES +- 762307283b ./gcc/lcm.c +-2942334943b ./gcc/libgcc1.c +- 559083009b ./gcc/libgcc1-test.c +-1307299979b ./gcc/libgcc2.c +-2497915666b ./gcc/limitx.h +-1045880008b ./gcc/limity.h +-1454959977b ./gcc/listing +- 189506952b ./gcc/local-alloc.c +-4192241275b ./gcc/longlong.h +- 110068666b ./gcc/loop.c +-2355598769b ./gcc/loop.h +-3636819710b ./gcc/machmode.def +-1353109969b ./gcc/machmode.h +-3645328946b ./gcc/Makefile.in +-1625899928b ./gcc/makefile.vms +-1146561233b ./gcc/make-l2.com +-2334538597b ./gcc/mbchar.c +-2000151463b ./gcc/mbchar.h +-1067305904b ./gcc/md.texi +-2023894356b ./gcc/mips-tdump.c +-3783103045b ./gcc/mips-tfile.c +-3743720878b ./gcc/mkinstalldirs +-1597314052b ./gcc/move-if-change +-2412572471b ./gcc/NEWS +-3548094150b ./gcc/objc/config-lang.in +- 371515603b ./gcc/objc/lang-specs.h +-3850085860b ./gcc/objc/Makefile.in +- 484837376b ./gcc/objc/Make-lang.in +-1845627730b ./gcc/objc/objc-act.c +-4009484909b ./gcc/objc/objc-act.h +-1567868913b ./gcc/objc/objc.gperf +-4217213030b ./gcc/objc/objc-parse.c +-2333685510b ./gcc/objc/objc-parse.y +-3294870779b ./gcc/objc/objc-tree.def +-3823063152b ./gcc/objc/README +- 406459598b ./gcc/ONEWS +- 877735055b ./gcc/optabs.c +- 593950303b ./gcc/output.h +-1987145824b ./gcc/patch-apollo-includes +- 520971098b ./gcc/pcp.h +- 184341727b ./gcc/po/ChangeLog +-3044528304b ./gcc/po/en_UK.po +-3859505195b ./gcc/po/gcc.pot +- 439509068b ./gcc/po/Makefile.in.in +-3326298473b ./gcc/po/POTFILES.in +-2074713163b ./gcc/prefix.c +-3118553823b ./gcc/prefix.h +-2711262234b ./gcc/print-rtl.c +-2711231846b ./gcc/print-tree.c +-4077477563b ./gcc/PROBLEMS +- 611568329b ./gcc/profile.c +- 649092178b ./gcc/protoize.c +-1892787257b ./gcc/pself1.c +-2107847039b ./gcc/pself2.c +-3514013187b ./gcc/pself3.c +- 163393634b ./gcc/pself4.c +-2951530756b ./gcc/pself5.c +-2508419394b ./gcc/pself.c +-4190809404b ./gcc/README +- 464706846b ./gcc/README.ACORN +- 963966184b ./gcc/README.ALTOS +- 712804111b ./gcc/README.APOLLO +- 722850134b ./gcc/README-bugs +-3041263538b ./gcc/README.C4X +-4254837739b ./gcc/README.DWARF +-3310775363b ./gcc/README-fixinc +-3034235340b ./gcc/README.FRESCO +- 317578445b ./gcc/README.gnat +-1941060778b ./gcc/README.NS32K +-2420116021b ./gcc/README.RS6000 +-2521272425b ./gcc/README.TRAD +- 775999928b ./gcc/README.X11 +-2075044355b ./gcc/real.c +-3281064342b ./gcc/real.h +-2135251073b ./gcc/recog.c +-1103677539b ./gcc/recog.h +-2161752073b ./gcc/regclass.c +-2098216394b ./gcc/regmove.c +-1782287297b ./gcc/regs.h +- 614377713b ./gcc/reg-stack.c +-1226896505b ./gcc/reload1.c +- 211835660b ./gcc/reload.c +-2046817112b ./gcc/reload.h +- 93997260b ./gcc/reorg.c +-3017934975b ./gcc/resource.c +- 209684395b ./gcc/resource.h +-2790114237b ./gcc/rtlanal.c +- 719571646b ./gcc/rtl.c +-1956957925b ./gcc/rtl.def +- 100697304b ./gcc/rtl.h +-2287271260b ./gcc/rtl.texi +-3890804476b ./gcc/sbitmap.c +-3170034182b ./gcc/sbitmap.h +-4293978266b ./gcc/scan.c +-1983543926b ./gcc/scan-decls.c +- 375975730b ./gcc/scan.h +-2610884529b ./gcc/scan-types.sh +- 399300194b ./gcc/sched.c +-2531824839b ./gcc/sdbout.c +-1547148728b ./gcc/sdbout.h +-1427751232b ./gcc/SERVICE +-3345261950b ./gcc/sort-protos +-2395322097b ./gcc/stab.def +-1870121749b ./gcc/stack.h +-1261167595b ./gcc/stmt.c +- 173861812b ./gcc/stor-layout.c +- 430647095b ./gcc/stupid.c +-4023966855b ./gcc/sys-protos.h +-1831619866b ./gcc/system.h +- 482558466b ./gcc/sys-types.h +-4046804328b ./gcc/TESTS.FLUNK +-1728175212b ./gcc/texinfo.tex +-1269566830b ./gcc/tlink.c +-1961134148b ./gcc/tm.texi +-3455843440b ./gcc/toplev.c +-2536770532b ./gcc/toplev.h +-3851880366b ./gcc/tree.c +-3657596657b ./gcc/tree.def +-4277752559b ./gcc/tree.h +-4139263293b ./gcc/typeclass.h +- 17641651b ./gcc/unprotoize.c +-2772721254b ./gcc/unroll.c +-3475782279b ./gcc/varasm.c +- 673114644b ./gcc/varray.c +-3707241117b ./gcc/varray.h +- 666569016b ./gcc/version.c +-1040256635b ./gcc/vmsconfig.com +- 445093373b ./gcc/xcoffout.c +-4059141961b ./gcc/xcoffout.h +-3610260853b ./include/ansidecl.h +-3890668818b ./include/ChangeLog +- 430871781b ./include/COPYING +-2114096985b ./include/demangle.h +-3641253635b ./include/floatformat.h +-1425556021b ./include/fnmatch.h +-3749878603b ./include/getopt.h +-3770801932b ./include/libiberty.h +- 839668154b ./include/objalloc.h +-3443875779b ./include/obstack.h +-2220598482b ./include/splay-tree.h +-2321237109b ./include/symcat.h +-3784734542b ./install/BINARIES +-2297532680b ./install/binaries.html +- 123155615b ./install/BUILD +-3075941658b ./install/build.html +-3259287787b ./install/CONFIGURE +-3928709946b ./install/configure.html +-2510304657b ./install/dec-osf-shlibstdc++.patch +-1331399401b ./install/DOWNLOAD +-4006568097b ./install/download.html +-3020510417b ./install/FINALINSTALL +-4086994534b ./install/finalinstall.html +-2403531330b ./install/glibc-2.2.patch +-3275322004b ./install/INDEX +- 959109429b ./install/index.html +-1329440059b ./INSTALL/README +- 274447927b ./install/sco_osr5_g77.patch +-4171599065b ./install-sh +-1640823812b ./install/SPECIFIC +-4183903535b ./install/specific.html +-1787754765b ./install/TEST +-4069947514b ./install/test.html +-4114729160b ./install/x86-sol2-gas.patch +-3171868308b ./libchill/abstime.c +-3904980659b ./libchill/allgmem.c +-1902887353b ./libchill/allmem.c +-3505518731b ./libchill/allocate.c +- 822157090b ./libchill/andps.c +- 800603049b ./libchill/auxtypes.h +-1044211637b ./libchill/basicio.c +- 527568579b ./libchill/bitstring.h +-1098723731b ./libchill/cardps.c +-3175298237b ./libchill/cause.c +-3876540257b ./libchill/ChangeLog +- 816576333b ./libchill/checkcycle.c +-4091379471b ./libchill/chillrt0.c +-1548203605b ./libchill/chillstdio.c +- 855022130b ./libchill/concatps.c +- 419254841b ./libchill/concatstr.c +-4223652781b ./libchill/configure +-3195026521b ./libchill/configure.in +-1943460260b ./libchill/continue.c +-2425783790b ./libchill/convdurrtstime.c +-2756869635b ./libchill/copyps.c +-1467089154b ./libchill/delaycase.c +-3580568616b ./libchill/delete.c +-3133890689b ./libchill/diffps.c +- 715707191b ./libchill/eoln.c +-2246896513b ./libchill/eqps.c +-1537344683b ./libchill/eqstr.c +-1226508965b ./libchill/exh.c +- 830920930b ./libchill/exhstack.c +-1978839637b ./libchill/existing.c +-2676080997b ./libchill/ffsetclrps.c +- 939905505b ./libchill/ffsetps.c +- 238505831b ./libchill/fileio.h +-1514958735b ./libchill/flsetclrps.c +-1186569742b ./libchill/flsetps.c +-1346569743b ./libchill/format.c +-1728681327b ./libchill/format.h +-2081313636b ./libchill/getassoc.c +-1204638380b ./libchill/gettextaccess.c +-2748004467b ./libchill/gettextindex.c +- 78624967b ./libchill/gettextrecord.c +- 805369965b ./libchill/getusage.c +-1168666024b ./libchill/inbitstr.c +-3331772244b ./libchill/indexable.c +-1075116533b ./libchill/inps.c +-1820846825b ./libchill/inttime.c +-1677699214b ./libchill/ioerror.c +-3575771519b ./libchill/ioerror.h +- 915469248b ./libchill/iomodes.h +-1863271808b ./libchill/isassociated.c +-2418302523b ./libchill/leps.c +-2141063010b ./libchill/ltps.c +-1416141016b ./libchill/ltstr.c +-2330930218b ./libchill/Makefile.in +-4071908131b ./libchill/memmove.c +- 562316065b ./libchill/neps.c +-1084460263b ./libchill/notps.c +-3228934723b ./libchill/orps.c +-2186942452b ./libchill/outoffile.c +-1603876353b ./libchill/powerset.h +-3440385929b ./libchill/printbuffer.c +- 271798651b ./libchill/printevent.c +-3017510030b ./libchill/queuelength.c +-3848215431b ./libchill/readable.c +-2438603273b ./libchill/readrecord.c +-3419304553b ./libchill/remaintime.c +-2537598687b ./libchill/retmem.c +-2687117950b ./libchill/rtltypes.h +-4066459225b ./libchill/rts.c +- 196671519b ./libchill/rtsdummy.c +- 952062653b ./libchill/rts.h +-2211921632b ./libchill/sendbuffer.c +-3570760248b ./libchill/sequencible.c +-2777336973b ./libchill/setbitps.c +-3191515968b ./libchill/setbits.c +-4052531064b ./libchill/settextaccess.c +- 410359432b ./libchill/settextindex.c +-4282557843b ./libchill/settextrecord.c +-1586152978b ./libchill/sliceps.c +- 204113253b ./libchill/terminate.c +- 950885582b ./libchill/unhex1.c +-2533393221b ./libchill/unhex.c +-3377634007b ./libchill/variable.c +- 169021687b ./libchill/waitbuffer.c +-2574094998b ./libchill/waituntil.c +-2472500066b ./libchill/writeable.c +-1972501079b ./libchill/writerecord.c +- 927204991b ./libchill/xorps.c +-3265611093b ./libf2c/ChangeLog +-2766136236b ./libf2c/changes.netlib +- 283485356b ./libf2c/configure +- 350135098b ./libf2c/configure.in +-2487502900b ./libf2c/disclaimer.netlib +- 332556269b ./libf2c/f2cext.c +- 259100451b ./libf2c/f2c.h +- 793010571b ./libf2c/g2c.hin +-1304659322b ./libf2c/libF77/abort_.c +-2143735092b ./libf2c/libF77/c_abs.c +-3290078007b ./libf2c/libF77/cabs.c +-4102372920b ./libf2c/libF77/c_cos.c +-2262142301b ./libf2c/libF77/c_div.c +-3847115202b ./libf2c/libF77/c_exp.c +-2878052462b ./libf2c/libF77/c_log.c +- 800953737b ./libf2c/libF77/configure +- 823261841b ./libf2c/libF77/configure.in +-3389634672b ./libf2c/libF77/c_sin.c +-1183895118b ./libf2c/libF77/c_sqrt.c +-3030188690b ./libf2c/libF77/d_abs.c +-1507325734b ./libf2c/libF77/d_acos.c +-4159233847b ./libf2c/libF77/d_asin.c +-2427060621b ./libf2c/libF77/d_atan.c +-1296492558b ./libf2c/libF77/d_atn2.c +-3575888780b ./libf2c/libF77/d_cnjg.c +-4073305831b ./libf2c/libF77/d_cos.c +-3091338483b ./libf2c/libF77/d_cosh.c +- 810995689b ./libf2c/libF77/d_dim.c +-3392851220b ./libf2c/libF77/derf_.c +-1250156454b ./libf2c/libF77/derfc_.c +- 858325700b ./libf2c/libF77/d_exp.c +-2046018081b ./libf2c/libF77/d_imag.c +-3730554656b ./libf2c/libF77/d_int.c +-2573277355b ./libf2c/libF77/d_lg10.c +-2735602877b ./libf2c/libF77/d_log.c +-2463902440b ./libf2c/libF77/d_mod.c +-1315838709b ./libf2c/libF77/d_nint.c +- 865009317b ./libf2c/libF77/d_prod.c +- 93986231b ./libf2c/libF77/d_sign.c +-3550952375b ./libf2c/libF77/d_sin.c +-3529247529b ./libf2c/libF77/d_sinh.c +- 198362081b ./libf2c/libF77/d_sqrt.c +- 836556354b ./libf2c/libF77/d_tan.c +-4186903397b ./libf2c/libF77/d_tanh.c +- 779737923b ./libf2c/libF77/dtime_.c +-3387281619b ./libf2c/libF77/ef1asc_.c +- 49504728b ./libf2c/libF77/ef1cmc_.c +-2553568528b ./libf2c/libF77/erf_.c +-1439324285b ./libf2c/libF77/erfc_.c +-2054149269b ./libf2c/libF77/etime_.c +-2926211158b ./libf2c/libF77/exit_.c +-3294101487b ./libf2c/libF77/f2ch.add +- 317136894b ./libf2c/libF77/F77_aloc.c +- 262909947b ./libf2c/libF77/getarg_.c +-1053635766b ./libf2c/libF77/getenv_.c +-1464793891b ./libf2c/libF77/h_abs.c +-4172389826b ./libf2c/libF77/h_dim.c +-4004178848b ./libf2c/libF77/h_dnnt.c +-4111775146b ./libf2c/libF77/h_indx.c +-3370033031b ./libf2c/libF77/h_len.c +- 577774165b ./libf2c/libF77/hl_ge.c +-1370298730b ./libf2c/libF77/hl_gt.c +-1915814870b ./libf2c/libF77/hl_le.c +- 368944666b ./libf2c/libF77/hl_lt.c +-2764887666b ./libf2c/libF77/h_mod.c +-3401291699b ./libf2c/libF77/h_nint.c +-1347560191b ./libf2c/libF77/h_sign.c +-2473169636b ./libf2c/libF77/i_abs.c +-1210543358b ./libf2c/libF77/iargc_.c +-4060206463b ./libf2c/libF77/i_dim.c +-2964212421b ./libf2c/libF77/i_dnnt.c +-2958321828b ./libf2c/libF77/i_indx.c +-1478370784b ./libf2c/libF77/i_len.c +-1964370981b ./libf2c/libF77/i_mod.c +- 956761106b ./libf2c/libF77/i_nint.c +-3590616869b ./libf2c/libF77/i_sign.c +- 443393905b ./libf2c/libF77/lbitbits.c +-3575626916b ./libf2c/libF77/lbitshft.c +-4105379815b ./libf2c/libF77/l_ge.c +-4110886289b ./libf2c/libF77/l_gt.c +-1122360099b ./libf2c/libF77/l_le.c +-3320765614b ./libf2c/libF77/l_lt.c +-1531755714b ./libf2c/libF77/main.c +-1147257543b ./libf2c/libF77/Makefile.in +-1177519321b ./libf2c/libF77/makefile.netlib +-1384146782b ./libf2c/libF77/Notice +-3561723582b ./libf2c/libF77/pow_ci.c +- 80946260b ./libf2c/libF77/pow_dd.c +-1800535765b ./libf2c/libF77/pow_di.c +-3408442423b ./libf2c/libF77/pow_hh.c +-4238680779b ./libf2c/libF77/pow_ii.c +- 483795003b ./libf2c/libF77/pow_qq.c +-2828214001b ./libf2c/libF77/pow_ri.c +-1113537371b ./libf2c/libF77/pow_zi.c +-1192551031b ./libf2c/libF77/pow_zz.c +-1528868299b ./libf2c/libF77/qbitbits.c +-2508152427b ./libf2c/libF77/qbitshft.c +-3223994220b ./libf2c/libF77/r_abs.c +-3352864098b ./libf2c/libF77/r_acos.c +-3384723664b ./libf2c/libF77/r_asin.c +-1988008783b ./libf2c/libF77/r_atan.c +- 713014287b ./libf2c/libF77/r_atn2.c +- 823683848b ./libf2c/libF77/r_cnjg.c +- 186941398b ./libf2c/libF77/r_cos.c +-3322305540b ./libf2c/libF77/r_cosh.c +-3466251772b ./libf2c/libF77/r_dim.c +-3594711912b ./libf2c/libF77/README.netlib +-3655480343b ./libf2c/libF77/r_exp.c +- 457367872b ./libf2c/libF77/r_imag.c +-1964745019b ./libf2c/libF77/r_int.c +- 361396536b ./libf2c/libF77/r_lg10.c +-2577838016b ./libf2c/libF77/r_log.c +-3015829361b ./libf2c/libF77/r_mod.c +-1801353496b ./libf2c/libF77/r_nint.c +- 617376052b ./libf2c/libF77/r_sign.c +-1330225769b ./libf2c/libF77/r_sin.c +-3815237833b ./libf2c/libF77/r_sinh.c +-3405603649b ./libf2c/libF77/r_sqrt.c +- 948857700b ./libf2c/libF77/r_tan.c +-2204673615b ./libf2c/libF77/r_tanh.c +-3673888216b ./libf2c/libF77/s_cat.c +-1366254496b ./libf2c/libF77/s_cmp.c +-3500695330b ./libf2c/libF77/s_copy.c +-3467937994b ./libf2c/libF77/setarg.c +- 273280446b ./libf2c/libF77/setsig.c +- 199330663b ./libf2c/libF77/sig_die.c +-1302607324b ./libf2c/libF77/signal1.h +-3496496096b ./libf2c/libF77/signal1.h0 +-4121880197b ./libf2c/libF77/signal_.c +-2017948720b ./libf2c/libF77/s_paus.c +-3826238395b ./libf2c/libF77/s_rnge.c +-3862265148b ./libf2c/libF77/s_stop.c +- 113341864b ./libf2c/libF77/system_.c +-2870764345b ./libf2c/libF77/Version.c +-1937893648b ./libf2c/libF77/z_abs.c +-2431309812b ./libf2c/libF77/z_cos.c +-3601348733b ./libf2c/libF77/z_div.c +- 654537628b ./libf2c/libF77/z_exp.c +-2915672930b ./libf2c/libF77/z_log.c +-2332417514b ./libf2c/libF77/z_sin.c +-4013824581b ./libf2c/libF77/z_sqrt.c +-1048680171b ./libf2c/libI77/backspace.c +-1402319189b ./libf2c/libI77/close.c +-3948477753b ./libf2c/libI77/configure +-2121845408b ./libf2c/libI77/configure.in +-1818051790b ./libf2c/libI77/dfe.c +-2808657081b ./libf2c/libI77/dolio.c +- 488413691b ./libf2c/libI77/due.c +-2943116808b ./libf2c/libI77/endfile.c +-4043373154b ./libf2c/libI77/err.c +-3294101487b ./libf2c/libI77/f2ch.add +-3487746107b ./libf2c/libI77/fio.h +-3915324911b ./libf2c/libI77/fmt.c +-4101507712b ./libf2c/libI77/fmt.h +-3758039267b ./libf2c/libI77/fmtlib.c +-1409031309b ./libf2c/libI77/fp.h +-1972443625b ./libf2c/libI77/ftell_.c +-1917699485b ./libf2c/libI77/iio.c +-2169344007b ./libf2c/libI77/ilnw.c +-1661250890b ./libf2c/libI77/inquire.c +- 771509778b ./libf2c/libI77/lio.h +-1189129125b ./libf2c/libI77/lread.c +-2727021368b ./libf2c/libI77/lwrite.c +-1536499154b ./libf2c/libI77/Makefile.in +-2636902289b ./libf2c/libI77/makefile.netlib +-1384146782b ./libf2c/libI77/Notice +-3695991855b ./libf2c/libI77/open.c +-2618650127b ./libf2c/libI77/rawio.h +-4237552624b ./libf2c/libI77/rdfmt.c +-3744878144b ./libf2c/libI77/README.netlib +-1734468511b ./libf2c/libI77/rewind.c +- 20341661b ./libf2c/libI77/rsfe.c +- 27319661b ./libf2c/libI77/rsli.c +-2441103295b ./libf2c/libI77/rsne.c +-3949468975b ./libf2c/libI77/sfe.c +-1382669245b ./libf2c/libI77/sue.c +-1986314725b ./libf2c/libI77/typesize.c +-2487538082b ./libf2c/libI77/uio.c +-3600895104b ./libf2c/libI77/util.c +-1438637311b ./libf2c/libI77/Version.c +-3746777128b ./libf2c/libI77/wref.c +-4089060144b ./libf2c/libI77/wrtfmt.c +-4073830155b ./libf2c/libI77/wsfe.c +-1149823364b ./libf2c/libI77/wsle.c +-3647229305b ./libf2c/libI77/wsne.c +-2417005419b ./libf2c/libI77/xwsne.c +-1842933802b ./libf2c/libU77/access_.c +-3277701818b ./libf2c/libU77/acconfig.h +-4189124123b ./libf2c/libU77/aclocal.m4 +-2803246243b ./libf2c/libU77/alarm_.c +- 481185218b ./libf2c/libU77/bes.c +-3531718858b ./libf2c/libU77/chdir_.c +-3571215248b ./libf2c/libU77/chmod_.c +-1946347792b ./libf2c/libU77/config.hin +-2761696709b ./libf2c/libU77/configure +-1049590455b ./libf2c/libU77/configure.in +-2637011133b ./libf2c/libU77/COPYING.LIB +-2938494220b ./libf2c/libU77/ctime_.c +-1581466296b ./libf2c/libU77/date_.c +-1509989013b ./libf2c/libU77/datetime_.c +-1344682531b ./libf2c/libU77/dbes.c +-1624711756b ./libf2c/libU77/dtime_.c +-3399203491b ./libf2c/libU77/etime_.c +-3155590370b ./libf2c/libU77/fdate_.c +-2936845924b ./libf2c/libU77/fgetc_.c +-1262136923b ./libf2c/libU77/flush1_.c +- 55475392b ./libf2c/libU77/fnum_.c +-1786809239b ./libf2c/libU77/fputc_.c +-3903452909b ./libf2c/libU77/fstat_.c +-3782463129b ./libf2c/libU77/gerror_.c +-1443084591b ./libf2c/libU77/getcwd_.c +-2258536089b ./libf2c/libU77/getgid_.c +-2010909588b ./libf2c/libU77/getlog_.c +-3431059629b ./libf2c/libU77/getpid_.c +- 72289587b ./libf2c/libU77/getuid_.c +-4086135446b ./libf2c/libU77/gmtime_.c +-2490508241b ./libf2c/libU77/hostnm_.c +-2769123674b ./libf2c/libU77/idate_.c +-1177948837b ./libf2c/libU77/ierrno_.c +-2294075352b ./libf2c/libU77/irand_.c +-1142470864b ./libf2c/libU77/isatty_.c +-2247164056b ./libf2c/libU77/itime_.c +-3704802748b ./libf2c/libU77/kill_.c +- 910885406b ./libf2c/libU77/link_.c +-1995276793b ./libf2c/libU77/lnblnk_.c +-3149128167b ./libf2c/libU77/lstat_.c +-2950191035b ./libf2c/libU77/ltime_.c +-2747046004b ./libf2c/libU77/Makefile.in +-2455391013b ./libf2c/libU77/mclock_.c +-4183902576b ./libf2c/libU77/perror_.c +- 572996563b ./libf2c/libU77/PROJECTS +-3798879256b ./libf2c/libU77/rand_.c +-2980229902b ./libf2c/libU77/README +-2297401196b ./libf2c/libU77/rename_.c +- 91467825b ./libf2c/libU77/secnds_.c +-3426498280b ./libf2c/libU77/second_.c +-1721102323b ./libf2c/libU77/sleep_.c +- 366913838b ./libf2c/libU77/srand_.c +- 216805921b ./libf2c/libU77/stamp-h.in +-1858264400b ./libf2c/libU77/stat_.c +- 398713372b ./libf2c/libU77/symlnk_.c +-2953563607b ./libf2c/libU77/sys_clock_.c +-4060599200b ./libf2c/libU77/time_.c +-3517906143b ./libf2c/libU77/ttynam_.c +-4227662958b ./libf2c/libU77/u77-test.f +- 387772730b ./libf2c/libU77/umask_.c +-1230596654b ./libf2c/libU77/unlink_.c +- 653953726b ./libf2c/libU77/Version.c +-2130799769b ./libf2c/libU77/vxtidate_.c +- 225869800b ./libf2c/libU77/vxttime_.c +- 481075804b ./libf2c/Makefile.in +-1384146782b ./libf2c/permission.netlib +-3111321221b ./libf2c/README +- 49125193b ./libf2c/readme.netlib +- 308226469b ./libf2c/TODO +-2735281877b ./libiberty/acconfig.h +-3328478890b ./libiberty/alloca.c +-4130347236b ./libiberty/alloca-conf.h +- 33013553b ./libiberty/argv.c +-4095921893b ./libiberty/asprintf.c +- 244715449b ./libiberty/atexit.c +-1980547224b ./libiberty/basename.c +-2078733360b ./libiberty/bcmp.c +-4095628943b ./libiberty/bcopy.c +-1355398667b ./libiberty/bzero.c +-2815379139b ./libiberty/calloc.c +-2736256076b ./libiberty/ChangeLog +- 354698691b ./libiberty/choose-temp.c +- 169448073b ./libiberty/clock.c +- 876083662b ./libiberty/concat.c +-1987387424b ./libiberty/config.h-vms +-2697801398b ./libiberty/config.in +-3500529335b ./libiberty/config/mh-aix +-3476234501b ./libiberty/config/mh-cxux7 +-1235651640b ./libiberty/config/mh-fbsd21 +-2131807358b ./libiberty/config/mh-windows +-3328594913b ./libiberty/config.table +-3518308570b ./libiberty/configure +-3679856537b ./libiberty/configure.bat +-2017474005b ./libiberty/configure.in +-2637011133b ./libiberty/COPYING.LIB +-3602665671b ./libiberty/copysign.c +-2264740542b ./libiberty/cplus-dem.c +-2375131771b ./libiberty/fdmatch.c +-1271920426b ./libiberty/floatformat.c +-2785383756b ./libiberty/fnmatch.c +-3219909843b ./libiberty/getcwd.c +-1831129985b ./libiberty/getopt1.c +-3178082722b ./libiberty/getopt.c +-3222194456b ./libiberty/getpagesize.c +-3642701231b ./libiberty/getruntime.c +-2427662967b ./libiberty/hex.c +-2509113063b ./libiberty/index.c +-3649773387b ./libiberty/insque.c +-2735028791b ./libiberty/makefile.dos +-4017752505b ./libiberty/Makefile.in +-2646805026b ./libiberty/makefile.vms +-3878644027b ./libiberty/memchr.c +- 621344439b ./libiberty/memcmp.c +-1234981574b ./libiberty/memcpy.c +- 453125218b ./libiberty/memmove.c +-3145829545b ./libiberty/memset.c +-2904718272b ./libiberty/mkstemps.c +-3930704547b ./libiberty/mpw.c +-2010995764b ./libiberty/mpw-config.in +-1580171809b ./libiberty/mpw-make.sed +-2503648631b ./libiberty/msdos.c +-2705348313b ./libiberty/objalloc.c +- 800431187b ./libiberty/obstack.c +-2232921109b ./libiberty/pexecute.c +- 298749640b ./libiberty/putenv.c +-1572495658b ./libiberty/random.c +-4016047250b ./libiberty/README +-2669806012b ./libiberty/rename.c +-2259647700b ./libiberty/rindex.c +-4196068288b ./libiberty/setenv.c +- 749341367b ./libiberty/sigsetmask.c +-2608485555b ./libiberty/spaces.c +-2202950326b ./libiberty/splay-tree.c +-1006482148b ./libiberty/strcasecmp.c +-3230937814b ./libiberty/strchr.c +-3756692660b ./libiberty/strdup.c +-2298840991b ./libiberty/strerror.c +-1880128423b ./libiberty/strncasecmp.c +-3749439866b ./libiberty/strrchr.c +- 661356859b ./libiberty/strsignal.c +-2094027097b ./libiberty/strstr.c +-1897243725b ./libiberty/strtod.c +- 343411197b ./libiberty/strtol.c +- 294867931b ./libiberty/strtoul.c +-1321572716b ./libiberty/testsuite/demangle-expected +-2389145348b ./libiberty/testsuite/Makefile.in +-1847764436b ./libiberty/testsuite/regress-demangle +-1688081427b ./libiberty/tmpnam.c +-2297185157b ./libiberty/vasprintf.c +- 863918326b ./libiberty/vfork.c +-3556593952b ./libiberty/vfprintf.c +- 690268404b ./libiberty/vmsbuild.com +-1198002722b ./libiberty/vprintf.c +-3353261530b ./libiberty/vsprintf.c +-1877317883b ./libiberty/waitpid.c +-1616442733b ./libiberty/xatexit.c +-2523832509b ./libiberty/xexit.c +-2377368504b ./libiberty/xmalloc.c +-1724714742b ./libiberty/xstrdup.c +-2509140929b ./libiberty/xstrerror.c +-4194376285b ./libio/builtinbuf.cc +- 147728042b ./libio/builtinbuf.h +-3296701766b ./libio/ChangeLog +-2265331360b ./libio/cleanup.c +- 863075231b ./libio/config/hpux.mt +-3958419758b ./libio/config/isc.mt +-3136700900b ./libio/config/linuxaxp1-libc-lock.h +-2386386160b ./libio/config/linuxaxp1.mt +-1351029660b ./libio/config/linuxaxp1-stdio-lock.h +-3553940929b ./libio/config/linuxlibc1.mt +-2009606708b ./libio/config/linux.mt +- 736046846b ./libio/config/mn10200.mt +-2337390500b ./libio/config/mtsafe.mt +-1967085932b ./libio/config/netware.mt +-3613302931b ./libio/config/sco4.mt +-3647155764b ./libio/config.shared +-3532200497b ./libio/configure.in +-1278171427b ./libio/dbz/altbytes +-3280508850b ./libio/dbz/byteflip.c +-3075099010b ./libio/dbz/case.c +-1151199141b ./libio/dbz/case.h +-1960818444b ./libio/dbz/configure.in +-1043385008b ./libio/dbz/dbz.1 +-2630996878b ./libio/dbz/dbz.3z +-3463957916b ./libio/dbz/dbz.c +- 72284668b ./libio/dbz/dbz.h +-3391491881b ./libio/dbz/dbzmain.c +-3639610345b ./libio/dbz/fake.c +-2606687708b ./libio/dbz/firstlast25 +-1509228428b ./libio/dbz/getmap +-2075241739b ./libio/dbz/Makefile.in +-3634181569b ./libio/dbz/random.c +-2356064683b ./libio/dbz/README +-2555759418b ./libio/dbz/revbytes +-3569928888b ./libio/dbz/stdio.h +-1279672359b ./libio/depend +-2948230925b ./libio/editbuf.cc +-3226618890b ./libio/editbuf.h +-3860799107b ./libio/filebuf.cc +-1392841754b ./libio/filedoalloc.c +-4138112945b ./libio/fileops.c +-2898387812b ./libio/floatconv.c +-1816553001b ./libio/floatio.h +-3592543552b ./libio/fstream.cc +-1169730972b ./libio/fstream.h +- 748297484b ./libio/genops.c +- 757482856b ./libio/gen-params +-2773979595b ./libio/include/empty.h +-4123879326b ./libio/indstream.cc +-4294052401b ./libio/indstream.h +- 347427047b ./libio/ioassign.cc +-3302132735b ./libio/ioextend.cc +-1805925285b ./libio/iofclose.c +-1236674438b ./libio/iofdopen.c +-1488023096b ./libio/iofeof.c +-2860719054b ./libio/ioferror.c +- 242305084b ./libio/iofflush.c +-3823517296b ./libio/iofflush_u.c +- 237511526b ./libio/iofgetpos.c +-3756840924b ./libio/iofgets.c +- 632513053b ./libio/iofopen.c +- 123538350b ./libio/iofprintf.c +-3233629075b ./libio/iofputs.c +-2772900682b ./libio/iofread.c +-1398668655b ./libio/iofscanf.c +-2099649424b ./libio/iofsetpos.c +-3733163483b ./libio/ioftell.c +-2084222776b ./libio/iofwrite.c +-2575879849b ./libio/iogetc.c +- 976413790b ./libio/iogetdelim.c +-1970748550b ./libio/iogetline.c +-1120049602b ./libio/iogets.c +-2058656960b ./libio/ioignore.c +-3189700616b ./libio/iolibio.h +- 773210395b ./libio/iomanip.cc +-3321477813b ./libio/iomanip.h +- 168010012b ./libio/iopadn.c +- 676804209b ./libio/ioperror.c +-1561025893b ./libio/iopopen.c +-2346730076b ./libio/ioprims.c +-3336570520b ./libio/ioprintf.c +-3919423487b ./libio/ioputc.c +-2614366366b ./libio/ioputs.c +-4211169173b ./libio/ioscanf.c +- 52814081b ./libio/ioseekoff.c +-2391164294b ./libio/ioseekpos.c +-1321290154b ./libio/iosetbuffer.c +-2898378357b ./libio/iosetvbuf.c +-4197952251b ./libio/iosprintf.c +- 684845505b ./libio/iosscanf.c +- 126884166b ./libio/iostdio.h +-4003502161b ./libio/iostream.cc +-1367738252b ./libio/iostream.h +- 724185980b ./libio/iostreamP.h +- 900394632b ./libio/iostream.texi +-2266620976b ./libio/iostrerror.c +-1504845341b ./libio/ioungetc.c +-3172078371b ./libio/iovfprintf.c +-3899460915b ./libio/iovfscanf.c +-1002493619b ./libio/iovsprintf.c +- 506959745b ./libio/iovsscanf.c +- 381264573b ./libio/isgetline.cc +- 105613686b ./libio/isgetsb.cc +-2661167259b ./libio/isscan.cc +- 206584630b ./libio/istream.h +-3623270479b ./libio/libio.h +-3509602408b ./libio/libioP.h +-2390345359b ./libio/Makefile.in +-2778177928b ./libio/NEWS +-4004983993b ./libio/osform.cc +- 206584630b ./libio/ostream.h +-3277082473b ./libio/outfloat.c +-3994216106b ./libio/parsestream.cc +- 166126510b ./libio/parsestream.h +-3469115631b ./libio/peekc.c +-2293291193b ./libio/pfstream.cc +-1224814660b ./libio/pfstream.h +-1839206347b ./libio/PlotFile.cc +-1734473134b ./libio/PlotFile.h +-3165888289b ./libio/procbuf.cc +-3903586123b ./libio/procbuf.h +-3745289928b ./libio/README +-3862518594b ./libio/sbform.cc +- 814340336b ./libio/sbgetline.cc +-2309658982b ./libio/sbscan.cc +-2365119821b ./libio/SFile.cc +-3862997842b ./libio/SFile.h +-1179188179b ./libio/stdfiles.c +- 796114288b ./libio/stdio/ChangeLog +- 531444633b ./libio/stdio/ChangeLog.old +-4223233278b ./libio/stdio/clearerr.c +-1555657474b ./libio/stdio/clearerr_u.c +-3561044537b ./libio/stdio/configure.in +- 360978561b ./libio/stdio/fdopen.c +-3984519143b ./libio/stdio/feof.c +-4247933869b ./libio/stdio/feof_u.c +-4003086051b ./libio/stdio/ferror.c +-3066036848b ./libio/stdio/ferror_u.c +-2473833036b ./libio/stdio/fgetc.c +-1707295330b ./libio/stdio/fileno.c +- 90519259b ./libio/stdio/fputc.c +-2190671019b ./libio/stdio/fputc_u.c +-2481547413b ./libio/stdio/freopen.c +-4038328411b ./libio/stdio/fseek.c +-2790088986b ./libio/stdio/getc.c +-1650054989b ./libio/stdio/getchar.c +- 682966141b ./libio/stdio/getchar_u.c +-1140857223b ./libio/stdio/getc_u.c +-2544604936b ./libio/stdio/getline.c +- 981141110b ./libio/stdio/getw.c +-2580375189b ./libio/stdio/Makefile.in +- 536637384b ./libio/stdio/obprintf.c +-2215262105b ./libio/stdio/popen.c +- 547858581b ./libio/stdio/putc.c +- 694997692b ./libio/stdio/putchar.c +- 295167963b ./libio/stdio/putchar_u.c +-3689915525b ./libio/stdio/putc_u.c +-3810456385b ./libio/stdio/putw.c +-1412052881b ./libio/stdio/rewind.c +-1529208793b ./libio/stdio/setbuf.c +- 344764949b ./libio/stdio/setfileno.c +-1504325380b ./libio/stdio/setlinebuf.c +-3239397115b ./libio/stdio/snprintf.c +- 364120565b ./libio/stdio/stdio.h +- 640251772b ./libio/stdiostream.cc +- 317477001b ./libio/stdiostream.h +-4097646286b ./libio/stdio/vasprintf.c +-4012743512b ./libio/stdio/vfprintf.c +-1548696338b ./libio/stdio/vfscanf.c +- 242032189b ./libio/stdio/vprintf.c +-4163559183b ./libio/stdio/vscanf.c +-2656367363b ./libio/stdio/vsnprintf.c +-3925396300b ./libio/stdstrbufs.cc +-1143821051b ./libio/stdstreams.cc +-3859541986b ./libio/streambuf.cc +- 17859617b ./libio/streambuf.h +-3657918999b ./libio/stream.cc +- 173908312b ./libio/stream.h +-1995951033b ./libio/strfile.h +- 512029605b ./libio/strops.c +-1165036966b ./libio/strstream.cc +-2990392982b ./libio/strstream.h +-2702125204b ./libio/tests/ChangeLog +-4275790996b ./libio/tests/configure.in +-3590880906b ./libio/tests/hounddog.cc +-3674844182b ./libio/tests/hounddog.exp +-1475148939b ./libio/tests/hounddog.inp +-3161360046b ./libio/tests/Makefile.in +-1907782383b ./libio/tests/putbackdog.cc +-2806477238b ./libio/tests/tfformat.c +-2094676083b ./libio/tests/tFile.cc +-1203674425b ./libio/tests/tFile.exp +-2833248335b ./libio/tests/tFile.inp +-3956955633b ./libio/tests/tiformat.c +-2723761625b ./libio/tests/tiomanip.cc +- 612490440b ./libio/tests/tiomanip.exp +-2560574599b ./libio/tests/tiomisc.cc +-1660016937b ./libio/tests/tiomisc.exp +-2914030173b ./libio/tests/tstdiomisc.c +-3284359901b ./libio/tests/tstdiomisc.exp +-3879134172b ./libio/testsuite/ChangeLog +-1230501773b ./libio/testsuite/config/default.exp +-3169562340b ./libio/testsuite/configure.in +-2483970923b ./libio/testsuite/libio.tests/hounddog.exp +-2416624286b ./libio/testsuite/libio.tests/putbackdog.exp +- 191043273b ./libio/testsuite/libio.tests/tfformat.exp +-2904490330b ./libio/testsuite/libio.tests/tFile.exp +-2848159500b ./libio/testsuite/libio.tests/tiformat.exp +- 883822692b ./libio/testsuite/libio.tests/tiomanip.exp +-1658003010b ./libio/testsuite/libio.tests/tiomisc.exp +-3206451440b ./libio/testsuite/libio.tests/tstdiomisc.exp +- 19817386b ./libio/testsuite/lib/libio.exp +-2566597489b ./libio/testsuite/Makefile.in +- 605856870b ./libobjc/archive.c +-2985718156b ./libobjc/ChangeLog +-3067716864b ./libobjc/class.c +-3378798923b ./libobjc/configure +-3677824557b ./libobjc/configure.in +-4111966841b ./libobjc/encoding.c +-2195769577b ./libobjc/gc.c +-1761713542b ./libobjc/hash.c +- 978848199b ./libobjc/init.c +-1153982666b ./libobjc/libobjc.def +-4072125181b ./libobjc/libobjc_entry.c +-4260228535b ./libobjc/linking.m +-2398517524b ./libobjc/makefile.dos +-4035593071b ./libobjc/Makefile.in +- 687879051b ./libobjc/misc.c +-1752870170b ./libobjc/nil_method.c +- 638422313b ./libobjc/NXConstStr.m +-1692177559b ./libobjc/objc/encoding.h +-1940424288b ./libobjc/objc-features.texi +- 991318077b ./libobjc/objc/hash.h +-1937854528b ./libobjc/objc/NXConstStr.h +-3584280142b ./libobjc/objc/objc-api.h +-2946018502b ./libobjc/objc/objc.h +-1569406371b ./libobjc/objc/objc-list.h +-1680445531b ./libobjc/objc/Object.h +- 226797930b ./libobjc/objc/Protocol.h +-1775267864b ./libobjc/objc/runtime.h +-1609667340b ./libobjc/objc/sarray.h +-3991042429b ./libobjc/objc/thr.h +-2746948162b ./libobjc/objc/typedstream.h +-1526865132b ./libobjc/Object.m +-2760949240b ./libobjc/objects.c +-3962273975b ./libobjc/Protocol.m +-3823063152b ./libobjc/README +- 749035591b ./libobjc/README.threads +-3373133429b ./libobjc/sarray.c +- 791617547b ./libobjc/selector.c +-1001444343b ./libobjc/sendmsg.c +-1809950502b ./libobjc/thr.c +-3414327023b ./libobjc/thr-dce.c +-2193934747b ./libobjc/thr-decosf1.c +-1199102574b ./libobjc/THREADS +-4055902911b ./libobjc/THREADS.MACH +- 570456722b ./libobjc/thr-irix.c +-1715842563b ./libobjc/thr-mach.c +-2841374444b ./libobjc/thr-os2.c +- 634920197b ./libobjc/thr-posix.c +- 938980526b ./libobjc/thr-pthreads.c +-2005277748b ./libobjc/thr-single.c +- 60531382b ./libobjc/thr-solaris.c +-2005277748b ./libobjc/thr-vxworks.c +-2963027857b ./libobjc/thr-win32.c +-2516576725b ./libstdc++/cassert +-3909388294b ./libstdc++/cctype +- 739562956b ./libstdc++/cerrno +-2797999855b ./libstdc++/cfloat +-1284523235b ./libstdc++/ChangeLog +-3987604938b ./libstdc++/cinst.cc +-3501589610b ./libstdc++/ciso646 +-2331350423b ./libstdc++/climits +- 465638440b ./libstdc++/clocale +-4030032747b ./libstdc++/cmath +- 264446968b ./libstdc++/cmathi.cc +-3558667222b ./libstdc++/complex +-2619764512b ./libstdc++/complex.h +-3829974099b ./libstdc++/config/aix.ml +-2732747599b ./libstdc++/config/dec-osf.ml +-2265189895b ./libstdc++/config/delta.mt +-2745989692b ./libstdc++/config/elf.ml +-4027891460b ./libstdc++/config/elfshlibm.ml +- 198478647b ./libstdc++/config/freebsd.ml +-3926744931b ./libstdc++/config/gnu.ml +-1670841350b ./libstdc++/config/hpux.ml +- 304253918b ./libstdc++/config/irix5.ml +-1737000939b ./libstdc++/config/linux.ml +-2337390500b ./libstdc++/config/linux.mt +-2426283874b ./libstdc++/config/openbsd.ml +-3272088979b ./libstdc++/config/openbsd.mt +- 235193045b ./libstdc++/config/posix.mt +- 235193045b ./libstdc++/config/sol2pth.mt +-4096894018b ./libstdc++/config/sol2shm.ml +-2091399237b ./libstdc++/config/sol2solth.mt +-1502161104b ./libstdc++/config/sunos4.ml +-1032496632b ./libstdc++/configure.in +-1755727990b ./libstdc++/config/x86-interix.ml +-2303897588b ./libstdc++/csetjmp +-1186041650b ./libstdc++/csignal +-2162743197b ./libstdc++/cstdarg +-1745992687b ./libstdc++/cstddef +-3133738908b ./libstdc++/cstdio +-1860252484b ./libstdc++/cstdlib +- 986418601b ./libstdc++/cstdlibi.cc +-1967465692b ./libstdc++/cstring +-2144403978b ./libstdc++/cstringi.cc +-2537513367b ./libstdc++/ctime +- 146070935b ./libstdc++/cwchar +- 817779820b ./libstdc++/cwctype +-1879621210b ./libstdc++/fstream +-1848554462b ./libstdc++/iomanip +-4252037106b ./libstdc++/iosfwd +-3612241682b ./libstdc++/iostream +-2732344053b ./libstdc++/Makefile.in +-3677480652b ./libstdc++/NEWS +-2249942730b ./libstdc++/sinst.cc +-3946235411b ./libstdc++/sstream +-1561088521b ./libstdc++/std/bastring.cc +- 103173366b ./libstdc++/std/bastring.h +- 554430013b ./libstdc++/std/complext.cc +- 348511172b ./libstdc++/std/complext.h +-2664934083b ./libstdc++/std/dcomplex.h +-1325247176b ./libstdc++/stdexcept +-3656768290b ./libstdc++/stdexcepti.cc +-3424942577b ./libstdc++/std/fcomplex.h +-2214556284b ./libstdc++/std/gslice_array.h +-1351514047b ./libstdc++/std/gslice.h +- 57436398b ./libstdc++/std/indirect_array.h +-3263662379b ./libstdc++/std/ldcomplex.h +-3552880930b ./libstdc++/std/mask_array.h +-3062835292b ./libstdc++/std/slice_array.h +-1042140122b ./libstdc++/std/slice.h +-1391859698b ./libstdc++/std/std_valarray.h +-2661359535b ./libstdc++/std/straits.h +-3843151591b ./libstdc++/std/valarray_array.h +- 71019618b ./libstdc++/std/valarray_array.tcc +-1491824696b ./libstdc++/std/valarray_meta.h +-1793430325b ./libstdc++/stl/algobase.h +- 337637047b ./libstdc++/stl/algo.h +-1239456689b ./libstdc++/stl/algorithm +-2123302443b ./libstdc++/stl/alloc.h +-1564384875b ./libstdc++/stl/bitset +-3916268080b ./libstdc++/stl/bvector.h +-1080389581b ./libstdc++/stl/ChangeLog +- 449078902b ./libstdc++/stl/defalloc.h +-3178480764b ./libstdc++/stl/deque +-3808147062b ./libstdc++/stl/deque.h +-2654535795b ./libstdc++/stl/functional +-2545358141b ./libstdc++/stl/function.h +-3655692358b ./libstdc++/stl.h +-1295672411b ./libstdc++/stl/hash_map +- 50968967b ./libstdc++/stl/hash_map.h +-3082728694b ./libstdc++/stl/hash_set +- 262670658b ./libstdc++/stl/hash_set.h +-3336988491b ./libstdc++/stl/hashtable.h +- 93866534b ./libstdc++/stl/heap.h +-2351835854b ./libstdc++/stlinst.cc +-2130955697b ./libstdc++/stl/iterator +-3615188542b ./libstdc++/stl/iterator.h +-1371453800b ./libstdc++/stl/list +-1771088805b ./libstdc++/stl/list.h +-3736216087b ./libstdc++/stl/map +- 495476693b ./libstdc++/stl/map.h +-1520299132b ./libstdc++/stl/memory +-1422547465b ./libstdc++/stl/multimap.h +-3784936539b ./libstdc++/stl/multiset.h +-1186511904b ./libstdc++/stl/numeric +-2882722351b ./libstdc++/stl/pair.h +- 629893259b ./libstdc++/stl/pthread_alloc +- 360022506b ./libstdc++/stl/pthread_alloc.h +-2009114277b ./libstdc++/stl/queue +-1771543811b ./libstdc++/stl/README +- 919894984b ./libstdc++/stl/rope +- 650690078b ./libstdc++/stl/rope.h +- 971050590b ./libstdc++/stl/ropeimpl.h +-3485834952b ./libstdc++/stl/set +-3261147361b ./libstdc++/stl/set.h +-1660581899b ./libstdc++/stl/slist +- 364531500b ./libstdc++/stl/slist.h +- 772005731b ./libstdc++/stl/stack +- 963570706b ./libstdc++/stl/stack.h +-2334578217b ./libstdc++/stl/stl_algobase.h +-1835781933b ./libstdc++/stl/stl_algo.h +-2862923138b ./libstdc++/stl/stl_alloc.h +- 131893617b ./libstdc++/stl/stl_bvector.h +-1795298057b ./libstdc++/stl/stl_config.h +-3337345269b ./libstdc++/stl/stl_construct.h +-4019276960b ./libstdc++/stl/stl_deque.h +-1800258908b ./libstdc++/stl/stl_function.h +-1040773216b ./libstdc++/stl/stl_hash_fun.h +-4278535125b ./libstdc++/stl/stl_hash_map.h +- 310116663b ./libstdc++/stl/stl_hash_set.h +-3162216421b ./libstdc++/stl/stl_hashtable.h +-3889126782b ./libstdc++/stl/stl_heap.h +-3766937461b ./libstdc++/stl/stl_iterator.h +-1821622705b ./libstdc++/stl/stl_list.h +-4011155360b ./libstdc++/stl/stl_map.h +-2277711706b ./libstdc++/stl/stl_multimap.h +-3218206970b ./libstdc++/stl/stl_multiset.h +-2760914362b ./libstdc++/stl/stl_numeric.h +- 18446022b ./libstdc++/stl/stl_pair.h +- 864968925b ./libstdc++/stl/stl_queue.h +-3312484350b ./libstdc++/stl/stl_raw_storage_iter.h +-2384091075b ./libstdc++/stl/stl_relops.h +-2597643485b ./libstdc++/stl/stl_rope.h +-4176745833b ./libstdc++/stl/stl_set.h +-1375936906b ./libstdc++/stl/stl_slist.h +-4249437084b ./libstdc++/stl/stl_stack.h +-2864163398b ./libstdc++/stl/stl_tempbuf.h +-1017051646b ./libstdc++/stl/stl_tree.h +-3890164582b ./libstdc++/stl/stl_uninitialized.h +-3995524520b ./libstdc++/stl/stl_vector.h +-1504340996b ./libstdc++/stl/tempbuf.h +- 409279379b ./libstdc++/stl/tree.h +-1293888323b ./libstdc++/stl/type_traits.h +-1758410924b ./libstdc++/stl/utility +-1313796109b ./libstdc++/stl/vector +-3931466599b ./libstdc++/stl/vector.h +-3905981553b ./libstdc++/string +-4274952910b ./libstdc++/strstream +-2595671692b ./libstdc++/tests/ChangeLog +-3722269248b ./libstdc++/tests/configure.in +-1190480729b ./libstdc++/tests/Makefile.in +- 932490928b ./libstdc++/tests/tcomplex.cc +-2256442937b ./libstdc++/tests/tcomplex.exp +-4047639851b ./libstdc++/tests/tcomplex.inp +- 621011550b ./libstdc++/tests/tlist.cc +-3132042690b ./libstdc++/tests/tlist.exp +-1145205079b ./libstdc++/tests/tmap.cc +-3201421553b ./libstdc++/tests/tmap.exp +-3358903814b ./libstdc++/tests/tstring.cc +- 445588679b ./libstdc++/tests/tstring.exp +-2025066765b ./libstdc++/tests/tstring.inp +- 236450600b ./libstdc++/tests/tvector.cc +-2833371777b ./libstdc++/tests/tvector.exp +-2272344875b ./libstdc++/testsuite/ChangeLog +-1230501773b ./libstdc++/testsuite/config/default.exp +- 305406486b ./libstdc++/testsuite/configure.in +-2971477386b ./libstdc++/testsuite/lib/libstdc++.exp +- 631859611b ./libstdc++/testsuite/libstdc++.tests/test.exp +- 53069919b ./libstdc++/testsuite/Makefile.in +-3097225277b ./libstdc++/valarray +- 422203026b ./libstdc++/valarray.cc +-4225874335b ./ltconfig +- 23768362b ./ltmain.sh +- 104875702b ./MAINTAINERS +-3026518559b ./Makefile.in +-4162842036b ./missing +-4236112450b ./mkinstalldirs +- 902556840b ./move-if-change +-1935170490b ./README +-3014264078b ./symlink-tree +- 422488038b ./texinfo/ABOUT-NLS +-4092622231b ./texinfo/acconfig.h +-3892192340b ./texinfo/acinclude.m4 +-1818562438b ./texinfo/aclocal.m4 +-2274278886b ./texinfo/AUTHORS +-3309356478b ./texinfo/ChangeLog +-1315260558b ./texinfo/config.guess +-3200477370b ./texinfo/config.h.in +-3966557687b ./texinfo/config.sub +-3304182169b ./texinfo/configure +-2081586187b ./texinfo/configure.in +- 430871781b ./texinfo/COPYING +- 326028421b ./texinfo/cygnus/Makefile.in +-1315037385b ./texinfo/cygnus/texinfo.tex +-2593571507b ./texinfo/cygnus/texiplus.tex +-2396995287b ./texinfo/cygnus/tocfix +- 792184885b ./texinfo/dir +-3304044212b ./texinfo/dir-example +-2139861464b ./texinfo/dir.info-template +-3826213895b ./texinfo/doc/epsf.tex +- 660998107b ./texinfo/doc/info-stnd.texi +-1533813456b ./texinfo/doc/info.texi +-4047996362b ./texinfo/doc/macro.texi +-3198634674b ./texinfo/doc/Makefile.am +- 713005243b ./texinfo/doc/Makefile.in +-2740653009b ./texinfo/doc/README +-1143415264b ./texinfo/doc/texinfo.tex +- 729519619b ./texinfo/doc/texinfo.texi +-2717651420b ./texinfo/doc/texinfo.txi +-3664971266b ./texinfo/doc/userdoc.texi +-1580887266b ./texinfo/emacs/detexinfo.el +-3301909409b ./texinfo/emacs/elisp-comp +-4267905953b ./texinfo/emacs/info.el +- 883633766b ./texinfo/emacs/informat.el +-3268267971b ./texinfo/emacs/Makefile.am +-3903021574b ./texinfo/emacs/Makefile.in +-2618083764b ./texinfo/emacs/makeinfo.el +-3318259411b ./texinfo/emacs/new-useful-setqs +-2833836046b ./texinfo/emacs/README +-1035294818b ./texinfo/emacs/texinfmt.el +-3899145430b ./texinfo/emacs/texinfo.el +-2114576468b ./texinfo/emacs/texnfo-tex.el +-1830205302b ./texinfo/emacs/texnfo-upd.el +- 735767552b ./texinfo/gen-info-dir +-1807174244b ./texinfo/gpl.texinfo +-1419012559b ./texinfo/info/clib.c +-1702191134b ./texinfo/info/clib.h +-2482141158b ./texinfo/info/dir.c +- 685818533b ./texinfo/info/display.c +-2364277320b ./texinfo/info/display.h +-3138649698b ./texinfo/info/doc.c +-3312314068b ./texinfo/info/doc.h +- 95508657b ./texinfo/info/dribble.c +-1429936122b ./texinfo/info/dribble.h +- 52394048b ./texinfo/info/echo_area.c +-3383747464b ./texinfo/info/echo-area.c +-3360125135b ./texinfo/info/echo_area.h +- 802630900b ./texinfo/info/echo-area.h +-1681484123b ./texinfo/info/filesys.c +-3085693604b ./texinfo/info/filesys.h +-3611999168b ./texinfo/info/footnotes.c +-1303449683b ./texinfo/info/footnotes.h +- 962559755b ./texinfo/info/funs.h +-1317496397b ./texinfo/info/gc.c +- 606512762b ./texinfo/info/gc.h +-2880943096b ./texinfo/info/general.h +-1643769032b ./texinfo/info/indices.c +-1625766310b ./texinfo/info/indices.h +-4190102428b ./texinfo/info/info.1 +-3200602615b ./texinfo/info/info.c +- 737516417b ./texinfo/info/infodoc.c +-1499645712b ./texinfo/info/info.h +-3704362534b ./texinfo/info/infomap.c +-4254631691b ./texinfo/info/infomap.h +- 439078129b ./texinfo/info/info-stnd.texi +-3517783883b ./texinfo/info/info.texi +-1134986012b ./texinfo/info/info-utils.c +-2729648091b ./texinfo/info/info-utils.h +- 919307228b ./texinfo/info/makedoc.c +-1741855739b ./texinfo/info/Makefile.am +-1618175998b ./texinfo/info/Makefile.in +- 123396366b ./texinfo/info/man.c +-4282569250b ./texinfo/info/man.h +-1477971895b ./texinfo/info/m-x.c +-3752294279b ./texinfo/info/NEWS +-2288239572b ./texinfo/info/nodemenu.c +-1960187995b ./texinfo/info/nodes.c +-2110822275b ./texinfo/info/nodes.h +-2275896429b ./texinfo/info/README +-3360605566b ./texinfo/info/search.c +-3609449595b ./texinfo/info/search.h +-3868216836b ./texinfo/info/session.c +-3347159602b ./texinfo/info/session.h +-1271567004b ./texinfo/info/signals.c +- 589399415b ./texinfo/info/signals.h +-1341202787b ./texinfo/info/termdep.h +-3939402493b ./texinfo/info/terminal.c +- 844882397b ./texinfo/info/terminal.h +-1013252653b ./texinfo/info/tilde.c +-1882006797b ./texinfo/info/tilde.h +-3700878213b ./texinfo/info/userdoc.texi +-1787997028b ./texinfo/info/variables.c +-2194951675b ./texinfo/info/variables.h +-1592164980b ./texinfo/info/window.c +-3828547314b ./texinfo/info/window.h +-1950621923b ./texinfo/info/xmalloc.c +-3932743515b ./texinfo/INSTALL +-4095961629b ./texinfo/intl/bindtextdom.c +-2763549264b ./texinfo/intl/cat-compat.c +-4268110712b ./texinfo/intl/ChangeLog +- 757126972b ./texinfo/intl/dcgettext.c +-4105193222b ./texinfo/intl/dgettext.c +-3003979503b ./texinfo/intl/explodename.c +-3930007107b ./texinfo/intl/finddomain.c +-3120376831b ./texinfo/intl/gettext.c +-3984116293b ./texinfo/intl/gettext.h +-3445198552b ./texinfo/intl/gettextP.h +- 687736092b ./texinfo/intl/hash-string.h +-1443767269b ./texinfo/intl/intl-compat.c +-2902945940b ./texinfo/intl/l10nflist.c +-4133992265b ./texinfo/intl/libgettext.h +-3263658828b ./texinfo/intl/linux-msg.sed +-4102842040b ./texinfo/intl/loadinfo.h +-3403967159b ./texinfo/intl/loadmsgcat.c +- 527988159b ./texinfo/intl/localealias.c +-3457291048b ./texinfo/intl/Makefile.in +- 223588995b ./texinfo/intl/po2tbl.sed.in +-1958438848b ./texinfo/intl/textdomain.c +-1929213520b ./texinfo/intl/VERSION +-2960721199b ./texinfo/intl/xopen-msg.sed +-1670374630b ./texinfo/INTRODUCTION +- 46787189b ./texinfo/lgpl.texinfo +- 222849122b ./texinfo/lib/alloca.c +-3947434763b ./texinfo/lib/getopt1.c +- 9654218b ./texinfo/lib/getopt.c +-1914093633b ./texinfo/lib/getopt.h +-3377823797b ./texinfo/liblic.texi +-3402766507b ./texinfo/lib/Makefile.am +-3580984504b ./texinfo/lib/Makefile.in +-3055303734b ./texinfo/lib/memcpy.c +- 446691847b ./texinfo/lib/memmove.c +- 560910069b ./texinfo/lib/README +-3540664704b ./texinfo/lib/strdup.c +-4235360416b ./texinfo/lib/strerror.c +-2384235250b ./texinfo/lib/system.h +- 222849122b ./texinfo/libtxi/alloca.c +- 288219538b ./texinfo/libtxi/bzero.c +- 19488452b ./texinfo/libtxi/getopt1.c +-1512252428b ./texinfo/libtxi/getopt.c +-3508337656b ./texinfo/libtxi/getopt.h +- 306023120b ./texinfo/libtxi/Makefile.in +-3055303734b ./texinfo/libtxi/memcpy.c +- 446691847b ./texinfo/libtxi/memmove.c +-3540664704b ./texinfo/libtxi/strdup.c +-1950621923b ./texinfo/lib/xmalloc.c +-4069599781b ./texinfo/lib/xstrdup.c +-3295260160b ./texinfo/license.texi +- 20997403b ./texinfo/Makefile.am +-2667709874b ./texinfo/Makefile.in +-1231574645b ./texinfo/makeinfo/macros/example.texi +-3207519225b ./texinfo/makeinfo/macros/html.texi +-2763193877b ./texinfo/makeinfo/macros/multifmt.texi +-1454209901b ./texinfo/makeinfo/macros/res-samp.texi +- 70035262b ./texinfo/makeinfo/macros/resume.texi +-2057724373b ./texinfo/makeinfo/macros/simpledoc.texi +-4047996362b ./texinfo/makeinfo/macro.texi +-3843067758b ./texinfo/makeinfo/Makefile.am +-4148293928b ./texinfo/makeinfo/Makefile.in +-1703235527b ./texinfo/makeinfo/makeinfo.c +-1062648373b ./texinfo/makeinfo/makeinfo.h +-1604761989b ./texinfo/makeinfo/makeinfo.texi +-3801376154b ./texinfo/makeinfo/multi.c +-1664776300b ./texinfo/makeinfo/multiformat.texi +-2934759165b ./texinfo/makeinfo/README +-1592681024b ./texinfo/missing +- 457782489b ./texinfo/mkinstalldirs +-2456883787b ./texinfo/NEWS +- 640461845b ./texinfo/po/cat-id-tbl.c +-3867968187b ./texinfo/po/ChangeLog +-1830096572b ./texinfo/po/de.gmo +-2282914256b ./texinfo/po/de.po +-3608177378b ./texinfo/po/fr.gmo +-1085842507b ./texinfo/po/fr.po +-3928520230b ./texinfo/po/Makefile.in.in +- 649172625b ./texinfo/po/POTFILES.in +- 216805921b ./texinfo/po/stamp-cat-id +-1114231122b ./texinfo/po/texinfo.pot +- 939039628b ./texinfo/README +-4194708969b ./texinfo/README-alpha +- 216805921b ./texinfo/stamp-h.in +- 685158172b ./texinfo/testsuite/ChangeLog +- 222616344b ./texinfo/testsuite/config/unix.exp +-3864106305b ./texinfo/testsuite/configure +-3337486704b ./texinfo/testsuite/configure.in +- 672434007b ./texinfo/testsuite/lib/utils.exp +-2017219379b ./texinfo/testsuite/Makefile.in +-4036806020b ./texinfo/testsuite/makeinfo.0/atnode.exp +-1007825826b ./texinfo/testsuite/makeinfo.0/conditions.exp +- 805816595b ./texinfo/testsuite/makeinfo.0/mini.exp +-3124225236b ./texinfo/testsuite/makeinfo.0/missnode.exp +-4170863792b ./texinfo/testsuite/makeinfo.0/nonsense.exp +-2178978844b ./texinfo/testsuite/makeinfo.0/not.exp +-4230035996b ./texinfo/testsuite/makeinfo.0/smstruct.exp +-1671662405b ./texinfo/testsuite/text/atnode.texi +- 414043974b ./texinfo/testsuite/text/conditions.texi +-3508612395b ./texinfo/testsuite/text/dfltnode.texi +-2081462941b ./texinfo/testsuite/text/minimal.texi +-2807880644b ./texinfo/testsuite/text/missnode.texi +-1701929320b ./texinfo/testsuite/text/nonsense.texi +- 297791510b ./texinfo/testsuite/text/not.texi +-3270708249b ./texinfo/testsuite/text/smstruct.texi +-3089520793b ./texinfo/texinfo.tex +-1799609944b ./texinfo/texinfo.texi +-2013250676b ./texinfo/THANKS +-2313364795b ./texinfo/TODO +- 568966261b ./texinfo/util/deref.c +-3384224904b ./texinfo/util/fixfonts +-3110536827b ./texinfo/util/gen-dir-node +-3397578435b ./texinfo/util/install-info.c +-1734451117b ./texinfo/util/Makefile.am +-4256544479b ./texinfo/util/Makefile.in +-2282426066b ./texinfo/util/mkinstalldirs +- 201553857b ./texinfo/util/README +-2525518952b ./texinfo/util/tex3patch +- 320949218b ./texinfo/util/texi2dvi +-2063597529b ./texinfo/util/texindex.c +-3973838018b ./texinfo/util/update-info +-1370970362b ./ylwrap +diff -ruNb gcc-2.95.3/build2.log gcc-2.95.4/build2.log +--- gcc-2.95.3/build2.log 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-2.95.4/build2.log 2017-11-07 22:10:13.000000000 +0100 +@@ -0,0 +1 @@ ++make: *** No rule to make target `all'. Stop. +diff -ruNb gcc-2.95.3/configure gcc-2.95.4/configure +--- gcc-2.95.3/configure 1999-04-02 16:17:40.000000000 +0200 ++++ gcc-2.95.4/configure 2017-11-07 22:10:12.000000000 +0100 +@@ -86,7 +86,7 @@ + target_alias=NOTARGET + target_makefile_frag= + undefs=NOUNDEFS +-version="$Revision: 1.22 $" ++version="$Revision: 1.23 $" + x11=default + bindir='${exec_prefix}/bin' + sbindir='${exec_prefix}/sbin' +diff -ruNb gcc-2.95.3/FAQ gcc-2.95.4/FAQ +--- gcc-2.95.3/FAQ 2001-03-16 15:15:42.000000000 +0100 ++++ gcc-2.95.4/FAQ 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1130 +0,0 @@ +- +- GCC Frequently Asked Questions +- +- The latest version of this document is always available at +- [1]http://www.gnu.org/software/gcc/faq.html. +- +- This FAQ tries to answer specific questions concerning GCC. For +- general information regarding C, C++, resp. Fortran please check the +- [2]comp.lang.c FAQ, [3]comp.lang.c++ FAQ, [4]comp.std.c++ FAQ, and the +- [5]Fortran Information page. +- _________________________________________________________________ +- +- Questions +- +- 1. [6]General information +- 1. [7]What is the relationship between GCC and EGCS +- 2. [8]What is the relationship between GCC and Cygnus +- 3. [9]What is an open development model? +- 4. [10]How to report bugs +- 5. [11]How do I get a bug fixed or a feature added? +- 2. [12]Installation +- 1. [13]Problems building the Fortran compiler +- 2. [14]How to install multiple versions of GCC +- 3. [15]Dynamic linker is unable to find GCC libraries +- 4. [16]libstdc++/libio tests fail badly with --enable-shared +- 5. [17]GCC can not find GNU as/GNU ld +- 6. [18]cpp: Usage:... Error +- 3. [19]Testsuite problems +- 1. [20]Why is there no testsuite in GCC 2.95 +- 2. [21]Unable to run the testsuite +- 3. [22]How do I pass flags like -fnew-abi to the testsuite? +- 4. [23]How can I run the test suite with multiple options? +- 4. [24]Platform-specific issues +- 1. [25]Problems with exception handling on x86 platforms +- 2. [26]Problems with Invalid `asm' statements +- 3. [27]Building Linux kernels +- 4. [28]How do I compile X11 headers with g++ +- 5. [29]How to build a cross compiler +- 5. [30]Bugs and Non-Bugs +- 1. [31]FD_ZERO macro +- 2. [32]Octave 2.0.13 does not compile +- 3. [33]Why can't I initialize a static variable with stdin? +- 4. [34]Why can't I use #if here? +- 6. [35]Miscellaneous +- 1. [36]Virtual memory exhausted +- 2. [37]Snapshots, how, when, why +- 3. [38]Friend Templates +- 4. [39]Where to find libg++ +- 5. [40]Why do I need autoconf, bison, xgettext, automake, etc +- 6. [41]Problems debugging GCC code +- 7. [42]Conflicts when using cvs update +- 8. [43]Using GCC with GNAT/Ada +- 9. [44]Using GCC with GNU Pascal +- 10. [45]Using CVS to download snapshots +- 11. [46]Why can't I build a shared library? +- 12. [47]Dealing with spam on the lists +- 13. [48]How to work around too long C++ symbol names? +- (-fsquangle) +- 14. [49]When building from CVS sources, I see 'gperf: invalid +- option -- F', even with the most current version of gperf. +- 15. [50]When building C++, the linker says my constructors, +- destructors or virtual tables are undefined, but I defined +- them +- 16. [51]What is libstdc++-v3 and how can I use it with g++? +- _________________________________________________________________ +- +- General information +- +-What is the relationship between GCC and EGCS +- +- In 1990/1991 gcc version 1 had reached a point of stability. For the +- targets it could support, it worked well. It had limitations inherent +- in its design that would be difficult to resolve, so a major effort +- was made to resolve those limitiations and gcc version 2 was the +- result. +- +- When we had gcc2 in a useful state, development efforts on gcc1 +- stopped and we all concentrated on making gcc2 better than gcc1 could +- ever be. This is the kind of step forward we wanted to make with the +- EGCS project when it was formed in 1997. +- +- In April 1999 the Free Software Foundation officially halted +- development on the gcc2 compiler and appointed the EGCS project as the +- official GCC maintainers. +- +- We are in the process of merging GCC and EGCS, which will take some +- time. The net result will be a single project which will carry forward +- GCC development under the ultimate control of the [52]GCC Steering +- Committee. +- _________________________________________________________________ +- +-What is the relationship between GCC and Cygnus +- +- It is a common mis-conception that Cygnus controls either directly or +- indirectly GCC. +- +- While Cygnus does donate hardware, network connections, code and +- developer time to GCC development, Cygnus does not control GCC. +- +- Overall control of GCC is in the hands of the [53]GCC Steering +- Committee which includes people from a variety of different +- organizations and backgrounds. The purpose of the steering committee +- is to make decisions in the best interest of GCC and to help ensure +- that no individual or company has control over the project. +- +- To summarize, Cygnus contributes to GCCproject, but does not exert a +- controlling influence over GCC. +- _________________________________________________________________ +- +-What is an open development model? +- +- With GCC, we are going to try a bazaar style[54][1] approach to its +- development: We make snapshots publicly available to anyone who wants +- to try them; we're going to welcome anyone to join the development +- mailing list. All of the discussions on the development mailing list +- are available via the web. We're going to be making releases with a +- much higher frequency than they have been made in the past. +- +- In addition to weekly snapshots of the GCC development sources, we +- have the sources readable from a CVS server by anyone. Furthermore we +- are using remote CVS to allow remote maintainers write access to the +- sources. +- +- There have been many potential gcc developers who were not able to +- participate in gcc development in the past. We want these people to +- help in any way they can; we ultimately want GCC to be the best +- compiler in the world. +- +- A compiler is a complicated piece of software, there will still be +- strong central maintainers who will reject patches, who will demand +- documentation of implementations, and who will keep the level of +- quality as high as it is today. Code that could use wider testing may +- be integrated--code that is simply ill-conceived won't be. +- +- GCC is not the first piece of software to use this open development +- process; FreeBSD, the Emacs lisp repository, and the Linux kernel are +- a few examples of the bazaar style of development. +- +- With GCC, we will be adding new features and optimizations at a rate +- that has not been done since the creation of gcc2; these additions +- will inevitably have a temporarily destabilizing effect. With the help +- of developers working together with this bazaar style development, the +- resulting stability and quality levels will be better than we've had +- before. +- +- _[1]_ We've been discussing different development models a lot over +- the past few months. The paper which started all of this introduced +- two terms: A _cathedral_ development model versus a _bazaar_ +- development model. The paper is written by Eric S. Raymond, it is +- called ``[55]The Cathedral and the Bazaar''. The paper is a useful +- starting point for discussions. +- _________________________________________________________________ +- +-How to report bugs +- +- There are complete instructions in the [56]gcc info manual, section +- Bugs. The manual can also be read using `_M-x info_' in Emacs, or if +- the GNU info program is installed on your system by `info --node +- "(gcc)Bugs"'. Or see the file [57]BUGS included with the GCC source +- code. +- +- Before you report a bug for the _C++ compiler_, please check the +- [58]list of well-known bugs. If you want to report a bug with _egcs +- 1.0.x_ or _egcs 1.1.x_, we strongly recommend upgrading to the current +- release first. +- +- In short, if GCC says Internal compiler error (or any other error that +- you'd like us to be able to reproduce, for that matter), please mail a +- bug report to [59]gcc-bugs@gcc.gnu.org or [60]bug-gcc@gnu.org +- including: +- * The GCC version +- * The system type +- * All options you passed to the compiler +- * Preprocessed output of the source file that caused the compiler +- error +- +- All this can normally be accomplished by mailing the command line, the +- output of the command, and the resulting `_your-file_.i' for C, or +- `_your-file_.ii' for C++, corresponding to: +- +- gcc -v --save-temps _all-your-options_ _your-file_.c +- +- Typically the CPP output (extension .i for C or .ii for C++) will be +- large, so please compress the resulting file with one of the popular +- compression programs such as bzip2, gzip, zip, pkzip or compress (in +- decreasing order of preference). Use maximum compression (-9) if +- available. Please include the compressed CPP output in your bug +- report. +- +- Since we're supposed to be able to re-create the assembly output +- (extension .s), you usually don't have to include it in the bug +- report, although you may want to post parts of it to point out +- assembly code you consider to be wrong. +- +- Whether to use MIME attachments or uuencode is up to you. In any case, +- make sure the compiler command line, version and error output are in +- plain text, so that we don't have to decode the bug report in order to +- tell who should take care of it. A meaningful subject indicating +- language and platform also helps. +- +- The gcc lists have message size limits (100 kbytes) and bug reports +- over those limits will currently be bounced. We're trying to find a +- way to allow larger bug reports to be posted, but this is currently +- impossible (unless you use MIME partials, which most people are unable +- to handle anyway, so you'd better avoid them for now). So, although we +- prefer to have complete bug reports archived, if you cannot reduce the +- bug report below the limit, please make it available for ftp or http +- and post the URL. Another alternative is to break the preprocessed +- output in multiple files (using split, for example) and post them in +- separate messages, but we prefer to have self-contained bug reports in +- single messages. +- +- If you fail to supply enough information for a bug report to be +- reproduced, someone will probably ask you to post additional +- information (or just ignore your bug report, if they're in a bad day, +- so try to get it right on the first posting :-). In this case, please +- post the additional information to the bug reporting mailing list, not +- just to the person who requested it, unless explicitly told so. If +- possible, please include in this follow-up all the information you had +- supplied in the incomplete bug report (including the preprocessor +- output), so that the new bug report is self-contained. +- _________________________________________________________________ +- +-How do I get a bug fixed or a feature added? +- +- There are lots of ways to get something fixed. The list below may be +- incomplete, but it covers many of the common cases. These are listed +- roughly in order of increasing difficulty for the average GCC user, +- meaning someone who is not skilled in the internals of GCC, and where +- difficulty is measured in terms of the time required to fix the bug. +- No alternative is better than any other; each has it's benefits and +- disadvantages. +- * Hire someone to fix it for you. There are various companies and +- individuals providing support for GCC. This alternative costs +- money, but is relatively likely to get results. +- * Report the problem to gcc-bugs and hope that someone will be kind +- enough to fix it for you. While this is certainly possible, and +- often happens, there is no guarantee that it will. You should not +- expect the same response from gcc-bugs that you would see from a +- commercial support organization since the people who read +- gcc-bugs, if they choose to help you, will be volunteering their +- time. This alternative will work best if you follow the directions +- on [61]submitting bugreports. +- * Fix it yourself. This alternative will probably bring results, if +- you work hard enough, but will probably take a lot of time, and, +- depending on the quality of your work and the perceived benefits +- of your changes, your code may or may not ever make it into an +- official release of GCC. +- _________________________________________________________________ +- +- Installation +- +-Problems building the Fortran compiler +- +- The Fortran front end can not be built with most vendor compilers; it +- must be built with gcc. As a result, you may get an error if you do +- not follow the install instructions carefully. +- +- In particular, instead of using "make" to build GCC, you should use +- "make bootstrap" if you are building a native compiler or "make cross" +- if you are building a cross compiler. +- +- It has also been reported that the Fortran compiler can not be built +- on Red Hat 4.X GNU/Linux for the Alpha. Fixing this may require +- upgrading binutils or to Red Hat 5.0; we'll provide more information +- as it becomes available. +- _________________________________________________________________ +- +-How to install multiple versions of gcc +- +- It may be desirable to install multiple versions of the compiler on +- the same system. This can be done by using different prefix paths at +- configure time and a few symlinks. +- +- Basically, configure the two compilers with different --prefix +- options, then build and install each compiler. Assume you want "gcc" +- to be the latest compiler and available in /usr/local/bin; also assume +- that you want "gcc2" to be the older gcc2 compiler and also available +- in /usr/local/bin. +- +- The easiest way to do this is to configure the new GCC with +- --prefix=/usr/local/gcc and the older gcc2 with +- --prefix=/usr/local/gcc2. Build and install both compilers. Then make +- a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from +- /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links +- for the "g++", "c++" and "g77" compiler drivers. +- +- An alternative to using symlinks is to configure with a +- --program-transform-name option. This option specifies a sed command +- to process installed program names with. Using it you can, for +- instance, have all the new GCC programs installed as "new-gcc" and the +- like. You will still have to specify different --prefix options for +- new GCC and old GCC, because it is only the executable program names +- that are transformed. The difference is that you (as administrator) do +- not have to set up symlinks, but must specify additional directories +- in your (as a user) PATH. A complication with --program-transform-name +- is that the sed command invariably contains characters significant to +- the shell, and these have to be escaped correctly, also it is not +- possible to use "^" or "$" in the command. Here is the option to +- prefix "new-" to the new GCC installed programs +- "--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'". With the above +- --prefix option, that will install the new GCC programs into +- /usr/local/gcc/bin with names prefixed by "new-". You can use +- --program-transform-name if you have multiple versions of GCC, and +- wish to be sure about which version you are invoking. +- +- If you use --prefix, GCC may have difficulty locating a GNU assembler +- or linker on your system, [62]GCC can not find GNU as/GNU ld explains +- how to deal with this. +- _________________________________________________________________ +- +-Dynamic linker is unable to find GCC libraries +- +- This problem manifests itself by programs not finding shared libraries +- they depend on when the programs are started. Note this problem often +- manifests itself with failures in the libio/libstdc++ tests after +- configuring with --enable-shared and building GCC. +- +- GCC does not specify a runpath so that the dynamic linker can find +- dynamic libraries at runtime. +- +- The short explanation is that if you always pass a -R option to the +- linker, then your programs become dependent on directories which may +- be NFS mounted, and programs may hang unnecessarily when an NFS server +- goes down. +- +- The problem is not programs that do require the directories; those +- programs are going to hang no matter what you do. The problem is +- programs that do not require the directories. +- +- SunOS effectively always passed a -R option for every -L option; this +- was a bad idea, and so it was removed for Solaris. We should not +- recreate it. +- +- However, if you feel you really need such an option to be passed +- automatically to the linker, you may add it to the gcc specs file. +- This file can be found in the same directory that contains cc1 (run +- gcc -print-prog-name=cc1 to find it). You may add linker flags such as +- -R or -rpath, depending on platform and linker, to the *link or *lib +- specs. +- +- Another alterative is to install a wrapper script around gcc, g++ or +- ld that adds the appropriate directory to the environment variable +- LD_RUN_PATH or equivalent (again, it's platform-dependent). +- +- Yet another option, that works on a few platforms, is to hard-code the +- full pathname of the library into its soname. This can only be +- accomplished by modifying the appropriate .ml file within +- libstdc++/config (and also libg++/config, if you are building libg++), +- so that $(libdir)/ appears just before the library name in -soname or +- -h options. +- _________________________________________________________________ +- +-GCC can not find GNU as/GNU ld +- +- GCC searches the PATH for an assembler and a loader, but it only does +- so after searching a directory list hard-coded in the gcc executables. +- Since, on most platforms, the hard-coded list includes directories in +- which the system asembler and loader can be found, you may have to +- take one of the following actions to arrange that gcc uses the GNU +- versions of those programs. +- +- To ensure that GCC finds the GNU assembler (the GNU loader), which are +- required by [63]some configurations, you should configure these with +- the same --prefix option as you used for GCC. Then build & install GNU +- as (GNU ld) and proceed with building GCC. +- +- Another alternative is to create links to GNU as and ld in any of the +- directories printed by the command `gcc -print-search-dirs | grep +- '^programs:''. The link to `ld' should be named `real-ld' if `ld' +- already exists. If such links do not exist while you're compiling GCC, +- you may have to create them in the build directories too, within the +- gcc directory _and_ in all the gcc/stage* subdirectories. +- +- GCC 2.95 allows you to specify the full pathname of the assembler and +- the linker to use. The configure flags are `--with-as=/path/to/as' and +- `--with-ld=/path/to/ld'. GCC will try to use these pathnames before +- looking for `as' or `(real-)ld' in the standard search dirs. If, at +- configure-time, the specified programs are found to be GNU utilities, +- `--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will +- be auto-detected. One drawback of this option is that it won't allow +- you to override the search path for assembler and linker with +- command-line options -B/path/ if the specified filenames exist. +- _________________________________________________________________ +- +-cpp: Usage:... Error +- +- If you get an error like this when building GCC (particularly when +- building __mulsi3), then you likely have a problem with your +- environment variables. +- cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp +- [switches] input output +- +- First look for an explicit '.' in either LIBRARY_PATH or +- GCC_EXEC_PREFIX from your environment. If you do not find an explicit +- '.', look for an empty pathname in those variables. Note that ':' at +- either the start or end of these variables is an implicit '.' and will +- cause problems. +- +- Also note '::' in these paths will also cause similar problems. +- _________________________________________________________________ +- +- Testsuite problems +- +-Why is there no testsuite in GCC 2.95 +- +- The GCC testsuite is not included in the GCC 2.95 release due to the +- uncertain copyright status of some tests. +- +- The GCC team will be reviewing the entire testsuite to find and remove +- any tests with uncertain copyright status. Once those tests are +- removed from the testsuite, the testsuite as a whole will be +- copyrighted under the terms of the GPL and included in future GCC +- releases. +- +- It is believed that only a few tests have uncertain copyright status +- and thus only a few tests will need to be removed from the testsuite. +- _________________________________________________________________ +- +-Unable to run the testsuite +- +- If you get a message about unable to find "standard.exp" when trying +- to run the GCC testsuites, then your dejagnu is too old to run the GCC +- tests. You will need to get a newer version of dejagnu; we've made a +- [64]dejagnu snapshot available until a new version of dejagnu can be +- released. +- _________________________________________________________________ +- +-How do I pass flags like -fnew-abi to the testsuite? +- +- If you invoke runtest directly, you can use the --tool_opts option, +- e.g: +- runtest --tool_opts "-fnew-abi -fno-honor-std" +- +- 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