diff -rc --new-file gcc-2.5.7-fsf/Makefile.in gcc-2.5.7-amiga/Makefile.in *** gcc-2.5.7-fsf/Makefile.in Thu Nov 25 23:08:52 1993 --- gcc-2.5.7-amiga/Makefile.in Sun Dec 12 17:25:01 1993 *************** *** 58,68 **** AR_FLAGS = rc SHELL = /bin/sh # on sysV, define this as cp. ! INSTALL = install -c # These permit overriding just for certain files. INSTALL_PROGRAM = $(INSTALL) INSTALL_DATA = $(INSTALL) SYMLINK = ln -s MAKEINFO = makeinfo TEXI2DVI = texi2dvi --- 58,71 ---- AR_FLAGS = rc SHELL = /bin/sh # on sysV, define this as cp. ! INSTALL = cp # These permit overriding just for certain files. INSTALL_PROGRAM = $(INSTALL) INSTALL_DATA = $(INSTALL) SYMLINK = ln -s + # Some systems don't support hardlinks. For this case, a simple copy + # will achieve the same results for our purposes. + HARDLINK = ln MAKEINFO = makeinfo TEXI2DVI = texi2dvi *************** *** 90,102 **** OLDAR = ar # Target to use when installing include directory. Either ! # install-headers-tar or install-headers-cpio. INSTALL_HEADERS_DIR = install-headers-tar # The GCC to use for compiling libgcc2.a, enquire, and cross-test. # Usually the one we just built. # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS). ! GCC_FOR_TARGET = ./xgcc -B./ # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET. # It omits XCFLAGS, and specifies -B./. --- 93,106 ---- OLDAR = ar # Target to use when installing include directory. Either ! # install-headers-tar install-headers-cpio, or install-headers-cp. INSTALL_HEADERS_DIR = install-headers-tar # The GCC to use for compiling libgcc2.a, enquire, and cross-test. # Usually the one we just built. # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS). ! XGCC = xgcc ! GCC_FOR_TARGET = ./$(XGCC) -B./ # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET. # It omits XCFLAGS, and specifies -B./. *************** *** 145,150 **** --- 149,157 ---- # Directory in which to put localized header files. On the systems with # gcc as the native cc, `local_prefix' may not be `prefix' which is # `/usr'. + # Similar considerations apply for toolkits located on non-writable storage, + # such as CD-ROM, where we need a completely separate place to put local + # include files. # NOTE: local_prefix *should not* default from prefix. local_prefix = /usr/local # Directory in which to put host dependent programs and libraries *************** *** 549,555 **** $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS) # Dump a specs file to make -B./ read these specs over installed ones. ! specs: xgcc $(GCC_FOR_TARGET) -dumpspecs > specs # Create the compiler driver for g++. --- 556,562 ---- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS) # Dump a specs file to make -B./ read these specs over installed ones. ! specs: xgcc xgccv $(GCC_FOR_TARGET) -dumpspecs > specs # Create the compiler driver for g++. *************** *** 752,759 **** # the second ar command tries to overwrite this file. To avoid the error # message from ar, we make sure all files are writable. -(cd tmpcopy; chmod +w * > /dev/null 2>&1) ! (cd tmpcopy; $(AR) x ../$(LIBGCC2)) ! (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o) rm -rf tmpcopy -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi # Actually build it in tmplibgcc.a, then rename at end, --- 759,767 ---- # the second ar command tries to overwrite this file. To avoid the error # message from ar, we make sure all files are writable. -(cd tmpcopy; chmod +w * > /dev/null 2>&1) ! # The "cd..; wait" makes sure that the lock on tmpcopy has time to disappear. ! (cd tmpcopy; $(AR) x ../$(LIBGCC2); cd ..; /c/wait 2) ! (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o; cd ..; /c/wait 2) rm -rf tmpcopy -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi # Actually build it in tmplibgcc.a, then rename at end, *************** *** 770,779 **** cd objc; \ $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \ srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ! GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \ GCC_CFLAGS="$(GCC_CFLAGS)" -rm -f libobjc.a ! ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a . -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi # This is used by objc/Makefile if the user runs that directly. --- 778,787 ---- cd objc; \ $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \ srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ! GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \ GCC_CFLAGS="$(GCC_CFLAGS)" -rm -f libobjc.a ! cp objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a . -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi # This is used by objc/Makefile if the user runs that directly. *************** *** 783,789 **** cd objc; \ $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \ srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ! GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \ GCC_CFLAGS="$(GCC_CFLAGS)" # Compile two additional files that are linked with every program --- 791,797 ---- cd objc; \ $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \ srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ! GCC_FOR_TARGET="$$thisdir1/$(XGCC) -B$$thisdir1/" \ GCC_CFLAGS="$(GCC_CFLAGS)" # Compile two additional files that are linked with every program *************** *** 872,878 **** # To make a configuration always use collect2, set USE_COLLECT2 to ld. ld: collect2 rm -f ld ! ln collect2 ld collect2 : collect2.o version.o $(LIBDEPS) # Don't try modifying collect2 (aka ld) in place--it might be linking this. --- 880,886 ---- # To make a configuration always use collect2, set USE_COLLECT2 to ld. ld: collect2 rm -f ld ! cp collect2 ld collect2 : collect2.o version.o $(LIBDEPS) # Don't try modifying collect2 (aka ld) in place--it might be linking this. *************** *** 1383,1389 **** # Making the preprocessor cpp: cccp -rm -f cpp ! ln cccp cpp cccp: cccp.o cexp.o version.o $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS) cexp.o: $(srcdir)/cexp.c $(CONFIG_H) --- 1391,1397 ---- # Making the preprocessor cpp: cccp -rm -f cpp ! cp cccp cpp cccp: cccp.o cexp.o version.o $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS) cexp.o: $(srcdir)/cexp.c $(CONFIG_H) *************** *** 1541,1547 **** for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \ if [ -d $$dir ]; \ then \ ! $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir) "`pwd`/xgcc -B`pwd`/"; \ else true; fi; \ done; \ else true; \ --- 1549,1555 ---- for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \ if [ -d $$dir ]; \ then \ ! $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir) "`pwd`/$(XGCC) -B`pwd`/"; \ else true; fi; \ done; \ else true; \ *************** *** 1563,1569 **** cd objc; \ $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \ srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ! GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \ GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include touch objc-headers --- 1571,1577 ---- cd objc; \ $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \ srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \ ! GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \ GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include touch objc-headers *************** *** 1845,1864 **** $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \ chmod a+x $(bindir)/$(target)-g++; \ rm -f $(bindir)/$(target)-c++; \ ! ln $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \ fi ; \ else \ rm -f $(bindir)/gcc; \ $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \ rm -f $(bindir)/$(target)-gcc-1; \ ! ln $(bindir)/gcc $(bindir)/$(target)-gcc-1; \ mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \ if [ -f cc1plus ] ; then \ rm -f $(bindir)/g++; \ $(INSTALL_PROGRAM) g++ $(bindir)/g++; \ chmod a+x $(bindir)/g++; \ rm -f $(bindir)/c++; \ ! ln $(bindir)/g++ $(bindir)/c++; \ fi ; \ fi # Install protoize if it was compiled. --- 1853,1872 ---- $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \ chmod a+x $(bindir)/$(target)-g++; \ rm -f $(bindir)/$(target)-c++; \ ! $(HARDLINK) $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \ fi ; \ else \ rm -f $(bindir)/gcc; \ $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \ rm -f $(bindir)/$(target)-gcc-1; \ ! $(HARDLINK) $(bindir)/gcc $(bindir)/$(target)-gcc-1; \ mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \ if [ -f cc1plus ] ; then \ rm -f $(bindir)/g++; \ $(INSTALL_PROGRAM) g++ $(bindir)/g++; \ chmod a+x $(bindir)/g++; \ rm -f $(bindir)/c++; \ ! $(HARDLINK) $(bindir)/g++ $(bindir)/c++; \ fi ; \ fi # Install protoize if it was compiled. *************** *** 1924,1930 **** dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \ if expr "$$dest" : "$$dir.*" > /dev/null; then \ rm -f $(libsubdir)/include/$$i; \ ! ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \ fi; \ done; \ fi --- 1932,1938 ---- dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \ if expr "$$dest" : "$$dir.*" > /dev/null; then \ rm -f $(libsubdir)/include/$$i; \ ! $(HARDLINK) -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \ fi; \ done; \ fi *************** *** 1947,1952 **** --- 1955,1964 ---- install-headers-cpio: stmp-headers $(STMP_FIXPROTO) install-include-dir cd include; find . -print | cpio -pdum $(libsubdir)/include + # Install the include directory using simple recursive copy. + install-headers-cp: stmp-headers install-include-dir + cd include; cp -r . $(libsubdir)/include + # Put assert.h where it won't override GNU libc's assert.h. # It goes in a dir that is searched after GNU libc's headers; # thus, the following conditionals are no longer needed. *************** *** 2034,2040 **** mkdir tmp/config mkdir tmp/objc for file in *[0-9a-zA-Z+]; do \ ! ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \ done cd config; \ for file in *[0-9a-zA-Z+]; do \ --- 2046,2052 ---- mkdir tmp/config mkdir tmp/objc for file in *[0-9a-zA-Z+]; do \ ! $(HARDLINK) $$file tmp > /dev/null 2>&1 || cp $$file tmp; \ done cd config; \ for file in *[0-9a-zA-Z+]; do \ *************** *** 2042,2061 **** mkdir ../tmp/config/$$file; \ cd $$file; \ for subfile in *[0-9a-zA-Z+]; do \ ! ln $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \ || cp $$subfile ../../tmp/config/$$file; \ done; \ cd ..; \ else \ ! ln $$file ../tmp/config >/dev/null 2>&1 \ || cp $$file ../tmp/config; \ fi; \ done cd objc; \ for file in *[0-9a-zA-Z+]; do \ ! ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \ done ! ln .gdbinit tmp mv tmp gcc-$(version) # Get rid of everything we don't want in the distribution. cd gcc-$(version); make -f Makefile.in extraclean --- 2054,2073 ---- mkdir ../tmp/config/$$file; \ cd $$file; \ for subfile in *[0-9a-zA-Z+]; do \ ! $(HARDLINK) $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \ || cp $$subfile ../../tmp/config/$$file; \ done; \ cd ..; \ else \ ! $(HARDLINK) $$file ../tmp/config >/dev/null 2>&1 \ || cp $$file ../tmp/config; \ fi; \ done cd objc; \ for file in *[0-9a-zA-Z+]; do \ ! $(HARDLINK) $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \ done ! $(HARDLINK) .gdbinit tmp mv tmp gcc-$(version) # Get rid of everything we don't want in the distribution. cd gcc-$(version); make -f Makefile.in extraclean *************** *** 2074,2090 **** # in the intended test directory to make it a suitable test directory. # THIS IS OBSOLETE; use the -srcdir operand in configure instead. maketest: ! ln -s $(DIR)/*.[chy] . ! ln -s $(DIR)/configure . ! ln -s $(DIR)/*.def . -rm -f =* ! ln -s $(DIR)/.gdbinit . ! ln -s $(DIR)/$(FIXINCLUDES) . ! -ln -s $(DIR)/bison.simple . ! ln -s $(DIR)/config . ! ln -s $(DIR)/move-if-change . # The then and else were swapped to avoid a problem on Ultrix. ! if [ ! -f Makefile ] ; then ln -s $(DIR)/Makefile .; else false; fi -rm tm.h aux-output.c config.h md make clean # You must then run config to set up for compilation. --- 2086,2102 ---- # in the intended test directory to make it a suitable test directory. # THIS IS OBSOLETE; use the -srcdir operand in configure instead. maketest: ! cp $(DIR)/*.[chy] . ! cp $(DIR)/configure . ! cp $(DIR)/*.def . -rm -f =* ! cp $(DIR)/.gdbinit . ! cp $(DIR)/$(FIXINCLUDES) . ! -cp $(DIR)/bison.simple . ! cp $(DIR)/config . ! cp $(DIR)/move-if-change . # The then and else were swapped to avoid a problem on Ultrix. ! if [ ! -f Makefile ] ; then cp $(DIR)/Makefile .; else false; fi -rm tm.h aux-output.c config.h md make clean # You must then run config to set up for compilation. *************** *** 2100,2116 **** # To prevent `make install' from compiling alloca.o and then relinking cc1 # because alloca.o is newer, we permit these recursive makes to compile # alloca.o. Then cc1 is newer, so it won't have to be relinked. ! $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" $(MAKE) stage2 ! $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" bootstrap2: force ! $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" $(MAKE) stage2 ! $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" bootstrap3: force ! $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" # Compare the object files in the current directory with those in the # stage2 directory. --- 2112,2128 ---- # To prevent `make install' from compiling alloca.o and then relinking cc1 # because alloca.o is newer, we permit these recursive makes to compile # alloca.o. Then cc1 is newer, so it won't have to be relinked. ! $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" $(MAKE) stage2 ! $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" bootstrap2: force ! $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" $(MAKE) stage2 ! $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" bootstrap3: force ! $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" # Compare the object files in the current directory with those in the # stage2 directory. *************** *** 2134,2161 **** -rm -f tmp-foo* # Copy the object files from a particular stage into a subdirectory. ! stage1: force -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi -mv $(STAGESTUFF) stage1 -rm -f stage1/libgcc.a -cp libgcc.a stage1 -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi ! stage2: force -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi -mv $(STAGESTUFF) stage2 -rm -f stage2/libgcc.a -cp libgcc.a stage2 -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi ! stage3: force -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi -mv $(STAGESTUFF) stage3 -rm -f stage3/libgcc.a -cp libgcc.a stage3 -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi ! stage4: force -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi -mv $(STAGESTUFF) stage4 -rm -f stage4/libgcc.a --- 2146,2173 ---- -rm -f tmp-foo* # Copy the object files from a particular stage into a subdirectory. ! stage1: force $(EXTRA_STAGE1_TARGETS) -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi -mv $(STAGESTUFF) stage1 -rm -f stage1/libgcc.a -cp libgcc.a stage1 -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi ! stage2: force $(EXTRA_STAGE2_TARGETS) -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi -mv $(STAGESTUFF) stage2 -rm -f stage2/libgcc.a -cp libgcc.a stage2 -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi ! stage3: force $(EXTRA_STAGE3_TARGETS) -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi -mv $(STAGESTUFF) stage3 -rm -f stage3/libgcc.a -cp libgcc.a stage3 -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi ! stage4: force $(EXTRA_STAGE4_TARGETS) -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi -mv $(STAGESTUFF) stage4 -rm -f stage4/libgcc.a diff -rc --new-file gcc-2.5.7-fsf/c-parse.c gcc-2.5.7-amiga/c-parse.c *** gcc-2.5.7-fsf/c-parse.c Tue Nov 23 23:43:40 1993 --- gcc-2.5.7-amiga/c-parse.c Sun Dec 12 17:46:43 1993 *************** *** 1,5 **** ! /* A Bison parser, made from c-parse.y */ #define IDENTIFIER 258 #define TYPENAME 259 --- 1,8 ---- ! /* A Bison parser, made from c-parse.y with Bison version GNU Bison version 1.22 ! */ ! ! #define YYBISON 1 /* Identify Bison output. */ #define IDENTIFIER 258 #define TYPENAME 259 *************** *** 143,151 **** --- 146,156 ---- #include + #ifndef __cplusplus #ifndef __STDC__ #define const #endif + #endif *************** *** 190,196 **** 70, 71, 72, 73, 74, 75, 76 }; ! static const short yyrline[] = { 0, 218, 222, 235, 237, 237, 238, 240, 242, 243, 253, 259, 261, 263, 265, 267, 268, 269, 274, 280, 282, 283, 285, 290, 292, 293, 295, 300, 302, 303, 307, --- 195,363 ---- 70, 71, 72, 73, 74, 75, 76 }; ! #if YYDEBUG != 0 ! static const short yyprhs[] = { 0, ! 0, 1, 3, 4, 7, 8, 12, 14, 16, 22, ! 26, 31, 36, 39, 42, 45, 48, 50, 51, 52, ! 60, 65, 66, 67, 75, 80, 81, 82, 89, 93, ! 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, ! 114, 116, 118, 122, 124, 127, 128, 132, 135, 138, ! 141, 146, 149, 154, 157, 160, 162, 167, 168, 176, ! 178, 182, 186, 190, 194, 198, 202, 206, 210, 214, ! 218, 222, 226, 230, 234, 240, 244, 248, 250, 252, ! 254, 258, 262, 263, 268, 273, 278, 282, 286, 289, ! 292, 294, 297, 298, 300, 303, 307, 309, 311, 314, ! 317, 322, 327, 330, 333, 337, 339, 341, 344, 347, ! 348, 353, 358, 362, 366, 369, 372, 375, 379, 380, ! 383, 386, 388, 390, 393, 396, 399, 403, 404, 407, ! 409, 411, 413, 418, 423, 425, 427, 429, 431, 435, ! 437, 441, 442, 447, 448, 455, 459, 460, 467, 471, ! 472, 479, 481, 485, 487, 489, 494, 499, 508, 510, ! 511, 516, 518, 519, 522, 524, 528, 530, 531, 536, ! 538, 539, 548, 549, 556, 557, 562, 563, 569, 570, ! 574, 575, 579, 581, 583, 587, 591, 596, 600, 604, ! 606, 610, 615, 619, 623, 625, 629, 633, 637, 642, ! 646, 648, 649, 656, 661, 664, 665, 672, 677, 680, ! 681, 689, 690, 697, 700, 701, 703, 704, 706, 708, ! 711, 712, 716, 719, 723, 725, 729, 731, 733, 735, ! 739, 744, 751, 757, 759, 763, 765, 769, 772, 775, ! 776, 778, 780, 783, 784, 787, 791, 795, 798, 802, ! 807, 811, 814, 818, 821, 823, 826, 829, 830, 832, ! 835, 836, 837, 839, 841, 844, 848, 850, 853, 856, ! 863, 869, 875, 878, 881, 886, 887, 892, 893, 894, ! 898, 903, 907, 909, 911, 913, 915, 918, 919, 924, ! 926, 930, 931, 932, 940, 946, 949, 950, 951, 952, ! 965, 966, 973, 976, 979, 982, 986, 993, 1002, 1013, ! 1026, 1030, 1035, 1037, 1039, 1040, 1047, 1051, 1057, 1060, ! 1063, 1064, 1066, 1067, 1069, 1070, 1072, 1074, 1078, 1083, ! 1085, 1089, 1090, 1093, 1096, 1097, 1102, 1105, 1106, 1108, ! 1110, 1114, 1116, 1120, 1123, 1126, 1129, 1132, 1135, 1136, ! 1139, 1141, 1144, 1146, 1150, 1152 ! }; ! ! static const short yyrhs[] = { -1, ! 86, 0, 0, 87, 89, 0, 0, 86, 88, 89, ! 0, 91, 0, 90, 0, 27, 60, 100, 77, 78, ! 0, 117, 127, 78, 0, 121, 117, 127, 78, 0, ! 119, 117, 126, 78, 0, 121, 78, 0, 119, 78, ! 0, 1, 78, 0, 1, 79, 0, 78, 0, 0, ! 0, 119, 117, 150, 92, 111, 93, 180, 0, 119, ! 117, 150, 1, 0, 0, 0, 121, 117, 153, 94, ! 111, 95, 180, 0, 121, 117, 153, 1, 0, 0, ! 0, 117, 153, 96, 111, 97, 180, 0, 117, 153, ! 1, 0, 3, 0, 4, 0, 44, 0, 50, 0, ! 49, 0, 55, 0, 56, 0, 80, 0, 81, 0, ! 102, 0, 0, 102, 0, 107, 0, 102, 82, 107, ! 0, 108, 0, 51, 105, 0, 0, 32, 104, 105, ! 0, 99, 105, 0, 41, 98, 0, 11, 103, 0, ! 11, 60, 168, 77, 0, 29, 103, 0, 29, 60, ! 168, 77, 0, 34, 105, 0, 35, 105, 0, 103, ! 0, 60, 168, 77, 105, 0, 0, 60, 168, 77, ! 83, 106, 138, 79, 0, 105, 0, 107, 49, 107, ! 0, 107, 50, 107, 0, 107, 51, 107, 0, 107, ! 52, 107, 0, 107, 53, 107, 0, 107, 47, 107, ! 0, 107, 48, 107, 0, 107, 46, 107, 0, 107, ! 45, 107, 0, 107, 44, 107, 0, 107, 42, 107, ! 0, 107, 43, 107, 0, 107, 41, 107, 0, 107, ! 40, 107, 0, 107, 38, 204, 39, 107, 0, 107, ! 37, 107, 0, 107, 36, 107, 0, 3, 0, 8, ! 0, 110, 0, 60, 100, 77, 0, 60, 1, 77, ! 0, 0, 60, 109, 181, 77, 0, 108, 60, 101, ! 77, 0, 108, 61, 100, 84, 0, 108, 59, 98, ! 0, 108, 58, 98, 0, 108, 55, 0, 108, 56, ! 0, 9, 0, 110, 9, 0, 0, 113, 0, 113, ! 10, 0, 186, 187, 114, 0, 112, 0, 175, 0, ! 113, 112, 0, 112, 175, 0, 119, 117, 126, 78, ! 0, 121, 117, 127, 78, 0, 119, 78, 0, 121, ! 78, 0, 186, 187, 118, 0, 115, 0, 175, 0, ! 116, 115, 0, 115, 175, 0, 0, 119, 117, 126, ! 78, 0, 121, 117, 127, 78, 0, 119, 117, 146, ! 0, 121, 117, 148, 0, 119, 78, 0, 121, 78, ! 0, 124, 120, 0, 121, 124, 120, 0, 0, 120, ! 125, 0, 120, 5, 0, 7, 0, 5, 0, 121, ! 7, 0, 121, 5, 0, 124, 123, 0, 170, 124, ! 123, 0, 0, 123, 125, 0, 6, 0, 154, 0, ! 4, 0, 28, 60, 100, 77, 0, 28, 60, 168, ! 77, 0, 6, 0, 7, 0, 154, 0, 129, 0, ! 126, 82, 129, 0, 131, 0, 127, 82, 129, 0, ! 0, 27, 60, 110, 77, 0, 0, 150, 128, 133, ! 37, 130, 136, 0, 150, 128, 133, 0, 0, 153, ! 128, 133, 37, 132, 136, 0, 153, 128, 133, 0, ! 0, 31, 60, 60, 134, 77, 77, 0, 135, 0, ! 134, 82, 135, 0, 3, 0, 7, 0, 3, 60, ! 3, 77, 0, 3, 60, 8, 77, 0, 3, 60, ! 3, 82, 8, 82, 8, 77, 0, 107, 0, 0, ! 83, 137, 138, 79, 0, 1, 0, 0, 139, 159, ! 0, 140, 0, 139, 82, 140, 0, 107, 0, 0, ! 83, 141, 138, 79, 0, 1, 0, 0, 61, 107, ! 10, 107, 84, 37, 142, 140, 0, 0, 61, 107, ! 84, 37, 143, 140, 0, 0, 98, 39, 144, 140, ! 0, 0, 59, 98, 37, 145, 140, 0, 0, 150, ! 147, 181, 0, 0, 153, 149, 181, 0, 151, 0, ! 153, 0, 60, 151, 77, 0, 151, 60, 216, 0, ! 151, 61, 100, 84, 0, 151, 61, 84, 0, 51, ! 171, 151, 0, 4, 0, 152, 60, 216, 0, 152, ! 61, 100, 84, 0, 152, 61, 84, 0, 51, 171, ! 152, 0, 4, 0, 153, 60, 216, 0, 60, 153, ! 77, 0, 51, 171, 153, 0, 153, 61, 100, 84, ! 0, 153, 61, 84, 0, 3, 0, 0, 13, 98, ! 83, 155, 161, 79, 0, 13, 83, 161, 79, 0, ! 13, 98, 0, 0, 14, 98, 83, 156, 161, 79, ! 0, 14, 83, 161, 79, 0, 14, 98, 0, 0, ! 12, 98, 83, 157, 166, 160, 79, 0, 0, 12, ! 83, 158, 166, 160, 79, 0, 12, 98, 0, 0, ! 82, 0, 0, 82, 0, 162, 0, 162, 163, 0, ! 0, 162, 163, 78, 0, 162, 78, 0, 122, 117, ! 164, 0, 122, 0, 170, 117, 164, 0, 170, 0, ! 1, 0, 165, 0, 164, 82, 165, 0, 186, 187, ! 150, 133, 0, 186, 187, 150, 39, 107, 133, 0, ! 186, 187, 39, 107, 133, 0, 167, 0, 166, 82, ! 167, 0, 98, 0, 98, 37, 107, 0, 122, 169, ! 0, 170, 169, 0, 0, 172, 0, 7, 0, 170, ! 7, 0, 0, 171, 7, 0, 60, 172, 77, 0, ! 51, 171, 172, 0, 51, 171, 0, 172, 60, 209, ! 0, 172, 61, 100, 84, 0, 172, 61, 84, 0, ! 60, 209, 0, 61, 100, 84, 0, 61, 84, 0, ! 189, 0, 173, 189, 0, 173, 175, 0, 0, 173, ! 0, 1, 78, 0, 0, 0, 178, 0, 179, 0, ! 178, 179, 0, 33, 220, 78, 0, 181, 0, 1, ! 181, 0, 83, 79, 0, 83, 176, 177, 116, 174, ! 79, 0, 83, 176, 177, 1, 79, 0, 83, 176, ! 177, 173, 79, 0, 183, 188, 0, 183, 1, 0, ! 15, 60, 100, 77, 0, 0, 18, 185, 188, 17, ! 0, 0, 0, 186, 187, 191, 0, 186, 187, 202, ! 188, 0, 186, 187, 190, 0, 191, 0, 202, 0, ! 181, 0, 199, 0, 100, 78, 0, 0, 182, 16, ! 192, 188, 0, 182, 0, 182, 16, 1, 0, 0, ! 0, 17, 193, 60, 100, 77, 194, 188, 0, 184, ! 60, 100, 77, 78, 0, 184, 1, 0, 0, 0, ! 0, 19, 60, 204, 78, 195, 204, 78, 196, 204, ! 77, 197, 188, 0, 0, 20, 60, 100, 77, 198, ! 188, 0, 23, 78, 0, 24, 78, 0, 25, 78, ! 0, 25, 100, 78, 0, 27, 203, 60, 100, 77, ! 78, 0, 27, 203, 60, 100, 39, 205, 77, 78, ! 0, 27, 203, 60, 100, 39, 205, 39, 205, 77, ! 78, 0, 27, 203, 60, 100, 39, 205, 39, 205, ! 39, 208, 77, 78, 0, 26, 98, 78, 0, 26, ! 51, 100, 78, 0, 78, 0, 200, 0, 0, 19, ! 60, 108, 77, 201, 188, 0, 21, 107, 39, 0, ! 21, 107, 10, 107, 39, 0, 22, 39, 0, 98, ! 39, 0, 0, 7, 0, 0, 100, 0, 0, 206, ! 0, 207, 0, 206, 82, 207, 0, 9, 60, 100, ! 77, 0, 110, 0, 208, 82, 110, 0, 0, 210, ! 211, 0, 213, 77, 0, 0, 214, 78, 212, 211, ! 0, 1, 77, 0, 0, 10, 0, 214, 0, 214, ! 82, 10, 0, 215, 0, 214, 82, 215, 0, 119, ! 152, 0, 119, 153, 0, 119, 169, 0, 121, 153, ! 0, 121, 169, 0, 0, 217, 218, 0, 211, 0, ! 219, 77, 0, 3, 0, 219, 82, 3, 0, 98, ! 0, 220, 82, 98, 0 ! }; ! ! #endif ! ! #if YYDEBUG != 0 ! static const short yyrline[] = { 0, 218, 222, 235, 237, 237, 238, 240, 242, 243, 253, 259, 261, 263, 265, 267, 268, 269, 274, 280, 282, 283, 285, 290, 292, 293, 295, 300, 302, 303, 307, *************** *** 206,245 **** 764, 775, 779, 781, 784, 797, 800, 804, 806, 814, 815, 816, 820, 822, 828, 829, 830, 833, 835, 838, 840, 843, 846, 852, 859, 862, 868, 875, 878, 885, ! 888, 893, 895, 900, 906, 907, 917, 928, 948, 950, ! 955, 962, 967, 971, 974, 976, 981, 984, 986, 988, ! 992, 995, 995, 998, 998, 1001, 1001, 1004, 1006, 1023, ! 1027, 1044, 1051, 1053, 1058, 1061, 1066, 1068, 1070, 1072, ! 1080, 1086, 1088, 1090, 1092, 1098, 1104, 1106, 1108, 1110, ! 1112, 1115, 1120, 1124, 1127, 1129, 1131, 1133, 1136, 1138, ! 1141, 1144, 1147, 1150, 1154, 1156, 1159, 1161, 1165, 1168, ! 1173, 1175, 1177, 1191, 1197, 1202, 1207, 1212, 1216, 1218, ! 1222, 1226, 1230, 1240, 1242, 1247, 1250, 1254, 1257, 1261, ! 1264, 1267, 1270, 1274, 1277, 1281, 1285, 1287, 1289, 1291, ! 1293, 1295, 1297, 1299, 1307, 1309, 1310, 1313, 1315, 1318, ! 1321, 1332, 1334, 1339, 1341, 1344, 1358, 1361, 1364, 1366, ! 1371, 1376, 1384, 1389, 1392, 1405, 1413, 1417, 1421, 1425, ! 1431, 1435, 1440, 1442, 1453, 1456, 1457, 1474, 1479, 1482, ! 1493, 1495, 1505, 1515, 1516, 1524, 1527, 1539, 1543, 1560, ! 1567, 1576, 1578, 1583, 1588, 1592, 1596, 1607, 1614, 1621, ! 1628, 1639, 1643, 1646, 1651, 1674, 1705, 1730, 1759, 1774, ! 1785, 1789, 1793, 1796, 1801, 1803, 1806, 1808, 1812, 1817, ! 1820, 1826, 1831, 1836, 1838, 1847, 1848, 1854, 1856, 1861, ! 1863, 1867, 1870, 1876, 1879, 1881, 1883, 1885, 1892, 1897, ! 1902, 1904, 1913, 1916, 1921, 1924 }; ! static const char * const yytname[] = { 0, ! "error","$illegal.","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","ALIGN", ! "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" }; static const short yyr1[] = { 0, 85, 85, 87, 86, 88, 86, 89, 89, 89, 90, --- 373,433 ---- 764, 775, 779, 781, 784, 797, 800, 804, 806, 814, 815, 816, 820, 822, 828, 829, 830, 833, 835, 838, 840, 843, 846, 852, 859, 862, 868, 875, 878, 885, ! 888, 893, 895, 900, 914, 915, 925, 936, 956, 958, ! 963, 970, 975, 979, 982, 984, 989, 992, 994, 996, ! 1000, 1003, 1003, 1006, 1006, 1009, 1009, 1012, 1014, 1031, ! 1035, 1052, 1059, 1061, 1066, 1069, 1074, 1076, 1078, 1080, ! 1088, 1094, 1096, 1098, 1100, 1106, 1112, 1114, 1116, 1118, ! 1120, 1123, 1128, 1132, 1135, 1137, 1139, 1141, 1144, 1146, ! 1149, 1152, 1155, 1158, 1162, 1164, 1167, 1169, 1173, 1176, ! 1181, 1183, 1185, 1199, 1205, 1210, 1215, 1220, 1224, 1226, ! 1230, 1234, 1238, 1248, 1250, 1255, 1258, 1262, 1265, 1269, ! 1272, 1275, 1278, 1282, 1285, 1289, 1293, 1295, 1297, 1299, ! 1301, 1303, 1305, 1307, 1315, 1317, 1318, 1321, 1323, 1326, ! 1329, 1340, 1342, 1347, 1349, 1352, 1366, 1369, 1372, 1374, ! 1379, 1384, 1392, 1397, 1400, 1413, 1421, 1425, 1429, 1433, ! 1439, 1443, 1448, 1450, 1461, 1464, 1465, 1482, 1487, 1490, ! 1501, 1503, 1513, 1523, 1524, 1532, 1535, 1547, 1551, 1568, ! 1575, 1584, 1586, 1591, 1596, 1600, 1604, 1615, 1622, 1629, ! 1636, 1647, 1651, 1654, 1659, 1682, 1713, 1738, 1767, 1782, ! 1793, 1797, 1801, 1804, 1809, 1811, 1814, 1816, 1820, 1825, ! 1828, 1834, 1839, 1844, 1846, 1855, 1856, 1862, 1864, 1869, ! 1871, 1875, 1878, 1884, 1887, 1889, 1891, 1893, 1900, 1905, ! 1910, 1912, 1921, 1924, 1929, 1932 }; ! static const char * const yytname[] = { "$","error","$illegal.","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","ALIGN", ! "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","@9","cast_expr","@10", ! "expr_no_commas","primary","@11","string","xdecls","lineno_datadecl","datadecls", ! "datadecl","lineno_decl","decls","setspecs","decl","typed_declspecs","reserved_declspecs", ! "declmods","typed_typespecs","reserved_typespecquals","typespec","typespecqual_reserved", ! "initdecls","notype_initdecls","maybeasm","initdcl","@12","notype_initdcl","@13", ! "maybe_attribute","attribute_list","attrib","init","@14","initlist_maybe_comma", ! "initlist1","initelt","@15","@16","@17","@18","@19","nested_function","@20", ! "notype_nested_function","@21","declarator","after_type_declarator","parm_declarator", ! "notype_declarator","structsp","@22","@23","@24","@25","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","xstmts","errstmt","pushlevel","maybe_label_decls","label_decls", ! "label_decl","compstmt_or_error","compstmt","simple_if","if_prefix","do_stmt_start", ! "@26","save_filename","save_lineno","lineno_labeled_stmt","lineno_stmt_or_label", ! "stmt_or_label","stmt","@27","@28","@29","@30","@31","@32","@33","all_iter_stmt", ! "all_iter_stmt_simple","@34","label","maybe_type_qual","xexpr","asm_operands", ! "nonnull_asm_operands","asm_operand","asm_clobbers","parmlist","@35","parmlist_1", ! "@36","parmlist_2","parms","parm","parmlist_or_identifiers","@37","parmlist_or_identifiers_1", ! "identifiers","identifiers_or_typenames","" }; + #endif static const short yyr1[] = { 0, 85, 85, 87, 86, 88, 86, 89, 89, 89, 90, *************** *** 896,908 **** 48, 49, 50, 51, 52, 53, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }; - #define YYPURE 1 - /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ ! #line 3 "bison.simple" /* Skeleton output parser for bison, ! Copyright (C) 1984 Bob Corbett and Richard Stallman 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 --- 1084,1094 ---- 48, 49, 50, 51, 52, 53, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ ! #line 3 "/usr/lib/bison.simple" /* Skeleton output parser for bison, ! Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman 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 *************** *** 919,927 **** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) #include ! #endif /* This is the parser code that is written into each bison parser when the %semantic_parser declaration is not specified in the grammar. --- 1105,1138 ---- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #ifndef alloca ! #ifdef __GNUC__ ! #define alloca __builtin_alloca ! #else /* not GNU C. */ ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) #include ! #else /* not sparc */ ! #if defined (MSDOS) && !defined (__TURBOC__) ! #include ! #else /* not MSDOS, or __TURBOC__ */ ! #if defined(_AIX) ! #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 */ ! #endif /* __hpux */ ! #endif /* not _AIX */ ! #endif /* not MSDOS, or __TURBOC__ */ ! #endif /* not sparc. */ ! #endif /* not GNU C. */ ! #endif /* 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. *************** *** 936,970 **** #define yyclearin (yychar = YYEMPTY) #define YYEMPTY -2 #define YYEOF 0 - #define YYFAIL goto yyerrlab; #define YYACCEPT return(0) #define YYABORT return(1) ! #define YYERROR goto yyerrlab #define YYTERROR 1 #define YYERRCODE 256 ! #ifndef YYIMPURE #define YYLEX yylex() #endif ! #ifndef YYPURE #define YYLEX yylex(&yylval, &yylloc) #endif /* If nonreentrant, generate the variables here */ ! #ifndef YYIMPURE int yychar; /* the lookahead symbol */ YYSTYPE yylval; /* the semantic value of the */ /* lookahead symbol */ YYLTYPE yylloc; /* location data for the lookahead */ /* symbol */ int yynerrs; /* number of parse errors so far */ ! #endif /* YYIMPURE */ #if YYDEBUG != 0 int yydebug; /* nonzero means print parse trace */ --- 1147,1203 ---- #define yyclearin (yychar = YYEMPTY) #define YYEMPTY -2 #define YYEOF 0 #define YYACCEPT return(0) #define YYABORT return(1) ! #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 #define YYLEX yylex(&yylval, &yylloc) + #else + #define YYLEX yylex(&yylval) + #endif #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 */ *************** *** 972,992 **** from coexisting. */ #endif ! /* YYMAXDEPTH indicates the initial size of the parser's stacks */ ! #ifndef YYMAXDEPTH ! #define YYMAXDEPTH 200 #endif ! /* YYMAXLIMIT is the maximum size the stacks can grow to (effective only if the built-in stack extension method is used). */ ! #ifndef YYMAXLIMIT ! #define YYMAXLIMIT 10000 #endif ! #line 90 "bison.simple" int yyparse() { --- 1205,1272 ---- 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 + + /* Prevent warning if -Wstrict-prototypes. */ + #ifdef __GNUC__ + int yyparse (void); + #endif + + #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ + #define __yy_bcopy(FROM,TO,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_bcopy (from, to, count) + char *from; + char *to; + 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_bcopy (char *from, char *to, int count) ! { ! register char *f = from; ! register char *t = to; ! register int i = count; ! ! while (i-- > 0) ! *t++ = *f++; ! } ! ! #endif ! #endif ! ! #line 184 "/usr/lib/bison.simple" int yyparse() { *************** *** 994,1018 **** register int yyn; register short *yyssp; register YYSTYPE *yyvsp; - YYLTYPE *yylsp; int yyerrstatus; /* number of tokens to shift before error messages enabled */ ! int yychar1; /* lookahead token as an internal (translated) token number */ ! short yyssa[YYMAXDEPTH]; /* the state stack */ ! YYSTYPE yyvsa[YYMAXDEPTH]; /* the semantic value stack */ ! YYLTYPE yylsa[YYMAXDEPTH]; /* the location stack */ short *yyss = yyssa; /* refer to the stacks thru separate pointers */ YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ YYLTYPE *yyls = yylsa; ! int yymaxdepth = YYMAXDEPTH; ! #ifndef YYPURE int yychar; YYSTYPE yylval; - YYLTYPE yylloc; int yynerrs; #endif YYSTYPE yyval; /* the variable used to return */ --- 1274,1307 ---- 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; ! #ifdef YYPURE int yychar; YYSTYPE yylval; int yynerrs; + #ifdef YYLSP_NEEDED + YYLTYPE yylloc; + #endif #endif YYSTYPE yyval; /* the variable used to return */ *************** *** 1033,1043 **** /* Initialize stack pointers. Waste one element of value and location stack ! so that they stay on the same level as the state stack. */ yyssp = yyss - 1; yyvsp = yyvs; yylsp = yyls; /* Push a new state, which is found in yystate . */ /* In all cases, when you get here, the value and location stacks --- 1322,1335 ---- /* 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 *************** *** 1046,1058 **** *++yyssp = yystate; ! if (yyssp >= yyss + yymaxdepth - 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; - YYLTYPE *yyls1 = yyls; short *yyss1 = yyss; /* Get the current used size of the three stacks, in elements. */ int size = yyssp - yyss + 1; --- 1338,1352 ---- *++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; *************** *** 1060,1086 **** #ifdef yyoverflow /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. */ yyoverflow("parser stack overflow", &yyss1, size * sizeof (*yyssp), &yyvs1, size * sizeof (*yyvsp), &yyls1, size * sizeof (*yylsp), ! &yymaxdepth); ! yyss = yyss1; yyvs = yyvs1; yyls = yyls1; #else /* no yyoverflow */ /* Extend the stack our own way. */ ! if (yymaxdepth >= YYMAXLIMIT) ! yyerror("parser stack overflow"); ! yymaxdepth *= 2; ! if (yymaxdepth > YYMAXLIMIT) ! yymaxdepth = YYMAXLIMIT; ! yyss = (short *) alloca (yymaxdepth * sizeof (*yyssp)); ! bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp)); ! yyvs = (YYSTYPE *) alloca (yymaxdepth * sizeof (*yyvsp)); ! bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp)); #ifdef YYLSP_NEEDED ! yyls = (YYLTYPE *) alloca (yymaxdepth * sizeof (*yylsp)); ! bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp)); #endif #endif /* no yyoverflow */ --- 1354,1395 ---- #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"); ! return 2; ! } ! yystacksize *= 2; ! if (yystacksize > YYMAXDEPTH) ! yystacksize = YYMAXDEPTH; ! yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); ! __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp)); ! yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); ! __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp)); #ifdef YYLSP_NEEDED ! yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); ! __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp)); #endif #endif /* no yyoverflow */ *************** *** 1092,1101 **** #if YYDEBUG != 0 if (yydebug) ! fprintf(stderr, "Stack size increased to %d\n", yymaxdepth); #endif ! if (yyssp >= yyss + yymaxdepth - 1) YYABORT; } --- 1401,1410 ---- #if YYDEBUG != 0 if (yydebug) ! fprintf(stderr, "Stack size increased to %d\n", yystacksize); #endif ! if (yyssp >= yyss + yystacksize - 1) YYABORT; } *************** *** 1104,1112 **** fprintf(stderr, "Entering state %d\n", yystate); #endif /* 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. */ --- 1413,1424 ---- 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. */ *************** *** 1146,1152 **** #if YYDEBUG != 0 if (yydebug) ! fprintf(stderr, "Next token is %d (%s)\n", yychar, yytname[yychar1]); #endif } --- 1458,1472 ---- #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 } *************** *** 1208,1224 **** /* Do a reduction. yyn is the number of a rule to reduce with. */ yyreduce: yylen = yyr2[yyn]; ! yyval = yyvsp[1-yylen]; /* implement default value of the action */ #if YYDEBUG != 0 if (yydebug) { ! if (yylen == 1) ! fprintf (stderr, "Reducing 1 value via line %d, ", ! yyrline[yyn]); ! else ! fprintf (stderr, "Reducing %d values via line %d, ", ! yylen, yyrline[yyn]); } #endif --- 1528,1548 ---- /* 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 *************** *** 1959,1972 **** break;} case 154: #line 901 "c-parse.y" ! { if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed") && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn")) warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = yyvsp[0].ttype; ; break;} case 156: ! #line 908 "c-parse.y" { /* If not "mode (m)", then issue warning. */ if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0) { --- 2283,2304 ---- break;} case 154: #line 901 "c-parse.y" ! { ! #ifdef HANDLE_ATTRIBUTE0 ! /* give the function a chance to validate further attributes */ ! if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER (yyvsp[0].ttype)) || ! (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed") ! && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn"))) ! #else ! if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed") && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn")) + #endif warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = yyvsp[0].ttype; ; break;} case 156: ! #line 916 "c-parse.y" { /* If not "mode (m)", then issue warning. */ if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0) { *************** *** 1978,1984 **** yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ; break;} case 157: ! #line 918 "c-parse.y" { /* if not "aligned(n)", then issue warning */ if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0 || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST) --- 2310,2316 ---- yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ; break;} case 157: ! #line 926 "c-parse.y" { /* if not "aligned(n)", then issue warning */ if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0 || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST) *************** *** 1991,1997 **** yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ; break;} case 158: ! #line 929 "c-parse.y" { /* if not "format(...)", then issue warning */ if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0 || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST --- 2323,2329 ---- yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ; break;} case 158: ! #line 937 "c-parse.y" { /* if not "format(...)", then issue warning */ if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0 || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST *************** *** 2009,2022 **** NULL_TREE); ; break;} case 160: ! #line 951 "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 161: ! #line 956 "c-parse.y" { yyval.ttype = pop_init_level (0); if (yyval.ttype == error_mark_node) pop_momentary (); --- 2341,2354 ---- NULL_TREE); ; break;} case 160: ! #line 959 "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 161: ! #line 964 "c-parse.y" { yyval.ttype = pop_init_level (0); if (yyval.ttype == error_mark_node) pop_momentary (); *************** *** 2024,2067 **** pop_momentary_nofree (); ; break;} case 162: ! #line 963 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} case 163: ! #line 969 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids empty initializer braces"); ; break;} case 167: ! #line 983 "c-parse.y" { process_init_element (yyvsp[0].ttype); ; break;} case 168: ! #line 985 "c-parse.y" { push_init_level (0); ; break;} case 169: ! #line 987 "c-parse.y" { process_init_element (pop_init_level (0)); ; break;} case 171: ! #line 993 "c-parse.y" { set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ; break;} case 173: ! #line 996 "c-parse.y" { set_init_index (yyvsp[-2].ttype, NULL_TREE); ; break;} case 175: ! #line 999 "c-parse.y" { set_init_label (yyvsp[-1].ttype); ; break;} case 177: ! #line 1002 "c-parse.y" { set_init_label (yyvsp[-1].ttype); ; break;} case 179: ! #line 1008 "c-parse.y" { push_c_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, 1)) { --- 2356,2399 ---- pop_momentary_nofree (); ; break;} case 162: ! #line 971 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} case 163: ! #line 977 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids empty initializer braces"); ; break;} case 167: ! #line 991 "c-parse.y" { process_init_element (yyvsp[0].ttype); ; break;} case 168: ! #line 993 "c-parse.y" { push_init_level (0); ; break;} case 169: ! #line 995 "c-parse.y" { process_init_element (pop_init_level (0)); ; break;} case 171: ! #line 1001 "c-parse.y" { set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ; break;} case 173: ! #line 1004 "c-parse.y" { set_init_index (yyvsp[-2].ttype, NULL_TREE); ; break;} case 175: ! #line 1007 "c-parse.y" { set_init_label (yyvsp[-1].ttype); ; break;} case 177: ! #line 1010 "c-parse.y" { set_init_label (yyvsp[-1].ttype); ; break;} case 179: ! #line 1016 "c-parse.y" { push_c_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, 1)) { *************** *** 2072,2083 **** store_parm_decls (); ; break;} case 180: ! #line 1023 "c-parse.y" { finish_function (1); pop_c_function_context (); ; break;} case 181: ! #line 1029 "c-parse.y" { push_c_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, 1)) { --- 2404,2415 ---- store_parm_decls (); ; break;} case 180: ! #line 1031 "c-parse.y" { finish_function (1); pop_c_function_context (); ; break;} case 181: ! #line 1037 "c-parse.y" { push_c_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, 1)) { *************** *** 2088,2370 **** store_parm_decls (); ; break;} case 182: ! #line 1044 "c-parse.y" { finish_function (1); pop_c_function_context (); ; break;} case 185: ! #line 1060 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 186: ! #line 1062 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 187: ! #line 1067 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 188: ! #line 1069 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 189: ! #line 1071 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 191: ! #line 1082 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 192: ! #line 1087 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 193: ! #line 1089 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 194: ! #line 1091 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 196: ! #line 1100 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 197: ! #line 1105 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 198: ! #line 1107 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 199: ! #line 1109 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 200: ! #line 1111 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 202: ! #line 1117 "c-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ; break;} case 203: ! #line 1121 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); /* Really define the structure. */ ; break;} case 204: ! #line 1125 "c-parse.y" { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), yyvsp[-1].ttype); ; break;} case 205: ! #line 1128 "c-parse.y" { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ; break;} case 206: ! #line 1130 "c-parse.y" { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ; break;} case 207: ! #line 1132 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} case 208: ! #line 1134 "c-parse.y" { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE), yyvsp[-1].ttype); ; break;} case 209: ! #line 1137 "c-parse.y" { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ; break;} case 210: ! #line 1139 "c-parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} case 211: ! #line 1142 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype)); resume_momentary (yyvsp[-4].itype); ; break;} case 212: ! #line 1145 "c-parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (NULL_TREE); ; break;} case 213: ! #line 1148 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype)); resume_momentary (yyvsp[-4].itype); ; break;} case 214: ! #line 1151 "c-parse.y" { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ; break;} case 218: ! #line 1162 "c-parse.y" { if (pedantic) pedwarn ("comma at end of enumerator list"); ; break;} case 219: ! #line 1167 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 220: ! #line 1169 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); pedwarn ("no semicolon at end of struct or union"); ; break;} case 221: ! #line 1174 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 222: ! #line 1176 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} case 223: ! #line 1178 "c-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} case 224: ! #line 1193 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; current_declspecs = TREE_VALUE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-1].itype); ; break;} case 225: ! #line 1198 "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 226: ! #line 1203 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; current_declspecs = TREE_VALUE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-1].itype); ; break;} case 227: ! #line 1208 "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 228: ! #line 1213 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 230: ! #line 1219 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 231: ! #line 1224 "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); ; break;} case 232: ! #line 1228 "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); ; break;} case 233: ! #line 1231 "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); ; break;} case 235: ! #line 1243 "c-parse.y" { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} case 236: ! #line 1249 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ; break;} case 237: ! #line 1251 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 238: ! #line 1256 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 239: ! #line 1258 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 240: ! #line 1263 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 242: ! #line 1269 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 243: ! #line 1271 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 244: ! #line 1276 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 245: ! #line 1278 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 246: ! #line 1283 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 247: ! #line 1286 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 248: ! #line 1288 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} case 249: ! #line 1290 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 250: ! #line 1292 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 251: ! #line 1294 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 252: ! #line 1296 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 253: ! #line 1298 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} case 254: ! #line 1300 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ; break;} case 261: ! #line 1322 "c-parse.y" { emit_line_note (input_filename, lineno); pushlevel (0); clear_last_expr (); --- 2420,2702 ---- store_parm_decls (); ; break;} case 182: ! #line 1052 "c-parse.y" { finish_function (1); pop_c_function_context (); ; break;} case 185: ! #line 1068 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 186: ! #line 1070 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 187: ! #line 1075 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 188: ! #line 1077 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 189: ! #line 1079 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 191: ! #line 1090 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 192: ! #line 1095 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 193: ! #line 1097 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 194: ! #line 1099 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 196: ! #line 1108 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 197: ! #line 1113 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 198: ! #line 1115 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 199: ! #line 1117 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 200: ! #line 1119 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 202: ! #line 1125 "c-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ; break;} case 203: ! #line 1129 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); /* Really define the structure. */ ; break;} case 204: ! #line 1133 "c-parse.y" { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), yyvsp[-1].ttype); ; break;} case 205: ! #line 1136 "c-parse.y" { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ; break;} case 206: ! #line 1138 "c-parse.y" { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ; break;} case 207: ! #line 1140 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} case 208: ! #line 1142 "c-parse.y" { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE), yyvsp[-1].ttype); ; break;} case 209: ! #line 1145 "c-parse.y" { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ; break;} case 210: ! #line 1147 "c-parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} case 211: ! #line 1150 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype)); resume_momentary (yyvsp[-4].itype); ; break;} case 212: ! #line 1153 "c-parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (NULL_TREE); ; break;} case 213: ! #line 1156 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype)); resume_momentary (yyvsp[-4].itype); ; break;} case 214: ! #line 1159 "c-parse.y" { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ; break;} case 218: ! #line 1170 "c-parse.y" { if (pedantic) pedwarn ("comma at end of enumerator list"); ; break;} case 219: ! #line 1175 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 220: ! #line 1177 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); pedwarn ("no semicolon at end of struct or union"); ; break;} case 221: ! #line 1182 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 222: ! #line 1184 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} case 223: ! #line 1186 "c-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} case 224: ! #line 1201 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; current_declspecs = TREE_VALUE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-1].itype); ; break;} case 225: ! #line 1206 "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 226: ! #line 1211 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; current_declspecs = TREE_VALUE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-1].itype); ; break;} case 227: ! #line 1216 "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 228: ! #line 1221 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 230: ! #line 1227 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 231: ! #line 1232 "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); ; break;} case 232: ! #line 1236 "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); ; break;} case 233: ! #line 1239 "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); ; break;} case 235: ! #line 1251 "c-parse.y" { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} case 236: ! #line 1257 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ; break;} case 237: ! #line 1259 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 238: ! #line 1264 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 239: ! #line 1266 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 240: ! #line 1271 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 242: ! #line 1277 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 243: ! #line 1279 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 244: ! #line 1284 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 245: ! #line 1286 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 246: ! #line 1291 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 247: ! #line 1294 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 248: ! #line 1296 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} case 249: ! #line 1298 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 250: ! #line 1300 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 251: ! #line 1302 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 252: ! #line 1304 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 253: ! #line 1306 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} case 254: ! #line 1308 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ; break;} case 261: ! #line 1330 "c-parse.y" { emit_line_note (input_filename, lineno); pushlevel (0); clear_last_expr (); *************** *** 2373,2384 **** ; break;} case 263: ! #line 1335 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids label declarations"); ; break;} case 266: ! #line 1346 "c-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { --- 2705,2716 ---- ; break;} case 263: ! #line 1343 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids label declarations"); ; break;} case 266: ! #line 1354 "c-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { *************** *** 2389,2424 **** ; break;} case 267: ! #line 1360 "c-parse.y" {; break;} case 269: ! #line 1365 "c-parse.y" { yyval.ttype = convert (void_type_node, integer_zero_node); ; break;} case 270: ! #line 1367 "c-parse.y" { emit_line_note (input_filename, lineno); expand_end_bindings (getdecls (), 1, 0); yyval.ttype = poplevel (1, 1, 0); pop_momentary (); ; break;} case 271: ! #line 1372 "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); pop_momentary (); ; break;} case 272: ! #line 1377 "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); pop_momentary (); ; break;} case 275: ! #line 1394 "c-parse.y" { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0); yyval.itype = stmt_count; --- 2721,2756 ---- ; break;} case 267: ! #line 1368 "c-parse.y" {; break;} case 269: ! #line 1373 "c-parse.y" { yyval.ttype = convert (void_type_node, integer_zero_node); ; break;} case 270: ! #line 1375 "c-parse.y" { emit_line_note (input_filename, lineno); expand_end_bindings (getdecls (), 1, 0); yyval.ttype = poplevel (1, 1, 0); pop_momentary (); ; break;} case 271: ! #line 1380 "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); pop_momentary (); ; break;} case 272: ! #line 1385 "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); pop_momentary (); ; break;} case 275: ! #line 1402 "c-parse.y" { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0); yyval.itype = stmt_count; *************** *** 2427,2433 **** position_after_white_space (); ; break;} case 276: ! #line 1407 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno); /* See comment in `while' alternative, above. */ --- 2759,2765 ---- position_after_white_space (); ; break;} case 276: ! #line 1415 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno); /* See comment in `while' alternative, above. */ *************** *** 2436,2466 **** position_after_white_space (); ; break;} case 277: ! #line 1414 "c-parse.y" { expand_loop_continue_here (); ; break;} case 278: ! #line 1418 "c-parse.y" { yyval.filename = input_filename; ; break;} case 279: ! #line 1422 "c-parse.y" { yyval.lineno = lineno; ; break;} case 280: ! #line 1427 "c-parse.y" { ; break;} case 281: ! #line 1432 "c-parse.y" { ; break;} case 282: ! #line 1437 "c-parse.y" { ; break;} case 284: ! #line 1443 "c-parse.y" { int next; position_after_white_space (); next = getc (finput); --- 2768,2798 ---- position_after_white_space (); ; break;} case 277: ! #line 1422 "c-parse.y" { expand_loop_continue_here (); ; break;} case 278: ! #line 1426 "c-parse.y" { yyval.filename = input_filename; ; break;} case 279: ! #line 1430 "c-parse.y" { yyval.lineno = lineno; ; break;} case 280: ! #line 1435 "c-parse.y" { ; break;} case 281: ! #line 1440 "c-parse.y" { ; break;} case 282: ! #line 1445 "c-parse.y" { ; break;} case 284: ! #line 1451 "c-parse.y" { int next; position_after_white_space (); next = getc (finput); *************** *** 2470,2480 **** ; break;} case 285: ! #line 1455 "c-parse.y" { stmt_count++; ; break;} case 287: ! #line 1458 "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 --- 2802,2812 ---- ; break;} case 285: ! #line 1463 "c-parse.y" { stmt_count++; ; break;} case 287: ! #line 1466 "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 *************** *** 2493,2511 **** clear_momentary (); ; break;} case 288: ! #line 1475 "c-parse.y" { expand_start_else (); yyvsp[-1].itype = stmt_count; position_after_white_space (); ; break;} case 289: ! #line 1479 "c-parse.y" { expand_end_cond (); if (extra_warnings && stmt_count == yyvsp[-3].itype) warning ("empty body in an else-statement"); ; break;} case 290: ! #line 1483 "c-parse.y" { 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 --- 2825,2843 ---- clear_momentary (); ; break;} case 288: ! #line 1483 "c-parse.y" { expand_start_else (); yyvsp[-1].itype = stmt_count; position_after_white_space (); ; break;} case 289: ! #line 1487 "c-parse.y" { expand_end_cond (); if (extra_warnings && stmt_count == yyvsp[-3].itype) warning ("empty body in an else-statement"); ; break;} case 290: ! #line 1491 "c-parse.y" { 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 *************** *** 2515,2525 **** "empty body in an if-statement"); ; break;} case 291: ! #line 1494 "c-parse.y" { expand_end_cond (); ; break;} case 292: ! #line 1496 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno); /* The emit_nop used to come before emit_line_note, --- 2847,2857 ---- "empty body in an if-statement"); ; break;} case 291: ! #line 1502 "c-parse.y" { expand_end_cond (); ; break;} case 292: ! #line 1504 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno); /* The emit_nop used to come before emit_line_note, *************** *** 2531,2537 **** emit_nop (); ; break;} case 293: ! #line 1506 "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. */ --- 2863,2869 ---- emit_nop (); ; break;} case 293: ! #line 1514 "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. */ *************** *** 2542,2552 **** position_after_white_space (); ; break;} case 294: ! #line 1515 "c-parse.y" { expand_end_loop (); ; break;} case 295: ! #line 1518 "c-parse.y" { emit_line_note (input_filename, lineno); expand_exit_loop_if_false (NULL_PTR, truthvalue_conversion (yyvsp[-2].ttype)); --- 2874,2884 ---- position_after_white_space (); ; break;} case 294: ! #line 1523 "c-parse.y" { expand_end_loop (); ; break;} case 295: ! #line 1526 "c-parse.y" { emit_line_note (input_filename, lineno); expand_exit_loop_if_false (NULL_PTR, truthvalue_conversion (yyvsp[-2].ttype)); *************** *** 2554,2565 **** clear_momentary (); ; break;} case 296: ! #line 1525 "c-parse.y" { expand_end_loop (); clear_momentary (); ; break;} case 297: ! #line 1529 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); /* See comment in `while' alternative, above. */ --- 2886,2897 ---- clear_momentary (); ; break;} case 296: ! #line 1533 "c-parse.y" { expand_end_loop (); clear_momentary (); ; break;} case 297: ! #line 1537 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); /* See comment in `while' alternative, above. */ *************** *** 2572,2583 **** ; break;} case 298: ! #line 1541 "c-parse.y" { yyvsp[0].lineno = lineno; yyval.filename = input_filename; ; break;} case 299: ! #line 1544 "c-parse.y" { /* Start the loop. Doing this after parsing all the expressions ensures we will end the loop. */ --- 2904,2915 ---- ; break;} case 298: ! #line 1549 "c-parse.y" { yyvsp[0].lineno = lineno; yyval.filename = input_filename; ; break;} case 299: ! #line 1552 "c-parse.y" { /* Start the loop. Doing this after parsing all the expressions ensures we will end the loop. */ *************** *** 2595,2601 **** position_after_white_space (); ; break;} case 300: ! #line 1560 "c-parse.y" { /* Emit the increment expression, with a line number. */ emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno); expand_loop_continue_here (); --- 2927,2933 ---- position_after_white_space (); ; break;} case 300: ! #line 1568 "c-parse.y" { /* Emit the increment expression, with a line number. */ emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno); expand_loop_continue_here (); *************** *** 2605,2611 **** expand_end_loop (); ; break;} case 301: ! #line 1568 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); c_expand_start_case (yyvsp[-1].ttype); --- 2937,2943 ---- expand_end_loop (); ; break;} case 301: ! #line 1576 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); c_expand_start_case (yyvsp[-1].ttype); *************** *** 2615,2652 **** position_after_white_space (); ; break;} case 302: ! #line 1576 "c-parse.y" { expand_end_case (yyvsp[-3].ttype); pop_momentary (); ; break;} case 303: ! #line 1579 "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 304: ! #line 1584 "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 305: ! #line 1589 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno); c_expand_return (NULL_TREE); ; break;} case 306: ! #line 1593 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno); c_expand_return (yyvsp[-1].ttype); ; break;} case 307: ! #line 1597 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno); STRIP_NOPS (yyvsp[-2].ttype); --- 2947,2984 ---- position_after_white_space (); ; break;} case 302: ! #line 1584 "c-parse.y" { expand_end_case (yyvsp[-3].ttype); pop_momentary (); ; break;} case 303: ! #line 1587 "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 304: ! #line 1592 "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 305: ! #line 1597 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno); c_expand_return (NULL_TREE); ; break;} case 306: ! #line 1601 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno); c_expand_return (yyvsp[-1].ttype); ; break;} case 307: ! #line 1605 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno); STRIP_NOPS (yyvsp[-2].ttype); *************** *** 2658,2664 **** error ("argument of `asm' is not a constant string"); ; break;} case 308: ! #line 1608 "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, --- 2990,2996 ---- error ("argument of `asm' is not a constant string"); ; break;} case 308: ! #line 1616 "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, *************** *** 2666,2672 **** input_filename, lineno); ; break;} case 309: ! #line 1615 "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, --- 2998,3004 ---- input_filename, lineno); ; break;} case 309: ! #line 1623 "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, *************** *** 2674,2680 **** input_filename, lineno); ; break;} case 310: ! #line 1623 "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, --- 3006,3012 ---- input_filename, lineno); ; break;} case 310: ! #line 1631 "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, *************** *** 2682,2688 **** input_filename, lineno); ; break;} case 311: ! #line 1629 "c-parse.y" { tree decl; stmt_count++; emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno); --- 3014,3020 ---- input_filename, lineno); ; break;} case 311: ! #line 1637 "c-parse.y" { tree decl; stmt_count++; emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno); *************** *** 2695,2707 **** ; break;} case 312: ! #line 1640 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ; break;} case 315: ! #line 1653 "c-parse.y" { /* The value returned by this action is */ /* 1 if everything is OK */ --- 3027,3039 ---- ; break;} case 312: ! #line 1648 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ; break;} case 315: ! #line 1661 "c-parse.y" { /* The value returned by this action is */ /* 1 if everything is OK */ *************** *** 2724,2737 **** ; break;} case 316: ! #line 1674 "c-parse.y" { if (yyvsp[-1].itype) iterator_for_loop_end (yyvsp[-3].ttype); ; break;} case 317: ! #line 1706 "c-parse.y" { register tree value = check_case_value (yyvsp[-1].ttype); register tree label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); --- 3056,3069 ---- ; break;} case 316: ! #line 1682 "c-parse.y" { if (yyvsp[-1].itype) iterator_for_loop_end (yyvsp[-3].ttype); ; break;} case 317: ! #line 1714 "c-parse.y" { register tree value = check_case_value (yyvsp[-1].ttype); register tree label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); *************** *** 2758,2764 **** position_after_white_space (); ; break;} case 318: ! #line 1731 "c-parse.y" { register tree value1 = check_case_value (yyvsp[-3].ttype); register tree value2 = check_case_value (yyvsp[-1].ttype); register tree label --- 3090,3096 ---- position_after_white_space (); ; break;} case 318: ! #line 1739 "c-parse.y" { register tree value1 = check_case_value (yyvsp[-3].ttype); register tree value2 = check_case_value (yyvsp[-1].ttype); register tree label *************** *** 2789,2795 **** position_after_white_space (); ; break;} case 319: ! #line 1760 "c-parse.y" { tree duplicate; register tree label --- 3121,3127 ---- position_after_white_space (); ; break;} case 319: ! #line 1768 "c-parse.y" { tree duplicate; register tree label *************** *** 2806,2812 **** position_after_white_space (); ; break;} case 320: ! #line 1775 "c-parse.y" { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype); stmt_count++; emit_nop (); --- 3138,3144 ---- position_after_white_space (); ; break;} case 320: ! #line 1783 "c-parse.y" { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype); stmt_count++; emit_nop (); *************** *** 2815,2866 **** position_after_white_space (); ; break;} case 321: ! #line 1787 "c-parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} case 322: ! #line 1790 "c-parse.y" { emit_line_note (input_filename, lineno); ; break;} case 323: ! #line 1795 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 325: ! #line 1802 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 328: ! #line 1809 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 329: ! #line 1814 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 330: ! #line 1819 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ; break;} case 331: ! #line 1821 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ; break;} case 332: ! #line 1827 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (0); ; break;} case 333: ! #line 1831 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} case 335: ! #line 1839 "c-parse.y" { tree parm; if (pedantic) pedwarn ("ANSI C forbids forward parameter declarations"); --- 3147,3198 ---- position_after_white_space (); ; break;} case 321: ! #line 1795 "c-parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} case 322: ! #line 1798 "c-parse.y" { emit_line_note (input_filename, lineno); ; break;} case 323: ! #line 1803 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 325: ! #line 1810 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 328: ! #line 1817 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 329: ! #line 1822 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 330: ! #line 1827 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ; break;} case 331: ! #line 1829 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ; break;} case 332: ! #line 1835 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (0); ; break;} case 333: ! #line 1839 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} case 335: ! #line 1847 "c-parse.y" { tree parm; if (pedantic) pedwarn ("ANSI C forbids forward parameter declarations"); *************** *** 2870,2943 **** clear_parm_order (); ; break;} case 336: ! #line 1847 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 337: ! #line 1849 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ; break;} case 338: ! #line 1855 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} case 339: ! #line 1857 "c-parse.y" { yyval.ttype = get_parm_info (0); if (pedantic) pedwarn ("ANSI C requires a named argument before `...'"); ; break;} case 340: ! #line 1862 "c-parse.y" { yyval.ttype = get_parm_info (1); ; break;} case 341: ! #line 1864 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} case 342: ! #line 1869 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} case 343: ! #line 1871 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} case 344: ! #line 1878 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ; break;} case 345: ! #line 1880 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ; break;} case 346: ! #line 1882 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 347: ! #line 1884 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ; break;} case 348: ! #line 1886 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 349: ! #line 1893 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (1); ; break;} case 350: ! #line 1897 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} case 352: ! #line 1905 "c-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) --- 3202,3275 ---- clear_parm_order (); ; break;} case 336: ! #line 1855 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 337: ! #line 1857 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ; break;} case 338: ! #line 1863 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} case 339: ! #line 1865 "c-parse.y" { yyval.ttype = get_parm_info (0); if (pedantic) pedwarn ("ANSI C requires a named argument before `...'"); ; break;} case 340: ! #line 1870 "c-parse.y" { yyval.ttype = get_parm_info (1); ; break;} case 341: ! #line 1872 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} case 342: ! #line 1877 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} case 343: ! #line 1879 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} case 344: ! #line 1886 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ; break;} case 345: ! #line 1888 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ; break;} case 346: ! #line 1890 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 347: ! #line 1892 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ; break;} case 348: ! #line 1894 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 349: ! #line 1901 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (1); ; break;} case 350: ! #line 1905 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} case 352: ! #line 1913 "c-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) *************** *** 2945,2968 **** yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ; break;} case 353: ! #line 1915 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 354: ! #line 1917 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 355: ! #line 1923 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 356: ! #line 1925 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} } /* the action file gets copied in in place of this dollarsign */ ! #line 327 "bison.simple" yyvsp -= yylen; yyssp -= yylen; --- 3277,3300 ---- yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ; break;} case 353: ! #line 1923 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 354: ! #line 1925 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 355: ! #line 1931 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 356: ! #line 1933 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} } /* the action file gets copied in in place of this dollarsign */ ! #line 465 "/usr/lib/bison.simple" yyvsp -= yylen; yyssp -= yylen; *************** *** 3021,3029 **** /* If not already recovering from an error, report this error. */ { ++yynerrs; ! yyerror("parse error"); } if (yyerrstatus == 3) { /* if just tried and failed to reuse lookahead token after an error, discard it. */ --- 3353,3406 ---- /* 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. */ *************** *** 3113,3117 **** yystate = yyn; goto yynewstate; } ! #line 1928 "c-parse.y" --- 3490,3494 ---- yystate = yyn; goto yynewstate; } ! #line 1936 "c-parse.y" diff -rc --new-file gcc-2.5.7-fsf/c-parse.y gcc-2.5.7-amiga/c-parse.y *** gcc-2.5.7-fsf/c-parse.y Tue Nov 23 23:43:28 1993 --- gcc-2.5.7-amiga/c-parse.y Sun Dec 12 17:25:17 1993 *************** *** 898,905 **** attrib : IDENTIFIER ! { if (strcmp (IDENTIFIER_POINTER ($1), "packed") && strcmp (IDENTIFIER_POINTER ($1), "noreturn")) warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER ($1)); $$ = $1; } --- 898,913 ---- attrib : IDENTIFIER ! { ! #ifdef HANDLE_ATTRIBUTE0 ! /* give the function a chance to validate further attributes */ ! if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER ($1)) || ! (strcmp (IDENTIFIER_POINTER ($1), "packed") ! && strcmp (IDENTIFIER_POINTER ($1), "noreturn"))) ! #else ! if (strcmp (IDENTIFIER_POINTER ($1), "packed") && strcmp (IDENTIFIER_POINTER ($1), "noreturn")) + #endif warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER ($1)); $$ = $1; } diff -rc --new-file gcc-2.5.7-fsf/calls.c gcc-2.5.7-amiga/calls.c *** gcc-2.5.7-fsf/calls.c Thu Dec 2 12:21:43 1993 --- gcc-2.5.7-amiga/calls.c Sun Dec 12 17:25:23 1993 *************** *** 2107,2112 **** --- 2107,2120 ---- argvec = (struct arg *) alloca (nargs * sizeof (struct arg)); + #if defined (__amigados__) + /* how would you do this RIGHT ?? fake a DECL node? dunno... */ + #ifdef ENCODE_SECTION_INFO + /* mark it as a function (to be in the text section that is) */ + SYMBOL_REF_FLAG (fun) = 1; + #endif + #endif + INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun); args_size.constant = 0; diff -rc --new-file gcc-2.5.7-fsf/cccp.c gcc-2.5.7-amiga/cccp.c *** gcc-2.5.7-fsf/cccp.c Sat Dec 11 13:49:38 1993 --- gcc-2.5.7-amiga/cccp.c Sun Dec 12 17:25:32 1993 *************** *** 39,44 **** --- 39,60 ---- #include "config.h" #endif /* not EMACS */ + #ifdef amigados + /* Since cpp uses alloca to store all its read files, this is quite deadly + on a system with non-automatic stackgrowth like amigados, so we better + turn it off now. Normally alloca is #defined to __builtin_alloca, so + undefining it causes an external alloca to be used. + + Note that it's not wise to generally inhibit __builtin_alloca, since + using the generic emulator entitels a serious (!) speed penalty, and + it's bad enough that we have to live with it in cccp, don't make cc1 + unbearably slow as well... */ + + #undef alloca + + static int amigados_abs_filename (); + #endif + #ifndef STANDARD_INCLUDE_DIR #define STANDARD_INCLUDE_DIR "/usr/include" #endif *************** *** 1874,1884 **** --- 1890,1904 ---- char *p = in_fname; char *p1 = p; /* Discard all directory prefixes from P. */ + #ifdef FILE_NAME_NONDIRECTORY + p = FILE_NAME_NONDIRECTORY (p); + #else while (*p1) { if (*p1 == '/') p = p1 + 1; p1++; } + #endif /* Output P, but remove known suffixes. */ len = strlen (p); if (p[len - 2] == '.' && p[len - 1] == 'c') *************** *** 3636,3642 **** if (!no_output && already_output == 0 && (kt->pass_thru ! || (kt->type == T_DEFINE && (dump_macros == dump_names || dump_macros == dump_definitions)))) { int len; --- 3656,3662 ---- if (!no_output && already_output == 0 && (kt->pass_thru ! || ((kt->type == T_DEFINE || kt->type == T_UNDEF) && (dump_macros == dump_names || dump_macros == dump_definitions)))) { int len; *************** *** 3982,3987 **** --- 4002,4019 ---- search_start = dsp; #ifndef VMS ep = rindex (nam, '/'); + + #ifdef amigados + /* amigados uses unix-style directory-filename separation, but + has VMS-style logicals as well */ + + if (ep == NULL) + { + ep = rindex (nam, ':'); + /* a ':' is part of the directory name, a '/' isn't ! */ + if (ep != NULL) ep++; + } + #endif /* amigados */ #else /* VMS */ ep = rindex (nam, ']'); if (ep == NULL) ep = rindex (nam, '>'); *************** *** 4061,4067 **** --- 4093,4103 ---- /* If specified file name is absolute, just open it. */ + #ifndef amigados if (*fbeg == '/') { + #else + if (amigados_abs_filename (fbeg, flen)) { + #endif strncpy (fname, fbeg, flen); fname[flen] = 0; if (redundant_include_p (fname)) *************** *** 4084,4089 **** --- 4120,4129 ---- if (searchptr->fname[0] == 0) continue; strcpy (fname, searchptr->fname); + + #ifdef amigados + if (fname[strlen (fname) - 1] != ':') + #endif strcat (fname, "/"); fname[strlen (fname) + flen] = 0; } else { *************** *** 9017,9025 **** perror_with_name (name) char *name; { fprintf (stderr, "%s: ", progname); ! if (errno < sys_nerr) ! fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]); else fprintf (stderr, "%s: undocumented I/O error\n", name); errors++; --- 9057,9067 ---- perror_with_name (name) char *name; { + int error = errno; + fprintf (stderr, "%s: ", progname); ! if (error < sys_nerr) ! fprintf (stderr, "%s: %s\n", name, sys_errlist[error]); else fprintf (stderr, "%s: undocumented I/O error\n", name); errors++; *************** *** 9416,9418 **** --- 9458,9484 ---- return dst; } #endif /* VMS */ + + + #ifdef amigados + + /* This function returns whether the LEN characters long filename FNAME + is an absolute path specification. */ + + static int + amigados_abs_filename (fname, len) + char *fname; + int len; + { + /* we're using ixemul.library, which treats `/foo' as `foo:', so + fname[0] is to be considered absolute as well */ + if (fname[0] == '/') + return 1; + + /* else do an index() on fname, but one which is limited to len characters */ + while (*fname && *fname != ':' && len) + fname++, len--; + + return *fname == ':'; + } + #endif /* amigados */ diff -rc --new-file gcc-2.5.7-fsf/config/m68k/amigados.c gcc-2.5.7-amiga/config/m68k/amigados.c *** gcc-2.5.7-fsf/config/m68k/amigados.c Thu Jan 1 00:00:00 1970 --- gcc-2.5.7-amiga/config/m68k/amigados.c Sun Dec 12 17:25:35 1993 *************** *** 0 **** --- 1,158 ---- + /* Definitions of target machine for GNU compiler. amiga 68000/68020 version. + Copyright (C) 1992 Free Software Foundation, Inc. + Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch). + + 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + #include "m68k/m68k.c" + + /* Does operand (which is a symbolic_operand) live in text space? If + so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true. + + This function is used in base relative code generation. */ + + int + read_only_operand (operand) + rtx operand; + { + if (GET_CODE (operand) == CONST) + operand = XEXP (XEXP (operand, 0), 0); + if (GET_CODE (operand) == SYMBOL_REF) + return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand); + return 1; + } + + + /* the rest of the file is to implement AmigaDOS specific keywords some day. + The approach used so far used __attribute__ for this, but this required + changes to c-parse.y as well as if we'd use the common keywords used + on commercial AmigaDOS C-compilers as well. So in the future I'll probably + switch to __saveds and __interrupt keywords as well. + + The rest of this file is currently ignored, because it's no longer + working with the current gcc version. */ + + #if not_yet_working + + #include "tree.h" + + struct attribute { + tree ident; + int saveds : 1, + interrupt : 1; + }; + + + static struct attribute *a_tab = 0; + static int a_index, a_size; + + void + add_attr_entry (attr) + struct attribute *attr; + { + if (! a_tab) + { + a_size = 10; + a_index = 0; + a_tab = (struct attribute *) xmalloc (a_size * sizeof (struct attribute)); + } + + if (a_index == a_size) + { + a_size <<= 1; + a_tab = (struct attribute *) xrealloc (a_tab, a_size * sizeof (struct attribute)); + } + + a_tab[a_index++] = *attr; + } + + + void + attr_do_saveds (function_ident) + tree function_ident; + { + struct attribute attr, *a; + int i; + + for (i = 0, a = a_tab; i < a_index; i++, a++) + if (a->ident == function_ident) + { + a->saveds = 1; + return; + } + + /* create a new entry for this function */ + attr.ident = function_ident; + attr.saveds = 1; + attr.interrupt = 0; + add_attr_entry (&attr); + } + + void + attr_do_interrupt (function_ident) + tree function_ident; + { + struct attribute attr, *a; + int i; + + for (i = 0, a = a_tab; i < a_index; i++, a++) + if (a->ident == function_ident) + { + /* __interrupt implies __saveds */ + a->saveds = 1; + a->interrupt = 1; + return; + } + + /* create a new entry for this function */ + attr.ident = function_ident; + attr.saveds = 1; + attr.interrupt = 1; + add_attr_entry (&attr); + } + + int + attr_does_saveds (function_name) + char *function_name; + { + tree ident = get_identifier (function_name); + struct attribute *attr; + int i; + + for (i = 0, attr = a_tab; i < a_index; i++, attr++) + if (attr->ident == ident) + return attr->saveds; + + return 0; + } + + int + attr_does_interrupt (function_name) + char *function_name; + { + tree ident = get_identifier (function_name); + struct attribute *attr; + int i; + + for (i = 0, attr = a_tab; i < a_index; i++, attr++) + if (attr->ident == ident) + return attr->interrupt; + + return 0; + } + + #endif diff -rc --new-file gcc-2.5.7-fsf/config/m68k/amigados.h gcc-2.5.7-amiga/config/m68k/amigados.h *** gcc-2.5.7-fsf/config/m68k/amigados.h Thu Jan 1 00:00:00 1970 --- gcc-2.5.7-amiga/config/m68k/amigados.h Sun Dec 12 17:25:37 1993 *************** *** 0 **** --- 1,408 ---- + /* Definitions of target machine for GNU compiler. amiga 68000/68020 version. + Copyright (C) 1992 Free Software Foundation, Inc. + Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch). + + 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + #include "m68k/m68k.h" + + /* See m68k.h for bits in TARGET_DEFAULT. + 0 means 68000, no hardware fpu (68881/68882/68040). + 7 means 68020 (or higher) with hardware fpu. */ + + #ifndef TARGET_DEFAULT + #define TARGET_DEFAULT 0 + #endif + + /* Define __HAVE_68881__ in preprocessor according to the -m flags. + This will control the use of inline 68881 insns in certain macros. + Also inform the program which CPU this is for. */ + + #if TARGET_DEFAULT & 02 + + /* -m68881 is the default */ + #define CPP_SPEC \ + "%{!msoft-float:-D__HAVE_68881__ }\ + %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}" + + #else + + /* -msoft-float is the default, assume -mc68000 as well */ + #define CPP_SPEC \ + "%{m68881:-D__HAVE_68881__ }\ + %{!ansi:%{m68020:-Dmc68020}%{mc68020:-Dmc68020}%{!mc68020:%{!m68020:-Dmc68010}}}" + + /* Don't try using XFmode since we don't have appropriate runtime software + support. */ + #undef LONG_DOUBLE_TYPE_SIZE + #define LONG_DOUBLE_TYPE_SIZE 64 + + #endif + + /* -m68000 requires special flags to the assembler. */ + + #if TARGET_DEFAULT & 01 + + #define ASM_SPEC \ + "%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}} %{msmall-code:-l} " + + #else + + #define ASM_SPEC \ + "%{m68020:-mc68020}%{mc68020:-mc68020}%{!mc68020:%{!m68020:-mc68010}} %{msmall-code:-l} " + + #endif + + /* amiga/amigados are the new "standard" defines for the Amiga, MCH_AMIGA + * was used before and is included for compatibility reasons */ + + #define CPP_PREDEFINES "-Dmc68000 -Damiga -Damigados -DMCH_AMIGA -DAMIGA" + + /* Choose the right startup file, depending on whether we use base relative + code, base relative code with automatic relocation (-resident), or plain + crt0.o. + + Profiling is currently only available for plain startup. + mcrt0.o does not (yet) exist. */ + + #define STARTFILE_SPEC \ + "%{resident:rcrt0.o%s}%{!resident:%{!fbaserel:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}%{fbaserel:%{pg:bgcrt0.o%s}%{!pg:%{p:bmcrt0.o%s}%{!p:bcrt0.o%s}}}}" + + + /* Automatically search libamiga.a for AmigaDOS specific functions. Note + that we first search the standard C library to resolve as much as + possible from there, since it has names that are duplicated in libamiga.a + which we *don't* want from there. Then search the standard C library + again to resolve any references that libamiga.a might have generated. + This may only be a temporary solution since it might be better to simply + remove the things from libamiga.a that should be pulled in from libc.a + instead, which would eliminate the first reference to libc.a. */ + + #define LIB_SPEC "%{!p:%{!pg:-lc -lamiga -lc}}%{p:-lc_p -lamiga -lc_p}%{pg:-lc_p -lamiga -lc_p}" + + /* if debugging, tell the linker to output amiga-hunk symbols *and* a BSD + compatible debug hunk (which will probably change in the future, it's not + tremendously useful in its current state). */ + + #define LINK_SPEC "%{g:-amiga-debug-hunk} %{fbaserel:-databss-together} %{resident:-databss-together -datadata-reloc -f libb} " + + #define CC1_SPEC "%{resident:-fbaserel} " + + #define CC1PLUS_SPEC "%{resident:-fbaserel} " + + /* Omit frame pointer at high optimization levels. (This doesn't hurt, since + GDB doesn't work under AmigaDOS at the moment anyway..) */ + + #define OPTIMIZATION_OPTIONS(OPTIMIZE) \ + { \ + if (OPTIMIZE >= 2) \ + flag_omit_frame_pointer = 1; \ + } + + /* provide a dummy entry for the small-code switch. This is currently only + needed by the assembler (explanations: m68k.h), but will be used by cc1 + to output 16bit pc-relative code later. */ + + #undef TARGET_SWITCHES + #define TARGET_SWITCHES \ + { { "68020", 5}, \ + { "c68020", 5}, \ + { "68881", 2}, \ + { "bitfield", 4}, \ + { "68000", -5}, \ + { "c68000", -5}, \ + { "soft-float", -0102}, \ + { "nobitfield", -4}, \ + { "rtd", 8}, \ + { "nortd", -8}, \ + { "short", 040}, \ + { "noshort", -040}, \ + { "fpa", 0100}, \ + { "nofpa", -0100}, \ + { "sky", 0200}, \ + { "nosky", -0200}, \ + { "68040", 0407}, \ + { "68030", -01400}, \ + { "68030", 7}, \ + { "68040-only", 01000}, \ + { "small-code", 0 }, \ + { "", TARGET_DEFAULT}} + + /* Every structure or union's size must be a multiple of 2 bytes. */ + + #define STRUCTURE_SIZE_BOUNDARY 16 + + /* This is (almost;-)) BSD, so it wants DBX format. */ + + #define DBX_DEBUGGING_INFO + + /* Allow folding division by zero. */ + #define REAL_INFINITY + + #if 0 /* This apparently is no longer necessary? */ + + /* This is how to output an assembler line defining a `double' constant. */ + + #undef ASM_OUTPUT_DOUBLE + #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ + { \ + if (REAL_VALUE_ISINF (VALUE)) \ + fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \ + else if (isnan (VALUE)) \ + { \ + union { double d; long l[2];} t; \ + t.d = (VALUE); \ + fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \ + } \ + else \ + fprintf (FILE, "\t.double 0r%.17g\n", VALUE); \ + } + + /* This is how to output an assembler line defining a `float' constant. */ + + #undef ASM_OUTPUT_FLOAT + #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ + { \ + if (REAL_VALUE_ISINF (VALUE)) \ + fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \ + else if (isnan (VALUE)) \ + { \ + union { float f; long l;} t; \ + t.f = (VALUE); \ + fprintf (FILE, "\t.long 0x%lx\n", t.l); \ + } \ + else \ + fprintf (FILE, "\t.single 0r%.9g\n", VALUE); \ + } + + /* This is how to output an assembler lines defining floating operands. + There's no way to output a NaN's fraction, so we lose it. */ + + #undef ASM_OUTPUT_FLOAT_OPERAND + #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ + do { \ + if (CODE == 'f') \ + { \ + (REAL_VALUE_ISINF ((VALUE)) \ + ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \ + : (VALUE) == -0.0 \ + ? asm_fprintf (FILE, "%I0r-0.0") \ + : asm_fprintf (FILE, "%I0r%.9g", (VALUE))) \ + } else { \ + long l; \ + REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ + if (sizeof (int) == sizeof (long)) \ + asm_fprintf ((FILE), "%I0x%x", l); \ + else \ + asm_fprintf ((FILE), "%I0x%lx", l); \ + } \ + } while (0) + + #undef ASM_OUTPUT_DOUBLE_OPERAND + #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ + (REAL_VALUE_ISINF ((VALUE)) \ + ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \ + : (VALUE) == -0.0 \ + ? asm_fprintf (FILE, "%I0r-0.0") \ + : asm_fprintf (FILE, "%I0r%.17g", (VALUE))) + + #endif /* 0 */ + + /* use A5 as framepointer instead of A6, this makes A6 available as a + general purpose register, and can thus be used without problems in + direct library calls. */ + + #undef FRAME_POINTER_REGNUM + #define FRAME_POINTER_REGNUM 13 + #undef ARG_POINTER_REGNUM + #define ARG_POINTER_REGNUM 13 + + /* we use A4 for this, not A5, which is the framepointer */ + #undef PIC_OFFSET_TABLE_REGNUM + #define PIC_OFFSET_TABLE_REGNUM 12 + + /* setup a default shell return value for those (gazillion..) programs that + (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus + cause the shell to randomly caugh upon executing such programs (contrary + to Unix, AmigaDOS scripts are terminated with an error if a program returns + with an error code above the `error' or even `failure' level + (which is configurable with the FAILAT command) */ + + #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node) + + /* we do have an ansi-compliant c-library ;-) */ + #define HAVE_VPRINTF + #define HAVE_VFPRINTF + #define HAVE_PUTENV + #define HAVE_STRERROR + #define HAVE_ATEXIT + + /* given that symbolic_operand(X), return TRUE if no special + base relative relocation is necessary */ + + #define LEGITIMATE_BASEREL_OPERAND_P(X) \ + (flag_pic >= 3 && read_only_operand (X)) + + #undef LEGITIMATE_PIC_OPERAND_P + #define LEGITIMATE_PIC_OPERAND_P(X) \ + (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X)) + + + /* Define this macro if references to a symbol must be treated + differently depending on something about the variable or + function named by the symbol (such as what section it is in). + + The macro definition, if any, is executed immediately after the + rtl for DECL or other node is created. + The value of the rtl will be a `mem' whose address is a + `symbol_ref'. + + The usual thing for this macro to do is to a flag in the + `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified + name string in the `symbol_ref' (if one bit is not enough + information). + + On the Amiga we use this to indicate if a symbol is in text or + data space. */ + + #define ENCODE_SECTION_INFO(DECL)\ + do \ + { \ + if (TREE_CODE (DECL) == FUNCTION_DECL) \ + SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \ + else \ + { \ + rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ + ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \ + if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl)) \ + SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1; \ + } \ + } \ + while (0) + + #undef SELECT_RTX_SECTION + #define SELECT_RTX_SECTION(MODE, X) readonly_data_section (); + + /* according to varasm.c, RELOC referrs *only* to whether constants (!) + are addressed by address. This doesn't matter in baserelative code, + so we allow (inspite of flag_pic) readonly_data_section() in that + case */ + + #undef SELECT_SECTION + #define SELECT_SECTION(DECL, RELOC) \ + { \ + if (TREE_CODE (DECL) == STRING_CST) \ + { \ + if (! flag_writable_strings) \ + readonly_data_section (); \ + else \ + data_section (); \ + } \ + else if (TREE_CODE (DECL) == VAR_DECL) \ + { \ + if ((flag_pic && flag_pic < 3 && RELOC) \ + || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)) \ + data_section (); \ + else \ + readonly_data_section (); \ + } \ + else \ + readonly_data_section (); \ + } + + + + #if not_yet_working + + /* starting support for amiga specific keywords + * -------------------------------------------- + */ + + /* validate attributes that don't take a parameter. Currently we support + * __attribute__ (saveds) and __attribute__ (interrupt) + */ + #define HANDLE_ATTRIBUTE0(attr) \ + (strcmp(attr, "saveds") != 0 && strcmp(attr, "interrupt") != 0) + + /* (c-common.c) + * install additional attributes + */ + #define HANDLE_EXTRA_ATTRIBUTES(a) \ + if (TREE_VALUE (a) != 0 \ + && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE \ + && TREE_VALUE (a) == get_identifier ("saveds")) \ + { \ + if (TREE_CODE (decl) != FUNCTION_DECL) \ + { \ + warning_with_decl (decl, \ + "saveds attribute specified for non-function `%s'"); \ + return; \ + } \ + \ + attr_do_saveds (DECL_NAME (decl)); \ + } \ + else if (TREE_VALUE (a) != 0 \ + && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE \ + && TREE_VALUE (a) == get_identifier ("interrupt")) \ + { \ + if (TREE_CODE (decl) != FUNCTION_DECL) \ + { \ + warning_with_decl (decl, \ + "saveds attribute specified for non-function `%s'"); \ + return; \ + } \ + \ + attr_do_interrupt (DECL_NAME (decl)); \ + } \ + + + #define PROLOGUE_EXTRA_SAVE(mask) \ + { extern char *current_function_name; \ + /* saveds makes the function preserve d1/a0/a1 as well */ \ + if (attr_does_saveds (current_function_name)) \ + mask |= 0x40c0; } \ + + + #define EPILOGUE_EXTRA_RESTORE(mask, nregs) \ + { extern char *current_function_name; \ + /* restore those extra registers */ \ + if (attr_does_saveds (current_function_name)) \ + { \ + mask |= 0x0302; \ + nregs += 3; \ + } } \ + + + #define EPILOGUE_EXTRA_BARRIER_KLUDGE(stream) \ + { extern char *current_function_name; \ + /* PLEASE Help! how is this done cleaner?? */ \ + if (attr_does_saveds (current_function_name)) \ + { \ + fprintf (stderr, \ + "warning: couldn't cleanup `saveds'-stack in `%s'.\n"); \ + fprintf (stderr, \ + " this is only ok, if the function never returns!\n"); \ + } } \ + + + #define EPILOGUE_EXTRA_TEST(stream) \ + { extern char *current_function_name; \ + /* with the interrupt-attribute, we have to set the cc before rts */ \ + if (attr_does_interrupt (current_function_name)) \ + asm_fprintf (stream, "\ttstl %s\n", reg_names[0]); } \ + + #endif diff -rc --new-file gcc-2.5.7-fsf/config/m68k/m68k.c gcc-2.5.7-amiga/config/m68k/m68k.c *** gcc-2.5.7-fsf/config/m68k/m68k.c Wed Nov 3 21:17:46 1993 --- gcc-2.5.7-amiga/config/m68k/m68k.c Sun Dec 12 17:25:40 1993 *************** *** 61,67 **** void finalize_pic () { ! if (flag_pic && current_function_uses_pic_offset_table) emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx)); } --- 61,67 ---- void finalize_pic () { ! if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table) emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx)); } *************** *** 181,186 **** --- 181,189 ---- mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM)); num_saved_regs--; } + #ifdef PROLOGUE_EXTRA_SAVE + PROLOGUE_EXTRA_SAVE (mask); + #endif #if NEED_PROBE fprintf (stream, "\ttstl sp@(%d)\n", NEED_PROBE - num_saved_regs * 4); *************** *** 214,220 **** asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask); #endif } ! if (flag_pic && current_function_uses_pic_offset_table) { #ifdef MOTOROLA asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n", --- 217,223 ---- asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask); #endif } ! if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table) { #ifdef MOTOROLA asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n", *************** *** 279,284 **** --- 282,290 ---- /* Output just a no-op so that debuggers don't get confused about which function the pc is in at this address. */ asm_fprintf (stream, "\tnop\n"); + #ifdef EPILOGUE_EXTRA_BARRIER_KLUDGE + EPILOGUE_EXTRA_BARRIER_KLUDGE(stream); + #endif return; } *************** *** 309,314 **** --- 315,323 ---- nregs++; mask |= 1 << regno; } + #ifdef EPILOGUE_EXTRA_RESTORE + EPILOGUE_EXTRA_RESTORE(mask, nregs); + #endif offset = foffset + nregs * 4; if (offset + fsize >= 0x8000 && frame_pointer_needed *************** *** 511,516 **** --- 520,528 ---- #endif } } + #ifdef EPILOGUE_EXTRA_TEST + EPILOGUE_EXTRA_TEST(stream); + #endif if (current_function_pops_args) asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args); else *************** *** 801,815 **** /* First handle a simple SYMBOL_REF or LABEL_REF */ if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF) { if (reg == 0) abort (); ! pic_ref = gen_rtx (MEM, Pmode, ! gen_rtx (PLUS, Pmode, ! pic_offset_table_rtx, orig)); current_function_uses_pic_offset_table = 1; RTX_UNCHANGING_P (pic_ref) = 1; emit_move_insn (reg, pic_ref); return reg; } else if (GET_CODE (orig) == CONST) --- 813,837 ---- /* First handle a simple SYMBOL_REF or LABEL_REF */ if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF) { + #ifdef LEGITIMATE_BASEREL_OPERAND_P + if (LEGITIMATE_BASEREL_OPERAND_P (orig)) + return orig; + #endif + if (reg == 0) abort (); ! if (flag_pic >= 3) ! pic_ref = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig); ! else ! pic_ref = gen_rtx (MEM, Pmode, ! gen_rtx (PLUS, Pmode, ! pic_offset_table_rtx, orig)); ! current_function_uses_pic_offset_table = 1; RTX_UNCHANGING_P (pic_ref) = 1; emit_move_insn (reg, pic_ref); + return reg; } else if (GET_CODE (orig) == CONST) *************** *** 838,843 **** --- 860,866 ---- pic_ref = gen_rtx (PLUS, Pmode, base, orig); /* Likewise, should we set special REG_NOTEs here? */ } + return pic_ref; } *************** *** 2166,2171 **** --- 2189,2198 ---- fprintf (file, ":w"); if ((flag_pic == 2) && (breg == pic_offset_table_rtx)) fprintf (file, ":l"); + if ((flag_pic == 3) && (breg == pic_offset_table_rtx)) + fprintf (file, ":W"); + if ((flag_pic == 4) && (breg == pic_offset_table_rtx)) + fprintf (file, ":L"); } if (addr != 0 && ireg != 0) { diff -rc --new-file gcc-2.5.7-fsf/config/m68k/m68k.h gcc-2.5.7-amiga/config/m68k/m68k.h *** gcc-2.5.7-fsf/config/m68k/m68k.h Fri Nov 5 08:09:54 1993 --- gcc-2.5.7-amiga/config/m68k/m68k.h Sun Dec 12 17:25:43 1993 *************** *** 353,361 **** #ifndef SUPPORT_SUN_FPA #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! if (flag_pic) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ } #else /* defined SUPPORT_SUN_FPA */ --- 353,364 ---- #ifndef SUPPORT_SUN_FPA #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! if (flag_pic) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ ! /* prevent saving/restoring of the base reg */ \ ! if (flag_pic == 3) \ ! call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ } #else /* defined SUPPORT_SUN_FPA */ diff -rc --new-file gcc-2.5.7-fsf/config/m68k/m68k.md gcc-2.5.7-amiga/config/m68k/m68k.md *** gcc-2.5.7-fsf/config/m68k/m68k.md Wed Dec 1 00:17:46 1993 --- gcc-2.5.7-amiga/config/m68k/m68k.md Sun Dec 12 17:25:48 1993 *************** *** 716,728 **** { if (flag_pic && symbolic_operand (operands[1], SImode)) { ! /* The source is an address which requires PIC relocation. ! Call legitimize_pic_address with the source, mode, and a relocation ! register (a new pseudo, or the final destination if reload_in_progress ! is set). Then fall through normally */ ! extern rtx legitimize_pic_address(); ! rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode); ! operands[1] = legitimize_pic_address (operands[1], SImode, temp); } }") --- 716,733 ---- { if (flag_pic && symbolic_operand (operands[1], SImode)) { ! #ifdef LEGITIMATE_BASEREL_OPERAND_P ! if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1])) ! #endif ! { ! /* The source is an address which requires PIC relocation. ! Call legitimize_pic_address with the source, mode, and a relocation ! register (a new pseudo, or the final destination if reload_in_progress ! is set). Then fall through normally */ ! extern rtx legitimize_pic_address(); ! rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode); ! operands[1] = legitimize_pic_address (operands[1], SImode, temp); ! } } }") *************** *** 1890,1897 **** /* These insns can result from reloads to access stack slots over 64k from the frame pointer. */ ! if (GET_CODE (operands[2]) == CONST_INT ! && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000) return \"move%.l %2,%0\;add%.l %1,%0\"; #ifdef SGS if (GET_CODE (operands[2]) == REG) --- 1895,1903 ---- /* These insns can result from reloads to access stack slots over 64k from the frame pointer. */ ! if (((GET_CODE (operands[2]) == CONST_INT ! && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)) ! || (flag_pic == 4 && operands[1] == pic_offset_table_rtx)) return \"move%.l %2,%0\;add%.l %1,%0\"; #ifdef SGS if (GET_CODE (operands[2]) == REG) *************** *** 4858,4864 **** "" " { ! if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF) #ifdef MOTOROLA SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1; #else --- 4864,4870 ---- "" " { ! if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF) #ifdef MOTOROLA SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1; #else *************** *** 4873,4879 **** (match_operand:SI 1 "general_operand" "g"))] ;; Operand 1 not really used on the m68000. ! "! flag_pic" "* #ifdef MOTOROLA return \"jsr %0\"; --- 4879,4885 ---- (match_operand:SI 1 "general_operand" "g"))] ;; Operand 1 not really used on the m68000. ! "(! flag_pic || flag_pic >= 3)" "* #ifdef MOTOROLA return \"jsr %0\"; *************** *** 4888,4894 **** (match_operand:SI 1 "general_operand" "g"))] ;; Operand 1 not really used on the m68000. ! "flag_pic" "* #ifdef HPUX_ASM return \"bsr %0\"; --- 4894,4900 ---- (match_operand:SI 1 "general_operand" "g"))] ;; Operand 1 not really used on the m68000. ! "(flag_pic && flag_pic < 3)" "* #ifdef HPUX_ASM return \"bsr %0\"; *************** *** 4913,4919 **** "" " { ! if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF) #ifdef MOTOROLA SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1; #else --- 4919,4925 ---- "" " { ! if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF) #ifdef MOTOROLA SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1; #else *************** *** 4928,4934 **** (call (match_operand:QI 1 "memory_operand" "o") (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "! flag_pic" "* #ifdef MOTOROLA return \"jsr %1\"; --- 4934,4940 ---- (call (match_operand:QI 1 "memory_operand" "o") (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "(! flag_pic || flag_pic >= 3)" "* #ifdef MOTOROLA return \"jsr %1\"; *************** *** 4943,4949 **** (call (match_operand:QI 1 "memory_operand" "o") (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "flag_pic" "* #ifdef HPUX_ASM return \"bsr %1\"; --- 4949,4955 ---- (call (match_operand:QI 1 "memory_operand" "o") (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "(flag_pic && flag_pic < 3)" "* #ifdef HPUX_ASM return \"bsr %1\"; diff -rc --new-file gcc-2.5.7-fsf/config/m68k/t-amigados gcc-2.5.7-amiga/config/m68k/t-amigados *** gcc-2.5.7-fsf/config/m68k/t-amigados Thu Jan 1 00:00:00 1970 --- gcc-2.5.7-amiga/config/m68k/t-amigados Sun Dec 12 17:25:50 1993 *************** *** 0 **** --- 1,178 ---- + # Makefile fragment for amigados target. + + # We generate two additional things: + # + # libb/libgcc.a + # A base relative version of libgcc.a which is used when compiling and + # linking with the '-resident' option. + # + # xgccv + # A forking gcc instead of one calling ssytem(). This makes it less + # system conformant (can't ^C it when started from make), while providing + # increased functionality (-pipe option). + + # Use the vfork'ing version of gcc by default, so that the -pipe option can + # get tested. To use the regular version just do "make XGCC=gcc". Note that + # PIPE is defined in x-amigados, so if we are doing a native build, it will + # be defined. It can be overridden with "make PIPE=". + + XGCC = xgccv $(PIPE) + GCC_FOR_TARGET = ./$(XGCC) -B./ + + # Build residentable versions of the gcc executables by default. Use + # "make RESIDENT=" to build non-residentable versions. + # Note: This failed during bootstrapping of 2.5.5. + + #RESIDENT = -resident + + # The standard additional target flags for the compiler. + + T_CFLAGS = $(RESIDENT) + + # Allow the user to override the default target optimizations with gcc, or if the + # target compiler is not gcc and doesn't understand -O. + + T_OPTIMISE = -O2 + + # We don't need a libgcc1, it's all in ixemul.library + + LIBGCC1 = libgcc1.null + + # Flags to use when compiling the normal version of libgcc.a. + # Don't compile with debugging, as long as there is no debugger. + # Explicitly leave out the -resident compilation flag and don't use T_CFLAGS. + + LIBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \ + $(CROSS_GCC_CFLAGS) + + # Flags to use when compiling the base relative version of libgcc.a. + # Don't compile with debugging, as long as there is no debugger. + # Explicitly force -resident in the compilation flags and don't use T_CFLAGS. + + LIBBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \ + $(CROSS_GCC_CFLAGS) -resident + + # Build the base relative library. + # It is later copied into gcc:lib/gcc-lib/amigados//libb/libgcc.a, whereas + # libgcc.a is copied into gcc:lib/gcc-lib/amigados//libgcc.a. + # It doesn't work very well to define one of the EXTRA_* macros to contain + # libb/libgcc.a, particularly for doing "make stageN" or "make install". + + GCC_PARTS=$(GCC_PASSES) libgcc.a libb/libgcc.a $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS) + + # Add install_libbgcc to normal define of INSTALL_LIBGCC. Let install-gccv + # hitch a ride on here as well. + + INSTALL_LIBGCC = install-libgcc install-libbgcc install-gccv + + # This includes the knowledge that target amigados doesn't need libgcc1.a + + libb/libgcc.a: libgcc1.null libgcc2.c libgcc2.ready $(CONFIG_H) \ + $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status + # Actually build it in tmplibbgcc.a, then rename at end, + # so that libb/libgcc.a itself remains nonexistent if compilation is aborted. + -rm -f tmplibbgcc.a + # -e causes any failing command to make this rule fail. + # -e doesn't work in certain shells, so we test $$? as well. + set -e; \ + for name in $(LIB2FUNCS); \ + do \ + echo $${name}; \ + $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \ + $(srcdir)/libgcc2.c -o $${name}.o; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \ + rm -f $${name}.o; \ + done + # Some shells crash when a loop has no items. + # So make sure there is always at least one--`..'. + # Then ignore it. + # We don't use -e here because there are if statements + # that should not make the command give up when the if condition is false. + # Instead, we test for failure after each command where it matters. + -for file in .. $(LIB2FUNCS_EXTRA); \ + do \ + if [ x$${file} != x.. ]; then \ + name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \ + echo $${name}; \ + if [ $${name}.asm = $${file} ]; then \ + cp $${file} $${name}.s || exit 1; file=$${name}.s; \ + else true; fi; \ + $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \ + rm -f $${name}.[so]; \ + else true; \ + fi; \ + done + -if $(RANLIB_TEST) ; then $(RANLIB) tmplibbgcc.a; else true; fi + -if [ -d libb ] ; then true ; else mkdir libb ; fi + mv tmplibbgcc.a libb/libgcc.a + + + install-libbgcc: libb/libgcc.a install-dir + -if [ -d $(libsubdir)/libb ] ; then true ; else mkdir $(libsubdir)/libb ; fi + -if [ -f libb/libgcc.a ] ; then \ + rm -f $(libsubdir)/libb/libgcc.a; \ + $(INSTALL_DATA) libb/libgcc.a $(libsubdir)/libb/libgcc.a; \ + if $(RANLIB_TEST) ; then \ + (cd $(libsubdir)/libb; $(RANLIB) libgcc.a); else true; fi; \ + chmod a-x $(libsubdir)/libb/libgcc.a; \ + else true; fi + + + # The default gcc (xgcc) is built without -DAMIGADOS_FORK_GCC. This gcc (xgccv) + # is built with AMIGADOS_FORK_GCC defined, so that it can use '-pipe'. We + # don't want to define EXTRA_PASSES to xgccv because that will cause xgccv + # to be installed in $(libsubdir), so instead we use the default GCC_PASSES + # and add xgccv to it. + + GCC_PASSES = xgcc xgccv cc1 cpp $(EXTRA_PASSES) + + xgccv: xgccv.o version.o $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgccv xgccv.o version.o $(LIBS) + + xgccv.o: gcc.c $(CONFIG_H) gvarargs.h obstack.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \ + -DDEFAULT_TARGET_MACHINE=\"$(target)\" \ + -DTOOLDIR=\"$(tooldir)/\" \ + -DAMIGADOS_FORK_GCC \ + -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` -o xgccv.o + + install-gccv: xgccv + rm -f $(bindir)/gccv + $(INSTALL_PROGRAM) xgccv $(bindir)/gccv + + # When making one of the stage dirs, we need to make a libb subdir for + # it, and copy libbgcc.a there as libgcc.a. + + EXTRA_STAGE1_TARGETS = stage1-libb + EXTRA_STAGE2_TARGETS = stage2-libb + EXTRA_STAGE3_TARGETS = stage3-libb + EXTRA_STAGE4_TARGETS = stage4-libb + + stage1-libb: + -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi + -if [ -d stage1/libb ] ; then true ; else mkdir stage1/libb ; fi + -cp libb/libgcc.a stage1/libb/libgcc.a + -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libb/libgcc.a; else true; fi + + stage2-libb: + -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi + -if [ -d stage2/libb ] ; then true ; else mkdir stage2/libb ; fi + -cp libb/libgcc.a stage2/libb/libgcc.a + -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libb/libgcc.a; else true; fi + + stage3-libb: + -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi + -if [ -d stage3/libb ] ; then true ; else mkdir stage3/libb ; fi + -cp libb/libgcc.a stage3/libb/libgcc.a + -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libb/libgcc.a; else true; fi + + stage4-libb: + -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi + -if [ -d stage4/libb ] ; then true ; else mkdir stage4/libb ; fi + -cp libb/libgcc.a stage4/libb/libgcc.a + -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libb/libgcc.a; else true; fi diff -rc --new-file gcc-2.5.7-fsf/config/m68k/x-amigados gcc-2.5.7-amiga/config/m68k/x-amigados *** gcc-2.5.7-fsf/config/m68k/x-amigados Thu Jan 1 00:00:00 1970 --- gcc-2.5.7-amiga/config/m68k/x-amigados Sun Dec 12 17:25:51 1993 *************** *** 0 **** --- 1,44 ---- + # Note: It doesn't do any good to try to define prefix or local_prefix + # in the host overrides because configure will just change them back. + # You either have to give an appropriate option to configure or live with + # an Amiga specific patch to configure. See the note in configure. -fnf + + # Building under amigados almost certainly requires an already working gcc. + # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will + # work and get exercised. To bootstrap with the regular gcc just do + # "make CC=gcc". To bootstrap without "-pipe" do "make PIPE=". + + CC = gccv $(PIPE) + + # Disable -pipe for now since I had problems bootstrapping gcc 2.5.5 with + # it. (fnf) + #PIPE = -pipe + + # Allow the user to override the default host optimization with gcc, or if the + # host compiler is not gcc and doesn't understand -O. + + X_OPTIMIZE = -O2 + + # The standard additional host flags for the compiler. + + X_CFLAGS = $(X_OPTIMIZE) + + # Man pages get a wierd suffix... + + manext = .0 + + # We really shouldn't specify CFLAGS from here, but there's no other way + # to get rid of the `-g' indoctrinated by Makefile.in. Note this becomes + # part of both the host compilation CFLAGS and the target compilation + # CFLAGS. + + CFLAGS = + + # Ranlib does exist, but may not be in a path where the default RANLIB_TEST + # expects it, so just force it to true. + + RANLIB_TEST = true + + # My current version of ln doesn't work, so use cp instead. -fnf + + HARDLINK = cp diff -rc --new-file gcc-2.5.7-fsf/config/m68k/xm-amigados.h gcc-2.5.7-amiga/config/m68k/xm-amigados.h *** gcc-2.5.7-fsf/config/m68k/xm-amigados.h Thu Jan 1 00:00:00 1970 --- gcc-2.5.7-amiga/config/m68k/xm-amigados.h Sun Dec 12 17:25:53 1993 *************** *** 0 **** --- 1,215 ---- + /* Configuration for GNU C-compiler for Commodore Amiga, running AmigaDOS. + Copyright (C) 1992 Free Software Foundation, Inc. + Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch). + + 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + /* first include the generic header, then modify some parts.. */ + + #include "m68k/xm-m68k.h" + + /* Amiga specific headers, such as from the Native Developer Update kits, + go in SYSTEM_INCLUDE_DIR. STANDARD_INCLUDE_DIR is the equivalent of + Unix "/usr/include". All other include paths are set in Makefile. */ + + #define SYSTEM_INCLUDE_DIR "/gcc/os-include" + #define STANDARD_INCLUDE_DIR "/gcc/include" + + /* Fork one piped subcommand. SEARCH_FLAG is the system call to use + (either execv or execvp). ARGV is the arg vector to use. + NOT_LAST is nonzero if this is not the last subcommand + (i.e. its output should be piped to the next one.) */ + + #ifndef AMIGADOS_FORK_GCC + + /* This version uses a more or less amigados-conformant way of running a + program (in the context of the parent). If you want to use -pipe however, + you'll have to use the vfork() version afterwards. */ + + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \ + ({char *_argline; \ + int _arglinelength, _i; \ + \ + for (_i = 1, _arglinelength=0; ARGV[_i]; ++_i) \ + _arglinelength += strlen(ARGV[_i]) + 1; \ + \ + _arglinelength += strlen(PROGRAM) + 1; \ + \ + if (!(_argline = (char *)alloca(_arglinelength))) \ + pfatal_with_name ("alloca"); \ + \ + strcpy(_argline, PROGRAM); \ + for (_i = 1; ARGV[_i]; ++_i) \ + { \ + strcat(_argline, " "); \ + strcat(_argline, ARGV[_i]); \ + } \ + \ + ssystem(_argline); }) \ + + #define PEXECUTE_RESULT(STATUS, COMMAND) \ + ({ STATUS = COMMAND.pid; }) + + #else + + /* the vfork() version. This one has the drawback, that gcc is not + interruptible when started from make, since ixemul.library doesn't yet + propagate ^C to subprocesses. */ + + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \ + ({int (*_func)() = (SEARCH_FLAG ? execv : execvp); \ + int _pid; \ + int _pdes[2]; \ + int _input_desc = last_pipe_input; \ + int _output_desc = STDOUT_FILE_NO; \ + int _retries, _sleep_interval, _result; \ + \ + /* If this isn't the last process, make a pipe for its output, \ + and record it as waiting to be the input to the next process. */ \ + \ + if (NOT_LAST) \ + { \ + if (pipe (_pdes) < 0) \ + pfatal_with_name ("pipe"); \ + _output_desc = _pdes[WRITE_PORT]; \ + last_pipe_input = _pdes[READ_PORT]; \ + } \ + else \ + last_pipe_input = STDIN_FILE_NO; \ + \ + /* Fork a subprocess; wait and retry if it fails. */ \ + _sleep_interval = 1; \ + for (_retries = 0; _retries < 4; _retries++) \ + { \ + _pid = vfork (); \ + if (_pid >= 0) \ + break; \ + sleep (_sleep_interval); \ + _sleep_interval *= 2; \ + } \ + \ + switch (_pid) \ + { \ + case -1: \ + pfatal_with_name ("vfork"); \ + /* NOTREACHED */ \ + _result = 0; \ + break; \ + \ + case 0: /* child */ \ + /* Move the input and output pipes into place, if nec. */ \ + if (_input_desc != STDIN_FILE_NO) \ + { \ + close (STDIN_FILE_NO); \ + dup (_input_desc); \ + close (_input_desc); \ + } \ + if (_output_desc != STDOUT_FILE_NO) \ + { \ + close (STDOUT_FILE_NO); \ + dup (_output_desc); \ + close (_output_desc); \ + } \ + \ + /* Close the parent's descs that aren't wanted here. */ \ + if (last_pipe_input != STDIN_FILE_NO) \ + close (last_pipe_input); \ + \ + /* Exec the program. */ \ + (*_func) (PROGRAM, ARGV); \ + perror_exec (PROGRAM); \ + exit (-1); \ + /* NOTREACHED */ \ + _result = 0; \ + break; \ + \ + default: \ + /* In the parent, after forking. \ + Close the descriptors that we made for this child. */ \ + if (_input_desc != STDIN_FILE_NO) \ + close (_input_desc); \ + if (_output_desc != STDOUT_FILE_NO) \ + close (_output_desc); \ + \ + /* Return child's process number. */ \ + _result = _pid; \ + break; \ + } \ + _result; }) \ + + #define PEXECUTE_RESULT(STATUS, COMMAND) \ + ({ wait (& STATUS); }) + + #endif /* AMIGADOS_FORK_GCC */ + + /* the following macros are stolen more or less from xm-vms.h ... */ + + /* This macro is used to help compare filenames in cp-lex.c. + + We also need to make sure that the names are all lower case, because + we must be able to compare filenames to determine if a file implements + a class. */ + + #define FILE_NAME_NONDIRECTORY(C) \ + ({ \ + extern char *rindex(); \ + char * pnt_ = (C), * pnt1_; \ + pnt1_ = pnt_ - 1; \ + while (*++pnt1_) \ + if ((*pnt1_ >= 'A' && *pnt1_ <= 'Z')) *pnt1_ |= 0x20; \ + pnt1_ = rindex (pnt_, '/'); \ + pnt1_ = (pnt1_ == 0 ? rindex (pnt_, ':') : pnt1_); \ + (pnt1_ == 0 ? pnt_ : pnt1_ + 1); \ + }) + + /* Macro to generate the name of the cross reference file. The standard + one does not work, since it was written assuming that the conventions + of a unix style filesystem will work on the host system. + + Contrary to VMS, I'm using the original unix filename, there's no reason + not to use this under AmigaDOS. */ + + #define XREF_FILE_NAME(BUFF, NAME) \ + s = FILE_NAME_NONDIRECTORY (NAME); \ + if (s == NAME) sprintf(BUFF, ".%s.gxref", NAME); \ + else { \ + unsigned char ch = *s; /* could be Latin1 char.. */ \ + /* temporary: cut the filename from the directory */\ + *s = 0; \ + sprintf (BUFF, "%s.%c%s.gxref", NAME, ch, s+1); \ + /* and restore the filename */ \ + *s = ch; \ + } \ + + /* Macro that is used in cp-xref.c to determine whether a file name is + absolute or not. + + This checks for both, '/' as first character, since we're running under + ixemul.library which provides for this unix'ism, and for the usual + logical-terminator, ':', somewhere in the filename. */ + + #define FILE_NAME_ABSOLUTE_P(NAME) (NAME[0] == '/' || index(NAME, ':')) + + /* the colon conflicts with the name space of logicals */ + + #define PATH_SEPARATOR ',' + + /* AmigaDOS handles rename(2) *much* better than any link(2)/unlink(2) + hacks. It's actually the inverse case as on Unix. rename(2) was always + there, link(2) is new with OS 2.0 */ + + #define HAVE_rename 1 diff -rc --new-file gcc-2.5.7-fsf/configure gcc-2.5.7-amiga/configure *** gcc-2.5.7-fsf/configure Fri Nov 19 21:44:34 1993 --- gcc-2.5.7-amiga/configure Sun Dec 12 17:25:59 1993 *************** *** 45,52 **** # Default --srcdir to the directory where the script is found, # if a directory was specified. ! # The second sed call is to convert `.//configure' to `./configure'. ! srcdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` if [ x$srcdir = x$0 ] then srcdir= --- 45,54 ---- # Default --srcdir to the directory where the script is found, # if a directory was specified. ! # The first sed call works around a bug in the AmigaDOS port of sksh, where ! # $0 has a trailing slash appended to it. It is a NOP for other systems. ! # The third sed call is to convert `.//configure' to `./configure'. ! srcdir=`echo $0 | sed 's|/$||' | sed 's|//|/|' | sed 's|/[^/]*$||'` if [ x$srcdir = x$0 ] then srcdir= *************** *** 54,61 **** host= ! # Default prefix to /usr/local. ! prefix=/usr/local # local_prefix specifies where to find the directory /usr/local/include # We don't use $(prefix) for this --- 56,68 ---- host= ! # Note: For AmigaDOS we want this to default to /gcc unless we specify ! # otherwise to configure. Changing it in Makefile.in or config/m68k/x-amigados ! # is ineffective since configure will always change them back in the final ! # generated Makefile, so we have to go to the root of the problem, which is ! # here. -fnf ! # Default prefix to /gcc. ! prefix=/gcc # local_prefix specifies where to find the directory /usr/local/include # We don't use $(prefix) for this *************** *** 63,75 **** # even if GCC is installed somewhere other than /usr/local. # Think THREE TIMES before specifying any other value for this! # DO NOT make this use $prefix! ! local_prefix=/usr/local # Default is to let the Makefile set exec_prefix from $(prefix) exec_prefix='$(prefix)' remove=rm ! hard_link=ln ! symbolic_link='ln -s' copy=cp # Record all the arguments, to write them in config.status. --- 70,83 ---- # even if GCC is installed somewhere other than /usr/local. # Think THREE TIMES before specifying any other value for this! # DO NOT make this use $prefix! ! # Note: See AmigaDOS note above for this AmigaDOS specific change. -fnf ! local_prefix=/local # Default is to let the Makefile set exec_prefix from $(prefix) exec_prefix='$(prefix)' remove=rm ! hard_link=cp ! symbolic_link=cp copy=cp # Record all the arguments, to write them in config.status. *************** *** 297,303 **** use_collect2= # Set this to override the default target model. target_cpu_default= ! # Set this to force use of install.sh. broken_install= # Set this to control which fixincludes program to use. fixincludes=fixincludes --- 305,312 ---- use_collect2= # Set this to override the default target model. target_cpu_default= ! # Set this to force use of install.sh (if set to 'yes') ! # Set to name of installer to use a custom installer. broken_install= # Set this to control which fixincludes program to use. fixincludes=fixincludes *************** *** 642,647 **** --- 651,666 ---- tm_file=sparc/lite.h use_collect2=yes ;; + m68k-*-amigados) + xm_file=m68k/xm-amigados.h + out_file=m68k/amigados.c + tm_file=m68k/amigados.h + tmake_file=m68k/t-amigados + xmake_file=m68k/x-amigados + fixincludes=Makefile.in # Headers are already fixed. + broken_install=cp + install_headers_dir=install-headers-cp + ;; m68k-cbm-sysv4*) # Commodore variant of V.4. tm_file=m68k/amix.h xm_file=m68k/xm-amix.h *************** *** 1763,1770 **** then true else rm -f Makefile.xx ! abssrcdir=`cd ${srcdir}; pwd` ! sed "s|^INSTALL = .*|INSTALL = ${abssrcdir}/install.sh -c|" Makefile.tem > Makefile.xx rm -f Makefile.tem mv Makefile.xx Makefile.tem fi --- 1782,1795 ---- then true else rm -f Makefile.xx ! if [ x$host_broken_install = xyes ] ! then ! abssrcdir=`cd ${srcdir}; pwd` ! installer=${abssrcdir}/install.sh -c ! else ! installer=$host_broken_install ! fi ! sed "s|^INSTALL = .*|INSTALL = ${installer}|" Makefile.tem > Makefile.xx rm -f Makefile.tem mv Makefile.xx Makefile.tem fi diff -rc --new-file gcc-2.5.7-fsf/gcc.c gcc-2.5.7-amiga/gcc.c *** gcc-2.5.7-fsf/gcc.c Fri Nov 26 20:57:21 1993 --- gcc-2.5.7-amiga/gcc.c Sun Dec 12 17:26:06 1993 *************** *** 1398,1405 **** --- 1398,1409 ---- base = choose_temp_base_try (P_tmpdir, base); #endif + #ifdef amigados + base = "ram:"; + #else base = choose_temp_base_try ("/usr/tmp", base); base = choose_temp_base_try ("/tmp", base); + #endif /* If all else fails, use the current directory! */ if (base == (char *)0) *************** *** 1408,1414 **** len = strlen (base); temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1); strcpy (temp_filename, base); ! if (len > 0 && temp_filename[len-1] != '/') temp_filename[len++] = '/'; strcpy (temp_filename + len, "ccXXXXXX"); --- 1412,1422 ---- len = strlen (base); temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1); strcpy (temp_filename, base); ! if (len > 0 && temp_filename[len-1] != '/' ! #ifdef amigados ! && temp_filename[len-1] != ':' ! #endif ! ) temp_filename[len++] = '/'; strcpy (temp_filename + len, "ccXXXXXX"); *************** *** 1552,1558 **** /* Determine the filename to execute (special case for absolute paths). */ ! if (*name == '/') { if (access (name, mode)) { --- 1560,1570 ---- /* Determine the filename to execute (special case for absolute paths). */ ! if (*name == '/' ! #ifdef amigados ! || index (name, ':') ! #endif ! ) { if (access (name, mode)) { *************** *** 1758,1763 **** --- 1770,1776 ---- NOT_LAST is nonzero if this is not the last subcommand (i.e. its output should be piped to the next one.) */ + #ifndef PEXECUTE #ifndef OS2 #ifdef __MSDOS__ *************** *** 1913,1918 **** --- 1926,1932 ---- return (search_flag ? spawnv : spawnvp) (1, program, argv); } #endif /* not OS2 */ + #endif /* !defined (PEXECUTE) */ /* Execute the command specified by the arguments on the current line of spec. When using pipes, this includes several piped-together commands *************** *** 2007,2015 **** --- 2021,2035 ---- { char *string = commands[i].argv[0]; + #ifdef PEXECUTE + commands[i].pid = PEXECUTE (string != commands[i].prog, + string, commands[i].argv, + i + 1 < n_commands); + #else commands[i].pid = pexecute (string != commands[i].prog, string, commands[i].argv, i + 1 < n_commands); + #endif if (string != commands[i].prog) free (string); *************** *** 2030,2040 **** --- 2050,2064 ---- int pid; char *prog; + #ifdef PEXECUTE_RESULT + pid = PEXECUTE_RESULT (status, commands[i]); + #else /* PEXECUTE_RESULT */ #ifdef __MSDOS__ status = pid = commands[i].pid; #else pid = wait (&status); #endif + #endif /* PEXECUTE_RESULT */ if (pid < 0) abort (); *************** *** 2141,2146 **** --- 2165,2171 ---- if (*endp == PATH_SEPARATOR || *endp == 0) { strncpy (nstore, startp, endp-startp); + #ifndef amigados if (endp == startp) { strcpy (nstore, "./"); *************** *** 2152,2157 **** --- 2177,2191 ---- } else nstore[endp-startp] = 0; + #else + if (endp[-1] != '/' && endp[-1] != ':') + { + nstore[endp-startp] = '/'; + nstore[endp-startp+1] = 0; + } + else + nstore[endp-startp] = 0; + #endif add_prefix (&exec_prefix, nstore, 0, 0, NULL_PTR); if (*endp == 0) break; *************** *** 2174,2179 **** --- 2208,2214 ---- if (*endp == PATH_SEPARATOR || *endp == 0) { strncpy (nstore, startp, endp-startp); + #ifndef amigados if (endp == startp) { strcpy (nstore, "./"); *************** *** 2185,2190 **** --- 2220,2234 ---- } else nstore[endp-startp] = 0; + #else + if (endp[-1] != '/' && endp[-1] != ':') + { + nstore[endp-startp] = '/'; + nstore[endp-startp+1] = 0; + } + else + nstore[endp-startp] = 0; + #endif add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR); if (*endp == 0) break; *************** *** 2208,2213 **** --- 2252,2258 ---- if (*endp == PATH_SEPARATOR || *endp == 0) { strncpy (nstore, startp, endp-startp); + #ifndef amigados if (endp == startp) { strcpy (nstore, "./"); *************** *** 2219,2224 **** --- 2264,2278 ---- } else nstore[endp-startp] = 0; + #else + if (endp[-1] != '/' && endp[-1] != ':') + { + nstore[endp-startp] = '/'; + nstore[endp-startp+1] = 0; + } + else + nstore[endp-startp] = 0; + #endif add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR); if (*endp == 0) break; *************** *** 3862,3871 **** --- 3916,3929 ---- register char *p; int len; + #ifdef FILE_NAME_NONDIRECTORY + input_basename = FILE_NAME_NONDIRECTORY (input_filename); + #else input_basename = input_filename; for (p = input_filename; *p; p++) if (*p == '/') input_basename = p + 1; + #endif /* Find a suffix starting with the last period, and set basename_length to exclude that suffix. */ diff -rc --new-file gcc-2.5.7-fsf/genconfig.c gcc-2.5.7-amiga/genconfig.c *** gcc-2.5.7-fsf/genconfig.c Tue Oct 13 04:11:48 1992 --- gcc-2.5.7-amiga/genconfig.c Sun Dec 12 17:26:11 1993 *************** *** 303,310 **** --- 303,318 ---- printf ("/* Generated automatically by the program `genconfig'\n\ from the machine description file `md'. */\n\n"); + #ifdef amigados + /* this constant probably better be 14 in general, or a cross compiling + host might choke on some amigados header files... */ + + /* Allow at least 14 operands for the sake of asm constructs. */ + max_recog_operands = 14; + #else /* Allow at least 10 operands for the sake of asm constructs. */ max_recog_operands = 9; /* We will add 1 later. */ + #endif max_dup_operands = 1; /* Read the machine description. */ diff -rc --new-file gcc-2.5.7-fsf/gstdarg.h gcc-2.5.7-amiga/gstdarg.h *** gcc-2.5.7-fsf/gstdarg.h Sat Nov 13 01:54:16 1993 --- gcc-2.5.7-amiga/gstdarg.h Sun Dec 12 17:26:15 1993 *************** *** 157,160 **** --- 157,166 ---- #endif /* __GNUC__ */ #endif /* not _ANSI_STDARG_H_ */ + #ifdef amigados + # ifndef _VA_LIST + # define _VA_LIST + typedef __gnuc_va_list va_list; + # endif + #endif /* amigados */ #endif /* not _STDARG_H */ diff -rc --new-file gcc-2.5.7-fsf/gstddef.h gcc-2.5.7-amiga/gstddef.h *** gcc-2.5.7-fsf/gstddef.h Fri Dec 3 11:47:17 1993 --- gcc-2.5.7-amiga/gstddef.h Sun Dec 12 17:26:20 1993 *************** *** 3,8 **** --- 3,48 ---- #ifndef _ANSI_STDDEF_H #ifndef __STDDEF_H__ + #ifdef amigados + + /* GNU libc has special support in this file, 4.3bsd-net2 libc deserves that + just as well. The system headers are ANSI compliant, the used compiler IS + gcc, so it's really ok to use the system header, no reason to hassle + with a jungle of ifdefs. Besides, amigados is only defined if compiling + with host=amigados, it doesn't apply if compiling with target=amigados + on a different host with possibly different system headers. Same thing + would apply to gstdarg.h and gvarargs.h, but those headers are more + easily fixable than this one and I'm sick of writing the same comment + there as well. MW + + Include the contents of inline rather than with a #include, + to avoid infinite include recursion when this file is installed in + gcc's include directory as stddef.h. (fnf) */ + + #define _STDDEF_H_ + + #include + + typedef _PTRDIFF_T_ ptrdiff_t; + + #ifdef _SIZE_T_ + typedef _SIZE_T_ size_t; + #undef _SIZE_T_ + #endif + + #ifdef _WCHAR_T_ + typedef _WCHAR_T_ wchar_t; + #undef _WCHAR_T_ + #endif + + #ifndef NULL + #define NULL 0 + #endif + + #define offsetof(type, member) ((size_t)(&((type *)0)->member)) + + #else /* not amigados */ + /* Any one of these symbols __need_* means that GNU libc wants us just to define one data type. So don't define the symbols that indicate this file's entire job has been done. */ *************** *** 172,177 **** --- 212,219 ---- #ifndef __WCHAR_TYPE__ #define __WCHAR_TYPE__ int #endif + + #endif /* not amigados */ #ifdef __GNUG__ /* In C++, wchar_t is a distinct basic type, and we can expect __wchar_t to be defined by cc1plus. */ diff -rc --new-file gcc-2.5.7-fsf/gvarargs.h gcc-2.5.7-amiga/gvarargs.h *** gcc-2.5.7-fsf/gvarargs.h Sat Nov 13 08:33:41 1993 --- gcc-2.5.7-amiga/gvarargs.h Sun Dec 12 17:26:25 1993 *************** *** 156,162 **** /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ #ifndef _VA_LIST_T_H #define _VA_LIST_T_H ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__)) #define _VA_LIST_ #endif #define _VA_LIST --- 156,162 ---- /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ #ifndef _VA_LIST_T_H #define _VA_LIST_T_H ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__amigados__)) #define _VA_LIST_ #endif #define _VA_LIST *************** *** 172,176 **** --- 172,183 ---- #ifdef _BSD_VA_LIST #undef _BSD_VA_LIST #endif + + #ifdef amigados + # ifndef _VA_LIST + # define _VA_LIST + typedef __gnuc_va_list va_list; + # endif + #endif /* amigados */ #endif /* __GNUC__ */ diff -rc --new-file gcc-2.5.7-fsf/machmode.h gcc-2.5.7-amiga/machmode.h *** gcc-2.5.7-fsf/machmode.h Mon Jun 28 01:18:48 1993 --- gcc-2.5.7-amiga/machmode.h Sun Dec 12 17:26:29 1993 *************** *** 92,98 **** /* Get the name of mode MODE as a string. */ ! extern char *mode_name[]; #define GET_MODE_NAME(MODE) (mode_name[(int)(MODE)]) enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC, --- 92,98 ---- /* Get the name of mode MODE as a string. */ ! extern char * const mode_name[]; #define GET_MODE_NAME(MODE) (mode_name[(int)(MODE)]) enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC, *************** *** 101,107 **** /* Get the general kind of object that mode MODE represents (integer, floating, complex, etc.) */ ! extern enum mode_class mode_class[]; #define GET_MODE_CLASS(MODE) (mode_class[(int)(MODE)]) /* Nonzero if MODE is an integral mode. */ --- 101,107 ---- /* Get the general kind of object that mode MODE represents (integer, floating, complex, etc.) */ ! extern const enum mode_class mode_class[]; #define GET_MODE_CLASS(MODE) (mode_class[(int)(MODE)]) /* Nonzero if MODE is an integral mode. */ *************** *** 117,128 **** /* Get the size in bytes of an object of mode MODE. */ ! extern int mode_size[]; #define GET_MODE_SIZE(MODE) (mode_size[(int)(MODE)]) /* Get the size in bytes of the basic parts of an object of mode MODE. */ ! extern int mode_unit_size[]; #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int)(MODE)]) /* Get the number of units in the object. */ --- 117,128 ---- /* Get the size in bytes of an object of mode MODE. */ ! extern const int mode_size[]; #define GET_MODE_SIZE(MODE) (mode_size[(int)(MODE)]) /* Get the size in bytes of the basic parts of an object of mode MODE. */ ! extern const int mode_unit_size[]; #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int)(MODE)]) /* Get the number of units in the object. */ *************** *** 144,150 **** /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ ! extern enum machine_mode mode_wider_mode[]; #define GET_MODE_WIDER_MODE(MODE) (mode_wider_mode[(int)(MODE)]) /* Return the mode for data of a given size SIZE and mode class CLASS. --- 144,150 ---- /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ ! extern const enum machine_mode mode_wider_mode[]; #define GET_MODE_WIDER_MODE(MODE) (mode_wider_mode[(int)(MODE)]) /* Return the mode for data of a given size SIZE and mode class CLASS. diff -rc --new-file gcc-2.5.7-fsf/print-tree.c gcc-2.5.7-amiga/print-tree.c *** gcc-2.5.7-fsf/print-tree.c Wed Oct 27 05:55:26 1993 --- gcc-2.5.7-amiga/print-tree.c Sun Dec 12 17:26:34 1993 *************** *** 24,30 **** extern char **tree_code_name; ! extern char *mode_name[]; void print_node (); void indent_to (); --- 24,30 ---- extern char **tree_code_name; ! extern char *const mode_name[]; void print_node (); void indent_to (); diff -rc --new-file gcc-2.5.7-fsf/protoize.c gcc-2.5.7-amiga/protoize.c *** gcc-2.5.7-fsf/protoize.c Wed Nov 24 19:31:26 1993 --- gcc-2.5.7-amiga/protoize.c Sun Dec 12 17:26:42 1993 *************** *** 839,846 **** --- 839,851 ---- { struct default_include *p; + #ifdef FILE_NAME_ABSOLUTE_P + if (! FILE_NAME_ABSOLUTE_P (path)) + abort (); + #else if (path[0] != '/') abort (); /* Must be an absolutized filename. */ + #endif for (p = include_defaults; p->fname; p++) if (!strncmp (path, p->fname, strlen (p->fname)) *************** *** 1267,1273 **** --- 1272,1282 ---- { const char *src_p; + #ifdef FILE_NAME_ABSOLUTE_P + if (! FILE_NAME_ABSOLUTE_P (rel_filename)) + #else if (rel_filename[0] != '/') + #endif { src_p = cwd2; while (*endp++ = *src_p++) *************** *** 1530,1535 **** --- 1539,1563 ---- return ++q; } + /* Use this macro to advance a char * over the filename part in a line + read from an aux-info file. */ + + #ifndef amigados + /* Version for file systems where the colon has no special meaning */ + #define ADVANCE_PAST_FILENAME(CP) \ + while (* (CP) != ':') (CP)++ + #else + /* Have to heuristically decide whether the colon is part of the filename + or whether it serves to delimit the filename from the line number. If + it's the latter case, then the character following the colon *must* + be a digit. Note that this heuristic fails if the filename starts + with a digit. */ + #define ADVANCE_PAST_FILENAME(CP) \ + while ((CP)[0] != ':' || !isdigit ((CP)[1])) \ + (CP)++; + #endif + + /* Given a line from an aux info file, and a time at which the aux info file it came from was created, check to see if the item described in the line comes from a file which has been modified since the aux info *************** *** 1551,1558 **** { const char *filename_start = p = l + 3; ! while (*p != ':') ! p++; filename = (char *) alloca ((size_t) (p - filename_start) + 1); strncpy (filename, filename_start, (size_t) (p - filename_start)); filename[p-filename_start] = '\0'; --- 1579,1585 ---- { const char *filename_start = p = l + 3; ! ADVANCE_PAST_FILENAME (p); filename = (char *) alloca ((size_t) (p - filename_start) + 1); strncpy (filename, filename_start, (size_t) (p - filename_start)); filename[p-filename_start] = '\0'; *************** *** 1609,1616 **** const char *filename_start = p = l + 3; char *filename; ! while (*p != ':') ! p++; filename = (char *) alloca ((size_t) (p - filename_start) + 1); strncpy (filename, filename_start, (size_t) (p - filename_start)); filename[p-filename_start] = '\0'; --- 1636,1642 ---- const char *filename_start = p = l + 3; char *filename; ! ADVANCE_PAST_FILENAME (p); filename = (char *) alloca ((size_t) (p - filename_start) + 1); strncpy (filename, filename_start, (size_t) (p - filename_start)); filename[p-filename_start] = '\0'; *************** *** 2330,2336 **** { char *p = aux_info_base; ! while (*p != ':') p++; p++; while (*p == ' ') --- 2356,2364 ---- { char *p = aux_info_base; ! /* have to make sure at least one space is following the colon to make ! sure the colon is not part of the filename */ ! while (*p != ':' && p[1] != ' ') p++; p++; while (*p == ' ') *************** *** 2344,2350 **** continue; aux_info_second_line = p; aux_info_relocated_name = 0; ! if (invocation_filename[0] != '/') { /* INVOCATION_FILENAME is relative; append it to BASE_SOURCE_FILENAME's dir. */ --- 2372,2382 ---- continue; aux_info_second_line = p; aux_info_relocated_name = 0; ! #ifdef FILE_NAME_ABSOLUTE_P ! if (! FILE_NAME_ABSOLUTE_P (invocation_filename)) ! #else ! if (invocation_filename[0] != '/') ! #endif { /* INVOCATION_FILENAME is relative; append it to BASE_SOURCE_FILENAME's dir. */ *************** *** 2432,2438 **** #ifndef UNPROTOIZE /* Check an individual filename for a .c suffix. If the filename has this ! suffix, rename the file such that its suffix is changed to .C. This function implements the -C option. */ static void --- 2464,2470 ---- #ifndef UNPROTOIZE /* Check an individual filename for a .c suffix. If the filename has this ! suffix, rename the file such that its suffix is changed to .cc. This function implements the -C option. */ static void *************** *** 2441,2447 **** { const char *filename = hp->symbol; int last_char_index = strlen (filename) - 1; ! char *const new_filename = (char *) alloca (strlen (filename) + 1); /* Note that we don't care here if the given file was converted or not. It is possible that the given file was *not* converted, simply because there --- 2473,2479 ---- { const char *filename = hp->symbol; int last_char_index = strlen (filename) - 1; ! char *const new_filename = (char *) alloca (strlen (filename) + 2); /* Note that we don't care here if the given file was converted or not. It is possible that the given file was *not* converted, simply because there *************** *** 2453,2460 **** return; strcpy (new_filename, filename); ! new_filename[last_char_index] = 'C'; if (my_link (filename, new_filename) == -1) { fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n", --- 2485,2509 ---- return; strcpy (new_filename, filename); ! strcat (new_filename + last_char_index, "cc"); ! ! /* use rename(2) if available !! Update config files to include HAVE_rename ! if the used OS provides it. Advantages are: it's atomic, it's one ! system call compared to two. */ ! ! #ifdef HAVE_rename ! /* if the mentioned systems (POSIX 1003.1-1988) have rename(2), this has ! to be changed to `my_rename' as well. */ + if (rename (filename, new_filename) == -1) + { + fprintf (stderr, "%s: warning: can't rename file `%s' to `%s': %s\n", + pname, shortpath (NULL, filename), + shortpath (NULL, new_filename), sys_errlist[errno]); + errors++; + return; + } + #else if (my_link (filename, new_filename) == -1) { fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n", *************** *** 2471,2476 **** --- 2520,2526 ---- errors++; return; } + #endif } #endif /* !defined (UNPROTOIZE) */ diff -rc --new-file gcc-2.5.7-fsf/real.c gcc-2.5.7-amiga/real.c *** gcc-2.5.7-fsf/real.c Wed Oct 13 19:46:38 1993 --- gcc-2.5.7-amiga/real.c Sun Dec 12 17:26:49 1993 *************** *** 4333,4341 **** if (y[NE - 1] == 0x7fff) { if (sign) ! sprintf (wstring, " -Infinity "); else ! sprintf (wstring, " Infinity "); goto bxit; } --- 4333,4341 ---- if (y[NE - 1] == 0x7fff) { if (sign) ! sprintf (wstring, " -NaN "); else ! sprintf (wstring, " NaN "); goto bxit; } diff -rc --new-file gcc-2.5.7-fsf/rtl.c gcc-2.5.7-amiga/rtl.c *** gcc-2.5.7-fsf/rtl.c Thu Oct 7 21:05:00 1993 --- gcc-2.5.7-amiga/rtl.c Sun Dec 12 17:26:54 1993 *************** *** 50,56 **** #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME , ! char *rtx_name[] = { #include "rtl.def" /* rtl expressions are documented here */ }; --- 50,56 ---- #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME , ! char * const rtx_name[] = { #include "rtl.def" /* rtl expressions are documented here */ }; *************** *** 61,67 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) NAME, ! char *mode_name[(int) MAX_MACHINE_MODE] = { #include "machmode.def" #ifdef EXTRA_CC_MODES --- 61,67 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) NAME, ! char * const mode_name[(int) MAX_MACHINE_MODE] = { #include "machmode.def" #ifdef EXTRA_CC_MODES *************** *** 77,83 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) CLASS, ! enum mode_class mode_class[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 77,83 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) CLASS, ! const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; *************** *** 88,94 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) SIZE, ! int mode_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 88,94 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) SIZE, ! const int mode_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; *************** *** 99,105 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) UNIT, ! int mode_unit_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; --- 99,105 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) UNIT, ! const int mode_unit_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; *************** *** 112,118 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) \ (enum machine_mode) WIDER, ! enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; --- 112,118 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) \ (enum machine_mode) WIDER, ! const enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; *************** *** 126,132 **** rtx's of that code. The sequence is a C string in which each character describes one operand. */ ! char *rtx_format[] = { /* "*" undefined. can cause a warning message "0" field is unused (or used in a phase-dependent manner) --- 126,132 ---- rtx's of that code. The sequence is a C string in which each character describes one operand. */ ! char *const rtx_format[] = { /* "*" undefined. can cause a warning message "0" field is unused (or used in a phase-dependent manner) *************** *** 157,163 **** /* Indexed by rtx code, gives a character representing the "class" of that rtx code. See rtl.def for documentation on the defined classes. */ ! char rtx_class[] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS, #include "rtl.def" /* rtl expressions are defined here */ #undef DEF_RTL_EXPR --- 157,163 ---- /* Indexed by rtx code, gives a character representing the "class" of that rtx code. See rtl.def for documentation on the defined classes. */ ! const char rtx_class[] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS, #include "rtl.def" /* rtl expressions are defined here */ #undef DEF_RTL_EXPR *************** *** 165,171 **** /* Names for kinds of NOTEs and REG_NOTEs. */ ! char *note_insn_name[] = { 0 , "NOTE_INSN_DELETED", "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP", --- 165,171 ---- /* Names for kinds of NOTEs and REG_NOTEs. */ ! char * const note_insn_name[] = { 0 , "NOTE_INSN_DELETED", "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP", *************** *** 173,179 **** "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG", "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG"}; ! char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0", "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL", "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED", "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL", --- 173,180 ---- "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG", "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG"}; ! char * const reg_note_name[] = ! { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0", "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL", "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED", "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL", diff -rc --new-file gcc-2.5.7-fsf/rtl.h gcc-2.5.7-amiga/rtl.h *** gcc-2.5.7-fsf/rtl.h Wed Sep 29 22:34:24 1993 --- gcc-2.5.7-amiga/rtl.h Sun Dec 12 17:27:00 1993 *************** *** 44,56 **** extern int rtx_length[]; #define GET_RTX_LENGTH(CODE) (rtx_length[(int)(CODE)]) ! extern char *rtx_name[]; #define GET_RTX_NAME(CODE) (rtx_name[(int)(CODE)]) ! extern char *rtx_format[]; #define GET_RTX_FORMAT(CODE) (rtx_format[(int)(CODE)]) ! extern char rtx_class[]; #define GET_RTX_CLASS(CODE) (rtx_class[(int)(CODE)]) /* Common union for an element of an rtx. */ --- 44,56 ---- extern int rtx_length[]; #define GET_RTX_LENGTH(CODE) (rtx_length[(int)(CODE)]) ! extern char * const rtx_name[]; #define GET_RTX_NAME(CODE) (rtx_name[(int)(CODE)]) ! extern char * const rtx_format[]; #define GET_RTX_FORMAT(CODE) (rtx_format[(int)(CODE)]) ! extern const char rtx_class[]; #define GET_RTX_CLASS(CODE) (rtx_class[(int)(CODE)]) /* Common union for an element of an rtx. */ *************** *** 331,337 **** /* Names for REG_NOTE's in EXPR_LIST insn's. */ ! extern char *reg_note_name[]; #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)]) /* The label-number of a code-label. The assembler label --- 331,337 ---- /* Names for REG_NOTE's in EXPR_LIST insn's. */ ! extern char *const reg_note_name[]; #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)]) /* The label-number of a code-label. The assembler label *************** *** 408,414 **** /* Names for NOTE insn's other than line numbers. */ ! extern char *note_insn_name[]; #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)]) /* The name of a label, in case it corresponds to an explicit label --- 408,414 ---- /* Names for NOTE insn's other than line numbers. */ ! extern char *const note_insn_name[]; #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)]) /* The name of a label, in case it corresponds to an explicit label diff -rc --new-file gcc-2.5.7-fsf/scan-types.sh gcc-2.5.7-amiga/scan-types.sh *** gcc-2.5.7-fsf/scan-types.sh Tue Oct 26 23:01:02 1993 --- gcc-2.5.7-amiga/scan-types.sh Sun Dec 12 17:27:04 1993 *************** *** 1,4 **** ! #! /bin/sh # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t). # Emits macros definitions for these, and some other types. # Intended to be used to massage the sys-protos.h file. --- 1,4 ---- ! #!/bin/sh # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t). # Emits macros definitions for these, and some other types. # Intended to be used to massage the sys-protos.h file. diff -rc --new-file gcc-2.5.7-fsf/toplev.c gcc-2.5.7-amiga/toplev.c *** gcc-2.5.7-fsf/toplev.c Sat Dec 11 00:59:54 1993 --- gcc-2.5.7-amiga/toplev.c Sun Dec 12 17:27:11 1993 *************** *** 504,509 **** --- 504,510 ---- {"unroll-all-loops", &flag_unroll_all_loops, 1}, {"writable-strings", &flag_writable_strings, 1}, {"peephole", &flag_no_peephole, 0}, + {"large-baserel", &flag_pic, 4}, {"force-mem", &flag_force_mem, 1}, {"force-addr", &flag_force_addr, 1}, {"function-cse", &flag_no_function_cse, 0}, *************** *** 522,527 **** --- 523,529 ---- {"schedule-insns2", &flag_schedule_insns_after_reload, 1}, {"pic", &flag_pic, 1}, {"PIC", &flag_pic, 2}, + {"baserel", &flag_pic, 3}, {"fast-math", &flag_fast_math, 1}, {"common", &flag_no_common, 0}, {"inhibit-size-directive", &flag_inhibit_size_directive, 1}, *************** *** 1530,1535 **** --- 1532,1540 ---- FILE *asm_file; char *input_name; { + #ifdef FILE_NAME_NONDIRECTORY + char *na = FILE_NAME_NONDIRECTORY (input_name); + #else int len = strlen (input_name); char *na = input_name + len; *************** *** 1540,1545 **** --- 1545,1551 ---- break; na--; } + #endif #ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME ASM_OUTPUT_MAIN_SOURCE_FILENAME (asm_file, na); *************** *** 3507,3512 **** --- 3513,3519 ---- #ifndef OS2 #ifndef VMS + #ifndef amigados if (flag_print_mem) { char *lim = (char *) sbrk (0); *************** *** 3521,3526 **** --- 3528,3534 ---- system ("ps v"); #endif /* not USG */ } + #endif /* not amigados */ #endif /* not VMS */ #endif /* not OS2 */ diff -rc --new-file gcc-2.5.7-fsf/tree.c gcc-2.5.7-amiga/tree.c *** gcc-2.5.7-fsf/tree.c Sun Oct 10 21:08:12 1993 --- gcc-2.5.7-amiga/tree.c Sun Dec 12 17:27:17 1993 *************** *** 248,254 **** /* Unique id for next type created. */ static int next_type_uid = 1; ! extern char *mode_name[]; void gcc_obstack_init (); static tree stabilize_reference_1 (); --- 248,254 ---- /* Unique id for next type created. */ static int next_type_uid = 1; ! extern char *const mode_name[]; void gcc_obstack_init (); static tree stabilize_reference_1 ();