home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / GCC / GCC258UD.LHA / gcc / src-patches / gcc-2.5.8-amiga.diffs
Encoding:
Text File  |  1994-02-08  |  187.9 KB  |  5,967 lines

  1. diff -rc --new-file gcc-2.5.7-fsf/Makefile.in gcc-2.5.7-amiga/Makefile.in
  2. *** gcc-2.5.7-fsf/Makefile.in    Thu Nov 25 23:08:52 1993
  3. --- gcc-2.5.7-amiga/Makefile.in    Sun Dec 12 17:25:01 1993
  4. ***************
  5. *** 58,68 ****
  6.   AR_FLAGS = rc
  7.   SHELL = /bin/sh
  8.   # on sysV, define this as cp.
  9. ! INSTALL = install -c
  10.   # These permit overriding just for certain files.
  11.   INSTALL_PROGRAM = $(INSTALL)
  12.   INSTALL_DATA = $(INSTALL)
  13.   SYMLINK = ln -s
  14.   MAKEINFO = makeinfo
  15.   TEXI2DVI = texi2dvi
  16.   
  17. --- 58,71 ----
  18.   AR_FLAGS = rc
  19.   SHELL = /bin/sh
  20.   # on sysV, define this as cp.
  21. ! INSTALL = cp
  22.   # These permit overriding just for certain files.
  23.   INSTALL_PROGRAM = $(INSTALL)
  24.   INSTALL_DATA = $(INSTALL)
  25.   SYMLINK = ln -s
  26. + # Some systems don't support hardlinks.  For this case, a simple copy
  27. + # will achieve the same results for our purposes.
  28. + HARDLINK = ln
  29.   MAKEINFO = makeinfo
  30.   TEXI2DVI = texi2dvi
  31.   
  32. ***************
  33. *** 90,102 ****
  34.   OLDAR = ar
  35.   
  36.   # Target to use when installing include directory.  Either
  37. ! # install-headers-tar or install-headers-cpio.
  38.   INSTALL_HEADERS_DIR = install-headers-tar
  39.   
  40.   # The GCC to use for compiling libgcc2.a, enquire, and cross-test.
  41.   # Usually the one we just built.
  42.   # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
  43. ! GCC_FOR_TARGET = ./xgcc -B./
  44.   
  45.   # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
  46.   # It omits XCFLAGS, and specifies -B./.
  47. --- 93,106 ----
  48.   OLDAR = ar
  49.   
  50.   # Target to use when installing include directory.  Either
  51. ! # install-headers-tar install-headers-cpio, or install-headers-cp.
  52.   INSTALL_HEADERS_DIR = install-headers-tar
  53.   
  54.   # The GCC to use for compiling libgcc2.a, enquire, and cross-test.
  55.   # Usually the one we just built.
  56.   # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
  57. ! XGCC = xgcc
  58. ! GCC_FOR_TARGET = ./$(XGCC) -B./
  59.   
  60.   # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
  61.   # It omits XCFLAGS, and specifies -B./.
  62. ***************
  63. *** 145,150 ****
  64. --- 149,157 ----
  65.   # Directory in which to put localized header files. On the systems with
  66.   # gcc as the native cc, `local_prefix' may not be `prefix' which is
  67.   # `/usr'.
  68. + # Similar considerations apply for toolkits located on non-writable storage,
  69. + # such as CD-ROM, where we need a completely separate place to put local
  70. + # include files.
  71.   # NOTE: local_prefix *should not* default from prefix.
  72.   local_prefix = /usr/local
  73.   # Directory in which to put host dependent programs and libraries
  74. ***************
  75. *** 549,555 ****
  76.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS)
  77.   
  78.   # Dump a specs file to make -B./ read these specs over installed ones.
  79. ! specs: xgcc
  80.       $(GCC_FOR_TARGET) -dumpspecs > specs
  81.   
  82.   # Create the compiler driver for g++.
  83. --- 556,562 ----
  84.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS)
  85.   
  86.   # Dump a specs file to make -B./ read these specs over installed ones.
  87. ! specs: xgcc xgccv
  88.       $(GCC_FOR_TARGET) -dumpspecs > specs
  89.   
  90.   # Create the compiler driver for g++.
  91. ***************
  92. *** 752,759 ****
  93.   # the second ar command tries to overwrite this file.  To avoid the error
  94.   # message from ar, we make sure all files are writable.
  95.       -(cd tmpcopy; chmod +w * > /dev/null 2>&1)
  96. !     (cd tmpcopy; $(AR) x ../$(LIBGCC2))
  97. !     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o)
  98.       rm -rf tmpcopy
  99.       -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  100.   # Actually build it in tmplibgcc.a, then rename at end,
  101. --- 759,767 ----
  102.   # the second ar command tries to overwrite this file.  To avoid the error
  103.   # message from ar, we make sure all files are writable.
  104.       -(cd tmpcopy; chmod +w * > /dev/null 2>&1)
  105. ! # The "cd..; wait" makes sure that the lock on tmpcopy has time to disappear.
  106. !     (cd tmpcopy; $(AR) x ../$(LIBGCC2); cd ..; /c/wait 2)
  107. !     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o; cd ..; /c/wait 2)
  108.       rm -rf tmpcopy
  109.       -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  110.   # Actually build it in tmplibgcc.a, then rename at end,
  111. ***************
  112. *** 770,779 ****
  113.       cd objc; \
  114.       $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  115.         srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  116. !       GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  117.         GCC_CFLAGS="$(GCC_CFLAGS)"
  118.       -rm -f libobjc.a
  119. !     ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  120.       -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  121.   
  122.   # This is used by objc/Makefile if the user runs that directly.
  123. --- 778,787 ----
  124.       cd objc; \
  125.       $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  126.         srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  127. !       GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
  128.         GCC_CFLAGS="$(GCC_CFLAGS)"
  129.       -rm -f libobjc.a
  130. !     cp objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  131.       -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  132.   
  133.   # This is used by objc/Makefile if the user runs that directly.
  134. ***************
  135. *** 783,789 ****
  136.       cd objc; \
  137.       $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  138.         srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  139. !       GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
  140.         GCC_CFLAGS="$(GCC_CFLAGS)"
  141.   
  142.   # Compile two additional files that are linked with every program
  143. --- 791,797 ----
  144.       cd objc; \
  145.       $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  146.         srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  147. !       GCC_FOR_TARGET="$$thisdir1/$(XGCC) -B$$thisdir1/" \
  148.         GCC_CFLAGS="$(GCC_CFLAGS)"
  149.   
  150.   # Compile two additional files that are linked with every program
  151. ***************
  152. *** 872,878 ****
  153.   # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  154.   ld: collect2
  155.       rm -f ld
  156. !     ln collect2 ld
  157.   
  158.   collect2 : collect2.o version.o $(LIBDEPS)
  159.   # Don't try modifying collect2 (aka ld) in place--it might be linking this.
  160. --- 880,886 ----
  161.   # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  162.   ld: collect2
  163.       rm -f ld
  164. !     cp collect2 ld
  165.   
  166.   collect2 : collect2.o version.o $(LIBDEPS)
  167.   # Don't try modifying collect2 (aka ld) in place--it might be linking this.
  168. ***************
  169. *** 1383,1389 ****
  170.   # Making the preprocessor
  171.   cpp: cccp
  172.       -rm -f cpp
  173. !     ln cccp cpp
  174.   cccp: cccp.o cexp.o version.o $(LIBDEPS)
  175.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
  176.   cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
  177. --- 1391,1397 ----
  178.   # Making the preprocessor
  179.   cpp: cccp
  180.       -rm -f cpp
  181. !     cp cccp cpp
  182.   cccp: cccp.o cexp.o version.o $(LIBDEPS)
  183.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
  184.   cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
  185. ***************
  186. *** 1541,1547 ****
  187.         for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
  188.           if [ -d $$dir ]; \
  189.           then \
  190. !           $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir) "`pwd`/xgcc -B`pwd`/"; \
  191.           else true; fi; \
  192.         done; \
  193.       else true; \
  194. --- 1549,1555 ----
  195.         for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
  196.           if [ -d $$dir ]; \
  197.           then \
  198. !           $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir) "`pwd`/$(XGCC) -B`pwd`/"; \
  199.           else true; fi; \
  200.         done; \
  201.       else true; \
  202. ***************
  203. *** 1563,1569 ****
  204.       cd objc; \
  205.       $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
  206.       srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  207. !     GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  208.       GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
  209.       touch objc-headers
  210.   
  211. --- 1571,1577 ----
  212.       cd objc; \
  213.       $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
  214.       srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  215. !     GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
  216.       GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
  217.       touch objc-headers
  218.   
  219. ***************
  220. *** 1845,1864 ****
  221.           $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \
  222.           chmod a+x $(bindir)/$(target)-g++; \
  223.           rm -f $(bindir)/$(target)-c++; \
  224. !         ln $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \
  225.         fi ; \
  226.       else \
  227.         rm -f $(bindir)/gcc; \
  228.         $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
  229.         rm -f $(bindir)/$(target)-gcc-1; \
  230. !       ln $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
  231.         mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
  232.         if [ -f cc1plus ] ; then \
  233.           rm -f $(bindir)/g++; \
  234.           $(INSTALL_PROGRAM) g++ $(bindir)/g++; \
  235.           chmod a+x $(bindir)/g++; \
  236.           rm -f $(bindir)/c++; \
  237. !         ln $(bindir)/g++ $(bindir)/c++; \
  238.         fi ; \
  239.       fi
  240.   # Install protoize if it was compiled.
  241. --- 1853,1872 ----
  242.           $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \
  243.           chmod a+x $(bindir)/$(target)-g++; \
  244.           rm -f $(bindir)/$(target)-c++; \
  245. !         $(HARDLINK) $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \
  246.         fi ; \
  247.       else \
  248.         rm -f $(bindir)/gcc; \
  249.         $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
  250.         rm -f $(bindir)/$(target)-gcc-1; \
  251. !       $(HARDLINK) $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
  252.         mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
  253.         if [ -f cc1plus ] ; then \
  254.           rm -f $(bindir)/g++; \
  255.           $(INSTALL_PROGRAM) g++ $(bindir)/g++; \
  256.           chmod a+x $(bindir)/g++; \
  257.           rm -f $(bindir)/c++; \
  258. !         $(HARDLINK) $(bindir)/g++ $(bindir)/c++; \
  259.         fi ; \
  260.       fi
  261.   # Install protoize if it was compiled.
  262. ***************
  263. *** 1924,1930 ****
  264.           dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
  265.           if expr "$$dest" : "$$dir.*" > /dev/null; then \
  266.             rm -f $(libsubdir)/include/$$i; \
  267. !           ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
  268.           fi; \
  269.         done; \
  270.       fi
  271. --- 1932,1938 ----
  272.           dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
  273.           if expr "$$dest" : "$$dir.*" > /dev/null; then \
  274.             rm -f $(libsubdir)/include/$$i; \
  275. !           $(HARDLINK) -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
  276.           fi; \
  277.         done; \
  278.       fi
  279. ***************
  280. *** 1947,1952 ****
  281. --- 1955,1964 ----
  282.   install-headers-cpio: stmp-headers $(STMP_FIXPROTO) install-include-dir
  283.       cd include; find . -print | cpio -pdum $(libsubdir)/include
  284.   
  285. + # Install the include directory using simple recursive copy.
  286. + install-headers-cp: stmp-headers install-include-dir
  287. +     cd include; cp -r . $(libsubdir)/include
  288.   # Put assert.h where it won't override GNU libc's assert.h.
  289.   # It goes in a dir that is searched after GNU libc's headers;
  290.   # thus, the following conditionals are no longer needed.
  291. ***************
  292. *** 2034,2040 ****
  293.       mkdir tmp/config
  294.       mkdir tmp/objc
  295.       for file in *[0-9a-zA-Z+]; do \
  296. !       ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  297.       done
  298.       cd config; \
  299.       for file in *[0-9a-zA-Z+]; do \
  300. --- 2046,2052 ----
  301.       mkdir tmp/config
  302.       mkdir tmp/objc
  303.       for file in *[0-9a-zA-Z+]; do \
  304. !       $(HARDLINK) $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  305.       done
  306.       cd config; \
  307.       for file in *[0-9a-zA-Z+]; do \
  308. ***************
  309. *** 2042,2061 ****
  310.           mkdir ../tmp/config/$$file; \
  311.           cd $$file; \
  312.           for subfile in *[0-9a-zA-Z+]; do \
  313. !           ln $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
  314.             || cp $$subfile ../../tmp/config/$$file; \
  315.           done; \
  316.           cd ..; \
  317.         else \
  318. !         ln $$file ../tmp/config >/dev/null 2>&1 \
  319.           || cp $$file ../tmp/config; \
  320.         fi; \
  321.       done
  322.       cd objc; \
  323.       for file in *[0-9a-zA-Z+]; do \
  324. !       ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  325.       done
  326. !     ln .gdbinit tmp
  327.       mv tmp gcc-$(version)
  328.   # Get rid of everything we don't want in the distribution.
  329.       cd gcc-$(version); make -f Makefile.in extraclean
  330. --- 2054,2073 ----
  331.           mkdir ../tmp/config/$$file; \
  332.           cd $$file; \
  333.           for subfile in *[0-9a-zA-Z+]; do \
  334. !           $(HARDLINK) $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
  335.             || cp $$subfile ../../tmp/config/$$file; \
  336.           done; \
  337.           cd ..; \
  338.         else \
  339. !         $(HARDLINK) $$file ../tmp/config >/dev/null 2>&1 \
  340.           || cp $$file ../tmp/config; \
  341.         fi; \
  342.       done
  343.       cd objc; \
  344.       for file in *[0-9a-zA-Z+]; do \
  345. !       $(HARDLINK) $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  346.       done
  347. !     $(HARDLINK) .gdbinit tmp
  348.       mv tmp gcc-$(version)
  349.   # Get rid of everything we don't want in the distribution.
  350.       cd gcc-$(version); make -f Makefile.in extraclean
  351. ***************
  352. *** 2074,2090 ****
  353.   # in the intended test directory to make it a suitable test directory.
  354.   # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  355.   maketest:
  356. !     ln -s $(DIR)/*.[chy] .
  357. !     ln -s $(DIR)/configure .
  358. !     ln -s $(DIR)/*.def .
  359.       -rm -f =*
  360. !     ln -s $(DIR)/.gdbinit .
  361. !     ln -s $(DIR)/$(FIXINCLUDES) .
  362. !     -ln -s $(DIR)/bison.simple .
  363. !     ln -s $(DIR)/config .
  364. !     ln -s $(DIR)/move-if-change .
  365.   # The then and else were swapped to avoid a problem on Ultrix.
  366. !     if [ ! -f Makefile ] ; then ln -s $(DIR)/Makefile .; else false; fi
  367.       -rm tm.h aux-output.c config.h md
  368.       make clean
  369.   # You must then run config to set up for compilation.
  370. --- 2086,2102 ----
  371.   # in the intended test directory to make it a suitable test directory.
  372.   # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  373.   maketest:
  374. !     cp $(DIR)/*.[chy] .
  375. !     cp $(DIR)/configure .
  376. !     cp $(DIR)/*.def .
  377.       -rm -f =*
  378. !     cp $(DIR)/.gdbinit .
  379. !     cp $(DIR)/$(FIXINCLUDES) .
  380. !     -cp $(DIR)/bison.simple .
  381. !     cp $(DIR)/config .
  382. !     cp $(DIR)/move-if-change .
  383.   # The then and else were swapped to avoid a problem on Ultrix.
  384. !     if [ ! -f Makefile ] ; then cp $(DIR)/Makefile .; else false; fi
  385.       -rm tm.h aux-output.c config.h md
  386.       make clean
  387.   # You must then run config to set up for compilation.
  388. ***************
  389. *** 2100,2116 ****
  390.   # To prevent `make install' from compiling alloca.o and then relinking cc1
  391.   # because alloca.o is newer, we permit these recursive makes to compile
  392.   # alloca.o.  Then cc1 is newer, so it won't have to be relinked.
  393. !     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  394.       $(MAKE) stage2
  395. !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  396.   
  397.   bootstrap2: force
  398. !     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  399.       $(MAKE) stage2
  400. !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  401.   
  402.   bootstrap3: force
  403. !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  404.   
  405.   # Compare the object files in the current directory with those in the
  406.   # stage2 directory.
  407. --- 2112,2128 ----
  408.   # To prevent `make install' from compiling alloca.o and then relinking cc1
  409.   # because alloca.o is newer, we permit these recursive makes to compile
  410.   # alloca.o.  Then cc1 is newer, so it won't have to be relinked.
  411. !     $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  412.       $(MAKE) stage2
  413. !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  414.   
  415.   bootstrap2: force
  416. !     $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  417.       $(MAKE) stage2
  418. !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  419.   
  420.   bootstrap3: force
  421. !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  422.   
  423.   # Compare the object files in the current directory with those in the
  424.   # stage2 directory.
  425. ***************
  426. *** 2134,2161 ****
  427.       -rm -f tmp-foo*
  428.   
  429.   # Copy the object files from a particular stage into a subdirectory.
  430. ! stage1: force
  431.       -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  432.       -mv $(STAGESTUFF) stage1
  433.       -rm -f stage1/libgcc.a
  434.       -cp libgcc.a stage1
  435.       -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
  436.   
  437. ! stage2: force
  438.       -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  439.       -mv $(STAGESTUFF) stage2
  440.       -rm -f stage2/libgcc.a
  441.       -cp libgcc.a stage2
  442.       -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
  443.   
  444. ! stage3: force
  445.       -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  446.       -mv $(STAGESTUFF) stage3
  447.       -rm -f stage3/libgcc.a
  448.       -cp libgcc.a stage3
  449.       -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
  450.   
  451. ! stage4: force
  452.       -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  453.       -mv $(STAGESTUFF) stage4
  454.       -rm -f stage4/libgcc.a
  455. --- 2146,2173 ----
  456.       -rm -f tmp-foo*
  457.   
  458.   # Copy the object files from a particular stage into a subdirectory.
  459. ! stage1: force $(EXTRA_STAGE1_TARGETS)
  460.       -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  461.       -mv $(STAGESTUFF) stage1
  462.       -rm -f stage1/libgcc.a
  463.       -cp libgcc.a stage1
  464.       -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
  465.   
  466. ! stage2: force $(EXTRA_STAGE2_TARGETS)
  467.       -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  468.       -mv $(STAGESTUFF) stage2
  469.       -rm -f stage2/libgcc.a
  470.       -cp libgcc.a stage2
  471.       -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
  472.   
  473. ! stage3: force $(EXTRA_STAGE3_TARGETS)
  474.       -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  475.       -mv $(STAGESTUFF) stage3
  476.       -rm -f stage3/libgcc.a
  477.       -cp libgcc.a stage3
  478.       -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
  479.   
  480. ! stage4: force $(EXTRA_STAGE4_TARGETS)
  481.       -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  482.       -mv $(STAGESTUFF) stage4
  483.       -rm -f stage4/libgcc.a
  484. diff -rc --new-file gcc-2.5.7-fsf/c-parse.c gcc-2.5.7-amiga/c-parse.c
  485. *** gcc-2.5.7-fsf/c-parse.c    Tue Nov 23 23:43:40 1993
  486. --- gcc-2.5.7-amiga/c-parse.c    Sun Dec 12 17:46:43 1993
  487. ***************
  488. *** 1,5 ****
  489.   
  490. ! /*  A Bison parser, made from c-parse.y  */
  491.   
  492.   #define    IDENTIFIER    258
  493.   #define    TYPENAME    259
  494. --- 1,8 ----
  495.   
  496. ! /*  A Bison parser, made from c-parse.y with Bison version GNU Bison version 1.22
  497. !   */
  498. ! #define YYBISON 1  /* Identify Bison output.  */
  499.   
  500.   #define    IDENTIFIER    258
  501.   #define    TYPENAME    259
  502. ***************
  503. *** 143,151 ****
  504. --- 146,156 ----
  505.   
  506.   #include <stdio.h>
  507.   
  508. + #ifndef __cplusplus
  509.   #ifndef __STDC__
  510.   #define const
  511.   #endif
  512. + #endif
  513.   
  514.   
  515.   
  516. ***************
  517. *** 190,196 ****
  518.       70,    71,    72,    73,    74,    75,    76
  519.   };
  520.   
  521. ! static const short yyrline[] = {     0,
  522.      218,   222,   235,   237,   237,   238,   240,   242,   243,   253,
  523.      259,   261,   263,   265,   267,   268,   269,   274,   280,   282,
  524.      283,   285,   290,   292,   293,   295,   300,   302,   303,   307,
  525. --- 195,363 ----
  526.       70,    71,    72,    73,    74,    75,    76
  527.   };
  528.   
  529. ! #if YYDEBUG != 0
  530. ! static const short yyprhs[] = {     0,
  531. !      0,     1,     3,     4,     7,     8,    12,    14,    16,    22,
  532. !     26,    31,    36,    39,    42,    45,    48,    50,    51,    52,
  533. !     60,    65,    66,    67,    75,    80,    81,    82,    89,    93,
  534. !     95,    97,    99,   101,   103,   105,   107,   109,   111,   113,
  535. !    114,   116,   118,   122,   124,   127,   128,   132,   135,   138,
  536. !    141,   146,   149,   154,   157,   160,   162,   167,   168,   176,
  537. !    178,   182,   186,   190,   194,   198,   202,   206,   210,   214,
  538. !    218,   222,   226,   230,   234,   240,   244,   248,   250,   252,
  539. !    254,   258,   262,   263,   268,   273,   278,   282,   286,   289,
  540. !    292,   294,   297,   298,   300,   303,   307,   309,   311,   314,
  541. !    317,   322,   327,   330,   333,   337,   339,   341,   344,   347,
  542. !    348,   353,   358,   362,   366,   369,   372,   375,   379,   380,
  543. !    383,   386,   388,   390,   393,   396,   399,   403,   404,   407,
  544. !    409,   411,   413,   418,   423,   425,   427,   429,   431,   435,
  545. !    437,   441,   442,   447,   448,   455,   459,   460,   467,   471,
  546. !    472,   479,   481,   485,   487,   489,   494,   499,   508,   510,
  547. !    511,   516,   518,   519,   522,   524,   528,   530,   531,   536,
  548. !    538,   539,   548,   549,   556,   557,   562,   563,   569,   570,
  549. !    574,   575,   579,   581,   583,   587,   591,   596,   600,   604,
  550. !    606,   610,   615,   619,   623,   625,   629,   633,   637,   642,
  551. !    646,   648,   649,   656,   661,   664,   665,   672,   677,   680,
  552. !    681,   689,   690,   697,   700,   701,   703,   704,   706,   708,
  553. !    711,   712,   716,   719,   723,   725,   729,   731,   733,   735,
  554. !    739,   744,   751,   757,   759,   763,   765,   769,   772,   775,
  555. !    776,   778,   780,   783,   784,   787,   791,   795,   798,   802,
  556. !    807,   811,   814,   818,   821,   823,   826,   829,   830,   832,
  557. !    835,   836,   837,   839,   841,   844,   848,   850,   853,   856,
  558. !    863,   869,   875,   878,   881,   886,   887,   892,   893,   894,
  559. !    898,   903,   907,   909,   911,   913,   915,   918,   919,   924,
  560. !    926,   930,   931,   932,   940,   946,   949,   950,   951,   952,
  561. !    965,   966,   973,   976,   979,   982,   986,   993,  1002,  1013,
  562. !   1026,  1030,  1035,  1037,  1039,  1040,  1047,  1051,  1057,  1060,
  563. !   1063,  1064,  1066,  1067,  1069,  1070,  1072,  1074,  1078,  1083,
  564. !   1085,  1089,  1090,  1093,  1096,  1097,  1102,  1105,  1106,  1108,
  565. !   1110,  1114,  1116,  1120,  1123,  1126,  1129,  1132,  1135,  1136,
  566. !   1139,  1141,  1144,  1146,  1150,  1152
  567. ! };
  568. ! static const short yyrhs[] = {    -1,
  569. !     86,     0,     0,    87,    89,     0,     0,    86,    88,    89,
  570. !      0,    91,     0,    90,     0,    27,    60,   100,    77,    78,
  571. !      0,   117,   127,    78,     0,   121,   117,   127,    78,     0,
  572. !    119,   117,   126,    78,     0,   121,    78,     0,   119,    78,
  573. !      0,     1,    78,     0,     1,    79,     0,    78,     0,     0,
  574. !      0,   119,   117,   150,    92,   111,    93,   180,     0,   119,
  575. !    117,   150,     1,     0,     0,     0,   121,   117,   153,    94,
  576. !    111,    95,   180,     0,   121,   117,   153,     1,     0,     0,
  577. !      0,   117,   153,    96,   111,    97,   180,     0,   117,   153,
  578. !      1,     0,     3,     0,     4,     0,    44,     0,    50,     0,
  579. !     49,     0,    55,     0,    56,     0,    80,     0,    81,     0,
  580. !    102,     0,     0,   102,     0,   107,     0,   102,    82,   107,
  581. !      0,   108,     0,    51,   105,     0,     0,    32,   104,   105,
  582. !      0,    99,   105,     0,    41,    98,     0,    11,   103,     0,
  583. !     11,    60,   168,    77,     0,    29,   103,     0,    29,    60,
  584. !    168,    77,     0,    34,   105,     0,    35,   105,     0,   103,
  585. !      0,    60,   168,    77,   105,     0,     0,    60,   168,    77,
  586. !     83,   106,   138,    79,     0,   105,     0,   107,    49,   107,
  587. !      0,   107,    50,   107,     0,   107,    51,   107,     0,   107,
  588. !     52,   107,     0,   107,    53,   107,     0,   107,    47,   107,
  589. !      0,   107,    48,   107,     0,   107,    46,   107,     0,   107,
  590. !     45,   107,     0,   107,    44,   107,     0,   107,    42,   107,
  591. !      0,   107,    43,   107,     0,   107,    41,   107,     0,   107,
  592. !     40,   107,     0,   107,    38,   204,    39,   107,     0,   107,
  593. !     37,   107,     0,   107,    36,   107,     0,     3,     0,     8,
  594. !      0,   110,     0,    60,   100,    77,     0,    60,     1,    77,
  595. !      0,     0,    60,   109,   181,    77,     0,   108,    60,   101,
  596. !     77,     0,   108,    61,   100,    84,     0,   108,    59,    98,
  597. !      0,   108,    58,    98,     0,   108,    55,     0,   108,    56,
  598. !      0,     9,     0,   110,     9,     0,     0,   113,     0,   113,
  599. !     10,     0,   186,   187,   114,     0,   112,     0,   175,     0,
  600. !    113,   112,     0,   112,   175,     0,   119,   117,   126,    78,
  601. !      0,   121,   117,   127,    78,     0,   119,    78,     0,   121,
  602. !     78,     0,   186,   187,   118,     0,   115,     0,   175,     0,
  603. !    116,   115,     0,   115,   175,     0,     0,   119,   117,   126,
  604. !     78,     0,   121,   117,   127,    78,     0,   119,   117,   146,
  605. !      0,   121,   117,   148,     0,   119,    78,     0,   121,    78,
  606. !      0,   124,   120,     0,   121,   124,   120,     0,     0,   120,
  607. !    125,     0,   120,     5,     0,     7,     0,     5,     0,   121,
  608. !      7,     0,   121,     5,     0,   124,   123,     0,   170,   124,
  609. !    123,     0,     0,   123,   125,     0,     6,     0,   154,     0,
  610. !      4,     0,    28,    60,   100,    77,     0,    28,    60,   168,
  611. !     77,     0,     6,     0,     7,     0,   154,     0,   129,     0,
  612. !    126,    82,   129,     0,   131,     0,   127,    82,   129,     0,
  613. !      0,    27,    60,   110,    77,     0,     0,   150,   128,   133,
  614. !     37,   130,   136,     0,   150,   128,   133,     0,     0,   153,
  615. !    128,   133,    37,   132,   136,     0,   153,   128,   133,     0,
  616. !      0,    31,    60,    60,   134,    77,    77,     0,   135,     0,
  617. !    134,    82,   135,     0,     3,     0,     7,     0,     3,    60,
  618. !      3,    77,     0,     3,    60,     8,    77,     0,     3,    60,
  619. !      3,    82,     8,    82,     8,    77,     0,   107,     0,     0,
  620. !     83,   137,   138,    79,     0,     1,     0,     0,   139,   159,
  621. !      0,   140,     0,   139,    82,   140,     0,   107,     0,     0,
  622. !     83,   141,   138,    79,     0,     1,     0,     0,    61,   107,
  623. !     10,   107,    84,    37,   142,   140,     0,     0,    61,   107,
  624. !     84,    37,   143,   140,     0,     0,    98,    39,   144,   140,
  625. !      0,     0,    59,    98,    37,   145,   140,     0,     0,   150,
  626. !    147,   181,     0,     0,   153,   149,   181,     0,   151,     0,
  627. !    153,     0,    60,   151,    77,     0,   151,    60,   216,     0,
  628. !    151,    61,   100,    84,     0,   151,    61,    84,     0,    51,
  629. !    171,   151,     0,     4,     0,   152,    60,   216,     0,   152,
  630. !     61,   100,    84,     0,   152,    61,    84,     0,    51,   171,
  631. !    152,     0,     4,     0,   153,    60,   216,     0,    60,   153,
  632. !     77,     0,    51,   171,   153,     0,   153,    61,   100,    84,
  633. !      0,   153,    61,    84,     0,     3,     0,     0,    13,    98,
  634. !     83,   155,   161,    79,     0,    13,    83,   161,    79,     0,
  635. !     13,    98,     0,     0,    14,    98,    83,   156,   161,    79,
  636. !      0,    14,    83,   161,    79,     0,    14,    98,     0,     0,
  637. !     12,    98,    83,   157,   166,   160,    79,     0,     0,    12,
  638. !     83,   158,   166,   160,    79,     0,    12,    98,     0,     0,
  639. !     82,     0,     0,    82,     0,   162,     0,   162,   163,     0,
  640. !      0,   162,   163,    78,     0,   162,    78,     0,   122,   117,
  641. !    164,     0,   122,     0,   170,   117,   164,     0,   170,     0,
  642. !      1,     0,   165,     0,   164,    82,   165,     0,   186,   187,
  643. !    150,   133,     0,   186,   187,   150,    39,   107,   133,     0,
  644. !    186,   187,    39,   107,   133,     0,   167,     0,   166,    82,
  645. !    167,     0,    98,     0,    98,    37,   107,     0,   122,   169,
  646. !      0,   170,   169,     0,     0,   172,     0,     7,     0,   170,
  647. !      7,     0,     0,   171,     7,     0,    60,   172,    77,     0,
  648. !     51,   171,   172,     0,    51,   171,     0,   172,    60,   209,
  649. !      0,   172,    61,   100,    84,     0,   172,    61,    84,     0,
  650. !     60,   209,     0,    61,   100,    84,     0,    61,    84,     0,
  651. !    189,     0,   173,   189,     0,   173,   175,     0,     0,   173,
  652. !      0,     1,    78,     0,     0,     0,   178,     0,   179,     0,
  653. !    178,   179,     0,    33,   220,    78,     0,   181,     0,     1,
  654. !    181,     0,    83,    79,     0,    83,   176,   177,   116,   174,
  655. !     79,     0,    83,   176,   177,     1,    79,     0,    83,   176,
  656. !    177,   173,    79,     0,   183,   188,     0,   183,     1,     0,
  657. !     15,    60,   100,    77,     0,     0,    18,   185,   188,    17,
  658. !      0,     0,     0,   186,   187,   191,     0,   186,   187,   202,
  659. !    188,     0,   186,   187,   190,     0,   191,     0,   202,     0,
  660. !    181,     0,   199,     0,   100,    78,     0,     0,   182,    16,
  661. !    192,   188,     0,   182,     0,   182,    16,     1,     0,     0,
  662. !      0,    17,   193,    60,   100,    77,   194,   188,     0,   184,
  663. !     60,   100,    77,    78,     0,   184,     1,     0,     0,     0,
  664. !      0,    19,    60,   204,    78,   195,   204,    78,   196,   204,
  665. !     77,   197,   188,     0,     0,    20,    60,   100,    77,   198,
  666. !    188,     0,    23,    78,     0,    24,    78,     0,    25,    78,
  667. !      0,    25,   100,    78,     0,    27,   203,    60,   100,    77,
  668. !     78,     0,    27,   203,    60,   100,    39,   205,    77,    78,
  669. !      0,    27,   203,    60,   100,    39,   205,    39,   205,    77,
  670. !     78,     0,    27,   203,    60,   100,    39,   205,    39,   205,
  671. !     39,   208,    77,    78,     0,    26,    98,    78,     0,    26,
  672. !     51,   100,    78,     0,    78,     0,   200,     0,     0,    19,
  673. !     60,   108,    77,   201,   188,     0,    21,   107,    39,     0,
  674. !     21,   107,    10,   107,    39,     0,    22,    39,     0,    98,
  675. !     39,     0,     0,     7,     0,     0,   100,     0,     0,   206,
  676. !      0,   207,     0,   206,    82,   207,     0,     9,    60,   100,
  677. !     77,     0,   110,     0,   208,    82,   110,     0,     0,   210,
  678. !    211,     0,   213,    77,     0,     0,   214,    78,   212,   211,
  679. !      0,     1,    77,     0,     0,    10,     0,   214,     0,   214,
  680. !     82,    10,     0,   215,     0,   214,    82,   215,     0,   119,
  681. !    152,     0,   119,   153,     0,   119,   169,     0,   121,   153,
  682. !      0,   121,   169,     0,     0,   217,   218,     0,   211,     0,
  683. !    219,    77,     0,     3,     0,   219,    82,     3,     0,    98,
  684. !      0,   220,    82,    98,     0
  685. ! };
  686. ! #endif
  687. ! #if YYDEBUG != 0
  688. ! static const short yyrline[] = { 0,
  689.      218,   222,   235,   237,   237,   238,   240,   242,   243,   253,
  690.      259,   261,   263,   265,   267,   268,   269,   274,   280,   282,
  691.      283,   285,   290,   292,   293,   295,   300,   302,   303,   307,
  692. ***************
  693. *** 206,245 ****
  694.      764,   775,   779,   781,   784,   797,   800,   804,   806,   814,
  695.      815,   816,   820,   822,   828,   829,   830,   833,   835,   838,
  696.      840,   843,   846,   852,   859,   862,   868,   875,   878,   885,
  697. !    888,   893,   895,   900,   906,   907,   917,   928,   948,   950,
  698. !    955,   962,   967,   971,   974,   976,   981,   984,   986,   988,
  699. !    992,   995,   995,   998,   998,  1001,  1001,  1004,  1006,  1023,
  700. !   1027,  1044,  1051,  1053,  1058,  1061,  1066,  1068,  1070,  1072,
  701. !   1080,  1086,  1088,  1090,  1092,  1098,  1104,  1106,  1108,  1110,
  702. !   1112,  1115,  1120,  1124,  1127,  1129,  1131,  1133,  1136,  1138,
  703. !   1141,  1144,  1147,  1150,  1154,  1156,  1159,  1161,  1165,  1168,
  704. !   1173,  1175,  1177,  1191,  1197,  1202,  1207,  1212,  1216,  1218,
  705. !   1222,  1226,  1230,  1240,  1242,  1247,  1250,  1254,  1257,  1261,
  706. !   1264,  1267,  1270,  1274,  1277,  1281,  1285,  1287,  1289,  1291,
  707. !   1293,  1295,  1297,  1299,  1307,  1309,  1310,  1313,  1315,  1318,
  708. !   1321,  1332,  1334,  1339,  1341,  1344,  1358,  1361,  1364,  1366,
  709. !   1371,  1376,  1384,  1389,  1392,  1405,  1413,  1417,  1421,  1425,
  710. !   1431,  1435,  1440,  1442,  1453,  1456,  1457,  1474,  1479,  1482,
  711. !   1493,  1495,  1505,  1515,  1516,  1524,  1527,  1539,  1543,  1560,
  712. !   1567,  1576,  1578,  1583,  1588,  1592,  1596,  1607,  1614,  1621,
  713. !   1628,  1639,  1643,  1646,  1651,  1674,  1705,  1730,  1759,  1774,
  714. !   1785,  1789,  1793,  1796,  1801,  1803,  1806,  1808,  1812,  1817,
  715. !   1820,  1826,  1831,  1836,  1838,  1847,  1848,  1854,  1856,  1861,
  716. !   1863,  1867,  1870,  1876,  1879,  1881,  1883,  1885,  1892,  1897,
  717. !   1902,  1904,  1913,  1916,  1921,  1924
  718.   };
  719.   
  720. ! static const char * const yytname[] = {     0,
  721. ! "error","$illegal.","IDENTIFIER","TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS",
  722. ! "SIZEOF","ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH",
  723. ! "CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ALIGN",
  724. ! "ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","ASSIGN","'='","'?'","':'","OROR",
  725. ! "ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE","LSHIFT","RSHIFT","'+'","'-'",
  726. ! "'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS","HYPERUNARY","POINTSAT","'.'","'('",
  727. ! "'['","INTERFACE","IMPLEMENTATION","END","SELECTOR","DEFS","ENCODE","CLASSNAME","PUBLIC","PRIVATE",
  728. ! "PROTECTED","PROTOCOL","OBJECTNAME","CLASS","ALIAS","OBJC_STRING","')'","';'","'}'","'~'",
  729. ! "'!'","','","'{'","']'","program"
  730.   };
  731.   
  732.   static const short yyr1[] = {     0,
  733.       85,    85,    87,    86,    88,    86,    89,    89,    89,    90,
  734. --- 373,433 ----
  735.      764,   775,   779,   781,   784,   797,   800,   804,   806,   814,
  736.      815,   816,   820,   822,   828,   829,   830,   833,   835,   838,
  737.      840,   843,   846,   852,   859,   862,   868,   875,   878,   885,
  738. !    888,   893,   895,   900,   914,   915,   925,   936,   956,   958,
  739. !    963,   970,   975,   979,   982,   984,   989,   992,   994,   996,
  740. !   1000,  1003,  1003,  1006,  1006,  1009,  1009,  1012,  1014,  1031,
  741. !   1035,  1052,  1059,  1061,  1066,  1069,  1074,  1076,  1078,  1080,
  742. !   1088,  1094,  1096,  1098,  1100,  1106,  1112,  1114,  1116,  1118,
  743. !   1120,  1123,  1128,  1132,  1135,  1137,  1139,  1141,  1144,  1146,
  744. !   1149,  1152,  1155,  1158,  1162,  1164,  1167,  1169,  1173,  1176,
  745. !   1181,  1183,  1185,  1199,  1205,  1210,  1215,  1220,  1224,  1226,
  746. !   1230,  1234,  1238,  1248,  1250,  1255,  1258,  1262,  1265,  1269,
  747. !   1272,  1275,  1278,  1282,  1285,  1289,  1293,  1295,  1297,  1299,
  748. !   1301,  1303,  1305,  1307,  1315,  1317,  1318,  1321,  1323,  1326,
  749. !   1329,  1340,  1342,  1347,  1349,  1352,  1366,  1369,  1372,  1374,
  750. !   1379,  1384,  1392,  1397,  1400,  1413,  1421,  1425,  1429,  1433,
  751. !   1439,  1443,  1448,  1450,  1461,  1464,  1465,  1482,  1487,  1490,
  752. !   1501,  1503,  1513,  1523,  1524,  1532,  1535,  1547,  1551,  1568,
  753. !   1575,  1584,  1586,  1591,  1596,  1600,  1604,  1615,  1622,  1629,
  754. !   1636,  1647,  1651,  1654,  1659,  1682,  1713,  1738,  1767,  1782,
  755. !   1793,  1797,  1801,  1804,  1809,  1811,  1814,  1816,  1820,  1825,
  756. !   1828,  1834,  1839,  1844,  1846,  1855,  1856,  1862,  1864,  1869,
  757. !   1871,  1875,  1878,  1884,  1887,  1889,  1891,  1893,  1900,  1905,
  758. !   1910,  1912,  1921,  1924,  1929,  1932
  759.   };
  760.   
  761. ! static const char * const yytname[] = {   "$","error","$illegal.","IDENTIFIER",
  762. ! "TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF",
  763. ! "ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT",
  764. ! "BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ALIGN",
  765. ! "ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","ASSIGN","'='","'?'","':'",
  766. ! "OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE","LSHIFT","RSHIFT",
  767. ! "'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS","HYPERUNARY","POINTSAT",
  768. ! "'.'","'('","'['","INTERFACE","IMPLEMENTATION","END","SELECTOR","DEFS","ENCODE",
  769. ! "CLASSNAME","PUBLIC","PRIVATE","PROTECTED","PROTOCOL","OBJECTNAME","CLASS","ALIAS",
  770. ! "OBJC_STRING","')'","';'","'}'","'~'","'!'","','","'{'","']'","program","extdefs",
  771. ! "@1","@2","extdef","datadef","fndef","@3","@4","@5","@6","@7","@8","identifier",
  772. ! "unop","expr","exprlist","nonnull_exprlist","unary_expr","@9","cast_expr","@10",
  773. ! "expr_no_commas","primary","@11","string","xdecls","lineno_datadecl","datadecls",
  774. ! "datadecl","lineno_decl","decls","setspecs","decl","typed_declspecs","reserved_declspecs",
  775. ! "declmods","typed_typespecs","reserved_typespecquals","typespec","typespecqual_reserved",
  776. ! "initdecls","notype_initdecls","maybeasm","initdcl","@12","notype_initdcl","@13",
  777. ! "maybe_attribute","attribute_list","attrib","init","@14","initlist_maybe_comma",
  778. ! "initlist1","initelt","@15","@16","@17","@18","@19","nested_function","@20",
  779. ! "notype_nested_function","@21","declarator","after_type_declarator","parm_declarator",
  780. ! "notype_declarator","structsp","@22","@23","@24","@25","maybecomma","maybecomma_warn",
  781. ! "component_decl_list","component_decl_list2","component_decl","components","component_declarator",
  782. ! "enumlist","enumerator","typename","absdcl","nonempty_type_quals","type_quals",
  783. ! "absdcl1","stmts","xstmts","errstmt","pushlevel","maybe_label_decls","label_decls",
  784. ! "label_decl","compstmt_or_error","compstmt","simple_if","if_prefix","do_stmt_start",
  785. ! "@26","save_filename","save_lineno","lineno_labeled_stmt","lineno_stmt_or_label",
  786. ! "stmt_or_label","stmt","@27","@28","@29","@30","@31","@32","@33","all_iter_stmt",
  787. ! "all_iter_stmt_simple","@34","label","maybe_type_qual","xexpr","asm_operands",
  788. ! "nonnull_asm_operands","asm_operand","asm_clobbers","parmlist","@35","parmlist_1",
  789. ! "@36","parmlist_2","parms","parm","parmlist_or_identifiers","@37","parmlist_or_identifiers_1",
  790. ! "identifiers","identifiers_or_typenames",""
  791.   };
  792. + #endif
  793.   
  794.   static const short yyr1[] = {     0,
  795.       85,    85,    87,    86,    88,    86,    89,    89,    89,    90,
  796. ***************
  797. *** 896,908 ****
  798.       48,    49,    50,    51,    52,    53,    43,    44,    45,    46,
  799.       47,    48,    49,    50,    51,    52,    53
  800.   };
  801. - #define YYPURE 1
  802.   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  803. ! #line 3 "bison.simple"
  804.   
  805.   /* Skeleton output parser for bison,
  806. !    Copyright (C) 1984 Bob Corbett and Richard Stallman
  807.   
  808.      This program is free software; you can redistribute it and/or modify
  809.      it under the terms of the GNU General Public License as published by
  810. --- 1084,1094 ----
  811.       48,    49,    50,    51,    52,    53,    43,    44,    45,    46,
  812.       47,    48,    49,    50,    51,    52,    53
  813.   };
  814.   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  815. ! #line 3 "/usr/lib/bison.simple"
  816.   
  817.   /* Skeleton output parser for bison,
  818. !    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  819.   
  820.      This program is free software; you can redistribute it and/or modify
  821.      it under the terms of the GNU General Public License as published by
  822. ***************
  823. *** 919,927 ****
  824.      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  825.   
  826.   
  827. ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
  828.   #include <alloca.h>
  829. ! #endif
  830.   
  831.   /* This is the parser code that is written into each bison parser
  832.     when the %semantic_parser declaration is not specified in the grammar.
  833. --- 1105,1138 ----
  834.      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  835.   
  836.   
  837. ! #ifndef alloca
  838. ! #ifdef __GNUC__
  839. ! #define alloca __builtin_alloca
  840. ! #else /* not GNU C.  */
  841. ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
  842.   #include <alloca.h>
  843. ! #else /* not sparc */
  844. ! #if defined (MSDOS) && !defined (__TURBOC__)
  845. ! #include <malloc.h>
  846. ! #else /* not MSDOS, or __TURBOC__ */
  847. ! #if defined(_AIX)
  848. ! #include <malloc.h>
  849. !  #pragma alloca
  850. ! #else /* not MSDOS, __TURBOC__, or _AIX */
  851. ! #ifdef __hpux
  852. ! #ifdef __cplusplus
  853. ! extern "C" {
  854. ! void *alloca (unsigned int);
  855. ! };
  856. ! #else /* not __cplusplus */
  857. ! void *alloca ();
  858. ! #endif /* not __cplusplus */
  859. ! #endif /* __hpux */
  860. ! #endif /* not _AIX */
  861. ! #endif /* not MSDOS, or __TURBOC__ */
  862. ! #endif /* not sparc.  */
  863. ! #endif /* not GNU C.  */
  864. ! #endif /* alloca not defined.  */
  865.   
  866.   /* This is the parser code that is written into each bison parser
  867.     when the %semantic_parser declaration is not specified in the grammar.
  868. ***************
  869. *** 936,970 ****
  870.   #define yyclearin    (yychar = YYEMPTY)
  871.   #define YYEMPTY        -2
  872.   #define YYEOF        0
  873. - #define YYFAIL        goto yyerrlab;
  874.   #define YYACCEPT    return(0)
  875.   #define YYABORT     return(1)
  876. ! #define YYERROR        goto yyerrlab
  877.   
  878.   #define YYTERROR    1
  879.   #define YYERRCODE    256
  880.   
  881. ! #ifndef YYIMPURE
  882.   #define YYLEX        yylex()
  883.   #endif
  884.   
  885. ! #ifndef YYPURE
  886.   #define YYLEX        yylex(&yylval, &yylloc)
  887.   #endif
  888.   
  889.   /* If nonreentrant, generate the variables here */
  890.   
  891. ! #ifndef YYIMPURE
  892.   
  893.   int    yychar;            /*  the lookahead symbol        */
  894.   YYSTYPE    yylval;            /*  the semantic value of the        */
  895.                   /*  lookahead symbol            */
  896.   
  897.   YYLTYPE yylloc;            /*  location data for the lookahead    */
  898.                   /*  symbol                */
  899.   
  900.   int yynerrs;            /*  number of parse errors so far       */
  901. ! #endif  /* YYIMPURE */
  902.   
  903.   #if YYDEBUG != 0
  904.   int yydebug;            /*  nonzero means print parse trace    */
  905. --- 1147,1203 ----
  906.   #define yyclearin    (yychar = YYEMPTY)
  907.   #define YYEMPTY        -2
  908.   #define YYEOF        0
  909.   #define YYACCEPT    return(0)
  910.   #define YYABORT     return(1)
  911. ! #define YYERROR        goto yyerrlab1
  912. ! /* Like YYERROR except do call yyerror.
  913. !    This remains here temporarily to ease the
  914. !    transition to the new meaning of YYERROR, for GCC.
  915. !    Once GCC version 2 has supplanted version 1, this can go.  */
  916. ! #define YYFAIL        goto yyerrlab
  917. ! #define YYRECOVERING()  (!!yyerrstatus)
  918. ! #define YYBACKUP(token, value) \
  919. ! do                                \
  920. !   if (yychar == YYEMPTY && yylen == 1)                \
  921. !     { yychar = (token), yylval = (value);            \
  922. !       yychar1 = YYTRANSLATE (yychar);                \
  923. !       YYPOPSTACK;                        \
  924. !       goto yybackup;                        \
  925. !     }                                \
  926. !   else                                \
  927. !     { yyerror ("syntax error: cannot back up"); YYERROR; }    \
  928. ! while (0)
  929.   
  930.   #define YYTERROR    1
  931.   #define YYERRCODE    256
  932.   
  933. ! #ifndef YYPURE
  934.   #define YYLEX        yylex()
  935.   #endif
  936.   
  937. ! #ifdef YYPURE
  938. ! #ifdef YYLSP_NEEDED
  939.   #define YYLEX        yylex(&yylval, &yylloc)
  940. + #else
  941. + #define YYLEX        yylex(&yylval)
  942. + #endif
  943.   #endif
  944.   
  945.   /* If nonreentrant, generate the variables here */
  946.   
  947. ! #ifndef YYPURE
  948.   
  949.   int    yychar;            /*  the lookahead symbol        */
  950.   YYSTYPE    yylval;            /*  the semantic value of the        */
  951.                   /*  lookahead symbol            */
  952.   
  953. + #ifdef YYLSP_NEEDED
  954.   YYLTYPE yylloc;            /*  location data for the lookahead    */
  955.                   /*  symbol                */
  956. + #endif
  957.   
  958.   int yynerrs;            /*  number of parse errors so far       */
  959. ! #endif  /* not YYPURE */
  960.   
  961.   #if YYDEBUG != 0
  962.   int yydebug;            /*  nonzero means print parse trace    */
  963. ***************
  964. *** 972,992 ****
  965.      from coexisting.  */
  966.   #endif
  967.   
  968. ! /*  YYMAXDEPTH indicates the initial size of the parser's stacks    */
  969.   
  970. ! #ifndef    YYMAXDEPTH
  971. ! #define YYMAXDEPTH 200
  972.   #endif
  973.   
  974. ! /*  YYMAXLIMIT is the maximum size the stacks can grow to
  975.       (effective only if the built-in stack extension method is used).  */
  976.   
  977. ! #ifndef YYMAXLIMIT
  978. ! #define YYMAXLIMIT 10000
  979.   #endif
  980.   
  981.   
  982. ! #line 90 "bison.simple"
  983.   int
  984.   yyparse()
  985.   {
  986. --- 1205,1272 ----
  987.      from coexisting.  */
  988.   #endif
  989.   
  990. ! /*  YYINITDEPTH indicates the initial size of the parser's stacks    */
  991.   
  992. ! #ifndef    YYINITDEPTH
  993. ! #define YYINITDEPTH 200
  994.   #endif
  995.   
  996. ! /*  YYMAXDEPTH is the maximum size the stacks can grow to
  997.       (effective only if the built-in stack extension method is used).  */
  998.   
  999. ! #if YYMAXDEPTH == 0
  1000. ! #undef YYMAXDEPTH
  1001.   #endif
  1002.   
  1003. + #ifndef YYMAXDEPTH
  1004. + #define YYMAXDEPTH 10000
  1005. + #endif
  1006. + /* Prevent warning if -Wstrict-prototypes.  */
  1007. + #ifdef __GNUC__
  1008. + int yyparse (void);
  1009. + #endif
  1010. + #if __GNUC__ > 1        /* GNU C and GNU C++ define this.  */
  1011. + #define __yy_bcopy(FROM,TO,COUNT)    __builtin_memcpy(TO,FROM,COUNT)
  1012. + #else                /* not GNU C or C++ */
  1013. + #ifndef __cplusplus
  1014. + /* This is the most reliable way to avoid incompatibilities
  1015. +    in available built-in functions on various systems.  */
  1016. + static void
  1017. + __yy_bcopy (from, to, count)
  1018. +      char *from;
  1019. +      char *to;
  1020. +      int count;
  1021. + {
  1022. +   register char *f = from;
  1023. +   register char *t = to;
  1024. +   register int i = count;
  1025.   
  1026. !   while (i-- > 0)
  1027. !     *t++ = *f++;
  1028. ! }
  1029. ! #else /* __cplusplus */
  1030. ! /* This is the most reliable way to avoid incompatibilities
  1031. !    in available built-in functions on various systems.  */
  1032. ! static void
  1033. ! __yy_bcopy (char *from, char *to, int count)
  1034. ! {
  1035. !   register char *f = from;
  1036. !   register char *t = to;
  1037. !   register int i = count;
  1038. !   while (i-- > 0)
  1039. !     *t++ = *f++;
  1040. ! }
  1041. ! #endif
  1042. ! #endif
  1043. ! #line 184 "/usr/lib/bison.simple"
  1044.   int
  1045.   yyparse()
  1046.   {
  1047. ***************
  1048. *** 994,1018 ****
  1049.     register int yyn;
  1050.     register short *yyssp;
  1051.     register YYSTYPE *yyvsp;
  1052. -   YYLTYPE *yylsp;
  1053.     int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  1054. !   int yychar1;        /*  lookahead token as an internal (translated) token number */
  1055.   
  1056. !   short    yyssa[YYMAXDEPTH];    /*  the state stack            */
  1057. !   YYSTYPE yyvsa[YYMAXDEPTH];    /*  the semantic value stack        */
  1058. !   YYLTYPE yylsa[YYMAXDEPTH];    /*  the location stack            */
  1059.   
  1060.     short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  1061.     YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  1062.     YYLTYPE *yyls = yylsa;
  1063.   
  1064. !   int yymaxdepth = YYMAXDEPTH;
  1065.   
  1066. ! #ifndef YYPURE
  1067.     int yychar;
  1068.     YYSTYPE yylval;
  1069. -   YYLTYPE yylloc;
  1070.     int yynerrs;
  1071.   #endif
  1072.   
  1073.     YYSTYPE yyval;        /*  the variable used to return        */
  1074. --- 1274,1307 ----
  1075.     register int yyn;
  1076.     register short *yyssp;
  1077.     register YYSTYPE *yyvsp;
  1078.     int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  1079. !   int yychar1 = 0;        /*  lookahead token as an internal (translated) token number */
  1080.   
  1081. !   short    yyssa[YYINITDEPTH];    /*  the state stack            */
  1082. !   YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  1083.   
  1084.     short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  1085.     YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  1086. + #ifdef YYLSP_NEEDED
  1087. +   YYLTYPE yylsa[YYINITDEPTH];    /*  the location stack            */
  1088.     YYLTYPE *yyls = yylsa;
  1089. +   YYLTYPE *yylsp;
  1090. + #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  1091. + #else
  1092. + #define YYPOPSTACK   (yyvsp--, yyssp--)
  1093. + #endif
  1094.   
  1095. !   int yystacksize = YYINITDEPTH;
  1096.   
  1097. ! #ifdef YYPURE
  1098.     int yychar;
  1099.     YYSTYPE yylval;
  1100.     int yynerrs;
  1101. + #ifdef YYLSP_NEEDED
  1102. +   YYLTYPE yylloc;
  1103. + #endif
  1104.   #endif
  1105.   
  1106.     YYSTYPE yyval;        /*  the variable used to return        */
  1107. ***************
  1108. *** 1033,1043 ****
  1109.   
  1110.     /* Initialize stack pointers.
  1111.        Waste one element of value and location stack
  1112. !      so that they stay on the same level as the state stack.  */
  1113.   
  1114.     yyssp = yyss - 1;
  1115.     yyvsp = yyvs;
  1116.     yylsp = yyls;
  1117.   
  1118.   /* Push a new state, which is found in  yystate  .  */
  1119.   /* In all cases, when you get here, the value and location stacks
  1120. --- 1322,1335 ----
  1121.   
  1122.     /* Initialize stack pointers.
  1123.        Waste one element of value and location stack
  1124. !      so that they stay on the same level as the state stack.
  1125. !      The wasted elements are never initialized.  */
  1126.   
  1127.     yyssp = yyss - 1;
  1128.     yyvsp = yyvs;
  1129. + #ifdef YYLSP_NEEDED
  1130.     yylsp = yyls;
  1131. + #endif
  1132.   
  1133.   /* Push a new state, which is found in  yystate  .  */
  1134.   /* In all cases, when you get here, the value and location stacks
  1135. ***************
  1136. *** 1046,1058 ****
  1137.   
  1138.     *++yyssp = yystate;
  1139.   
  1140. !   if (yyssp >= yyss + yymaxdepth - 1)
  1141.       {
  1142.         /* Give user a chance to reallocate the stack */
  1143.         /* Use copies of these so that the &'s don't force the real ones into memory. */
  1144.         YYSTYPE *yyvs1 = yyvs;
  1145. -       YYLTYPE *yyls1 = yyls;
  1146.         short *yyss1 = yyss;
  1147.   
  1148.         /* Get the current used size of the three stacks, in elements.  */
  1149.         int size = yyssp - yyss + 1;
  1150. --- 1338,1352 ----
  1151.   
  1152.     *++yyssp = yystate;
  1153.   
  1154. !   if (yyssp >= yyss + yystacksize - 1)
  1155.       {
  1156.         /* Give user a chance to reallocate the stack */
  1157.         /* Use copies of these so that the &'s don't force the real ones into memory. */
  1158.         YYSTYPE *yyvs1 = yyvs;
  1159.         short *yyss1 = yyss;
  1160. + #ifdef YYLSP_NEEDED
  1161. +       YYLTYPE *yyls1 = yyls;
  1162. + #endif
  1163.   
  1164.         /* Get the current used size of the three stacks, in elements.  */
  1165.         int size = yyssp - yyss + 1;
  1166. ***************
  1167. *** 1060,1086 ****
  1168.   #ifdef yyoverflow
  1169.         /* Each stack pointer address is followed by the size of
  1170.        the data in use in that stack, in bytes.  */
  1171.         yyoverflow("parser stack overflow",
  1172.            &yyss1, size * sizeof (*yyssp),
  1173.            &yyvs1, size * sizeof (*yyvsp),
  1174.            &yyls1, size * sizeof (*yylsp),
  1175. !          &yymaxdepth);
  1176.   
  1177. !       yyss = yyss1; yyvs = yyvs1; yyls = yyls1;
  1178.   #else /* no yyoverflow */
  1179.         /* Extend the stack our own way.  */
  1180. !       if (yymaxdepth >= YYMAXLIMIT)
  1181. !     yyerror("parser stack overflow");
  1182. !       yymaxdepth *= 2;
  1183. !       if (yymaxdepth > YYMAXLIMIT)
  1184. !     yymaxdepth = YYMAXLIMIT;
  1185. !       yyss = (short *) alloca (yymaxdepth * sizeof (*yyssp));
  1186. !       bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  1187. !       yyvs = (YYSTYPE *) alloca (yymaxdepth * sizeof (*yyvsp));
  1188. !       bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  1189.   #ifdef YYLSP_NEEDED
  1190. !       yyls = (YYLTYPE *) alloca (yymaxdepth * sizeof (*yylsp));
  1191. !       bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  1192.   #endif
  1193.   #endif /* no yyoverflow */
  1194.   
  1195. --- 1354,1395 ----
  1196.   #ifdef yyoverflow
  1197.         /* Each stack pointer address is followed by the size of
  1198.        the data in use in that stack, in bytes.  */
  1199. + #ifdef YYLSP_NEEDED
  1200. +       /* This used to be a conditional around just the two extra args,
  1201. +      but that might be undefined if yyoverflow is a macro.  */
  1202.         yyoverflow("parser stack overflow",
  1203.            &yyss1, size * sizeof (*yyssp),
  1204.            &yyvs1, size * sizeof (*yyvsp),
  1205.            &yyls1, size * sizeof (*yylsp),
  1206. !          &yystacksize);
  1207. ! #else
  1208. !       yyoverflow("parser stack overflow",
  1209. !          &yyss1, size * sizeof (*yyssp),
  1210. !          &yyvs1, size * sizeof (*yyvsp),
  1211. !          &yystacksize);
  1212. ! #endif
  1213.   
  1214. !       yyss = yyss1; yyvs = yyvs1;
  1215. ! #ifdef YYLSP_NEEDED
  1216. !       yyls = yyls1;
  1217. ! #endif
  1218.   #else /* no yyoverflow */
  1219.         /* Extend the stack our own way.  */
  1220. !       if (yystacksize >= YYMAXDEPTH)
  1221. !     {
  1222. !       yyerror("parser stack overflow");
  1223. !       return 2;
  1224. !     }
  1225. !       yystacksize *= 2;
  1226. !       if (yystacksize > YYMAXDEPTH)
  1227. !     yystacksize = YYMAXDEPTH;
  1228. !       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  1229. !       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  1230. !       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  1231. !       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  1232.   #ifdef YYLSP_NEEDED
  1233. !       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  1234. !       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  1235.   #endif
  1236.   #endif /* no yyoverflow */
  1237.   
  1238. ***************
  1239. *** 1092,1101 ****
  1240.   
  1241.   #if YYDEBUG != 0
  1242.         if (yydebug)
  1243. !     fprintf(stderr, "Stack size increased to %d\n", yymaxdepth);
  1244.   #endif
  1245.   
  1246. !       if (yyssp >= yyss + yymaxdepth - 1)
  1247.       YYABORT;
  1248.       }
  1249.   
  1250. --- 1401,1410 ----
  1251.   
  1252.   #if YYDEBUG != 0
  1253.         if (yydebug)
  1254. !     fprintf(stderr, "Stack size increased to %d\n", yystacksize);
  1255.   #endif
  1256.   
  1257. !       if (yyssp >= yyss + yystacksize - 1)
  1258.       YYABORT;
  1259.       }
  1260.   
  1261. ***************
  1262. *** 1104,1112 ****
  1263.       fprintf(stderr, "Entering state %d\n", yystate);
  1264.   #endif
  1265.   
  1266.   /* Do appropriate processing given the current state.  */
  1267.   /* Read a lookahead token if we need one and don't already have one.  */
  1268. ! yyresume:
  1269.   
  1270.     /* First try to decide what to do without reference to lookahead token.  */
  1271.   
  1272. --- 1413,1424 ----
  1273.       fprintf(stderr, "Entering state %d\n", yystate);
  1274.   #endif
  1275.   
  1276. +   goto yybackup;
  1277. +  yybackup:
  1278.   /* Do appropriate processing given the current state.  */
  1279.   /* Read a lookahead token if we need one and don't already have one.  */
  1280. ! /* yyresume: */
  1281.   
  1282.     /* First try to decide what to do without reference to lookahead token.  */
  1283.   
  1284. ***************
  1285. *** 1146,1152 ****
  1286.   
  1287.   #if YYDEBUG != 0
  1288.         if (yydebug)
  1289. !     fprintf(stderr, "Next token is %d (%s)\n", yychar, yytname[yychar1]);
  1290.   #endif
  1291.       }
  1292.   
  1293. --- 1458,1472 ----
  1294.   
  1295.   #if YYDEBUG != 0
  1296.         if (yydebug)
  1297. !     {
  1298. !       fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
  1299. !       /* Give the individual parser a way to print the precise meaning
  1300. !          of a token, for further debugging info.  */
  1301. ! #ifdef YYPRINT
  1302. !       YYPRINT (stderr, yychar, yylval);
  1303. ! #endif
  1304. !       fprintf (stderr, ")\n");
  1305. !     }
  1306.   #endif
  1307.       }
  1308.   
  1309. ***************
  1310. *** 1208,1224 ****
  1311.   /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  1312.   yyreduce:
  1313.     yylen = yyr2[yyn];
  1314. !   yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1315.   
  1316.   #if YYDEBUG != 0
  1317.     if (yydebug)
  1318.       {
  1319. !       if (yylen == 1)
  1320. !     fprintf (stderr, "Reducing 1 value via line %d, ",
  1321. !          yyrline[yyn]);
  1322. !       else
  1323. !     fprintf (stderr, "Reducing %d values via line %d, ",
  1324. !          yylen, yyrline[yyn]);
  1325.       }
  1326.   #endif
  1327.   
  1328. --- 1528,1548 ----
  1329.   /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  1330.   yyreduce:
  1331.     yylen = yyr2[yyn];
  1332. !   if (yylen > 0)
  1333. !     yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1334.   
  1335.   #if YYDEBUG != 0
  1336.     if (yydebug)
  1337.       {
  1338. !       int i;
  1339. !       fprintf (stderr, "Reducing via rule %d (line %d), ",
  1340. !            yyn, yyrline[yyn]);
  1341. !       /* Print the symbols being reduced, and their result.  */
  1342. !       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  1343. !     fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  1344. !       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  1345.       }
  1346.   #endif
  1347.   
  1348. ***************
  1349. *** 1959,1972 ****
  1350.       break;}
  1351.   case 154:
  1352.   #line 901 "c-parse.y"
  1353. ! { if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed")
  1354.             && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn"))
  1355.           warning ("`%s' attribute directive ignored",
  1356.                IDENTIFIER_POINTER (yyvsp[0].ttype));
  1357.         yyval.ttype = yyvsp[0].ttype; ;
  1358.       break;}
  1359.   case 156:
  1360. ! #line 908 "c-parse.y"
  1361.   { /* If not "mode (m)", then issue warning.  */
  1362.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0)
  1363.           {
  1364. --- 2283,2304 ----
  1365.       break;}
  1366.   case 154:
  1367.   #line 901 "c-parse.y"
  1368. ! {
  1369. ! #ifdef HANDLE_ATTRIBUTE0
  1370. !       /* give the function a chance to validate further attributes */
  1371. !       if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER (yyvsp[0].ttype)) ||
  1372. !           (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed")
  1373. !           && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn")))
  1374. ! #else
  1375. !       if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed")
  1376.             && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn"))
  1377. + #endif
  1378.           warning ("`%s' attribute directive ignored",
  1379.                IDENTIFIER_POINTER (yyvsp[0].ttype));
  1380.         yyval.ttype = yyvsp[0].ttype; ;
  1381.       break;}
  1382.   case 156:
  1383. ! #line 916 "c-parse.y"
  1384.   { /* If not "mode (m)", then issue warning.  */
  1385.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0)
  1386.           {
  1387. ***************
  1388. *** 1978,1984 ****
  1389.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  1390.       break;}
  1391.   case 157:
  1392. ! #line 918 "c-parse.y"
  1393.   { /* if not "aligned(n)", then issue warning */
  1394.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
  1395.             || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST)
  1396. --- 2310,2316 ----
  1397.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  1398.       break;}
  1399.   case 157:
  1400. ! #line 926 "c-parse.y"
  1401.   { /* if not "aligned(n)", then issue warning */
  1402.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
  1403.             || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST)
  1404. ***************
  1405. *** 1991,1997 ****
  1406.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  1407.       break;}
  1408.   case 158:
  1409. ! #line 929 "c-parse.y"
  1410.   { /* if not "format(...)", then issue warning */
  1411.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0
  1412.             || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST
  1413. --- 2323,2329 ----
  1414.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  1415.       break;}
  1416.   case 158:
  1417. ! #line 937 "c-parse.y"
  1418.   { /* if not "format(...)", then issue warning */
  1419.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0
  1420.             || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST
  1421. ***************
  1422. *** 2009,2022 ****
  1423.                   NULL_TREE); ;
  1424.       break;}
  1425.   case 160:
  1426. ! #line 951 "c-parse.y"
  1427.   { really_start_incremental_init (NULL_TREE);
  1428.             /* Note that the call to clear_momentary
  1429.                is in process_init_element.  */
  1430.             push_momentary (); ;
  1431.       break;}
  1432.   case 161:
  1433. ! #line 956 "c-parse.y"
  1434.   { yyval.ttype = pop_init_level (0);
  1435.             if (yyval.ttype == error_mark_node)
  1436.               pop_momentary ();
  1437. --- 2341,2354 ----
  1438.                   NULL_TREE); ;
  1439.       break;}
  1440.   case 160:
  1441. ! #line 959 "c-parse.y"
  1442.   { really_start_incremental_init (NULL_TREE);
  1443.             /* Note that the call to clear_momentary
  1444.                is in process_init_element.  */
  1445.             push_momentary (); ;
  1446.       break;}
  1447.   case 161:
  1448. ! #line 964 "c-parse.y"
  1449.   { yyval.ttype = pop_init_level (0);
  1450.             if (yyval.ttype == error_mark_node)
  1451.               pop_momentary ();
  1452. ***************
  1453. *** 2024,2067 ****
  1454.               pop_momentary_nofree (); ;
  1455.       break;}
  1456.   case 162:
  1457. ! #line 963 "c-parse.y"
  1458.   { yyval.ttype = error_mark_node; ;
  1459.       break;}
  1460.   case 163:
  1461. ! #line 969 "c-parse.y"
  1462.   { if (pedantic)
  1463.               pedwarn ("ANSI C forbids empty initializer braces"); ;
  1464.       break;}
  1465.   case 167:
  1466. ! #line 983 "c-parse.y"
  1467.   { process_init_element (yyvsp[0].ttype); ;
  1468.       break;}
  1469.   case 168:
  1470. ! #line 985 "c-parse.y"
  1471.   { push_init_level (0); ;
  1472.       break;}
  1473.   case 169:
  1474. ! #line 987 "c-parse.y"
  1475.   { process_init_element (pop_init_level (0)); ;
  1476.       break;}
  1477.   case 171:
  1478. ! #line 993 "c-parse.y"
  1479.   { set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ;
  1480.       break;}
  1481.   case 173:
  1482. ! #line 996 "c-parse.y"
  1483.   { set_init_index (yyvsp[-2].ttype, NULL_TREE); ;
  1484.       break;}
  1485.   case 175:
  1486. ! #line 999 "c-parse.y"
  1487.   { set_init_label (yyvsp[-1].ttype); ;
  1488.       break;}
  1489.   case 177:
  1490. ! #line 1002 "c-parse.y"
  1491.   { set_init_label (yyvsp[-1].ttype); ;
  1492.       break;}
  1493.   case 179:
  1494. ! #line 1008 "c-parse.y"
  1495.   { push_c_function_context ();
  1496.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  1497.               {
  1498. --- 2356,2399 ----
  1499.               pop_momentary_nofree (); ;
  1500.       break;}
  1501.   case 162:
  1502. ! #line 971 "c-parse.y"
  1503.   { yyval.ttype = error_mark_node; ;
  1504.       break;}
  1505.   case 163:
  1506. ! #line 977 "c-parse.y"
  1507.   { if (pedantic)
  1508.               pedwarn ("ANSI C forbids empty initializer braces"); ;
  1509.       break;}
  1510.   case 167:
  1511. ! #line 991 "c-parse.y"
  1512.   { process_init_element (yyvsp[0].ttype); ;
  1513.       break;}
  1514.   case 168:
  1515. ! #line 993 "c-parse.y"
  1516.   { push_init_level (0); ;
  1517.       break;}
  1518.   case 169:
  1519. ! #line 995 "c-parse.y"
  1520.   { process_init_element (pop_init_level (0)); ;
  1521.       break;}
  1522.   case 171:
  1523. ! #line 1001 "c-parse.y"
  1524.   { set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ;
  1525.       break;}
  1526.   case 173:
  1527. ! #line 1004 "c-parse.y"
  1528.   { set_init_index (yyvsp[-2].ttype, NULL_TREE); ;
  1529.       break;}
  1530.   case 175:
  1531. ! #line 1007 "c-parse.y"
  1532.   { set_init_label (yyvsp[-1].ttype); ;
  1533.       break;}
  1534.   case 177:
  1535. ! #line 1010 "c-parse.y"
  1536.   { set_init_label (yyvsp[-1].ttype); ;
  1537.       break;}
  1538.   case 179:
  1539. ! #line 1016 "c-parse.y"
  1540.   { push_c_function_context ();
  1541.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  1542.               {
  1543. ***************
  1544. *** 2072,2083 ****
  1545.             store_parm_decls (); ;
  1546.       break;}
  1547.   case 180:
  1548. ! #line 1023 "c-parse.y"
  1549.   { finish_function (1);
  1550.             pop_c_function_context (); ;
  1551.       break;}
  1552.   case 181:
  1553. ! #line 1029 "c-parse.y"
  1554.   { push_c_function_context ();
  1555.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  1556.               {
  1557. --- 2404,2415 ----
  1558.             store_parm_decls (); ;
  1559.       break;}
  1560.   case 180:
  1561. ! #line 1031 "c-parse.y"
  1562.   { finish_function (1);
  1563.             pop_c_function_context (); ;
  1564.       break;}
  1565.   case 181:
  1566. ! #line 1037 "c-parse.y"
  1567.   { push_c_function_context ();
  1568.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  1569.               {
  1570. ***************
  1571. *** 2088,2370 ****
  1572.             store_parm_decls (); ;
  1573.       break;}
  1574.   case 182:
  1575. ! #line 1044 "c-parse.y"
  1576.   { finish_function (1);
  1577.             pop_c_function_context (); ;
  1578.       break;}
  1579.   case 185:
  1580. ! #line 1060 "c-parse.y"
  1581.   { yyval.ttype = yyvsp[-1].ttype; ;
  1582.       break;}
  1583.   case 186:
  1584. ! #line 1062 "c-parse.y"
  1585.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1586.       break;}
  1587.   case 187:
  1588. ! #line 1067 "c-parse.y"
  1589.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1590.       break;}
  1591.   case 188:
  1592. ! #line 1069 "c-parse.y"
  1593.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1594.       break;}
  1595.   case 189:
  1596. ! #line 1071 "c-parse.y"
  1597.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1598.       break;}
  1599.   case 191:
  1600. ! #line 1082 "c-parse.y"
  1601.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1602.       break;}
  1603.   case 192:
  1604. ! #line 1087 "c-parse.y"
  1605.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1606.       break;}
  1607.   case 193:
  1608. ! #line 1089 "c-parse.y"
  1609.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1610.       break;}
  1611.   case 194:
  1612. ! #line 1091 "c-parse.y"
  1613.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1614.       break;}
  1615.   case 196:
  1616. ! #line 1100 "c-parse.y"
  1617.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1618.       break;}
  1619.   case 197:
  1620. ! #line 1105 "c-parse.y"
  1621.   { yyval.ttype = yyvsp[-1].ttype; ;
  1622.       break;}
  1623.   case 198:
  1624. ! #line 1107 "c-parse.y"
  1625.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1626.       break;}
  1627.   case 199:
  1628. ! #line 1109 "c-parse.y"
  1629.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1630.       break;}
  1631.   case 200:
  1632. ! #line 1111 "c-parse.y"
  1633.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1634.       break;}
  1635.   case 202:
  1636. ! #line 1117 "c-parse.y"
  1637.   { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  1638.             /* Start scope of tag before parsing components.  */
  1639.           ;
  1640.       break;}
  1641.   case 203:
  1642. ! #line 1121 "c-parse.y"
  1643.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
  1644.             /* Really define the structure.  */
  1645.           ;
  1646.       break;}
  1647.   case 204:
  1648. ! #line 1125 "c-parse.y"
  1649.   { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
  1650.                         yyvsp[-1].ttype); ;
  1651.       break;}
  1652.   case 205:
  1653. ! #line 1128 "c-parse.y"
  1654.   { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
  1655.       break;}
  1656.   case 206:
  1657. ! #line 1130 "c-parse.y"
  1658.   { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
  1659.       break;}
  1660.   case 207:
  1661. ! #line 1132 "c-parse.y"
  1662.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1663.       break;}
  1664.   case 208:
  1665. ! #line 1134 "c-parse.y"
  1666.   { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
  1667.                         yyvsp[-1].ttype); ;
  1668.       break;}
  1669.   case 209:
  1670. ! #line 1137 "c-parse.y"
  1671.   { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
  1672.       break;}
  1673.   case 210:
  1674. ! #line 1139 "c-parse.y"
  1675.   { yyvsp[0].itype = suspend_momentary ();
  1676.             yyval.ttype = start_enum (yyvsp[-1].ttype); ;
  1677.       break;}
  1678.   case 211:
  1679. ! #line 1142 "c-parse.y"
  1680.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1681.             resume_momentary (yyvsp[-4].itype); ;
  1682.       break;}
  1683.   case 212:
  1684. ! #line 1145 "c-parse.y"
  1685.   { yyvsp[0].itype = suspend_momentary ();
  1686.             yyval.ttype = start_enum (NULL_TREE); ;
  1687.       break;}
  1688.   case 213:
  1689. ! #line 1148 "c-parse.y"
  1690.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1691.             resume_momentary (yyvsp[-4].itype); ;
  1692.       break;}
  1693.   case 214:
  1694. ! #line 1151 "c-parse.y"
  1695.   { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
  1696.       break;}
  1697.   case 218:
  1698. ! #line 1162 "c-parse.y"
  1699.   { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
  1700.       break;}
  1701.   case 219:
  1702. ! #line 1167 "c-parse.y"
  1703.   { yyval.ttype = yyvsp[0].ttype; ;
  1704.       break;}
  1705.   case 220:
  1706. ! #line 1169 "c-parse.y"
  1707.   { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
  1708.             pedwarn ("no semicolon at end of struct or union"); ;
  1709.       break;}
  1710.   case 221:
  1711. ! #line 1174 "c-parse.y"
  1712.   { yyval.ttype = NULL_TREE; ;
  1713.       break;}
  1714.   case 222:
  1715. ! #line 1176 "c-parse.y"
  1716.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1717.       break;}
  1718.   case 223:
  1719. ! #line 1178 "c-parse.y"
  1720.   { if (pedantic)
  1721.               pedwarn ("extra semicolon in struct or union specified"); ;
  1722.       break;}
  1723.   case 224:
  1724. ! #line 1193 "c-parse.y"
  1725.   { yyval.ttype = yyvsp[0].ttype;
  1726.             current_declspecs = TREE_VALUE (declspec_stack);
  1727.             declspec_stack = TREE_CHAIN (declspec_stack);
  1728.             resume_momentary (yyvsp[-1].itype); ;
  1729.       break;}
  1730.   case 225:
  1731. ! #line 1198 "c-parse.y"
  1732.   { if (pedantic)
  1733.               pedwarn ("ANSI C forbids member declarations with no members");
  1734.             shadow_tag(yyvsp[0].ttype);
  1735.             yyval.ttype = NULL_TREE; ;
  1736.       break;}
  1737.   case 226:
  1738. ! #line 1203 "c-parse.y"
  1739.   { yyval.ttype = yyvsp[0].ttype;
  1740.             current_declspecs = TREE_VALUE (declspec_stack);
  1741.             declspec_stack = TREE_CHAIN (declspec_stack);
  1742.             resume_momentary (yyvsp[-1].itype); ;
  1743.       break;}
  1744.   case 227:
  1745. ! #line 1208 "c-parse.y"
  1746.   { if (pedantic)
  1747.               pedwarn ("ANSI C forbids member declarations with no members");
  1748.             shadow_tag(yyvsp[0].ttype);
  1749.             yyval.ttype = NULL_TREE; ;
  1750.       break;}
  1751.   case 228:
  1752. ! #line 1213 "c-parse.y"
  1753.   { yyval.ttype = NULL_TREE; ;
  1754.       break;}
  1755.   case 230:
  1756. ! #line 1219 "c-parse.y"
  1757.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1758.       break;}
  1759.   case 231:
  1760. ! #line 1224 "c-parse.y"
  1761.   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  1762.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  1763.       break;}
  1764.   case 232:
  1765. ! #line 1228 "c-parse.y"
  1766.   { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  1767.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  1768.       break;}
  1769.   case 233:
  1770. ! #line 1231 "c-parse.y"
  1771.   { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
  1772.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  1773.       break;}
  1774.   case 235:
  1775. ! #line 1243 "c-parse.y"
  1776.   { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
  1777.       break;}
  1778.   case 236:
  1779. ! #line 1249 "c-parse.y"
  1780.   { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
  1781.       break;}
  1782.   case 237:
  1783. ! #line 1251 "c-parse.y"
  1784.   { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1785.       break;}
  1786.   case 238:
  1787. ! #line 1256 "c-parse.y"
  1788.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1789.       break;}
  1790.   case 239:
  1791. ! #line 1258 "c-parse.y"
  1792.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1793.       break;}
  1794.   case 240:
  1795. ! #line 1263 "c-parse.y"
  1796.   { yyval.ttype = NULL_TREE; ;
  1797.       break;}
  1798.   case 242:
  1799. ! #line 1269 "c-parse.y"
  1800.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1801.       break;}
  1802.   case 243:
  1803. ! #line 1271 "c-parse.y"
  1804.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1805.       break;}
  1806.   case 244:
  1807. ! #line 1276 "c-parse.y"
  1808.   { yyval.ttype = NULL_TREE; ;
  1809.       break;}
  1810.   case 245:
  1811. ! #line 1278 "c-parse.y"
  1812.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1813.       break;}
  1814.   case 246:
  1815. ! #line 1283 "c-parse.y"
  1816.   { yyval.ttype = yyvsp[-1].ttype; ;
  1817.       break;}
  1818.   case 247:
  1819. ! #line 1286 "c-parse.y"
  1820.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1821.       break;}
  1822.   case 248:
  1823. ! #line 1288 "c-parse.y"
  1824.   { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
  1825.       break;}
  1826.   case 249:
  1827. ! #line 1290 "c-parse.y"
  1828.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1829.       break;}
  1830.   case 250:
  1831. ! #line 1292 "c-parse.y"
  1832.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1833.       break;}
  1834.   case 251:
  1835. ! #line 1294 "c-parse.y"
  1836.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1837.       break;}
  1838.   case 252:
  1839. ! #line 1296 "c-parse.y"
  1840.   { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1841.       break;}
  1842.   case 253:
  1843. ! #line 1298 "c-parse.y"
  1844.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
  1845.       break;}
  1846.   case 254:
  1847. ! #line 1300 "c-parse.y"
  1848.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
  1849.       break;}
  1850.   case 261:
  1851. ! #line 1322 "c-parse.y"
  1852.   { emit_line_note (input_filename, lineno);
  1853.             pushlevel (0);
  1854.             clear_last_expr ();
  1855. --- 2420,2702 ----
  1856.             store_parm_decls (); ;
  1857.       break;}
  1858.   case 182:
  1859. ! #line 1052 "c-parse.y"
  1860.   { finish_function (1);
  1861.             pop_c_function_context (); ;
  1862.       break;}
  1863.   case 185:
  1864. ! #line 1068 "c-parse.y"
  1865.   { yyval.ttype = yyvsp[-1].ttype; ;
  1866.       break;}
  1867.   case 186:
  1868. ! #line 1070 "c-parse.y"
  1869.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1870.       break;}
  1871.   case 187:
  1872. ! #line 1075 "c-parse.y"
  1873.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1874.       break;}
  1875.   case 188:
  1876. ! #line 1077 "c-parse.y"
  1877.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1878.       break;}
  1879.   case 189:
  1880. ! #line 1079 "c-parse.y"
  1881.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1882.       break;}
  1883.   case 191:
  1884. ! #line 1090 "c-parse.y"
  1885.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1886.       break;}
  1887.   case 192:
  1888. ! #line 1095 "c-parse.y"
  1889.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1890.       break;}
  1891.   case 193:
  1892. ! #line 1097 "c-parse.y"
  1893.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1894.       break;}
  1895.   case 194:
  1896. ! #line 1099 "c-parse.y"
  1897.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1898.       break;}
  1899.   case 196:
  1900. ! #line 1108 "c-parse.y"
  1901.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1902.       break;}
  1903.   case 197:
  1904. ! #line 1113 "c-parse.y"
  1905.   { yyval.ttype = yyvsp[-1].ttype; ;
  1906.       break;}
  1907.   case 198:
  1908. ! #line 1115 "c-parse.y"
  1909.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1910.       break;}
  1911.   case 199:
  1912. ! #line 1117 "c-parse.y"
  1913.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1914.       break;}
  1915.   case 200:
  1916. ! #line 1119 "c-parse.y"
  1917.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1918.       break;}
  1919.   case 202:
  1920. ! #line 1125 "c-parse.y"
  1921.   { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  1922.             /* Start scope of tag before parsing components.  */
  1923.           ;
  1924.       break;}
  1925.   case 203:
  1926. ! #line 1129 "c-parse.y"
  1927.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
  1928.             /* Really define the structure.  */
  1929.           ;
  1930.       break;}
  1931.   case 204:
  1932. ! #line 1133 "c-parse.y"
  1933.   { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
  1934.                         yyvsp[-1].ttype); ;
  1935.       break;}
  1936.   case 205:
  1937. ! #line 1136 "c-parse.y"
  1938.   { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
  1939.       break;}
  1940.   case 206:
  1941. ! #line 1138 "c-parse.y"
  1942.   { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
  1943.       break;}
  1944.   case 207:
  1945. ! #line 1140 "c-parse.y"
  1946.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1947.       break;}
  1948.   case 208:
  1949. ! #line 1142 "c-parse.y"
  1950.   { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
  1951.                         yyvsp[-1].ttype); ;
  1952.       break;}
  1953.   case 209:
  1954. ! #line 1145 "c-parse.y"
  1955.   { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
  1956.       break;}
  1957.   case 210:
  1958. ! #line 1147 "c-parse.y"
  1959.   { yyvsp[0].itype = suspend_momentary ();
  1960.             yyval.ttype = start_enum (yyvsp[-1].ttype); ;
  1961.       break;}
  1962.   case 211:
  1963. ! #line 1150 "c-parse.y"
  1964.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1965.             resume_momentary (yyvsp[-4].itype); ;
  1966.       break;}
  1967.   case 212:
  1968. ! #line 1153 "c-parse.y"
  1969.   { yyvsp[0].itype = suspend_momentary ();
  1970.             yyval.ttype = start_enum (NULL_TREE); ;
  1971.       break;}
  1972.   case 213:
  1973. ! #line 1156 "c-parse.y"
  1974.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1975.             resume_momentary (yyvsp[-4].itype); ;
  1976.       break;}
  1977.   case 214:
  1978. ! #line 1159 "c-parse.y"
  1979.   { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
  1980.       break;}
  1981.   case 218:
  1982. ! #line 1170 "c-parse.y"
  1983.   { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
  1984.       break;}
  1985.   case 219:
  1986. ! #line 1175 "c-parse.y"
  1987.   { yyval.ttype = yyvsp[0].ttype; ;
  1988.       break;}
  1989.   case 220:
  1990. ! #line 1177 "c-parse.y"
  1991.   { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
  1992.             pedwarn ("no semicolon at end of struct or union"); ;
  1993.       break;}
  1994.   case 221:
  1995. ! #line 1182 "c-parse.y"
  1996.   { yyval.ttype = NULL_TREE; ;
  1997.       break;}
  1998.   case 222:
  1999. ! #line 1184 "c-parse.y"
  2000.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  2001.       break;}
  2002.   case 223:
  2003. ! #line 1186 "c-parse.y"
  2004.   { if (pedantic)
  2005.               pedwarn ("extra semicolon in struct or union specified"); ;
  2006.       break;}
  2007.   case 224:
  2008. ! #line 1201 "c-parse.y"
  2009.   { yyval.ttype = yyvsp[0].ttype;
  2010.             current_declspecs = TREE_VALUE (declspec_stack);
  2011.             declspec_stack = TREE_CHAIN (declspec_stack);
  2012.             resume_momentary (yyvsp[-1].itype); ;
  2013.       break;}
  2014.   case 225:
  2015. ! #line 1206 "c-parse.y"
  2016.   { if (pedantic)
  2017.               pedwarn ("ANSI C forbids member declarations with no members");
  2018.             shadow_tag(yyvsp[0].ttype);
  2019.             yyval.ttype = NULL_TREE; ;
  2020.       break;}
  2021.   case 226:
  2022. ! #line 1211 "c-parse.y"
  2023.   { yyval.ttype = yyvsp[0].ttype;
  2024.             current_declspecs = TREE_VALUE (declspec_stack);
  2025.             declspec_stack = TREE_CHAIN (declspec_stack);
  2026.             resume_momentary (yyvsp[-1].itype); ;
  2027.       break;}
  2028.   case 227:
  2029. ! #line 1216 "c-parse.y"
  2030.   { if (pedantic)
  2031.               pedwarn ("ANSI C forbids member declarations with no members");
  2032.             shadow_tag(yyvsp[0].ttype);
  2033.             yyval.ttype = NULL_TREE; ;
  2034.       break;}
  2035.   case 228:
  2036. ! #line 1221 "c-parse.y"
  2037.   { yyval.ttype = NULL_TREE; ;
  2038.       break;}
  2039.   case 230:
  2040. ! #line 1227 "c-parse.y"
  2041.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2042.       break;}
  2043.   case 231:
  2044. ! #line 1232 "c-parse.y"
  2045.   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  2046.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  2047.       break;}
  2048.   case 232:
  2049. ! #line 1236 "c-parse.y"
  2050.   { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  2051.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  2052.       break;}
  2053.   case 233:
  2054. ! #line 1239 "c-parse.y"
  2055.   { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
  2056.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  2057.       break;}
  2058.   case 235:
  2059. ! #line 1251 "c-parse.y"
  2060.   { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
  2061.       break;}
  2062.   case 236:
  2063. ! #line 1257 "c-parse.y"
  2064.   { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
  2065.       break;}
  2066.   case 237:
  2067. ! #line 1259 "c-parse.y"
  2068.   { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2069.       break;}
  2070.   case 238:
  2071. ! #line 1264 "c-parse.y"
  2072.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2073.       break;}
  2074.   case 239:
  2075. ! #line 1266 "c-parse.y"
  2076.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2077.       break;}
  2078.   case 240:
  2079. ! #line 1271 "c-parse.y"
  2080.   { yyval.ttype = NULL_TREE; ;
  2081.       break;}
  2082.   case 242:
  2083. ! #line 1277 "c-parse.y"
  2084.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  2085.       break;}
  2086.   case 243:
  2087. ! #line 1279 "c-parse.y"
  2088.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  2089.       break;}
  2090.   case 244:
  2091. ! #line 1284 "c-parse.y"
  2092.   { yyval.ttype = NULL_TREE; ;
  2093.       break;}
  2094.   case 245:
  2095. ! #line 1286 "c-parse.y"
  2096.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  2097.       break;}
  2098.   case 246:
  2099. ! #line 1291 "c-parse.y"
  2100.   { yyval.ttype = yyvsp[-1].ttype; ;
  2101.       break;}
  2102.   case 247:
  2103. ! #line 1294 "c-parse.y"
  2104.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2105.       break;}
  2106.   case 248:
  2107. ! #line 1296 "c-parse.y"
  2108.   { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
  2109.       break;}
  2110.   case 249:
  2111. ! #line 1298 "c-parse.y"
  2112.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  2113.       break;}
  2114.   case 250:
  2115. ! #line 1300 "c-parse.y"
  2116.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  2117.       break;}
  2118.   case 251:
  2119. ! #line 1302 "c-parse.y"
  2120.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  2121.       break;}
  2122.   case 252:
  2123. ! #line 1304 "c-parse.y"
  2124.   { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  2125.       break;}
  2126.   case 253:
  2127. ! #line 1306 "c-parse.y"
  2128.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
  2129.       break;}
  2130.   case 254:
  2131. ! #line 1308 "c-parse.y"
  2132.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
  2133.       break;}
  2134.   case 261:
  2135. ! #line 1330 "c-parse.y"
  2136.   { emit_line_note (input_filename, lineno);
  2137.             pushlevel (0);
  2138.             clear_last_expr ();
  2139. ***************
  2140. *** 2373,2384 ****
  2141.           ;
  2142.       break;}
  2143.   case 263:
  2144. ! #line 1335 "c-parse.y"
  2145.   { if (pedantic)
  2146.               pedwarn ("ANSI C forbids label declarations"); ;
  2147.       break;}
  2148.   case 266:
  2149. ! #line 1346 "c-parse.y"
  2150.   { tree link;
  2151.             for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  2152.               {
  2153. --- 2705,2716 ----
  2154.           ;
  2155.       break;}
  2156.   case 263:
  2157. ! #line 1343 "c-parse.y"
  2158.   { if (pedantic)
  2159.               pedwarn ("ANSI C forbids label declarations"); ;
  2160.       break;}
  2161.   case 266:
  2162. ! #line 1354 "c-parse.y"
  2163.   { tree link;
  2164.             for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  2165.               {
  2166. ***************
  2167. *** 2389,2424 ****
  2168.           ;
  2169.       break;}
  2170.   case 267:
  2171. ! #line 1360 "c-parse.y"
  2172.   {;
  2173.       break;}
  2174.   case 269:
  2175. ! #line 1365 "c-parse.y"
  2176.   { yyval.ttype = convert (void_type_node, integer_zero_node); ;
  2177.       break;}
  2178.   case 270:
  2179. ! #line 1367 "c-parse.y"
  2180.   { emit_line_note (input_filename, lineno);
  2181.             expand_end_bindings (getdecls (), 1, 0);
  2182.             yyval.ttype = poplevel (1, 1, 0);
  2183.             pop_momentary (); ;
  2184.       break;}
  2185.   case 271:
  2186. ! #line 1372 "c-parse.y"
  2187.   { emit_line_note (input_filename, lineno);
  2188.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  2189.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  2190.             pop_momentary (); ;
  2191.       break;}
  2192.   case 272:
  2193. ! #line 1377 "c-parse.y"
  2194.   { emit_line_note (input_filename, lineno);
  2195.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  2196.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  2197.             pop_momentary (); ;
  2198.       break;}
  2199.   case 275:
  2200. ! #line 1394 "c-parse.y"
  2201.   { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2202.             expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
  2203.             yyval.itype = stmt_count;
  2204. --- 2721,2756 ----
  2205.           ;
  2206.       break;}
  2207.   case 267:
  2208. ! #line 1368 "c-parse.y"
  2209.   {;
  2210.       break;}
  2211.   case 269:
  2212. ! #line 1373 "c-parse.y"
  2213.   { yyval.ttype = convert (void_type_node, integer_zero_node); ;
  2214.       break;}
  2215.   case 270:
  2216. ! #line 1375 "c-parse.y"
  2217.   { emit_line_note (input_filename, lineno);
  2218.             expand_end_bindings (getdecls (), 1, 0);
  2219.             yyval.ttype = poplevel (1, 1, 0);
  2220.             pop_momentary (); ;
  2221.       break;}
  2222.   case 271:
  2223. ! #line 1380 "c-parse.y"
  2224.   { emit_line_note (input_filename, lineno);
  2225.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  2226.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  2227.             pop_momentary (); ;
  2228.       break;}
  2229.   case 272:
  2230. ! #line 1385 "c-parse.y"
  2231.   { emit_line_note (input_filename, lineno);
  2232.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  2233.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  2234.             pop_momentary (); ;
  2235.       break;}
  2236.   case 275:
  2237. ! #line 1402 "c-parse.y"
  2238.   { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2239.             expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
  2240.             yyval.itype = stmt_count;
  2241. ***************
  2242. *** 2427,2433 ****
  2243.             position_after_white_space (); ;
  2244.       break;}
  2245.   case 276:
  2246. ! #line 1407 "c-parse.y"
  2247.   { stmt_count++;
  2248.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  2249.             /* See comment in `while' alternative, above.  */
  2250. --- 2759,2765 ----
  2251.             position_after_white_space (); ;
  2252.       break;}
  2253.   case 276:
  2254. ! #line 1415 "c-parse.y"
  2255.   { stmt_count++;
  2256.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  2257.             /* See comment in `while' alternative, above.  */
  2258. ***************
  2259. *** 2436,2466 ****
  2260.             position_after_white_space (); ;
  2261.       break;}
  2262.   case 277:
  2263. ! #line 1414 "c-parse.y"
  2264.   { expand_loop_continue_here (); ;
  2265.       break;}
  2266.   case 278:
  2267. ! #line 1418 "c-parse.y"
  2268.   { yyval.filename = input_filename; ;
  2269.       break;}
  2270.   case 279:
  2271. ! #line 1422 "c-parse.y"
  2272.   { yyval.lineno = lineno; ;
  2273.       break;}
  2274.   case 280:
  2275. ! #line 1427 "c-parse.y"
  2276.   { ;
  2277.       break;}
  2278.   case 281:
  2279. ! #line 1432 "c-parse.y"
  2280.   { ;
  2281.       break;}
  2282.   case 282:
  2283. ! #line 1437 "c-parse.y"
  2284.   { ;
  2285.       break;}
  2286.   case 284:
  2287. ! #line 1443 "c-parse.y"
  2288.   { int next;
  2289.             position_after_white_space ();
  2290.             next = getc (finput);
  2291. --- 2768,2798 ----
  2292.             position_after_white_space (); ;
  2293.       break;}
  2294.   case 277:
  2295. ! #line 1422 "c-parse.y"
  2296.   { expand_loop_continue_here (); ;
  2297.       break;}
  2298.   case 278:
  2299. ! #line 1426 "c-parse.y"
  2300.   { yyval.filename = input_filename; ;
  2301.       break;}
  2302.   case 279:
  2303. ! #line 1430 "c-parse.y"
  2304.   { yyval.lineno = lineno; ;
  2305.       break;}
  2306.   case 280:
  2307. ! #line 1435 "c-parse.y"
  2308.   { ;
  2309.       break;}
  2310.   case 281:
  2311. ! #line 1440 "c-parse.y"
  2312.   { ;
  2313.       break;}
  2314.   case 282:
  2315. ! #line 1445 "c-parse.y"
  2316.   { ;
  2317.       break;}
  2318.   case 284:
  2319. ! #line 1451 "c-parse.y"
  2320.   { int next;
  2321.             position_after_white_space ();
  2322.             next = getc (finput);
  2323. ***************
  2324. *** 2470,2480 ****
  2325.           ;
  2326.       break;}
  2327.   case 285:
  2328. ! #line 1455 "c-parse.y"
  2329.   { stmt_count++; ;
  2330.       break;}
  2331.   case 287:
  2332. ! #line 1458 "c-parse.y"
  2333.   { stmt_count++;
  2334.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2335.   /* It appears that this should not be done--that a non-lvalue array
  2336. --- 2802,2812 ----
  2337.           ;
  2338.       break;}
  2339.   case 285:
  2340. ! #line 1463 "c-parse.y"
  2341.   { stmt_count++; ;
  2342.       break;}
  2343.   case 287:
  2344. ! #line 1466 "c-parse.y"
  2345.   { stmt_count++;
  2346.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2347.   /* It appears that this should not be done--that a non-lvalue array
  2348. ***************
  2349. *** 2493,2511 ****
  2350.             clear_momentary (); ;
  2351.       break;}
  2352.   case 288:
  2353. ! #line 1475 "c-parse.y"
  2354.   { expand_start_else ();
  2355.             yyvsp[-1].itype = stmt_count;
  2356.             position_after_white_space (); ;
  2357.       break;}
  2358.   case 289:
  2359. ! #line 1479 "c-parse.y"
  2360.   { expand_end_cond ();
  2361.             if (extra_warnings && stmt_count == yyvsp[-3].itype)
  2362.               warning ("empty body in an else-statement"); ;
  2363.       break;}
  2364.   case 290:
  2365. ! #line 1483 "c-parse.y"
  2366.   { expand_end_cond ();
  2367.             /* This warning is here instead of in simple_if, because we
  2368.                do not want a warning if an empty if is followed by an
  2369. --- 2825,2843 ----
  2370.             clear_momentary (); ;
  2371.       break;}
  2372.   case 288:
  2373. ! #line 1483 "c-parse.y"
  2374.   { expand_start_else ();
  2375.             yyvsp[-1].itype = stmt_count;
  2376.             position_after_white_space (); ;
  2377.       break;}
  2378.   case 289:
  2379. ! #line 1487 "c-parse.y"
  2380.   { expand_end_cond ();
  2381.             if (extra_warnings && stmt_count == yyvsp[-3].itype)
  2382.               warning ("empty body in an else-statement"); ;
  2383.       break;}
  2384.   case 290:
  2385. ! #line 1491 "c-parse.y"
  2386.   { expand_end_cond ();
  2387.             /* This warning is here instead of in simple_if, because we
  2388.                do not want a warning if an empty if is followed by an
  2389. ***************
  2390. *** 2515,2525 ****
  2391.                           "empty body in an if-statement"); ;
  2392.       break;}
  2393.   case 291:
  2394. ! #line 1494 "c-parse.y"
  2395.   { expand_end_cond (); ;
  2396.       break;}
  2397.   case 292:
  2398. ! #line 1496 "c-parse.y"
  2399.   { stmt_count++;
  2400.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  2401.             /* The emit_nop used to come before emit_line_note,
  2402. --- 2847,2857 ----
  2403.                           "empty body in an if-statement"); ;
  2404.       break;}
  2405.   case 291:
  2406. ! #line 1502 "c-parse.y"
  2407.   { expand_end_cond (); ;
  2408.       break;}
  2409.   case 292:
  2410. ! #line 1504 "c-parse.y"
  2411.   { stmt_count++;
  2412.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  2413.             /* The emit_nop used to come before emit_line_note,
  2414. ***************
  2415. *** 2531,2537 ****
  2416.             emit_nop (); ;
  2417.       break;}
  2418.   case 293:
  2419. ! #line 1506 "c-parse.y"
  2420.   { /* Don't start the loop till we have succeeded
  2421.                in parsing the end test.  This is to make sure
  2422.                that we end every loop we start.  */
  2423. --- 2863,2869 ----
  2424.             emit_nop (); ;
  2425.       break;}
  2426.   case 293:
  2427. ! #line 1514 "c-parse.y"
  2428.   { /* Don't start the loop till we have succeeded
  2429.                in parsing the end test.  This is to make sure
  2430.                that we end every loop we start.  */
  2431. ***************
  2432. *** 2542,2552 ****
  2433.             position_after_white_space (); ;
  2434.       break;}
  2435.   case 294:
  2436. ! #line 1515 "c-parse.y"
  2437.   { expand_end_loop (); ;
  2438.       break;}
  2439.   case 295:
  2440. ! #line 1518 "c-parse.y"
  2441.   { emit_line_note (input_filename, lineno);
  2442.             expand_exit_loop_if_false (NULL_PTR,
  2443.                            truthvalue_conversion (yyvsp[-2].ttype));
  2444. --- 2874,2884 ----
  2445.             position_after_white_space (); ;
  2446.       break;}
  2447.   case 294:
  2448. ! #line 1523 "c-parse.y"
  2449.   { expand_end_loop (); ;
  2450.       break;}
  2451.   case 295:
  2452. ! #line 1526 "c-parse.y"
  2453.   { emit_line_note (input_filename, lineno);
  2454.             expand_exit_loop_if_false (NULL_PTR,
  2455.                            truthvalue_conversion (yyvsp[-2].ttype));
  2456. ***************
  2457. *** 2554,2565 ****
  2458.             clear_momentary (); ;
  2459.       break;}
  2460.   case 296:
  2461. ! #line 1525 "c-parse.y"
  2462.   { expand_end_loop ();
  2463.             clear_momentary (); ;
  2464.       break;}
  2465.   case 297:
  2466. ! #line 1529 "c-parse.y"
  2467.   { stmt_count++;
  2468.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2469.             /* See comment in `while' alternative, above.  */
  2470. --- 2886,2897 ----
  2471.             clear_momentary (); ;
  2472.       break;}
  2473.   case 296:
  2474. ! #line 1533 "c-parse.y"
  2475.   { expand_end_loop ();
  2476.             clear_momentary (); ;
  2477.       break;}
  2478.   case 297:
  2479. ! #line 1537 "c-parse.y"
  2480.   { stmt_count++;
  2481.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2482.             /* See comment in `while' alternative, above.  */
  2483. ***************
  2484. *** 2572,2583 ****
  2485.           ;
  2486.       break;}
  2487.   case 298:
  2488. ! #line 1541 "c-parse.y"
  2489.   { yyvsp[0].lineno = lineno;
  2490.             yyval.filename = input_filename; ;
  2491.       break;}
  2492.   case 299:
  2493. ! #line 1544 "c-parse.y"
  2494.   { 
  2495.             /* Start the loop.  Doing this after parsing
  2496.                all the expressions ensures we will end the loop.  */
  2497. --- 2904,2915 ----
  2498.           ;
  2499.       break;}
  2500.   case 298:
  2501. ! #line 1549 "c-parse.y"
  2502.   { yyvsp[0].lineno = lineno;
  2503.             yyval.filename = input_filename; ;
  2504.       break;}
  2505.   case 299:
  2506. ! #line 1552 "c-parse.y"
  2507.   { 
  2508.             /* Start the loop.  Doing this after parsing
  2509.                all the expressions ensures we will end the loop.  */
  2510. ***************
  2511. *** 2595,2601 ****
  2512.             position_after_white_space (); ;
  2513.       break;}
  2514.   case 300:
  2515. ! #line 1560 "c-parse.y"
  2516.   { /* Emit the increment expression, with a line number.  */
  2517.             emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
  2518.             expand_loop_continue_here ();
  2519. --- 2927,2933 ----
  2520.             position_after_white_space (); ;
  2521.       break;}
  2522.   case 300:
  2523. ! #line 1568 "c-parse.y"
  2524.   { /* Emit the increment expression, with a line number.  */
  2525.             emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
  2526.             expand_loop_continue_here ();
  2527. ***************
  2528. *** 2605,2611 ****
  2529.             expand_end_loop (); ;
  2530.       break;}
  2531.   case 301:
  2532. ! #line 1568 "c-parse.y"
  2533.   { stmt_count++;
  2534.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2535.             c_expand_start_case (yyvsp[-1].ttype);
  2536. --- 2937,2943 ----
  2537.             expand_end_loop (); ;
  2538.       break;}
  2539.   case 301:
  2540. ! #line 1576 "c-parse.y"
  2541.   { stmt_count++;
  2542.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2543.             c_expand_start_case (yyvsp[-1].ttype);
  2544. ***************
  2545. *** 2615,2652 ****
  2546.             position_after_white_space (); ;
  2547.       break;}
  2548.   case 302:
  2549. ! #line 1576 "c-parse.y"
  2550.   { expand_end_case (yyvsp[-3].ttype);
  2551.             pop_momentary (); ;
  2552.       break;}
  2553.   case 303:
  2554. ! #line 1579 "c-parse.y"
  2555.   { stmt_count++;
  2556.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2557.             if ( ! expand_exit_something ())
  2558.               error ("break statement not within loop or switch"); ;
  2559.       break;}
  2560.   case 304:
  2561. ! #line 1584 "c-parse.y"
  2562.   { stmt_count++;
  2563.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2564.             if (! expand_continue_loop (NULL_PTR))
  2565.               error ("continue statement not within a loop"); ;
  2566.       break;}
  2567.   case 305:
  2568. ! #line 1589 "c-parse.y"
  2569.   { stmt_count++;
  2570.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2571.             c_expand_return (NULL_TREE); ;
  2572.       break;}
  2573.   case 306:
  2574. ! #line 1593 "c-parse.y"
  2575.   { stmt_count++;
  2576.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  2577.             c_expand_return (yyvsp[-1].ttype); ;
  2578.       break;}
  2579.   case 307:
  2580. ! #line 1597 "c-parse.y"
  2581.   { stmt_count++;
  2582.             emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
  2583.             STRIP_NOPS (yyvsp[-2].ttype);
  2584. --- 2947,2984 ----
  2585.             position_after_white_space (); ;
  2586.       break;}
  2587.   case 302:
  2588. ! #line 1584 "c-parse.y"
  2589.   { expand_end_case (yyvsp[-3].ttype);
  2590.             pop_momentary (); ;
  2591.       break;}
  2592.   case 303:
  2593. ! #line 1587 "c-parse.y"
  2594.   { stmt_count++;
  2595.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2596.             if ( ! expand_exit_something ())
  2597.               error ("break statement not within loop or switch"); ;
  2598.       break;}
  2599.   case 304:
  2600. ! #line 1592 "c-parse.y"
  2601.   { stmt_count++;
  2602.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2603.             if (! expand_continue_loop (NULL_PTR))
  2604.               error ("continue statement not within a loop"); ;
  2605.       break;}
  2606.   case 305:
  2607. ! #line 1597 "c-parse.y"
  2608.   { stmt_count++;
  2609.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  2610.             c_expand_return (NULL_TREE); ;
  2611.       break;}
  2612.   case 306:
  2613. ! #line 1601 "c-parse.y"
  2614.   { stmt_count++;
  2615.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  2616.             c_expand_return (yyvsp[-1].ttype); ;
  2617.       break;}
  2618.   case 307:
  2619. ! #line 1605 "c-parse.y"
  2620.   { stmt_count++;
  2621.             emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
  2622.             STRIP_NOPS (yyvsp[-2].ttype);
  2623. ***************
  2624. *** 2658,2664 ****
  2625.               error ("argument of `asm' is not a constant string"); ;
  2626.       break;}
  2627.   case 308:
  2628. ! #line 1608 "c-parse.y"
  2629.   { stmt_count++;
  2630.             emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
  2631.             c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
  2632. --- 2990,2996 ----
  2633.               error ("argument of `asm' is not a constant string"); ;
  2634.       break;}
  2635.   case 308:
  2636. ! #line 1616 "c-parse.y"
  2637.   { stmt_count++;
  2638.             emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
  2639.             c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
  2640. ***************
  2641. *** 2666,2672 ****
  2642.                        input_filename, lineno); ;
  2643.       break;}
  2644.   case 309:
  2645. ! #line 1615 "c-parse.y"
  2646.   { stmt_count++;
  2647.             emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
  2648.             c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
  2649. --- 2998,3004 ----
  2650.                        input_filename, lineno); ;
  2651.       break;}
  2652.   case 309:
  2653. ! #line 1623 "c-parse.y"
  2654.   { stmt_count++;
  2655.             emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
  2656.             c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
  2657. ***************
  2658. *** 2674,2680 ****
  2659.                        input_filename, lineno); ;
  2660.       break;}
  2661.   case 310:
  2662. ! #line 1623 "c-parse.y"
  2663.   { stmt_count++;
  2664.             emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
  2665.             c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
  2666. --- 3006,3012 ----
  2667.                        input_filename, lineno); ;
  2668.       break;}
  2669.   case 310:
  2670. ! #line 1631 "c-parse.y"
  2671.   { stmt_count++;
  2672.             emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
  2673.             c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
  2674. ***************
  2675. *** 2682,2688 ****
  2676.                        input_filename, lineno); ;
  2677.       break;}
  2678.   case 311:
  2679. ! #line 1629 "c-parse.y"
  2680.   { tree decl;
  2681.             stmt_count++;
  2682.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  2683. --- 3014,3020 ----
  2684.                        input_filename, lineno); ;
  2685.       break;}
  2686.   case 311:
  2687. ! #line 1637 "c-parse.y"
  2688.   { tree decl;
  2689.             stmt_count++;
  2690.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  2691. ***************
  2692. *** 2695,2707 ****
  2693.           ;
  2694.       break;}
  2695.   case 312:
  2696. ! #line 1640 "c-parse.y"
  2697.   { stmt_count++;
  2698.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2699.             expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
  2700.       break;}
  2701.   case 315:
  2702. ! #line 1653 "c-parse.y"
  2703.   {
  2704.           /* The value returned by this action is  */
  2705.           /*      1 if everything is OK */ 
  2706. --- 3027,3039 ----
  2707.           ;
  2708.       break;}
  2709.   case 312:
  2710. ! #line 1648 "c-parse.y"
  2711.   { stmt_count++;
  2712.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2713.             expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
  2714.       break;}
  2715.   case 315:
  2716. ! #line 1661 "c-parse.y"
  2717.   {
  2718.           /* The value returned by this action is  */
  2719.           /*      1 if everything is OK */ 
  2720. ***************
  2721. *** 2724,2737 ****
  2722.         ;
  2723.       break;}
  2724.   case 316:
  2725. ! #line 1674 "c-parse.y"
  2726.   {
  2727.           if (yyvsp[-1].itype)
  2728.             iterator_for_loop_end (yyvsp[-3].ttype);
  2729.         ;
  2730.       break;}
  2731.   case 317:
  2732. ! #line 1706 "c-parse.y"
  2733.   { register tree value = check_case_value (yyvsp[-1].ttype);
  2734.             register tree label
  2735.               = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  2736. --- 3056,3069 ----
  2737.         ;
  2738.       break;}
  2739.   case 316:
  2740. ! #line 1682 "c-parse.y"
  2741.   {
  2742.           if (yyvsp[-1].itype)
  2743.             iterator_for_loop_end (yyvsp[-3].ttype);
  2744.         ;
  2745.       break;}
  2746.   case 317:
  2747. ! #line 1714 "c-parse.y"
  2748.   { register tree value = check_case_value (yyvsp[-1].ttype);
  2749.             register tree label
  2750.               = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  2751. ***************
  2752. *** 2758,2764 ****
  2753.             position_after_white_space (); ;
  2754.       break;}
  2755.   case 318:
  2756. ! #line 1731 "c-parse.y"
  2757.   { register tree value1 = check_case_value (yyvsp[-3].ttype);
  2758.             register tree value2 = check_case_value (yyvsp[-1].ttype);
  2759.             register tree label
  2760. --- 3090,3096 ----
  2761.             position_after_white_space (); ;
  2762.       break;}
  2763.   case 318:
  2764. ! #line 1739 "c-parse.y"
  2765.   { register tree value1 = check_case_value (yyvsp[-3].ttype);
  2766.             register tree value2 = check_case_value (yyvsp[-1].ttype);
  2767.             register tree label
  2768. ***************
  2769. *** 2789,2795 ****
  2770.             position_after_white_space (); ;
  2771.       break;}
  2772.   case 319:
  2773. ! #line 1760 "c-parse.y"
  2774.   {
  2775.             tree duplicate;
  2776.             register tree label
  2777. --- 3121,3127 ----
  2778.             position_after_white_space (); ;
  2779.       break;}
  2780.   case 319:
  2781. ! #line 1768 "c-parse.y"
  2782.   {
  2783.             tree duplicate;
  2784.             register tree label
  2785. ***************
  2786. *** 2806,2812 ****
  2787.             position_after_white_space (); ;
  2788.       break;}
  2789.   case 320:
  2790. ! #line 1775 "c-parse.y"
  2791.   { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
  2792.             stmt_count++;
  2793.             emit_nop ();
  2794. --- 3138,3144 ----
  2795.             position_after_white_space (); ;
  2796.       break;}
  2797.   case 320:
  2798. ! #line 1783 "c-parse.y"
  2799.   { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
  2800.             stmt_count++;
  2801.             emit_nop ();
  2802. ***************
  2803. *** 2815,2866 ****
  2804.             position_after_white_space (); ;
  2805.       break;}
  2806.   case 321:
  2807. ! #line 1787 "c-parse.y"
  2808.   { emit_line_note (input_filename, lineno);
  2809.             yyval.ttype = NULL_TREE; ;
  2810.       break;}
  2811.   case 322:
  2812. ! #line 1790 "c-parse.y"
  2813.   { emit_line_note (input_filename, lineno); ;
  2814.       break;}
  2815.   case 323:
  2816. ! #line 1795 "c-parse.y"
  2817.   { yyval.ttype = NULL_TREE; ;
  2818.       break;}
  2819.   case 325:
  2820. ! #line 1802 "c-parse.y"
  2821.   { yyval.ttype = NULL_TREE; ;
  2822.       break;}
  2823.   case 328:
  2824. ! #line 1809 "c-parse.y"
  2825.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2826.       break;}
  2827.   case 329:
  2828. ! #line 1814 "c-parse.y"
  2829.   { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  2830.       break;}
  2831.   case 330:
  2832. ! #line 1819 "c-parse.y"
  2833.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
  2834.       break;}
  2835.   case 331:
  2836. ! #line 1821 "c-parse.y"
  2837.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
  2838.       break;}
  2839.   case 332:
  2840. ! #line 1827 "c-parse.y"
  2841.   { pushlevel (0);
  2842.             clear_parm_order ();
  2843.             declare_parm_level (0); ;
  2844.       break;}
  2845.   case 333:
  2846. ! #line 1831 "c-parse.y"
  2847.   { yyval.ttype = yyvsp[0].ttype;
  2848.             parmlist_tags_warning ();
  2849.             poplevel (0, 0, 0); ;
  2850.       break;}
  2851.   case 335:
  2852. ! #line 1839 "c-parse.y"
  2853.   { tree parm;
  2854.             if (pedantic)
  2855.               pedwarn ("ANSI C forbids forward parameter declarations");
  2856. --- 3147,3198 ----
  2857.             position_after_white_space (); ;
  2858.       break;}
  2859.   case 321:
  2860. ! #line 1795 "c-parse.y"
  2861.   { emit_line_note (input_filename, lineno);
  2862.             yyval.ttype = NULL_TREE; ;
  2863.       break;}
  2864.   case 322:
  2865. ! #line 1798 "c-parse.y"
  2866.   { emit_line_note (input_filename, lineno); ;
  2867.       break;}
  2868.   case 323:
  2869. ! #line 1803 "c-parse.y"
  2870.   { yyval.ttype = NULL_TREE; ;
  2871.       break;}
  2872.   case 325:
  2873. ! #line 1810 "c-parse.y"
  2874.   { yyval.ttype = NULL_TREE; ;
  2875.       break;}
  2876.   case 328:
  2877. ! #line 1817 "c-parse.y"
  2878.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2879.       break;}
  2880.   case 329:
  2881. ! #line 1822 "c-parse.y"
  2882.   { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  2883.       break;}
  2884.   case 330:
  2885. ! #line 1827 "c-parse.y"
  2886.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
  2887.       break;}
  2888.   case 331:
  2889. ! #line 1829 "c-parse.y"
  2890.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
  2891.       break;}
  2892.   case 332:
  2893. ! #line 1835 "c-parse.y"
  2894.   { pushlevel (0);
  2895.             clear_parm_order ();
  2896.             declare_parm_level (0); ;
  2897.       break;}
  2898.   case 333:
  2899. ! #line 1839 "c-parse.y"
  2900.   { yyval.ttype = yyvsp[0].ttype;
  2901.             parmlist_tags_warning ();
  2902.             poplevel (0, 0, 0); ;
  2903.       break;}
  2904.   case 335:
  2905. ! #line 1847 "c-parse.y"
  2906.   { tree parm;
  2907.             if (pedantic)
  2908.               pedwarn ("ANSI C forbids forward parameter declarations");
  2909. ***************
  2910. *** 2870,2943 ****
  2911.             clear_parm_order (); ;
  2912.       break;}
  2913.   case 336:
  2914. ! #line 1847 "c-parse.y"
  2915.   { yyval.ttype = yyvsp[0].ttype; ;
  2916.       break;}
  2917.   case 337:
  2918. ! #line 1849 "c-parse.y"
  2919.   { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  2920.       break;}
  2921.   case 338:
  2922. ! #line 1855 "c-parse.y"
  2923.   { yyval.ttype = get_parm_info (0); ;
  2924.       break;}
  2925.   case 339:
  2926. ! #line 1857 "c-parse.y"
  2927.   { yyval.ttype = get_parm_info (0);
  2928.             if (pedantic)
  2929.               pedwarn ("ANSI C requires a named argument before `...'");
  2930.           ;
  2931.       break;}
  2932.   case 340:
  2933. ! #line 1862 "c-parse.y"
  2934.   { yyval.ttype = get_parm_info (1); ;
  2935.       break;}
  2936.   case 341:
  2937. ! #line 1864 "c-parse.y"
  2938.   { yyval.ttype = get_parm_info (0); ;
  2939.       break;}
  2940.   case 342:
  2941. ! #line 1869 "c-parse.y"
  2942.   { push_parm_decl (yyvsp[0].ttype); ;
  2943.       break;}
  2944.   case 343:
  2945. ! #line 1871 "c-parse.y"
  2946.   { push_parm_decl (yyvsp[0].ttype); ;
  2947.       break;}
  2948.   case 344:
  2949. ! #line 1878 "c-parse.y"
  2950.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2951.       break;}
  2952.   case 345:
  2953. ! #line 1880 "c-parse.y"
  2954.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2955.       break;}
  2956.   case 346:
  2957. ! #line 1882 "c-parse.y"
  2958.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2959.       break;}
  2960.   case 347:
  2961. ! #line 1884 "c-parse.y"
  2962.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2963.       break;}
  2964.   case 348:
  2965. ! #line 1886 "c-parse.y"
  2966.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2967.       break;}
  2968.   case 349:
  2969. ! #line 1893 "c-parse.y"
  2970.   { pushlevel (0);
  2971.             clear_parm_order ();
  2972.             declare_parm_level (1); ;
  2973.       break;}
  2974.   case 350:
  2975. ! #line 1897 "c-parse.y"
  2976.   { yyval.ttype = yyvsp[0].ttype;
  2977.             parmlist_tags_warning ();
  2978.             poplevel (0, 0, 0); ;
  2979.       break;}
  2980.   case 352:
  2981. ! #line 1905 "c-parse.y"
  2982.   { tree t;
  2983.             for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
  2984.               if (TREE_VALUE (t) == NULL_TREE)
  2985. --- 3202,3275 ----
  2986.             clear_parm_order (); ;
  2987.       break;}
  2988.   case 336:
  2989. ! #line 1855 "c-parse.y"
  2990.   { yyval.ttype = yyvsp[0].ttype; ;
  2991.       break;}
  2992.   case 337:
  2993. ! #line 1857 "c-parse.y"
  2994.   { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  2995.       break;}
  2996.   case 338:
  2997. ! #line 1863 "c-parse.y"
  2998.   { yyval.ttype = get_parm_info (0); ;
  2999.       break;}
  3000.   case 339:
  3001. ! #line 1865 "c-parse.y"
  3002.   { yyval.ttype = get_parm_info (0);
  3003.             if (pedantic)
  3004.               pedwarn ("ANSI C requires a named argument before `...'");
  3005.           ;
  3006.       break;}
  3007.   case 340:
  3008. ! #line 1870 "c-parse.y"
  3009.   { yyval.ttype = get_parm_info (1); ;
  3010.       break;}
  3011.   case 341:
  3012. ! #line 1872 "c-parse.y"
  3013.   { yyval.ttype = get_parm_info (0); ;
  3014.       break;}
  3015.   case 342:
  3016. ! #line 1877 "c-parse.y"
  3017.   { push_parm_decl (yyvsp[0].ttype); ;
  3018.       break;}
  3019.   case 343:
  3020. ! #line 1879 "c-parse.y"
  3021.   { push_parm_decl (yyvsp[0].ttype); ;
  3022.       break;}
  3023.   case 344:
  3024. ! #line 1886 "c-parse.y"
  3025.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  3026.       break;}
  3027.   case 345:
  3028. ! #line 1888 "c-parse.y"
  3029.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  3030.       break;}
  3031.   case 346:
  3032. ! #line 1890 "c-parse.y"
  3033.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  3034.       break;}
  3035.   case 347:
  3036. ! #line 1892 "c-parse.y"
  3037.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  3038.       break;}
  3039.   case 348:
  3040. ! #line 1894 "c-parse.y"
  3041.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  3042.       break;}
  3043.   case 349:
  3044. ! #line 1901 "c-parse.y"
  3045.   { pushlevel (0);
  3046.             clear_parm_order ();
  3047.             declare_parm_level (1); ;
  3048.       break;}
  3049.   case 350:
  3050. ! #line 1905 "c-parse.y"
  3051.   { yyval.ttype = yyvsp[0].ttype;
  3052.             parmlist_tags_warning ();
  3053.             poplevel (0, 0, 0); ;
  3054.       break;}
  3055.   case 352:
  3056. ! #line 1913 "c-parse.y"
  3057.   { tree t;
  3058.             for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
  3059.               if (TREE_VALUE (t) == NULL_TREE)
  3060. ***************
  3061. *** 2945,2968 ****
  3062.             yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
  3063.       break;}
  3064.   case 353:
  3065. ! #line 1915 "c-parse.y"
  3066.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  3067.       break;}
  3068.   case 354:
  3069. ! #line 1917 "c-parse.y"
  3070.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  3071.       break;}
  3072.   case 355:
  3073. ! #line 1923 "c-parse.y"
  3074.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  3075.       break;}
  3076.   case 356:
  3077. ! #line 1925 "c-parse.y"
  3078.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  3079.       break;}
  3080.   }
  3081.      /* the action file gets copied in in place of this dollarsign */
  3082. ! #line 327 "bison.simple"
  3083.   
  3084.     yyvsp -= yylen;
  3085.     yyssp -= yylen;
  3086. --- 3277,3300 ----
  3087.             yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
  3088.       break;}
  3089.   case 353:
  3090. ! #line 1923 "c-parse.y"
  3091.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  3092.       break;}
  3093.   case 354:
  3094. ! #line 1925 "c-parse.y"
  3095.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  3096.       break;}
  3097.   case 355:
  3098. ! #line 1931 "c-parse.y"
  3099.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  3100.       break;}
  3101.   case 356:
  3102. ! #line 1933 "c-parse.y"
  3103.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  3104.       break;}
  3105.   }
  3106.      /* the action file gets copied in in place of this dollarsign */
  3107. ! #line 465 "/usr/lib/bison.simple"
  3108.   
  3109.     yyvsp -= yylen;
  3110.     yyssp -= yylen;
  3111. ***************
  3112. *** 3021,3029 ****
  3113.       /* If not already recovering from an error, report this error.  */
  3114.       {
  3115.         ++yynerrs;
  3116. !       yyerror("parse error");
  3117.       }
  3118.   
  3119.     if (yyerrstatus == 3)
  3120.       {
  3121.         /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  3122. --- 3353,3406 ----
  3123.       /* If not already recovering from an error, report this error.  */
  3124.       {
  3125.         ++yynerrs;
  3126. ! #ifdef YYERROR_VERBOSE
  3127. !       yyn = yypact[yystate];
  3128. !       if (yyn > YYFLAG && yyn < YYLAST)
  3129. !     {
  3130. !       int size = 0;
  3131. !       char *msg;
  3132. !       int x, count;
  3133. !       count = 0;
  3134. !       /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  3135. !       for (x = (yyn < 0 ? -yyn : 0);
  3136. !            x < (sizeof(yytname) / sizeof(char *)); x++)
  3137. !         if (yycheck[x + yyn] == x)
  3138. !           size += strlen(yytname[x]) + 15, count++;
  3139. !       msg = (char *) malloc(size + 15);
  3140. !       if (msg != 0)
  3141. !         {
  3142. !           strcpy(msg, "parse error");
  3143. !           if (count < 5)
  3144. !         {
  3145. !           count = 0;
  3146. !           for (x = (yyn < 0 ? -yyn : 0);
  3147. !                x < (sizeof(yytname) / sizeof(char *)); x++)
  3148. !             if (yycheck[x + yyn] == x)
  3149. !               {
  3150. !             strcat(msg, count == 0 ? ", expecting `" : " or `");
  3151. !             strcat(msg, yytname[x]);
  3152. !             strcat(msg, "'");
  3153. !             count++;
  3154. !               }
  3155. !         }
  3156. !           yyerror(msg);
  3157. !           free(msg);
  3158. !         }
  3159. !       else
  3160. !         yyerror ("parse error; also virtual memory exceeded");
  3161. !     }
  3162. !       else
  3163. ! #endif /* YYERROR_VERBOSE */
  3164. !     yyerror("parse error");
  3165.       }
  3166.   
  3167. +   goto yyerrlab1;
  3168. + yyerrlab1:   /* here on error raised explicitly by an action */
  3169.     if (yyerrstatus == 3)
  3170.       {
  3171.         /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  3172. ***************
  3173. *** 3113,3117 ****
  3174.     yystate = yyn;
  3175.     goto yynewstate;
  3176.   }
  3177. ! #line 1928 "c-parse.y"
  3178.   
  3179. --- 3490,3494 ----
  3180.     yystate = yyn;
  3181.     goto yynewstate;
  3182.   }
  3183. ! #line 1936 "c-parse.y"
  3184.   
  3185. diff -rc --new-file gcc-2.5.7-fsf/c-parse.y gcc-2.5.7-amiga/c-parse.y
  3186. *** gcc-2.5.7-fsf/c-parse.y    Tue Nov 23 23:43:28 1993
  3187. --- gcc-2.5.7-amiga/c-parse.y    Sun Dec 12 17:25:17 1993
  3188. ***************
  3189. *** 898,905 ****
  3190.   
  3191.   attrib
  3192.       : IDENTIFIER
  3193. !     { if (strcmp (IDENTIFIER_POINTER ($1), "packed")
  3194.             && strcmp (IDENTIFIER_POINTER ($1), "noreturn"))
  3195.           warning ("`%s' attribute directive ignored",
  3196.                IDENTIFIER_POINTER ($1));
  3197.         $$ = $1; }
  3198. --- 898,913 ----
  3199.   
  3200.   attrib
  3201.       : IDENTIFIER
  3202. !     {
  3203. ! #ifdef HANDLE_ATTRIBUTE0
  3204. !       /* give the function a chance to validate further attributes */
  3205. !       if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER ($1)) ||
  3206. !           (strcmp (IDENTIFIER_POINTER ($1), "packed")
  3207. !           && strcmp (IDENTIFIER_POINTER ($1), "noreturn")))
  3208. ! #else
  3209. !       if (strcmp (IDENTIFIER_POINTER ($1), "packed")
  3210.             && strcmp (IDENTIFIER_POINTER ($1), "noreturn"))
  3211. + #endif
  3212.           warning ("`%s' attribute directive ignored",
  3213.                IDENTIFIER_POINTER ($1));
  3214.         $$ = $1; }
  3215. diff -rc --new-file gcc-2.5.7-fsf/calls.c gcc-2.5.7-amiga/calls.c
  3216. *** gcc-2.5.7-fsf/calls.c    Thu Dec  2 12:21:43 1993
  3217. --- gcc-2.5.7-amiga/calls.c    Sun Dec 12 17:25:23 1993
  3218. ***************
  3219. *** 2107,2112 ****
  3220. --- 2107,2120 ----
  3221.   
  3222.     argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
  3223.   
  3224. + #if defined (__amigados__)
  3225. + /* how would you do this RIGHT ?? fake a DECL node? dunno... */
  3226. + #ifdef ENCODE_SECTION_INFO
  3227. +   /* mark it as a function (to be in the text section that is) */
  3228. +   SYMBOL_REF_FLAG (fun) = 1;
  3229. + #endif
  3230. + #endif
  3231.     INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
  3232.   
  3233.     args_size.constant = 0;
  3234. diff -rc --new-file gcc-2.5.7-fsf/cccp.c gcc-2.5.7-amiga/cccp.c
  3235. *** gcc-2.5.7-fsf/cccp.c    Sat Dec 11 13:49:38 1993
  3236. --- gcc-2.5.7-amiga/cccp.c    Sun Dec 12 17:25:32 1993
  3237. ***************
  3238. *** 39,44 ****
  3239. --- 39,60 ----
  3240.   #include "config.h"
  3241.   #endif /* not EMACS */
  3242.   
  3243. + #ifdef amigados
  3244. + /* Since cpp uses alloca to store all its read files, this is quite deadly
  3245. +    on a system with non-automatic stackgrowth like amigados, so we better
  3246. +    turn it off now.  Normally alloca is #defined to __builtin_alloca, so
  3247. +    undefining it causes an external alloca to be used.
  3248. +    Note that it's not wise to generally inhibit __builtin_alloca, since
  3249. +    using the generic emulator entitels a serious (!) speed penalty, and
  3250. +    it's bad enough that we have to live with it in cccp, don't make cc1
  3251. +    unbearably slow as well... */
  3252. + #undef alloca
  3253. + static int amigados_abs_filename ();
  3254. + #endif
  3255.   #ifndef STANDARD_INCLUDE_DIR
  3256.   #define STANDARD_INCLUDE_DIR "/usr/include"
  3257.   #endif
  3258. ***************
  3259. *** 1874,1884 ****
  3260. --- 1890,1904 ----
  3261.         char *p = in_fname;
  3262.         char *p1 = p;
  3263.         /* Discard all directory prefixes from P.  */
  3264. + #ifdef FILE_NAME_NONDIRECTORY
  3265. +       p = FILE_NAME_NONDIRECTORY (p);
  3266. + #else
  3267.         while (*p1) {
  3268.       if (*p1 == '/')
  3269.         p = p1 + 1;
  3270.       p1++;
  3271.         }
  3272. + #endif
  3273.         /* Output P, but remove known suffixes.  */
  3274.         len = strlen (p);
  3275.         if (p[len - 2] == '.' && p[len - 1] == 'c')
  3276. ***************
  3277. *** 3636,3642 ****
  3278.   
  3279.         if (!no_output && already_output == 0
  3280.         && (kt->pass_thru
  3281. !           || (kt->type == T_DEFINE
  3282.             && (dump_macros == dump_names
  3283.                 || dump_macros == dump_definitions)))) {
  3284.           int len;
  3285. --- 3656,3662 ----
  3286.   
  3287.         if (!no_output && already_output == 0
  3288.         && (kt->pass_thru
  3289. !           || ((kt->type == T_DEFINE || kt->type == T_UNDEF)
  3290.             && (dump_macros == dump_names
  3291.                 || dump_macros == dump_definitions)))) {
  3292.           int len;
  3293. ***************
  3294. *** 3982,3987 ****
  3295. --- 4002,4019 ----
  3296.           search_start = dsp;
  3297.   #ifndef VMS
  3298.           ep = rindex (nam, '/');
  3299. + #ifdef amigados
  3300. +         /* amigados uses unix-style directory-filename separation, but
  3301. +            has VMS-style logicals as well */
  3302. +         if (ep == NULL) 
  3303. +           {
  3304. +         ep = rindex (nam, ':');
  3305. +         /* a ':' is part of the directory name, a '/' isn't ! */
  3306. +             if (ep != NULL) ep++;
  3307. +           }
  3308. + #endif /* amigados */
  3309.   #else                /* VMS */
  3310.           ep = rindex (nam, ']');
  3311.           if (ep == NULL) ep = rindex (nam, '>');
  3312. ***************
  3313. *** 4061,4067 ****
  3314. --- 4093,4103 ----
  3315.   
  3316.     /* If specified file name is absolute, just open it.  */
  3317.   
  3318. + #ifndef amigados
  3319.     if (*fbeg == '/') {
  3320. + #else
  3321. +   if (amigados_abs_filename (fbeg, flen)) {
  3322. + #endif
  3323.       strncpy (fname, fbeg, flen);
  3324.       fname[flen] = 0;
  3325.       if (redundant_include_p (fname))
  3326. ***************
  3327. *** 4084,4089 ****
  3328. --- 4120,4129 ----
  3329.       if (searchptr->fname[0] == 0)
  3330.         continue;
  3331.       strcpy (fname, searchptr->fname);
  3332. + #ifdef amigados
  3333. +     if (fname[strlen (fname) - 1] != ':')
  3334. + #endif
  3335.       strcat (fname, "/");
  3336.       fname[strlen (fname) + flen] = 0;
  3337.         } else {
  3338. ***************
  3339. *** 9017,9025 ****
  3340.   perror_with_name (name)
  3341.        char *name;
  3342.   {
  3343.     fprintf (stderr, "%s: ", progname);
  3344. !   if (errno < sys_nerr)
  3345. !     fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]);
  3346.     else
  3347.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  3348.     errors++;
  3349. --- 9057,9067 ----
  3350.   perror_with_name (name)
  3351.        char *name;
  3352.   {
  3353. +   int error = errno;
  3354.     fprintf (stderr, "%s: ", progname);
  3355. !   if (error < sys_nerr)
  3356. !     fprintf (stderr, "%s: %s\n", name, sys_errlist[error]);
  3357.     else
  3358.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  3359.     errors++;
  3360. ***************
  3361. *** 9416,9418 ****
  3362. --- 9458,9484 ----
  3363.     return dst;
  3364.   }
  3365.   #endif /* VMS */
  3366. + #ifdef amigados
  3367. + /* This function returns whether the LEN characters long filename FNAME 
  3368. +    is an absolute path specification. */
  3369. + static int
  3370. + amigados_abs_filename (fname, len)
  3371. +      char *fname;
  3372. +      int len;
  3373. + {
  3374. +   /* we're using ixemul.library, which treats `/foo' as `foo:', so 
  3375. +      fname[0] is to be considered absolute as well */
  3376. +   if (fname[0] == '/')
  3377. +     return 1;
  3378. +   /* else do an index() on fname, but one which is limited to len characters */
  3379. +   while (*fname && *fname != ':' && len) 
  3380. +     fname++, len--;
  3381. +   return *fname == ':';
  3382. + }
  3383. + #endif /* amigados */
  3384. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/amigados.c gcc-2.5.7-amiga/config/m68k/amigados.c
  3385. *** gcc-2.5.7-fsf/config/m68k/amigados.c    Thu Jan  1 00:00:00 1970
  3386. --- gcc-2.5.7-amiga/config/m68k/amigados.c    Sun Dec 12 17:25:35 1993
  3387. ***************
  3388. *** 0 ****
  3389. --- 1,158 ----
  3390. + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  3391. +    Copyright (C) 1992 Free Software Foundation, Inc.
  3392. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  3393. + This file is part of GNU CC.
  3394. + GNU CC is free software; you can redistribute it and/or modify
  3395. + it under the terms of the GNU General Public License as published by
  3396. + the Free Software Foundation; either version 2, or (at your option)
  3397. + any later version.
  3398. + GNU CC is distributed in the hope that it will be useful,
  3399. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  3400. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  3401. + GNU General Public License for more details.
  3402. + You should have received a copy of the GNU General Public License
  3403. + along with GNU CC; see the file COPYING.  If not, write to
  3404. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  3405. + #include "m68k/m68k.c"
  3406. + /* Does operand (which is a symbolic_operand) live in text space? If
  3407. +    so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true.
  3408. +    This function is used in base relative code generation. */
  3409. + int
  3410. + read_only_operand (operand)
  3411. +      rtx operand;
  3412. + {
  3413. +   if (GET_CODE (operand) == CONST)
  3414. +     operand = XEXP (XEXP (operand, 0), 0);
  3415. +   if (GET_CODE (operand) == SYMBOL_REF)
  3416. +     return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand);
  3417. +   return 1;
  3418. + }
  3419. + /* the rest of the file is to implement AmigaDOS specific keywords some day.
  3420. +    The approach used so far used __attribute__ for this, but this required
  3421. +    changes to c-parse.y as well as if we'd use the common keywords used
  3422. +    on commercial AmigaDOS C-compilers as well. So in the future I'll probably
  3423. +    switch to __saveds and __interrupt keywords as well.
  3424. +    The rest of this file is currently ignored, because it's no longer
  3425. +    working with the current gcc version. */
  3426. + #if not_yet_working
  3427. + #include "tree.h"
  3428. + struct attribute {
  3429. +   tree ident;
  3430. +   int  saveds : 1,
  3431. +        interrupt : 1;
  3432. + };
  3433. + static struct attribute *a_tab = 0;
  3434. + static int a_index, a_size;
  3435. + void
  3436. + add_attr_entry (attr)
  3437. +     struct attribute *attr;
  3438. + {
  3439. +   if (! a_tab)
  3440. +     {
  3441. +       a_size = 10;
  3442. +       a_index = 0;
  3443. +       a_tab  = (struct attribute *) xmalloc (a_size * sizeof (struct attribute));
  3444. +     }
  3445. +   if (a_index == a_size)
  3446. +     {
  3447. +       a_size <<= 1;
  3448. +       a_tab = (struct attribute *) xrealloc (a_tab, a_size * sizeof (struct attribute));
  3449. +     }
  3450. +   a_tab[a_index++] = *attr;
  3451. + }
  3452. + void
  3453. + attr_do_saveds (function_ident)
  3454. +       tree function_ident;
  3455. + {
  3456. +   struct attribute attr, *a;
  3457. +   int i;
  3458. +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  3459. +     if (a->ident == function_ident)
  3460. +       {
  3461. +     a->saveds = 1;
  3462. +     return;
  3463. +       }
  3464. +   /* create a new entry for this function */
  3465. +   attr.ident     = function_ident;
  3466. +   attr.saveds    = 1;
  3467. +   attr.interrupt = 0;
  3468. +   add_attr_entry (&attr);
  3469. + }
  3470. + void
  3471. + attr_do_interrupt (function_ident)
  3472. +     tree function_ident;
  3473. + {
  3474. +   struct attribute attr, *a;
  3475. +   int i;
  3476. +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  3477. +     if (a->ident == function_ident)
  3478. +       {
  3479. +     /* __interrupt implies __saveds */
  3480. +     a->saveds    = 1;
  3481. +     a->interrupt = 1;
  3482. +     return;
  3483. +       }
  3484. +   /* create a new entry for this function */
  3485. +   attr.ident     = function_ident;
  3486. +   attr.saveds     = 1;
  3487. +   attr.interrupt = 1;
  3488. +   add_attr_entry (&attr);
  3489. + }
  3490. + int
  3491. + attr_does_saveds (function_name)
  3492. +     char *function_name;
  3493. + {
  3494. +   tree ident = get_identifier (function_name);
  3495. +   struct attribute *attr;
  3496. +   int i;
  3497. +   
  3498. +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  3499. +     if (attr->ident == ident)
  3500. +       return attr->saveds;
  3501. +   return 0;
  3502. + }
  3503. + int
  3504. + attr_does_interrupt (function_name)
  3505. +     char *function_name;
  3506. + {
  3507. +   tree ident = get_identifier (function_name);
  3508. +   struct attribute *attr;
  3509. +   int i;
  3510. +   
  3511. +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  3512. +     if (attr->ident == ident)
  3513. +       return attr->interrupt;
  3514. +   return 0;
  3515. + }
  3516. + #endif
  3517. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/amigados.h gcc-2.5.7-amiga/config/m68k/amigados.h
  3518. *** gcc-2.5.7-fsf/config/m68k/amigados.h    Thu Jan  1 00:00:00 1970
  3519. --- gcc-2.5.7-amiga/config/m68k/amigados.h    Sun Dec 12 17:25:37 1993
  3520. ***************
  3521. *** 0 ****
  3522. --- 1,408 ----
  3523. + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  3524. +    Copyright (C) 1992 Free Software Foundation, Inc.
  3525. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  3526. + This file is part of GNU CC.
  3527. + GNU CC is free software; you can redistribute it and/or modify
  3528. + it under the terms of the GNU General Public License as published by
  3529. + the Free Software Foundation; either version 2, or (at your option)
  3530. + any later version.
  3531. + GNU CC is distributed in the hope that it will be useful,
  3532. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  3533. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  3534. + GNU General Public License for more details.
  3535. + You should have received a copy of the GNU General Public License
  3536. + along with GNU CC; see the file COPYING.  If not, write to
  3537. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  3538. + #include "m68k/m68k.h"
  3539. + /* See m68k.h for bits in TARGET_DEFAULT.
  3540. +    0 means 68000, no hardware fpu (68881/68882/68040).
  3541. +    7 means 68020 (or higher) with hardware fpu.  */
  3542. + #ifndef TARGET_DEFAULT
  3543. + #define TARGET_DEFAULT 0
  3544. + #endif
  3545. + /* Define __HAVE_68881__ in preprocessor according to the -m flags.
  3546. +    This will control the use of inline 68881 insns in certain macros.
  3547. +    Also inform the program which CPU this is for.  */
  3548. + #if TARGET_DEFAULT & 02
  3549. + /* -m68881 is the default */
  3550. + #define CPP_SPEC \
  3551. + "%{!msoft-float:-D__HAVE_68881__ }\
  3552. + %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}"
  3553. + #else
  3554. + /* -msoft-float is the default, assume -mc68000 as well */
  3555. + #define CPP_SPEC \
  3556. + "%{m68881:-D__HAVE_68881__ }\
  3557. + %{!ansi:%{m68020:-Dmc68020}%{mc68020:-Dmc68020}%{!mc68020:%{!m68020:-Dmc68010}}}"
  3558. + /* Don't try using XFmode since we don't have appropriate runtime software
  3559. +    support.  */
  3560. + #undef LONG_DOUBLE_TYPE_SIZE
  3561. + #define LONG_DOUBLE_TYPE_SIZE 64
  3562. + #endif
  3563. + /* -m68000 requires special flags to the assembler.  */
  3564. + #if TARGET_DEFAULT & 01
  3565. + #define ASM_SPEC \
  3566. +  "%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}} %{msmall-code:-l} "
  3567. + #else
  3568. + #define ASM_SPEC \
  3569. +  "%{m68020:-mc68020}%{mc68020:-mc68020}%{!mc68020:%{!m68020:-mc68010}} %{msmall-code:-l} "
  3570. + #endif
  3571. + /* amiga/amigados are the new "standard" defines for the Amiga, MCH_AMIGA
  3572. +  * was used before and is included for compatibility reasons */
  3573. + #define CPP_PREDEFINES "-Dmc68000 -Damiga -Damigados -DMCH_AMIGA -DAMIGA"
  3574. + /* Choose the right startup file, depending on whether we use base relative
  3575. +    code, base relative code with automatic relocation (-resident), or plain
  3576. +    crt0.o. 
  3577. +   
  3578. +    Profiling is currently only available for plain startup.
  3579. +    mcrt0.o does not (yet) exist. */
  3580. + #define STARTFILE_SPEC \
  3581. +   "%{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}}}}"
  3582. + /* Automatically search libamiga.a for AmigaDOS specific functions.  Note
  3583. +    that we first search the standard C library to resolve as much as
  3584. +    possible from there, since it has names that are duplicated in libamiga.a
  3585. +    which we *don't* want from there.  Then search the standard C library
  3586. +    again to resolve any references that libamiga.a might have generated.
  3587. +    This may only be a temporary solution since it might be better to simply
  3588. +    remove the things from libamiga.a that should be pulled in from libc.a
  3589. +    instead, which would eliminate the first reference to libc.a. */
  3590. + #define LIB_SPEC "%{!p:%{!pg:-lc -lamiga -lc}}%{p:-lc_p -lamiga -lc_p}%{pg:-lc_p -lamiga -lc_p}"
  3591. + /* if debugging, tell the linker to output amiga-hunk symbols *and* a BSD
  3592. +    compatible debug hunk (which will probably change in the future, it's not
  3593. +    tremendously useful in its current state). */
  3594. + #define LINK_SPEC "%{g:-amiga-debug-hunk} %{fbaserel:-databss-together} %{resident:-databss-together -datadata-reloc -f libb} "
  3595. + #define CC1_SPEC "%{resident:-fbaserel} "
  3596. + #define CC1PLUS_SPEC "%{resident:-fbaserel} "
  3597. + /* Omit frame pointer at high optimization levels. (This doesn't hurt, since
  3598. +    GDB doesn't work under AmigaDOS at the moment anyway..) */
  3599. +   
  3600. + #define OPTIMIZATION_OPTIONS(OPTIMIZE) \
  3601. + {                                  \
  3602. +   if (OPTIMIZE >= 2)                         \
  3603. +     flag_omit_frame_pointer = 1;                \
  3604. + }
  3605. + /* provide a dummy entry for the small-code switch. This is currently only
  3606. +    needed by the assembler (explanations: m68k.h), but will be used by cc1
  3607. +    to output 16bit pc-relative code later. */
  3608. + #undef TARGET_SWITCHES
  3609. + #define TARGET_SWITCHES  \
  3610. +   { { "68020", 5},                \
  3611. +     { "c68020", 5},                \
  3612. +     { "68881", 2},                \
  3613. +     { "bitfield", 4},                \
  3614. +     { "68000", -5},                \
  3615. +     { "c68000", -5},                \
  3616. +     { "soft-float", -0102},            \
  3617. +     { "nobitfield", -4},            \
  3618. +     { "rtd", 8},                \
  3619. +     { "nortd", -8},                \
  3620. +     { "short", 040},                \
  3621. +     { "noshort", -040},                \
  3622. +     { "fpa", 0100},                \
  3623. +     { "nofpa", -0100},                \
  3624. +     { "sky", 0200},                \
  3625. +     { "nosky", -0200},                \
  3626. +     { "68040", 0407},                \
  3627. +     { "68030", -01400},                \
  3628. +     { "68030", 7},                \
  3629. +     { "68040-only", 01000},            \
  3630. +     { "small-code", 0 },            \
  3631. +     { "", TARGET_DEFAULT}}
  3632. + /* Every structure or union's size must be a multiple of 2 bytes.  */
  3633. + #define STRUCTURE_SIZE_BOUNDARY 16
  3634. + /* This is (almost;-)) BSD, so it wants DBX format.  */
  3635. + #define DBX_DEBUGGING_INFO
  3636. + /* Allow folding division by zero.  */
  3637. + #define REAL_INFINITY
  3638. + #if 0    /* This apparently is no longer necessary? */
  3639. + /* This is how to output an assembler line defining a `double' constant.  */
  3640. + #undef ASM_OUTPUT_DOUBLE
  3641. + #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                    \
  3642. +   {                                    \
  3643. +     if (REAL_VALUE_ISINF (VALUE))                    \
  3644. +       fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  3645. +     else if (isnan (VALUE))                        \
  3646. +       {                                    \
  3647. +     union { double d; long l[2];} t;                \
  3648. +     t.d = (VALUE);                            \
  3649. +     fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \
  3650. +       }                                    \
  3651. +     else                                \
  3652. +       fprintf (FILE, "\t.double 0r%.17g\n", VALUE);            \
  3653. +   }
  3654. + /* This is how to output an assembler line defining a `float' constant.  */
  3655. + #undef ASM_OUTPUT_FLOAT
  3656. + #define ASM_OUTPUT_FLOAT(FILE,VALUE)                    \
  3657. +   {                                    \
  3658. +     if (REAL_VALUE_ISINF (VALUE))                    \
  3659. +       fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  3660. +     else if (isnan (VALUE))                        \
  3661. +       {                                    \
  3662. +     union { float f; long l;} t;                    \
  3663. +     t.f = (VALUE);                            \
  3664. +     fprintf (FILE, "\t.long 0x%lx\n", t.l);                \
  3665. +       }                                    \
  3666. +     else                                \
  3667. +       fprintf (FILE, "\t.single 0r%.9g\n", VALUE);            \
  3668. +   }
  3669. + /* This is how to output an assembler lines defining floating operands.
  3670. +    There's no way to output a NaN's fraction, so we lose it.  */
  3671. +   
  3672. + #undef ASM_OUTPUT_FLOAT_OPERAND
  3673. + #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE)                \
  3674. +  do {                                \
  3675. +       if (CODE == 'f')                        \
  3676. +         {                            \
  3677. +           (REAL_VALUE_ISINF ((VALUE))                        \
  3678. +            ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  3679. +            : (VALUE) == -0.0                            \
  3680. +            ? asm_fprintf (FILE, "%I0r-0.0")                    \
  3681. +            : asm_fprintf (FILE, "%I0r%.9g", (VALUE))) \
  3682. +         } else {                                        \
  3683. +           long l;                        \
  3684. +           REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);        \
  3685. +           if (sizeof (int) == sizeof (long))            \
  3686. +             asm_fprintf ((FILE), "%I0x%x", l);            \
  3687. +           else                            \
  3688. +             asm_fprintf ((FILE), "%I0x%lx", l);            \
  3689. +         }                            \
  3690. +      } while (0)
  3691. + #undef ASM_OUTPUT_DOUBLE_OPERAND
  3692. + #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)                \
  3693. +   (REAL_VALUE_ISINF ((VALUE))                        \
  3694. +    ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  3695. +    : (VALUE) == -0.0                            \
  3696. +    ? asm_fprintf (FILE, "%I0r-0.0")                    \
  3697. +    : asm_fprintf (FILE, "%I0r%.17g", (VALUE)))
  3698. + #endif    /* 0 */
  3699. + /* use A5 as framepointer instead of A6, this makes A6 available as a
  3700. +    general purpose register, and can thus be used without problems in
  3701. +    direct library calls. */
  3702. + #undef FRAME_POINTER_REGNUM
  3703. + #define FRAME_POINTER_REGNUM 13
  3704. + #undef ARG_POINTER_REGNUM
  3705. + #define ARG_POINTER_REGNUM 13
  3706. + /* we use A4 for this, not A5, which is the framepointer */
  3707. + #undef PIC_OFFSET_TABLE_REGNUM
  3708. + #define PIC_OFFSET_TABLE_REGNUM 12
  3709. + /* setup a default shell return value for those (gazillion..) programs that
  3710. +    (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus
  3711. +    cause the shell to randomly caugh upon executing such programs (contrary
  3712. +    to Unix, AmigaDOS scripts are terminated with an error if a program returns
  3713. +    with an error code above the `error' or even `failure' level
  3714. +    (which is configurable with the FAILAT command) */
  3715. + #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node)
  3716. + /* we do have an ansi-compliant c-library ;-) */
  3717. + #define HAVE_VPRINTF
  3718. + #define HAVE_VFPRINTF
  3719. + #define HAVE_PUTENV
  3720. + #define HAVE_STRERROR
  3721. + #define HAVE_ATEXIT
  3722. + /* given that symbolic_operand(X), return TRUE if no special
  3723. +    base relative relocation is necessary */
  3724. + #define LEGITIMATE_BASEREL_OPERAND_P(X) \
  3725. +   (flag_pic >= 3 && read_only_operand (X))
  3726. + #undef LEGITIMATE_PIC_OPERAND_P
  3727. + #define LEGITIMATE_PIC_OPERAND_P(X) \
  3728. +   (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
  3729. + /* Define this macro if references to a symbol must be treated
  3730. +    differently depending on something about the variable or
  3731. +    function named by the symbol (such as what section it is in).
  3732. +    The macro definition, if any, is executed immediately after the
  3733. +    rtl for DECL or other node is created.
  3734. +    The value of the rtl will be a `mem' whose address is a
  3735. +    `symbol_ref'.
  3736. +    The usual thing for this macro to do is to a flag in the
  3737. +    `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
  3738. +    name string in the `symbol_ref' (if one bit is not enough
  3739. +    information).
  3740. +    On the Amiga we use this to indicate if a symbol is in text or
  3741. +    data space.  */
  3742. + #define ENCODE_SECTION_INFO(DECL)\
  3743. + do                                    \
  3744. +   {                                    \
  3745. +     if (TREE_CODE (DECL) == FUNCTION_DECL)                \
  3746. +       SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;            \
  3747. +     else                                \
  3748. +       {                                    \
  3749. +     rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd'        \
  3750. +            ? TREE_CST_RTL (DECL) : DECL_RTL (DECL));        \
  3751. +     if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl))        \
  3752. +       SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;                \
  3753. +       }                                    \
  3754. +   }                                    \
  3755. + while (0)
  3756. + #undef SELECT_RTX_SECTION
  3757. + #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
  3758. + /* according to varasm.c, RELOC referrs *only* to whether constants (!)
  3759. +    are addressed by address. This doesn't matter in baserelative code,
  3760. +    so we allow (inspite of flag_pic) readonly_data_section() in that
  3761. +    case */
  3762. + #undef SELECT_SECTION
  3763. + #define SELECT_SECTION(DECL, RELOC)                    \
  3764. + {                                    \
  3765. +   if (TREE_CODE (DECL) == STRING_CST)                    \
  3766. +     {                                    \
  3767. +       if (! flag_writable_strings)                    \
  3768. +     readonly_data_section ();                    \
  3769. +       else                                \
  3770. +     data_section ();                        \
  3771. +     }                                    \
  3772. +   else if (TREE_CODE (DECL) == VAR_DECL)                \
  3773. +     {                                    \
  3774. +       if ((flag_pic && flag_pic < 3 && RELOC)                \
  3775. +       || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL))        \
  3776. +     data_section ();                        \
  3777. +       else                                \
  3778. +     readonly_data_section ();                    \
  3779. +     }                                    \
  3780. +   else                                    \
  3781. +     readonly_data_section ();                        \
  3782. + }
  3783. + #if not_yet_working
  3784. + /* starting support for amiga specific keywords
  3785. +  * --------------------------------------------
  3786. +  */
  3787. + /* validate attributes that don't take a parameter. Currently we support
  3788. +  * __attribute__ (saveds) and __attribute__ (interrupt)
  3789. +  */
  3790. + #define HANDLE_ATTRIBUTE0(attr) \
  3791. +   (strcmp(attr, "saveds") != 0 && strcmp(attr, "interrupt") != 0)
  3792. + /* (c-common.c)
  3793. +  * install additional attributes
  3794. +  */
  3795. + #define HANDLE_EXTRA_ATTRIBUTES(a)                         \
  3796. +   if (TREE_VALUE (a) != 0                            \
  3797. +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  3798. +       && TREE_VALUE (a) == get_identifier ("saveds"))                \
  3799. +     {                                        \
  3800. +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  3801. +         {                                    \
  3802. +           warning_with_decl (decl,                        \
  3803. +               "saveds attribute specified for non-function `%s'");        \
  3804. +       return;                                \
  3805. +         }                                    \
  3806. +                                               \
  3807. +       attr_do_saveds (DECL_NAME (decl));                    \
  3808. +     }                                        \
  3809. +   else if (TREE_VALUE (a) != 0                            \
  3810. +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  3811. +       && TREE_VALUE (a) == get_identifier ("interrupt"))            \
  3812. +     {                                        \
  3813. +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  3814. +         {                                    \
  3815. +           warning_with_decl (decl,                        \
  3816. +               "saveds attribute specified for non-function `%s'");        \
  3817. +       return;                                \
  3818. +         }                                    \
  3819. +                                               \
  3820. +       attr_do_interrupt (DECL_NAME (decl));                    \
  3821. +     }                                        \
  3822. + #define PROLOGUE_EXTRA_SAVE(mask)                        \
  3823. +   { extern char *current_function_name;                        \
  3824. +     /* saveds makes the function preserve d1/a0/a1 as well */            \
  3825. +     if (attr_does_saveds (current_function_name))                \
  3826. +       mask |= 0x40c0; }                                \
  3827. + #define EPILOGUE_EXTRA_RESTORE(mask, nregs)                    \
  3828. +   { extern char *current_function_name;                        \
  3829. +     /* restore those extra registers */                        \
  3830. +     if (attr_does_saveds (current_function_name))                \
  3831. +       {                                        \
  3832. +     mask |= 0x0302;                                \
  3833. +     nregs += 3;                                \
  3834. +       } }                                    \
  3835. + #define EPILOGUE_EXTRA_BARRIER_KLUDGE(stream)                    \
  3836. +   { extern char *current_function_name;                        \
  3837. +     /* PLEASE Help! how is this done cleaner?? */                \
  3838. +     if (attr_does_saveds (current_function_name))                \
  3839. +       {                                        \
  3840. +     fprintf (stderr,                             \
  3841. +          "warning: couldn't cleanup `saveds'-stack in `%s'.\n");    \
  3842. +     fprintf (stderr,                            \
  3843. +          "         this is only ok, if the function never returns!\n");    \
  3844. +       }    }                                    \
  3845. +         
  3846. + #define EPILOGUE_EXTRA_TEST(stream)                        \
  3847. +   { extern char *current_function_name;                        \
  3848. +     /* with the interrupt-attribute, we have to set the cc before rts */    \
  3849. +     if (attr_does_interrupt (current_function_name))                \
  3850. +       asm_fprintf (stream, "\ttstl %s\n", reg_names[0]); }            \
  3851. + #endif
  3852. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/m68k.c gcc-2.5.7-amiga/config/m68k/m68k.c
  3853. *** gcc-2.5.7-fsf/config/m68k/m68k.c    Wed Nov  3 21:17:46 1993
  3854. --- gcc-2.5.7-amiga/config/m68k/m68k.c    Sun Dec 12 17:25:40 1993
  3855. ***************
  3856. *** 61,67 ****
  3857.   void
  3858.   finalize_pic ()
  3859.   {
  3860. !   if (flag_pic && current_function_uses_pic_offset_table)
  3861.       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  3862.   }
  3863.   
  3864. --- 61,67 ----
  3865.   void
  3866.   finalize_pic ()
  3867.   {
  3868. !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  3869.       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  3870.   }
  3871.   
  3872. ***************
  3873. *** 181,186 ****
  3874. --- 181,189 ----
  3875.         mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM));
  3876.         num_saved_regs--;
  3877.       }
  3878. + #ifdef PROLOGUE_EXTRA_SAVE
  3879. +   PROLOGUE_EXTRA_SAVE (mask);
  3880. + #endif
  3881.   
  3882.   #if NEED_PROBE
  3883.     fprintf (stream, "\ttstl sp@(%d)\n", NEED_PROBE - num_saved_regs * 4);
  3884. ***************
  3885. *** 214,220 ****
  3886.         asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);
  3887.   #endif
  3888.       }
  3889. !   if (flag_pic && current_function_uses_pic_offset_table)
  3890.       {
  3891.   #ifdef MOTOROLA
  3892.         asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",
  3893. --- 217,223 ----
  3894.         asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);
  3895.   #endif
  3896.       }
  3897. !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  3898.       {
  3899.   #ifdef MOTOROLA
  3900.         asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",
  3901. ***************
  3902. *** 279,284 ****
  3903. --- 282,290 ----
  3904.         /* Output just a no-op so that debuggers don't get confused
  3905.        about which function the pc is in at this address.  */
  3906.         asm_fprintf (stream, "\tnop\n");
  3907. + #ifdef EPILOGUE_EXTRA_BARRIER_KLUDGE
  3908. +       EPILOGUE_EXTRA_BARRIER_KLUDGE(stream);
  3909. + #endif
  3910.         return;
  3911.       }
  3912.   
  3913. ***************
  3914. *** 309,314 ****
  3915. --- 315,323 ----
  3916.           nregs++;
  3917.       mask |= 1 << regno;
  3918.         }
  3919. + #ifdef EPILOGUE_EXTRA_RESTORE
  3920. +   EPILOGUE_EXTRA_RESTORE(mask, nregs);
  3921. + #endif
  3922.     offset = foffset + nregs * 4;
  3923.     if (offset + fsize >= 0x8000
  3924.         && frame_pointer_needed
  3925. ***************
  3926. *** 511,516 ****
  3927. --- 520,528 ----
  3928.   #endif
  3929.       }
  3930.       }
  3931. + #ifdef EPILOGUE_EXTRA_TEST
  3932. +   EPILOGUE_EXTRA_TEST(stream);
  3933. + #endif
  3934.     if (current_function_pops_args)
  3935.       asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args);
  3936.     else
  3937. ***************
  3938. *** 801,815 ****
  3939.     /* First handle a simple SYMBOL_REF or LABEL_REF */
  3940.     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  3941.       {
  3942.         if (reg == 0)
  3943.       abort ();
  3944.   
  3945. !       pic_ref = gen_rtx (MEM, Pmode,
  3946. !              gen_rtx (PLUS, Pmode,
  3947. !                   pic_offset_table_rtx, orig));
  3948.         current_function_uses_pic_offset_table = 1;
  3949.         RTX_UNCHANGING_P (pic_ref) = 1;
  3950.         emit_move_insn (reg, pic_ref);
  3951.         return reg;
  3952.       }
  3953.     else if (GET_CODE (orig) == CONST)
  3954. --- 813,837 ----
  3955.     /* First handle a simple SYMBOL_REF or LABEL_REF */
  3956.     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  3957.       {
  3958. + #ifdef LEGITIMATE_BASEREL_OPERAND_P
  3959. +   if (LEGITIMATE_BASEREL_OPERAND_P (orig))
  3960. +     return orig;
  3961. + #endif
  3962.         if (reg == 0)
  3963.       abort ();
  3964.   
  3965. !       if (flag_pic >= 3)
  3966. !     pic_ref = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig);
  3967. !       else
  3968. !         pic_ref = gen_rtx (MEM, Pmode,
  3969. !                gen_rtx (PLUS, Pmode,
  3970. !                     pic_offset_table_rtx, orig));
  3971.         current_function_uses_pic_offset_table = 1;
  3972.         RTX_UNCHANGING_P (pic_ref) = 1;
  3973.         emit_move_insn (reg, pic_ref);
  3974.         return reg;
  3975.       }
  3976.     else if (GET_CODE (orig) == CONST)
  3977. ***************
  3978. *** 838,843 ****
  3979. --- 860,866 ----
  3980.         pic_ref = gen_rtx (PLUS, Pmode, base, orig);
  3981.         /* Likewise, should we set special REG_NOTEs here?  */
  3982.       }
  3983.     return pic_ref;
  3984.   }
  3985.   
  3986. ***************
  3987. *** 2166,2171 ****
  3988. --- 2189,2198 ----
  3989.                 fprintf (file, ":w");
  3990.               if ((flag_pic == 2) && (breg == pic_offset_table_rtx))
  3991.                 fprintf (file, ":l");
  3992. +             if ((flag_pic == 3) && (breg == pic_offset_table_rtx))
  3993. +               fprintf (file, ":W");
  3994. +             if ((flag_pic == 4) && (breg == pic_offset_table_rtx))
  3995. +               fprintf (file, ":L");
  3996.             }
  3997.           if (addr != 0 && ireg != 0)
  3998.             {
  3999. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/m68k.h gcc-2.5.7-amiga/config/m68k/m68k.h
  4000. *** gcc-2.5.7-fsf/config/m68k/m68k.h    Fri Nov  5 08:09:54 1993
  4001. --- gcc-2.5.7-amiga/config/m68k/m68k.h    Sun Dec 12 17:25:43 1993
  4002. ***************
  4003. *** 353,361 ****
  4004.   #ifndef SUPPORT_SUN_FPA
  4005.   
  4006.   #define CONDITIONAL_REGISTER_USAGE \
  4007. ! {                                               \
  4008. !   if (flag_pic)                                 \
  4009. !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;    \
  4010.   }
  4011.   
  4012.   #else /* defined SUPPORT_SUN_FPA */
  4013. --- 353,364 ----
  4014.   #ifndef SUPPORT_SUN_FPA
  4015.   
  4016.   #define CONDITIONAL_REGISTER_USAGE \
  4017. ! {                                                \
  4018. !   if (flag_pic)                                  \
  4019. !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;     \
  4020. !   /* prevent saving/restoring of the base reg */ \
  4021. !   if (flag_pic == 3)                 \
  4022. !     call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
  4023.   }
  4024.   
  4025.   #else /* defined SUPPORT_SUN_FPA */
  4026. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/m68k.md gcc-2.5.7-amiga/config/m68k/m68k.md
  4027. *** gcc-2.5.7-fsf/config/m68k/m68k.md    Wed Dec  1 00:17:46 1993
  4028. --- gcc-2.5.7-amiga/config/m68k/m68k.md    Sun Dec 12 17:25:48 1993
  4029. ***************
  4030. *** 716,728 ****
  4031.   {
  4032.     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  4033.       {
  4034. !       /* The source is an address which requires PIC relocation.  
  4035. !          Call legitimize_pic_address with the source, mode, and a relocation
  4036. !          register (a new pseudo, or the final destination if reload_in_progress
  4037. !          is set).   Then fall through normally */
  4038. !       extern rtx legitimize_pic_address();
  4039. !       rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  4040. !       operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  4041.       }
  4042.   }")
  4043.   
  4044. --- 716,733 ----
  4045.   {
  4046.     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  4047.       {
  4048. ! #ifdef LEGITIMATE_BASEREL_OPERAND_P
  4049. !       if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
  4050. ! #endif
  4051. !       {
  4052. !         /* The source is an address which requires PIC relocation.  
  4053. !            Call legitimize_pic_address with the source, mode, and a relocation
  4054. !            register (a new pseudo, or the final destination if reload_in_progress
  4055. !            is set).   Then fall through normally */
  4056. !         extern rtx legitimize_pic_address();
  4057. !         rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  4058. !         operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  4059. !       }
  4060.       }
  4061.   }")
  4062.   
  4063. ***************
  4064. *** 1890,1897 ****
  4065.   
  4066.         /* These insns can result from reloads to access
  4067.        stack slots over 64k from the frame pointer.  */
  4068. !       if (GET_CODE (operands[2]) == CONST_INT
  4069. !       && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
  4070.           return \"move%.l %2,%0\;add%.l %1,%0\";
  4071.   #ifdef SGS
  4072.         if (GET_CODE (operands[2]) == REG)
  4073. --- 1895,1903 ----
  4074.   
  4075.         /* These insns can result from reloads to access
  4076.        stack slots over 64k from the frame pointer.  */
  4077. !       if (((GET_CODE (operands[2]) == CONST_INT
  4078. !        && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
  4079. !       || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
  4080.           return \"move%.l %2,%0\;add%.l %1,%0\";
  4081.   #ifdef SGS
  4082.         if (GET_CODE (operands[2]) == REG)
  4083. ***************
  4084. *** 4858,4864 ****
  4085.     ""
  4086.     "
  4087.   {
  4088. !   if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  4089.   #ifdef MOTOROLA
  4090.       SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
  4091.   #else
  4092. --- 4864,4870 ----
  4093.     ""
  4094.     "
  4095.   {
  4096. !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  4097.   #ifdef MOTOROLA
  4098.       SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
  4099.   #else
  4100. ***************
  4101. *** 4873,4879 ****
  4102.        (match_operand:SI 1 "general_operand" "g"))]
  4103.     ;; Operand 1 not really used on the m68000.
  4104.   
  4105. !   "! flag_pic"
  4106.     "*
  4107.   #ifdef MOTOROLA
  4108.     return \"jsr %0\";
  4109. --- 4879,4885 ----
  4110.        (match_operand:SI 1 "general_operand" "g"))]
  4111.     ;; Operand 1 not really used on the m68000.
  4112.   
  4113. !   "(! flag_pic || flag_pic >= 3)"
  4114.     "*
  4115.   #ifdef MOTOROLA
  4116.     return \"jsr %0\";
  4117. ***************
  4118. *** 4888,4894 ****
  4119.        (match_operand:SI 1 "general_operand" "g"))]
  4120.     ;; Operand 1 not really used on the m68000.
  4121.   
  4122. !   "flag_pic"
  4123.     "*
  4124.   #ifdef HPUX_ASM
  4125.     return \"bsr %0\";
  4126. --- 4894,4900 ----
  4127.        (match_operand:SI 1 "general_operand" "g"))]
  4128.     ;; Operand 1 not really used on the m68000.
  4129.   
  4130. !   "(flag_pic && flag_pic < 3)"
  4131.     "*
  4132.   #ifdef HPUX_ASM
  4133.     return \"bsr %0\";
  4134. ***************
  4135. *** 4913,4919 ****
  4136.     ""
  4137.     "
  4138.   {
  4139. !   if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  4140.   #ifdef MOTOROLA
  4141.       SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
  4142.   #else
  4143. --- 4919,4925 ----
  4144.     ""
  4145.     "
  4146.   {
  4147. !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  4148.   #ifdef MOTOROLA
  4149.       SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
  4150.   #else
  4151. ***************
  4152. *** 4928,4934 ****
  4153.       (call (match_operand:QI 1 "memory_operand" "o")
  4154.             (match_operand:SI 2 "general_operand" "g")))]
  4155.     ;; Operand 2 not really used on the m68000.
  4156. !   "! flag_pic"
  4157.     "*
  4158.   #ifdef MOTOROLA
  4159.     return \"jsr %1\";
  4160. --- 4934,4940 ----
  4161.       (call (match_operand:QI 1 "memory_operand" "o")
  4162.             (match_operand:SI 2 "general_operand" "g")))]
  4163.     ;; Operand 2 not really used on the m68000.
  4164. !   "(! flag_pic || flag_pic >= 3)"
  4165.     "*
  4166.   #ifdef MOTOROLA
  4167.     return \"jsr %1\";
  4168. ***************
  4169. *** 4943,4949 ****
  4170.       (call (match_operand:QI 1 "memory_operand" "o")
  4171.             (match_operand:SI 2 "general_operand" "g")))]
  4172.     ;; Operand 2 not really used on the m68000.
  4173. !   "flag_pic"
  4174.     "*
  4175.   #ifdef HPUX_ASM
  4176.     return \"bsr %1\";
  4177. --- 4949,4955 ----
  4178.       (call (match_operand:QI 1 "memory_operand" "o")
  4179.             (match_operand:SI 2 "general_operand" "g")))]
  4180.     ;; Operand 2 not really used on the m68000.
  4181. !   "(flag_pic && flag_pic < 3)"
  4182.     "*
  4183.   #ifdef HPUX_ASM
  4184.     return \"bsr %1\";
  4185. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/t-amigados gcc-2.5.7-amiga/config/m68k/t-amigados
  4186. *** gcc-2.5.7-fsf/config/m68k/t-amigados    Thu Jan  1 00:00:00 1970
  4187. --- gcc-2.5.7-amiga/config/m68k/t-amigados    Sun Dec 12 17:25:50 1993
  4188. ***************
  4189. *** 0 ****
  4190. --- 1,178 ----
  4191. + # Makefile fragment for amigados target.
  4192. + # We generate two additional things:
  4193. + #
  4194. + # libb/libgcc.a
  4195. + #    A base relative version of libgcc.a which is used when compiling and
  4196. + #    linking with the '-resident' option.
  4197. + #
  4198. + # xgccv
  4199. + #    A forking gcc instead of one calling ssytem(). This makes it less
  4200. + #    system conformant (can't ^C it when started from make), while providing
  4201. + #    increased functionality (-pipe option).
  4202. + # Use the vfork'ing version of gcc by default, so that the -pipe option can
  4203. + # get tested.  To use the regular version just do "make XGCC=gcc".  Note that
  4204. + # PIPE is defined in x-amigados, so if we are doing a native build, it will
  4205. + # be defined.  It can be overridden with "make PIPE=".
  4206. + XGCC = xgccv $(PIPE)
  4207. + GCC_FOR_TARGET = ./$(XGCC) -B./
  4208. + # Build residentable versions of the gcc executables by default.  Use
  4209. + # "make RESIDENT=" to build non-residentable versions.
  4210. + # Note:  This failed during bootstrapping of 2.5.5.
  4211. + #RESIDENT = -resident
  4212. + # The standard additional target flags for the compiler.
  4213. + T_CFLAGS = $(RESIDENT)
  4214. + # Allow the user to override the default target optimizations with gcc, or if the
  4215. + # target compiler is not gcc and doesn't understand -O<N>.
  4216. + T_OPTIMISE = -O2
  4217. + # We don't need a libgcc1, it's all in ixemul.library
  4218. + LIBGCC1 = libgcc1.null
  4219. + # Flags to use when compiling the normal version of libgcc.a.
  4220. + # Don't compile with debugging, as long as there is no debugger.
  4221. + # Explicitly leave out the -resident compilation flag and don't use T_CFLAGS.
  4222. + LIBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
  4223. +           $(CROSS_GCC_CFLAGS)
  4224. + # Flags to use when compiling the base relative version of libgcc.a.
  4225. + # Don't compile with debugging, as long as there is no debugger.
  4226. + # Explicitly force -resident in the compilation flags and don't use T_CFLAGS.
  4227. + LIBBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
  4228. +           $(CROSS_GCC_CFLAGS) -resident
  4229. + # Build the base relative library.
  4230. + # It is later copied into gcc:lib/gcc-lib/amigados/<version>/libb/libgcc.a, whereas
  4231. + # libgcc.a is copied into gcc:lib/gcc-lib/amigados/<version>/libgcc.a.
  4232. + # It doesn't work very well to define one of the EXTRA_* macros to contain
  4233. + # libb/libgcc.a, particularly for doing "make stageN" or "make install".
  4234. + GCC_PARTS=$(GCC_PASSES) libgcc.a libb/libgcc.a $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
  4235. + # Add install_libbgcc to normal define of INSTALL_LIBGCC.  Let install-gccv
  4236. + # hitch a ride on here as well.
  4237. + INSTALL_LIBGCC = install-libgcc install-libbgcc install-gccv
  4238. + # This includes the knowledge that target amigados doesn't need libgcc1.a
  4239. + libb/libgcc.a: libgcc1.null libgcc2.c libgcc2.ready $(CONFIG_H) \
  4240. +    $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
  4241. + # Actually build it in tmplibbgcc.a, then rename at end,
  4242. + # so that libb/libgcc.a itself remains nonexistent if compilation is aborted.
  4243. +     -rm -f tmplibbgcc.a
  4244. + # -e causes any failing command to make this rule fail.
  4245. + # -e doesn't work in certain shells, so we test $$? as well.
  4246. +     set -e; \
  4247. +     for name in $(LIB2FUNCS); \
  4248. +     do \
  4249. +       echo $${name}; \
  4250. +       $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
  4251. +           $(srcdir)/libgcc2.c -o $${name}.o; \
  4252. +       if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  4253. +       $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
  4254. +       rm -f $${name}.o; \
  4255. +     done
  4256. + # Some shells crash when a loop has no items.
  4257. + # So make sure there is always at least one--`..'.
  4258. + # Then ignore it.
  4259. + # We don't use -e here because there are if statements
  4260. + # that should not make the command give up when the if condition is false.
  4261. + # Instead, we test for failure after each command where it matters.
  4262. +     -for file in .. $(LIB2FUNCS_EXTRA); \
  4263. +     do \
  4264. +       if [ x$${file} != x.. ]; then \
  4265. +         name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \
  4266. +         echo $${name}; \
  4267. +         if [ $${name}.asm = $${file} ]; then \
  4268. +           cp $${file} $${name}.s || exit 1; file=$${name}.s; \
  4269. +         else true; fi; \
  4270. +         $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
  4271. +         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  4272. +         $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
  4273. +         rm -f $${name}.[so]; \
  4274. +       else true; \
  4275. +       fi; \
  4276. +     done
  4277. +     -if $(RANLIB_TEST) ; then $(RANLIB) tmplibbgcc.a; else true; fi
  4278. +     -if [ -d libb ] ; then true ; else mkdir libb ; fi
  4279. +     mv tmplibbgcc.a libb/libgcc.a
  4280. + install-libbgcc: libb/libgcc.a install-dir
  4281. +     -if [ -d $(libsubdir)/libb ] ; then true ; else mkdir $(libsubdir)/libb ; fi
  4282. +     -if [ -f libb/libgcc.a ] ; then \
  4283. +       rm -f $(libsubdir)/libb/libgcc.a; \
  4284. +       $(INSTALL_DATA) libb/libgcc.a $(libsubdir)/libb/libgcc.a; \
  4285. +       if $(RANLIB_TEST) ; then \
  4286. +         (cd $(libsubdir)/libb; $(RANLIB) libgcc.a); else true; fi; \
  4287. +       chmod a-x $(libsubdir)/libb/libgcc.a; \
  4288. +     else true; fi
  4289. +     
  4290. + # The default gcc (xgcc) is built without -DAMIGADOS_FORK_GCC. This gcc (xgccv)
  4291. + # is built with AMIGADOS_FORK_GCC defined, so that it can use '-pipe'.  We
  4292. + # don't want to define EXTRA_PASSES to xgccv because that will cause xgccv
  4293. + # to be installed in $(libsubdir), so instead we use the default GCC_PASSES
  4294. + # and add xgccv to it.
  4295. + GCC_PASSES = xgcc xgccv cc1 cpp $(EXTRA_PASSES)
  4296. + xgccv: xgccv.o version.o $(LIBDEPS)
  4297. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgccv xgccv.o version.o $(LIBS)
  4298. + xgccv.o: gcc.c $(CONFIG_H) gvarargs.h obstack.h
  4299. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  4300. +   -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
  4301. +   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
  4302. +   -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
  4303. +   -DTOOLDIR=\"$(tooldir)/\" \
  4304. +   -DAMIGADOS_FORK_GCC \
  4305. +   -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` -o xgccv.o
  4306. + install-gccv: xgccv
  4307. +     rm -f $(bindir)/gccv
  4308. +     $(INSTALL_PROGRAM) xgccv $(bindir)/gccv
  4309. + # When making one of the stage<N> dirs, we need to make a libb subdir for
  4310. + # it, and copy libbgcc.a there as libgcc.a.
  4311. + EXTRA_STAGE1_TARGETS = stage1-libb
  4312. + EXTRA_STAGE2_TARGETS = stage2-libb
  4313. + EXTRA_STAGE3_TARGETS = stage3-libb
  4314. + EXTRA_STAGE4_TARGETS = stage4-libb
  4315. + stage1-libb:
  4316. +     -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  4317. +     -if [ -d stage1/libb ] ; then true ; else mkdir stage1/libb ; fi
  4318. +     -cp libb/libgcc.a stage1/libb/libgcc.a
  4319. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libb/libgcc.a; else true; fi
  4320. + stage2-libb:
  4321. +     -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  4322. +     -if [ -d stage2/libb ] ; then true ; else mkdir stage2/libb ; fi
  4323. +     -cp libb/libgcc.a stage2/libb/libgcc.a
  4324. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libb/libgcc.a; else true; fi
  4325. + stage3-libb:
  4326. +     -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  4327. +     -if [ -d stage3/libb ] ; then true ; else mkdir stage3/libb ; fi
  4328. +     -cp libb/libgcc.a stage3/libb/libgcc.a
  4329. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libb/libgcc.a; else true; fi
  4330. + stage4-libb:
  4331. +     -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  4332. +     -if [ -d stage4/libb ] ; then true ; else mkdir stage4/libb ; fi
  4333. +     -cp libb/libgcc.a stage4/libb/libgcc.a
  4334. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libb/libgcc.a; else true; fi
  4335. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/x-amigados gcc-2.5.7-amiga/config/m68k/x-amigados
  4336. *** gcc-2.5.7-fsf/config/m68k/x-amigados    Thu Jan  1 00:00:00 1970
  4337. --- gcc-2.5.7-amiga/config/m68k/x-amigados    Sun Dec 12 17:25:51 1993
  4338. ***************
  4339. *** 0 ****
  4340. --- 1,44 ----
  4341. + # Note: It doesn't do any good to try to define prefix or local_prefix
  4342. + # in the host overrides because configure will just change them back.
  4343. + # You either have to give an appropriate option to configure or live with
  4344. + # an Amiga specific patch to configure.  See the note in configure.  -fnf
  4345. + # Building under amigados almost certainly requires an already working gcc.
  4346. + # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will
  4347. + # work and get exercised.  To bootstrap with the regular gcc just do
  4348. + # "make CC=gcc".  To bootstrap without "-pipe" do "make PIPE=".
  4349. + CC = gccv $(PIPE)
  4350. + # Disable -pipe for now since I had problems bootstrapping gcc 2.5.5 with
  4351. + # it. (fnf)
  4352. + #PIPE = -pipe
  4353. + # Allow the user to override the default host optimization with gcc, or if the
  4354. + # host compiler is not gcc and doesn't understand -O<N>.
  4355. + X_OPTIMIZE = -O2
  4356. + # The standard additional host flags for the compiler.
  4357. + X_CFLAGS = $(X_OPTIMIZE)
  4358. + # Man pages get a wierd suffix...
  4359. + manext = .0
  4360. + # We really shouldn't specify CFLAGS from here, but there's no other way
  4361. + # to get rid of the `-g' indoctrinated by Makefile.in.  Note this becomes
  4362. + # part of both the host compilation CFLAGS and the target compilation
  4363. + # CFLAGS.
  4364. + CFLAGS =
  4365. + # Ranlib does exist, but may not be in a path where the default RANLIB_TEST
  4366. + # expects it, so just force it to true.
  4367. + RANLIB_TEST = true
  4368. + # My current version of ln doesn't work, so use cp instead.  -fnf
  4369. + HARDLINK = cp
  4370. diff -rc --new-file gcc-2.5.7-fsf/config/m68k/xm-amigados.h gcc-2.5.7-amiga/config/m68k/xm-amigados.h
  4371. *** gcc-2.5.7-fsf/config/m68k/xm-amigados.h    Thu Jan  1 00:00:00 1970
  4372. --- gcc-2.5.7-amiga/config/m68k/xm-amigados.h    Sun Dec 12 17:25:53 1993
  4373. ***************
  4374. *** 0 ****
  4375. --- 1,215 ----
  4376. + /* Configuration for GNU C-compiler for Commodore Amiga, running AmigaDOS.
  4377. +    Copyright (C) 1992 Free Software Foundation, Inc.
  4378. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  4379. + This file is part of GNU CC.
  4380. + GNU CC is free software; you can redistribute it and/or modify
  4381. + it under the terms of the GNU General Public License as published by
  4382. + the Free Software Foundation; either version 2, or (at your option)
  4383. + any later version.
  4384. + GNU CC is distributed in the hope that it will be useful,
  4385. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  4386. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  4387. + GNU General Public License for more details.
  4388. + You should have received a copy of the GNU General Public License
  4389. + along with GNU CC; see the file COPYING.  If not, write to
  4390. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  4391. + /* first include the generic header, then modify some parts.. */
  4392. + #include "m68k/xm-m68k.h"
  4393. + /* Amiga specific headers, such as from the Native Developer Update kits,
  4394. +    go in SYSTEM_INCLUDE_DIR.  STANDARD_INCLUDE_DIR is the equivalent of
  4395. +    Unix "/usr/include".  All other include paths are set in Makefile. */
  4396. + #define SYSTEM_INCLUDE_DIR    "/gcc/os-include"
  4397. + #define STANDARD_INCLUDE_DIR    "/gcc/include"
  4398. + /* Fork one piped subcommand.  SEARCH_FLAG is the system call to use
  4399. +    (either execv or execvp).  ARGV is the arg vector to use.
  4400. +    NOT_LAST is nonzero if this is not the last subcommand
  4401. +    (i.e. its output should be piped to the next one.)  */
  4402. + #ifndef AMIGADOS_FORK_GCC
  4403. + /* This version uses a more or less amigados-conformant way of running a
  4404. +    program (in the context of the parent). If you want to use -pipe however,
  4405. +    you'll have to use the vfork() version afterwards. */
  4406. + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  4407. + ({char *_argline;                        \
  4408. +   int _arglinelength, _i;                    \
  4409. +                                 \
  4410. +   for (_i = 1, _arglinelength=0; ARGV[_i]; ++_i)        \
  4411. +     _arglinelength += strlen(ARGV[_i]) + 1;            \
  4412. +                                 \
  4413. +   _arglinelength += strlen(PROGRAM) + 1;            \
  4414. +                                 \
  4415. +   if (!(_argline = (char *)alloca(_arglinelength)))         \
  4416. +     pfatal_with_name ("alloca");                \
  4417. +                                 \
  4418. +   strcpy(_argline, PROGRAM);                    \
  4419. +   for (_i = 1; ARGV[_i]; ++_i)                     \
  4420. +     {                                \
  4421. +       strcat(_argline, " ");                    \
  4422. +       strcat(_argline, ARGV[_i]);                \
  4423. +     }                                \
  4424. +                                 \
  4425. +   ssystem(_argline); })                        \
  4426. + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  4427. +   ({ STATUS = COMMAND.pid; })
  4428. + #else
  4429. + /* the vfork() version. This one has the drawback, that gcc is not 
  4430. +    interruptible when started from make, since ixemul.library doesn't yet
  4431. +    propagate ^C to subprocesses. */
  4432. + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  4433. + ({int (*_func)() = (SEARCH_FLAG ? execv : execvp);            \
  4434. +   int _pid;                                \
  4435. +   int _pdes[2];                                \
  4436. +   int _input_desc = last_pipe_input;                    \
  4437. +   int _output_desc = STDOUT_FILE_NO;                    \
  4438. +   int _retries, _sleep_interval, _result;                \
  4439. +                                     \
  4440. +   /* If this isn't the last process, make a pipe for its output,    \
  4441. +      and record it as waiting to be the input to the next process.  */    \
  4442. +                                     \
  4443. +   if (NOT_LAST)                                \
  4444. +     {                                    \
  4445. +       if (pipe (_pdes) < 0)                        \
  4446. +     pfatal_with_name ("pipe");                    \
  4447. +       _output_desc = _pdes[WRITE_PORT];                    \
  4448. +       last_pipe_input = _pdes[READ_PORT];                \
  4449. +     }                                    \
  4450. +   else                                    \
  4451. +     last_pipe_input = STDIN_FILE_NO;                    \
  4452. +                                     \
  4453. +   /* Fork a subprocess; wait and retry if it fails.  */            \
  4454. +   _sleep_interval = 1;                            \
  4455. +   for (_retries = 0; _retries < 4; _retries++)                \
  4456. +     {                                    \
  4457. +       _pid = vfork ();                            \
  4458. +       if (_pid >= 0)                            \
  4459. +     break;                                \
  4460. +       sleep (_sleep_interval);                        \
  4461. +       _sleep_interval *= 2;                        \
  4462. +     }                                    \
  4463. +                                     \
  4464. +   switch (_pid)                                \
  4465. +     {                                    \
  4466. +     case -1:                                \
  4467. +       pfatal_with_name ("vfork");                    \
  4468. +       /* NOTREACHED */                            \
  4469. +       _result = 0;                            \
  4470. +       break;                                \
  4471. +                                     \
  4472. +     case 0: /* child */                            \
  4473. +       /* Move the input and output pipes into place, if nec.  */    \
  4474. +       if (_input_desc != STDIN_FILE_NO)                    \
  4475. +     {                                \
  4476. +       close (STDIN_FILE_NO);                    \
  4477. +       dup (_input_desc);                        \
  4478. +       close (_input_desc);                        \
  4479. +     }                                \
  4480. +       if (_output_desc != STDOUT_FILE_NO)                \
  4481. +     {                                \
  4482. +       close (STDOUT_FILE_NO);                    \
  4483. +       dup (_output_desc);                        \
  4484. +       close (_output_desc);                        \
  4485. +     }                                \
  4486. +                                     \
  4487. +       /* Close the parent's descs that aren't wanted here.  */        \
  4488. +       if (last_pipe_input != STDIN_FILE_NO)                \
  4489. +     close (last_pipe_input);                    \
  4490. +                                     \
  4491. +       /* Exec the program.  */                        \
  4492. +       (*_func) (PROGRAM, ARGV);                        \
  4493. +       perror_exec (PROGRAM);                        \
  4494. +       exit (-1);                            \
  4495. +       /* NOTREACHED */                            \
  4496. +       _result = 0;                            \
  4497. +       break;                                \
  4498. +                                     \
  4499. +     default:                                \
  4500. +       /* In the parent, after forking.                    \
  4501. +      Close the descriptors that we made for this child.  */        \
  4502. +       if (_input_desc != STDIN_FILE_NO)                    \
  4503. +     close (_input_desc);                        \
  4504. +       if (_output_desc != STDOUT_FILE_NO)                \
  4505. +     close (_output_desc);                        \
  4506. +                                     \
  4507. +       /* Return child's process number.  */                \
  4508. +       _result = _pid;                            \
  4509. +       break;                                \
  4510. +     }                                     \
  4511. + _result; })                                \
  4512. + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  4513. +   ({ wait (& STATUS); })
  4514. + #endif /* AMIGADOS_FORK_GCC */
  4515. + /* the following macros are stolen more or less from xm-vms.h ... */
  4516. + /* This macro is used to help compare filenames in cp-lex.c.
  4517. +    We also need to make sure that the names are all lower case, because
  4518. +    we must be able to compare filenames to determine if a file implements
  4519. +    a class.  */
  4520. + #define FILE_NAME_NONDIRECTORY(C)                \
  4521. + ({                                \
  4522. +    extern char *rindex();                    \
  4523. +    char * pnt_ = (C), * pnt1_;                    \
  4524. +    pnt1_ = pnt_ - 1;                        \
  4525. +    while (*++pnt1_)                        \
  4526. +      if ((*pnt1_ >= 'A' && *pnt1_ <= 'Z')) *pnt1_ |= 0x20;    \
  4527. +    pnt1_ = rindex (pnt_, '/');                     \
  4528. +    pnt1_ = (pnt1_ == 0 ? rindex (pnt_, ':') : pnt1_);        \
  4529. +    (pnt1_ == 0 ? pnt_ : pnt1_ + 1);                \
  4530. +  })
  4531. + /* Macro to generate the name of the cross reference file.  The standard
  4532. +    one does not work, since it was written assuming that the conventions
  4533. +    of a unix style filesystem will work on the host system.
  4534. +  
  4535. +    Contrary to VMS, I'm using the original unix filename, there's no reason
  4536. +    not to use this under AmigaDOS. */
  4537. + #define XREF_FILE_NAME(BUFF, NAME)    \
  4538. +   s = FILE_NAME_NONDIRECTORY (NAME);            \
  4539. +   if (s == NAME) sprintf(BUFF, ".%s.gxref", NAME);    \
  4540. +   else {                        \
  4541. +     unsigned char ch = *s; /* could be Latin1 char.. */    \
  4542. +     /* temporary: cut the filename from the directory */\
  4543. +     *s = 0;                        \
  4544. +     sprintf (BUFF, "%s.%c%s.gxref", NAME, ch, s+1);    \
  4545. +     /* and restore the filename */            \
  4546. +     *s = ch;                        \
  4547. +   }                            \
  4548. + /* Macro that is used in cp-xref.c to determine whether a file name is
  4549. +    absolute or not.
  4550. +    This checks for both, '/' as first character, since we're running under
  4551. +    ixemul.library which provides for this unix'ism, and for the usual 
  4552. +    logical-terminator, ':', somewhere in the filename. */
  4553. + #define FILE_NAME_ABSOLUTE_P(NAME) (NAME[0] == '/' || index(NAME, ':'))
  4554. + /* the colon conflicts with the name space of logicals */
  4555. + #define PATH_SEPARATOR ','
  4556. + /* AmigaDOS handles rename(2) *much* better than any link(2)/unlink(2)
  4557. +    hacks. It's actually the inverse case as on Unix. rename(2) was always
  4558. +    there, link(2) is new with OS 2.0 */
  4559. + #define HAVE_rename 1
  4560. diff -rc --new-file gcc-2.5.7-fsf/configure gcc-2.5.7-amiga/configure
  4561. *** gcc-2.5.7-fsf/configure    Fri Nov 19 21:44:34 1993
  4562. --- gcc-2.5.7-amiga/configure    Sun Dec 12 17:25:59 1993
  4563. ***************
  4564. *** 45,52 ****
  4565.   
  4566.   # Default --srcdir to the directory where the script is found, 
  4567.   # if a directory was specified.
  4568. ! # The second sed call is to convert `.//configure' to `./configure'.
  4569. ! srcdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'`
  4570.   if [ x$srcdir = x$0 ]
  4571.   then
  4572.   srcdir=
  4573. --- 45,54 ----
  4574.   
  4575.   # Default --srcdir to the directory where the script is found, 
  4576.   # if a directory was specified.
  4577. ! # The first sed call works around a bug in the AmigaDOS port of sksh, where
  4578. ! # $0 has a trailing slash appended to it.  It is a NOP for other systems.
  4579. ! # The third sed call is to convert `.//configure' to `./configure'.
  4580. ! srcdir=`echo $0 | sed 's|/$||' | sed 's|//|/|' | sed 's|/[^/]*$||'`
  4581.   if [ x$srcdir = x$0 ]
  4582.   then
  4583.   srcdir=
  4584. ***************
  4585. *** 54,61 ****
  4586.   
  4587.   host=
  4588.   
  4589. ! # Default prefix to /usr/local.
  4590. ! prefix=/usr/local
  4591.   
  4592.   # local_prefix specifies where to find the directory /usr/local/include
  4593.   # We don't use $(prefix) for this
  4594. --- 56,68 ----
  4595.   
  4596.   host=
  4597.   
  4598. ! # Note:  For AmigaDOS we want this to default to /gcc unless we specify
  4599. ! # otherwise to configure.  Changing it in Makefile.in or config/m68k/x-amigados
  4600. ! # is ineffective since configure will always change them back in the final
  4601. ! # generated Makefile, so we have to go to the root of the problem, which is
  4602. ! # here.  -fnf
  4603. ! # Default prefix to /gcc.
  4604. ! prefix=/gcc
  4605.   
  4606.   # local_prefix specifies where to find the directory /usr/local/include
  4607.   # We don't use $(prefix) for this
  4608. ***************
  4609. *** 63,75 ****
  4610.   # even if GCC is installed somewhere other than /usr/local.
  4611.   # Think THREE TIMES before specifying any other value for this!
  4612.   # DO NOT make this use $prefix!
  4613. ! local_prefix=/usr/local
  4614.   # Default is to let the Makefile set exec_prefix from $(prefix)
  4615.   exec_prefix='$(prefix)'
  4616.   
  4617.   remove=rm
  4618. ! hard_link=ln
  4619. ! symbolic_link='ln -s'
  4620.   copy=cp
  4621.   
  4622.   # Record all the arguments, to write them in config.status.
  4623. --- 70,83 ----
  4624.   # even if GCC is installed somewhere other than /usr/local.
  4625.   # Think THREE TIMES before specifying any other value for this!
  4626.   # DO NOT make this use $prefix!
  4627. ! # Note:  See AmigaDOS note above for this AmigaDOS specific change.  -fnf
  4628. ! local_prefix=/local
  4629.   # Default is to let the Makefile set exec_prefix from $(prefix)
  4630.   exec_prefix='$(prefix)'
  4631.   
  4632.   remove=rm
  4633. ! hard_link=cp
  4634. ! symbolic_link=cp
  4635.   copy=cp
  4636.   
  4637.   # Record all the arguments, to write them in config.status.
  4638. ***************
  4639. *** 297,303 ****
  4640.       use_collect2=
  4641.       # Set this to override the default target model.
  4642.       target_cpu_default=
  4643. !     # Set this to force use of install.sh.
  4644.       broken_install=
  4645.       # Set this to control which fixincludes program to use.
  4646.       fixincludes=fixincludes
  4647. --- 305,312 ----
  4648.       use_collect2=
  4649.       # Set this to override the default target model.
  4650.       target_cpu_default=
  4651. !     # Set this to force use of install.sh (if set to 'yes')
  4652. !     # Set to name of installer to use a custom installer.
  4653.       broken_install=
  4654.       # Set this to control which fixincludes program to use.
  4655.       fixincludes=fixincludes
  4656. ***************
  4657. *** 642,647 ****
  4658. --- 651,666 ----
  4659.           tm_file=sparc/lite.h
  4660.           use_collect2=yes
  4661.           ;;
  4662. +     m68k-*-amigados)
  4663. +         xm_file=m68k/xm-amigados.h
  4664. +         out_file=m68k/amigados.c
  4665. +         tm_file=m68k/amigados.h
  4666. +         tmake_file=m68k/t-amigados
  4667. +         xmake_file=m68k/x-amigados
  4668. +         fixincludes=Makefile.in # Headers are already fixed.
  4669. +         broken_install=cp
  4670. +         install_headers_dir=install-headers-cp
  4671. +         ;;
  4672.       m68k-cbm-sysv4*)        # Commodore variant of V.4.
  4673.           tm_file=m68k/amix.h
  4674.           xm_file=m68k/xm-amix.h
  4675. ***************
  4676. *** 1763,1770 ****
  4677.   then true
  4678.   else
  4679.       rm -f Makefile.xx
  4680. !     abssrcdir=`cd ${srcdir}; pwd`
  4681. !     sed "s|^INSTALL = .*|INSTALL = ${abssrcdir}/install.sh -c|" Makefile.tem > Makefile.xx
  4682.       rm -f Makefile.tem
  4683.       mv Makefile.xx Makefile.tem
  4684.   fi
  4685. --- 1782,1795 ----
  4686.   then true
  4687.   else
  4688.       rm -f Makefile.xx
  4689. !     if [ x$host_broken_install = xyes ]
  4690. !     then
  4691. !         abssrcdir=`cd ${srcdir}; pwd`
  4692. !         installer=${abssrcdir}/install.sh -c
  4693. !     else
  4694. !         installer=$host_broken_install
  4695. !     fi
  4696. !     sed "s|^INSTALL = .*|INSTALL = ${installer}|" Makefile.tem > Makefile.xx
  4697.       rm -f Makefile.tem
  4698.       mv Makefile.xx Makefile.tem
  4699.   fi
  4700. diff -rc --new-file gcc-2.5.7-fsf/gcc.c gcc-2.5.7-amiga/gcc.c
  4701. *** gcc-2.5.7-fsf/gcc.c    Fri Nov 26 20:57:21 1993
  4702. --- gcc-2.5.7-amiga/gcc.c    Sun Dec 12 17:26:06 1993
  4703. ***************
  4704. *** 1398,1405 ****
  4705. --- 1398,1409 ----
  4706.     base = choose_temp_base_try (P_tmpdir, base);
  4707.   #endif
  4708.   
  4709. + #ifdef amigados
  4710. +   base = "ram:";
  4711. + #else
  4712.     base = choose_temp_base_try ("/usr/tmp", base);
  4713.     base = choose_temp_base_try ("/tmp", base);
  4714. + #endif
  4715.   
  4716.     /* If all else fails, use the current directory! */  
  4717.     if (base == (char *)0)
  4718. ***************
  4719. *** 1408,1414 ****
  4720.     len = strlen (base);
  4721.     temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1);
  4722.     strcpy (temp_filename, base);
  4723. !   if (len > 0 && temp_filename[len-1] != '/')
  4724.       temp_filename[len++] = '/';
  4725.     strcpy (temp_filename + len, "ccXXXXXX");
  4726.   
  4727. --- 1412,1422 ----
  4728.     len = strlen (base);
  4729.     temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1);
  4730.     strcpy (temp_filename, base);
  4731. !   if (len > 0 && temp_filename[len-1] != '/'
  4732. ! #ifdef amigados
  4733. !                         && temp_filename[len-1] != ':'
  4734. ! #endif
  4735. !                                     )
  4736.       temp_filename[len++] = '/';
  4737.     strcpy (temp_filename + len, "ccXXXXXX");
  4738.   
  4739. ***************
  4740. *** 1552,1558 ****
  4741.   
  4742.     /* Determine the filename to execute (special case for absolute paths).  */
  4743.   
  4744. !   if (*name == '/')
  4745.       {
  4746.         if (access (name, mode))
  4747.       {
  4748. --- 1560,1570 ----
  4749.   
  4750.     /* Determine the filename to execute (special case for absolute paths).  */
  4751.   
  4752. !   if (*name == '/'
  4753. ! #ifdef amigados
  4754. !           || index (name, ':')
  4755. ! #endif
  4756. !                     )
  4757.       {
  4758.         if (access (name, mode))
  4759.       {
  4760. ***************
  4761. *** 1758,1763 ****
  4762. --- 1770,1776 ----
  4763.      NOT_LAST is nonzero if this is not the last subcommand
  4764.      (i.e. its output should be piped to the next one.)  */
  4765.   
  4766. + #ifndef PEXECUTE
  4767.   #ifndef OS2
  4768.   #ifdef __MSDOS__
  4769.   
  4770. ***************
  4771. *** 1913,1918 ****
  4772. --- 1926,1932 ----
  4773.     return (search_flag ? spawnv : spawnvp) (1, program, argv);
  4774.   }
  4775.   #endif /* not OS2 */
  4776. + #endif /* !defined (PEXECUTE) */
  4777.   
  4778.   /* Execute the command specified by the arguments on the current line of spec.
  4779.      When using pipes, this includes several piped-together commands
  4780. ***************
  4781. *** 2007,2015 ****
  4782. --- 2021,2035 ----
  4783.       {
  4784.         char *string = commands[i].argv[0];
  4785.   
  4786. + #ifdef PEXECUTE
  4787. +       commands[i].pid = PEXECUTE (string != commands[i].prog,
  4788. +                   string, commands[i].argv,
  4789. +                   i + 1 < n_commands);
  4790. + #else
  4791.         commands[i].pid = pexecute (string != commands[i].prog,
  4792.                     string, commands[i].argv,
  4793.                     i + 1 < n_commands);
  4794. + #endif
  4795.   
  4796.         if (string != commands[i].prog)
  4797.       free (string);
  4798. ***************
  4799. *** 2030,2040 ****
  4800. --- 2050,2064 ----
  4801.       int pid;
  4802.       char *prog;
  4803.   
  4804. + #ifdef PEXECUTE_RESULT
  4805. +     pid = PEXECUTE_RESULT (status, commands[i]);
  4806. + #else /* PEXECUTE_RESULT */
  4807.   #ifdef __MSDOS__
  4808.           status = pid = commands[i].pid;
  4809.   #else
  4810.       pid = wait (&status);
  4811.   #endif
  4812. + #endif /* PEXECUTE_RESULT */
  4813.       if (pid < 0)
  4814.         abort ();
  4815.   
  4816. ***************
  4817. *** 2141,2146 ****
  4818. --- 2165,2171 ----
  4819.         if (*endp == PATH_SEPARATOR || *endp == 0)
  4820.           {
  4821.             strncpy (nstore, startp, endp-startp);
  4822. + #ifndef amigados
  4823.             if (endp == startp)
  4824.           {
  4825.             strcpy (nstore, "./");
  4826. ***************
  4827. *** 2152,2157 ****
  4828. --- 2177,2191 ----
  4829.           }
  4830.             else
  4831.           nstore[endp-startp] = 0;
  4832. + #else
  4833. +           if (endp[-1] != '/' && endp[-1] != ':')
  4834. +         {
  4835. +           nstore[endp-startp] = '/';
  4836. +           nstore[endp-startp+1] = 0;
  4837. +         }
  4838. +           else
  4839. +         nstore[endp-startp] = 0;
  4840. + #endif
  4841.             add_prefix (&exec_prefix, nstore, 0, 0, NULL_PTR);
  4842.             if (*endp == 0)
  4843.           break;
  4844. ***************
  4845. *** 2174,2179 ****
  4846. --- 2208,2214 ----
  4847.         if (*endp == PATH_SEPARATOR || *endp == 0)
  4848.           {
  4849.             strncpy (nstore, startp, endp-startp);
  4850. + #ifndef amigados
  4851.             if (endp == startp)
  4852.           {
  4853.             strcpy (nstore, "./");
  4854. ***************
  4855. *** 2185,2190 ****
  4856. --- 2220,2234 ----
  4857.           }
  4858.             else
  4859.           nstore[endp-startp] = 0;
  4860. + #else
  4861. +           if (endp[-1] != '/' && endp[-1] != ':')
  4862. +         {
  4863. +           nstore[endp-startp] = '/';
  4864. +           nstore[endp-startp+1] = 0;
  4865. +         }
  4866. +           else
  4867. +         nstore[endp-startp] = 0;
  4868. + #endif
  4869.             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  4870.             if (*endp == 0)
  4871.           break;
  4872. ***************
  4873. *** 2208,2213 ****
  4874. --- 2252,2258 ----
  4875.         if (*endp == PATH_SEPARATOR || *endp == 0)
  4876.           {
  4877.             strncpy (nstore, startp, endp-startp);
  4878. + #ifndef amigados
  4879.             if (endp == startp)
  4880.           {
  4881.             strcpy (nstore, "./");
  4882. ***************
  4883. *** 2219,2224 ****
  4884. --- 2264,2278 ----
  4885.           }
  4886.             else
  4887.           nstore[endp-startp] = 0;
  4888. + #else
  4889. +           if (endp[-1] != '/' && endp[-1] != ':')
  4890. +         {
  4891. +           nstore[endp-startp] = '/';
  4892. +           nstore[endp-startp+1] = 0;
  4893. +         }
  4894. +           else
  4895. +         nstore[endp-startp] = 0;
  4896. + #endif
  4897.             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  4898.             if (*endp == 0)
  4899.           break;
  4900. ***************
  4901. *** 3862,3871 ****
  4902. --- 3916,3929 ----
  4903.         register char *p;
  4904.         int len;
  4905.   
  4906. + #ifdef FILE_NAME_NONDIRECTORY
  4907. +       input_basename = FILE_NAME_NONDIRECTORY (input_filename);
  4908. + #else
  4909.         input_basename = input_filename;
  4910.         for (p = input_filename; *p; p++)
  4911.           if (*p == '/')
  4912.             input_basename = p + 1;
  4913. + #endif
  4914.   
  4915.         /* Find a suffix starting with the last period,
  4916.            and set basename_length to exclude that suffix.  */
  4917. diff -rc --new-file gcc-2.5.7-fsf/genconfig.c gcc-2.5.7-amiga/genconfig.c
  4918. *** gcc-2.5.7-fsf/genconfig.c    Tue Oct 13 04:11:48 1992
  4919. --- gcc-2.5.7-amiga/genconfig.c    Sun Dec 12 17:26:11 1993
  4920. ***************
  4921. *** 303,310 ****
  4922. --- 303,318 ----
  4923.     printf ("/* Generated automatically by the program `genconfig'\n\
  4924.   from the machine description file `md'.  */\n\n");
  4925.   
  4926. + #ifdef amigados
  4927. +   /* this constant probably better be 14 in general, or a cross compiling
  4928. +      host might choke on some amigados header files... */
  4929. +   /* Allow at least 14 operands for the sake of asm constructs.  */
  4930. +   max_recog_operands = 14;
  4931. + #else
  4932.     /* Allow at least 10 operands for the sake of asm constructs.  */
  4933.     max_recog_operands = 9;  /* We will add 1 later.  */
  4934. + #endif
  4935.     max_dup_operands = 1;
  4936.   
  4937.     /* Read the machine description.  */
  4938. diff -rc --new-file gcc-2.5.7-fsf/gstdarg.h gcc-2.5.7-amiga/gstdarg.h
  4939. *** gcc-2.5.7-fsf/gstdarg.h    Sat Nov 13 01:54:16 1993
  4940. --- gcc-2.5.7-amiga/gstdarg.h    Sun Dec 12 17:26:15 1993
  4941. ***************
  4942. *** 157,160 ****
  4943. --- 157,166 ----
  4944.   
  4945.   #endif /* __GNUC__ */
  4946.   #endif /* not _ANSI_STDARG_H_ */
  4947. + #ifdef amigados
  4948. + # ifndef _VA_LIST
  4949. + #  define _VA_LIST
  4950. +    typedef __gnuc_va_list va_list;
  4951. + # endif
  4952. + #endif /* amigados */
  4953.   #endif /* not _STDARG_H */
  4954. diff -rc --new-file gcc-2.5.7-fsf/gstddef.h gcc-2.5.7-amiga/gstddef.h
  4955. *** gcc-2.5.7-fsf/gstddef.h    Fri Dec  3 11:47:17 1993
  4956. --- gcc-2.5.7-amiga/gstddef.h    Sun Dec 12 17:26:20 1993
  4957. ***************
  4958. *** 3,8 ****
  4959. --- 3,48 ----
  4960.   #ifndef _ANSI_STDDEF_H
  4961.   #ifndef __STDDEF_H__
  4962.   
  4963. + #ifdef amigados
  4964. + /* GNU libc has special support in this file, 4.3bsd-net2 libc deserves that
  4965. +    just as well. The system headers are ANSI compliant, the used compiler IS
  4966. +    gcc, so it's really ok to use the system header, no reason to hassle
  4967. +    with a jungle of ifdefs. Besides, amigados is only defined if compiling
  4968. +    with host=amigados, it doesn't apply if compiling with target=amigados
  4969. +    on a different host with possibly different system headers. Same thing
  4970. +    would apply to gstdarg.h and gvarargs.h, but those headers are more
  4971. +    easily fixable than this one and I'm sick of writing the same comment
  4972. +    there as well. MW
  4973. +    Include the contents of <stddef.h> inline rather than with a #include,
  4974. +    to avoid infinite include recursion when this file is installed in
  4975. +    gcc's include directory as stddef.h.  (fnf)  */
  4976. + #define _STDDEF_H_
  4977. + #include <machine/ansi.h>
  4978. + typedef    _PTRDIFF_T_    ptrdiff_t;
  4979. + #ifdef    _SIZE_T_
  4980. + typedef    _SIZE_T_    size_t;
  4981. + #undef    _SIZE_T_
  4982. + #endif
  4983. + #ifdef    _WCHAR_T_
  4984. + typedef    _WCHAR_T_    wchar_t;
  4985. + #undef    _WCHAR_T_
  4986. + #endif
  4987. + #ifndef    NULL
  4988. + #define    NULL    0
  4989. + #endif
  4990. + #define    offsetof(type, member)    ((size_t)(&((type *)0)->member))
  4991. + #else /* not amigados */
  4992.   /* Any one of these symbols __need_* means that GNU libc
  4993.      wants us just to define one data type.  So don't define
  4994.      the symbols that indicate this file's entire job has been done.  */
  4995. ***************
  4996. *** 172,177 ****
  4997. --- 212,219 ----
  4998.   #ifndef __WCHAR_TYPE__
  4999.   #define __WCHAR_TYPE__ int
  5000.   #endif
  5001. + #endif /* not amigados */
  5002.   #ifdef __GNUG__
  5003.   /* In C++, wchar_t is a distinct basic type,
  5004.      and we can expect __wchar_t to be defined by cc1plus.  */
  5005. diff -rc --new-file gcc-2.5.7-fsf/gvarargs.h gcc-2.5.7-amiga/gvarargs.h
  5006. *** gcc-2.5.7-fsf/gvarargs.h    Sat Nov 13 08:33:41 1993
  5007. --- gcc-2.5.7-amiga/gvarargs.h    Sun Dec 12 17:26:25 1993
  5008. ***************
  5009. *** 156,162 ****
  5010.   /* The macro _VA_LIST_T_H is used in the Bull dpx2  */
  5011.   #ifndef _VA_LIST_T_H
  5012.   #define _VA_LIST_T_H
  5013. ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__))
  5014.   #define _VA_LIST_
  5015.   #endif
  5016.   #define _VA_LIST
  5017. --- 156,162 ----
  5018.   /* The macro _VA_LIST_T_H is used in the Bull dpx2  */
  5019.   #ifndef _VA_LIST_T_H
  5020.   #define _VA_LIST_T_H
  5021. ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__amigados__))
  5022.   #define _VA_LIST_
  5023.   #endif
  5024.   #define _VA_LIST
  5025. ***************
  5026. *** 172,176 ****
  5027. --- 172,183 ----
  5028.   #ifdef _BSD_VA_LIST
  5029.   #undef _BSD_VA_LIST
  5030.   #endif
  5031. + #ifdef amigados
  5032. + # ifndef _VA_LIST
  5033. + #  define _VA_LIST
  5034. +    typedef __gnuc_va_list va_list;
  5035. + # endif
  5036. + #endif /* amigados */
  5037.   
  5038.   #endif /* __GNUC__ */
  5039. diff -rc --new-file gcc-2.5.7-fsf/machmode.h gcc-2.5.7-amiga/machmode.h
  5040. *** gcc-2.5.7-fsf/machmode.h    Mon Jun 28 01:18:48 1993
  5041. --- gcc-2.5.7-amiga/machmode.h    Sun Dec 12 17:26:29 1993
  5042. ***************
  5043. *** 92,98 ****
  5044.   
  5045.   /* Get the name of mode MODE as a string.  */
  5046.   
  5047. ! extern char *mode_name[];
  5048.   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  5049.   
  5050.   enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
  5051. --- 92,98 ----
  5052.   
  5053.   /* Get the name of mode MODE as a string.  */
  5054.   
  5055. ! extern char * const mode_name[];
  5056.   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  5057.   
  5058.   enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
  5059. ***************
  5060. *** 101,107 ****
  5061.   /* Get the general kind of object that mode MODE represents
  5062.      (integer, floating, complex, etc.)  */
  5063.   
  5064. ! extern enum mode_class mode_class[];
  5065.   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  5066.   
  5067.   /* Nonzero if MODE is an integral mode.  */
  5068. --- 101,107 ----
  5069.   /* Get the general kind of object that mode MODE represents
  5070.      (integer, floating, complex, etc.)  */
  5071.   
  5072. ! extern const enum mode_class mode_class[];
  5073.   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  5074.   
  5075.   /* Nonzero if MODE is an integral mode.  */
  5076. ***************
  5077. *** 117,128 ****
  5078.   
  5079.   /* Get the size in bytes of an object of mode MODE.  */
  5080.   
  5081. ! extern int mode_size[];
  5082.   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  5083.   
  5084.   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  5085.   
  5086. ! extern int mode_unit_size[];
  5087.   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  5088.   
  5089.   /* Get the number of units in the object.  */
  5090. --- 117,128 ----
  5091.   
  5092.   /* Get the size in bytes of an object of mode MODE.  */
  5093.   
  5094. ! extern const int mode_size[];
  5095.   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  5096.   
  5097.   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  5098.   
  5099. ! extern const int mode_unit_size[];
  5100.   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  5101.   
  5102.   /* Get the number of units in the object.  */
  5103. ***************
  5104. *** 144,150 ****
  5105.   
  5106.   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  5107.   
  5108. ! extern enum machine_mode mode_wider_mode[];
  5109.   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  5110.   
  5111.   /* Return the mode for data of a given size SIZE and mode class CLASS.
  5112. --- 144,150 ----
  5113.   
  5114.   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  5115.   
  5116. ! extern const enum machine_mode mode_wider_mode[];
  5117.   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  5118.   
  5119.   /* Return the mode for data of a given size SIZE and mode class CLASS.
  5120. diff -rc --new-file gcc-2.5.7-fsf/print-tree.c gcc-2.5.7-amiga/print-tree.c
  5121. *** gcc-2.5.7-fsf/print-tree.c    Wed Oct 27 05:55:26 1993
  5122. --- gcc-2.5.7-amiga/print-tree.c    Sun Dec 12 17:26:34 1993
  5123. ***************
  5124. *** 24,30 ****
  5125.   
  5126.   extern char **tree_code_name;
  5127.   
  5128. ! extern char *mode_name[];
  5129.   
  5130.   void print_node ();
  5131.   void indent_to ();
  5132. --- 24,30 ----
  5133.   
  5134.   extern char **tree_code_name;
  5135.   
  5136. ! extern char *const mode_name[];
  5137.   
  5138.   void print_node ();
  5139.   void indent_to ();
  5140. diff -rc --new-file gcc-2.5.7-fsf/protoize.c gcc-2.5.7-amiga/protoize.c
  5141. *** gcc-2.5.7-fsf/protoize.c    Wed Nov 24 19:31:26 1993
  5142. --- gcc-2.5.7-amiga/protoize.c    Sun Dec 12 17:26:42 1993
  5143. ***************
  5144. *** 839,846 ****
  5145. --- 839,851 ----
  5146.   {
  5147.     struct default_include *p;
  5148.   
  5149. + #ifdef FILE_NAME_ABSOLUTE_P
  5150. +   if (! FILE_NAME_ABSOLUTE_P (path))
  5151. +     abort ();
  5152. + #else
  5153.     if (path[0] != '/')
  5154.       abort ();        /* Must be an absolutized filename.  */
  5155. + #endif
  5156.   
  5157.     for (p = include_defaults; p->fname; p++)
  5158.       if (!strncmp (path, p->fname, strlen (p->fname))
  5159. ***************
  5160. *** 1267,1273 ****
  5161. --- 1272,1282 ----
  5162.     {
  5163.       const char *src_p;
  5164.   
  5165. + #ifdef FILE_NAME_ABSOLUTE_P
  5166. +     if (! FILE_NAME_ABSOLUTE_P (rel_filename))
  5167. + #else
  5168.       if (rel_filename[0] != '/')
  5169. + #endif
  5170.         {
  5171.           src_p = cwd2;
  5172.           while (*endp++ = *src_p++)
  5173. ***************
  5174. *** 1530,1535 ****
  5175. --- 1539,1563 ----
  5176.     return ++q;
  5177.   }
  5178.   
  5179. + /* Use this macro to advance a char * over the filename part in a line
  5180. +    read from an aux-info file. */
  5181. + #ifndef amigados
  5182. + /* Version for file systems where the colon has no special meaning */
  5183. + #define ADVANCE_PAST_FILENAME(CP) \
  5184. +   while (* (CP) != ':') (CP)++
  5185. + #else
  5186. + /* Have to heuristically decide whether the colon is part of the filename
  5187. +    or whether it serves to delimit the filename from the line number. If
  5188. +    it's the latter case, then the character following the colon *must*
  5189. +    be a digit. Note that this heuristic fails if the filename starts
  5190. +    with a digit. */
  5191. + #define ADVANCE_PAST_FILENAME(CP) \
  5192. +     while ((CP)[0] != ':' || !isdigit ((CP)[1])) \
  5193. +       (CP)++;
  5194. + #endif
  5195.   /* Given a line from  an aux info file, and a time at which the aux info
  5196.      file it came from was created, check to see if the item described in
  5197.      the line comes from a file which has been modified since the aux info
  5198. ***************
  5199. *** 1551,1558 ****
  5200.     {
  5201.       const char *filename_start = p = l + 3;
  5202.   
  5203. !     while (*p != ':')
  5204. !       p++;
  5205.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  5206.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  5207.       filename[p-filename_start] = '\0';
  5208. --- 1579,1585 ----
  5209.     {
  5210.       const char *filename_start = p = l + 3;
  5211.   
  5212. !     ADVANCE_PAST_FILENAME (p);
  5213.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  5214.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  5215.       filename[p-filename_start] = '\0';
  5216. ***************
  5217. *** 1609,1616 ****
  5218.       const char *filename_start = p = l + 3;
  5219.       char *filename;
  5220.   
  5221. !     while (*p != ':')
  5222. !       p++;
  5223.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  5224.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  5225.       filename[p-filename_start] = '\0';
  5226. --- 1636,1642 ----
  5227.       const char *filename_start = p = l + 3;
  5228.       char *filename;
  5229.   
  5230. !     ADVANCE_PAST_FILENAME (p);
  5231.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  5232.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  5233.       filename[p-filename_start] = '\0';
  5234. ***************
  5235. *** 2330,2336 ****
  5236.     {
  5237.       char *p = aux_info_base;
  5238.   
  5239. !     while (*p != ':')
  5240.         p++;
  5241.       p++;
  5242.       while (*p == ' ')
  5243. --- 2356,2364 ----
  5244.     {
  5245.       char *p = aux_info_base;
  5246.   
  5247. !     /* have to make sure at least one space is following the colon to make
  5248. !        sure the colon is not part of the filename */
  5249. !     while (*p != ':' && p[1] != ' ')
  5250.         p++;
  5251.       p++;
  5252.       while (*p == ' ')
  5253. ***************
  5254. *** 2344,2350 ****
  5255.         continue;
  5256.       aux_info_second_line = p;
  5257.       aux_info_relocated_name = 0;
  5258. !     if (invocation_filename[0] != '/')
  5259.         {
  5260.       /* INVOCATION_FILENAME is relative;
  5261.          append it to BASE_SOURCE_FILENAME's dir.  */
  5262. --- 2372,2382 ----
  5263.         continue;
  5264.       aux_info_second_line = p;
  5265.       aux_info_relocated_name = 0;
  5266. ! #ifdef FILE_NAME_ABSOLUTE_P
  5267. !     if (! FILE_NAME_ABSOLUTE_P (invocation_filename))
  5268. ! #else
  5269. !       if (invocation_filename[0] != '/')
  5270. ! #endif
  5271.         {
  5272.       /* INVOCATION_FILENAME is relative;
  5273.          append it to BASE_SOURCE_FILENAME's dir.  */
  5274. ***************
  5275. *** 2432,2438 ****
  5276.   #ifndef UNPROTOIZE
  5277.   
  5278.   /* Check an individual filename for a .c suffix.  If the filename has this
  5279. !    suffix, rename the file such that its suffix is changed to .C.  This
  5280.      function implements the -C option.  */
  5281.   
  5282.   static void
  5283. --- 2464,2470 ----
  5284.   #ifndef UNPROTOIZE
  5285.   
  5286.   /* Check an individual filename for a .c suffix.  If the filename has this
  5287. !    suffix, rename the file such that its suffix is changed to .cc.  This
  5288.      function implements the -C option.  */
  5289.   
  5290.   static void
  5291. ***************
  5292. *** 2441,2447 ****
  5293.   {
  5294.     const char *filename = hp->symbol;
  5295.     int last_char_index = strlen (filename) - 1;
  5296. !   char *const new_filename = (char *) alloca (strlen (filename) + 1);
  5297.   
  5298.     /* Note that we don't care here if the given file was converted or not.  It
  5299.        is possible that the given file was *not* converted, simply because there
  5300. --- 2473,2479 ----
  5301.   {
  5302.     const char *filename = hp->symbol;
  5303.     int last_char_index = strlen (filename) - 1;
  5304. !   char *const new_filename = (char *) alloca (strlen (filename) + 2);
  5305.   
  5306.     /* Note that we don't care here if the given file was converted or not.  It
  5307.        is possible that the given file was *not* converted, simply because there
  5308. ***************
  5309. *** 2453,2460 ****
  5310.       return;
  5311.   
  5312.     strcpy (new_filename, filename);
  5313. !   new_filename[last_char_index] = 'C';
  5314.   
  5315.     if (my_link (filename, new_filename) == -1)
  5316.       {
  5317.         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  5318. --- 2485,2509 ----
  5319.       return;
  5320.   
  5321.     strcpy (new_filename, filename);
  5322. !   strcat (new_filename + last_char_index, "cc");
  5323. !   
  5324. !   /* use rename(2) if available !! Update config files to include HAVE_rename
  5325. !      if the used OS provides it. Advantages are: it's atomic, it's one
  5326. !      system call compared to two. */
  5327. ! #ifdef HAVE_rename
  5328. !   /* if the mentioned systems (POSIX 1003.1-1988) have rename(2), this has
  5329. !      to be changed to `my_rename' as well. */
  5330.   
  5331. +   if (rename (filename, new_filename) == -1)
  5332. +     {
  5333. +       fprintf (stderr, "%s: warning: can't rename file `%s' to `%s': %s\n",
  5334. +            pname, shortpath (NULL, filename),
  5335. +            shortpath (NULL, new_filename), sys_errlist[errno]);
  5336. +       errors++;
  5337. +       return;
  5338. +     }
  5339. + #else
  5340.     if (my_link (filename, new_filename) == -1)
  5341.       {
  5342.         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  5343. ***************
  5344. *** 2471,2476 ****
  5345. --- 2520,2526 ----
  5346.         errors++;
  5347.         return;
  5348.       }
  5349. + #endif
  5350.   }
  5351.   
  5352.   #endif /* !defined (UNPROTOIZE) */
  5353. diff -rc --new-file gcc-2.5.7-fsf/real.c gcc-2.5.7-amiga/real.c
  5354. *** gcc-2.5.7-fsf/real.c    Wed Oct 13 19:46:38 1993
  5355. --- gcc-2.5.7-amiga/real.c    Sun Dec 12 17:26:49 1993
  5356. ***************
  5357. *** 4333,4341 ****
  5358.     if (y[NE - 1] == 0x7fff)
  5359.       {
  5360.         if (sign)
  5361. !     sprintf (wstring, " -Infinity ");
  5362.         else
  5363. !     sprintf (wstring, " Infinity ");
  5364.         goto bxit;
  5365.       }
  5366.   
  5367. --- 4333,4341 ----
  5368.     if (y[NE - 1] == 0x7fff)
  5369.       {
  5370.         if (sign)
  5371. !     sprintf (wstring, " -NaN ");
  5372.         else
  5373. !     sprintf (wstring, " NaN ");
  5374.         goto bxit;
  5375.       }
  5376.   
  5377. diff -rc --new-file gcc-2.5.7-fsf/rtl.c gcc-2.5.7-amiga/rtl.c
  5378. *** gcc-2.5.7-fsf/rtl.c    Thu Oct  7 21:05:00 1993
  5379. --- gcc-2.5.7-amiga/rtl.c    Sun Dec 12 17:26:54 1993
  5380. ***************
  5381. *** 50,56 ****
  5382.   
  5383.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  5384.   
  5385. ! char *rtx_name[] = {
  5386.   #include "rtl.def"        /* rtl expressions are documented here */
  5387.   };
  5388.   
  5389. --- 50,56 ----
  5390.   
  5391.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  5392.   
  5393. ! char * const rtx_name[] = {
  5394.   #include "rtl.def"        /* rtl expressions are documented here */
  5395.   };
  5396.   
  5397. ***************
  5398. *** 61,67 ****
  5399.   
  5400.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  5401.   
  5402. ! char *mode_name[(int) MAX_MACHINE_MODE] = {
  5403.   #include "machmode.def"
  5404.   
  5405.   #ifdef EXTRA_CC_MODES
  5406. --- 61,67 ----
  5407.   
  5408.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  5409.   
  5410. ! char * const mode_name[(int) MAX_MACHINE_MODE] = {
  5411.   #include "machmode.def"
  5412.   
  5413.   #ifdef EXTRA_CC_MODES
  5414. ***************
  5415. *** 77,83 ****
  5416.   
  5417.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  5418.   
  5419. ! enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  5420.   #include "machmode.def"
  5421.   };
  5422.   
  5423. --- 77,83 ----
  5424.   
  5425.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  5426.   
  5427. ! const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  5428.   #include "machmode.def"
  5429.   };
  5430.   
  5431. ***************
  5432. *** 88,94 ****
  5433.   
  5434.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  5435.   
  5436. ! int mode_size[(int) MAX_MACHINE_MODE] = {
  5437.   #include "machmode.def"
  5438.   };
  5439.   
  5440. --- 88,94 ----
  5441.   
  5442.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  5443.   
  5444. ! const int mode_size[(int) MAX_MACHINE_MODE] = {
  5445.   #include "machmode.def"
  5446.   };
  5447.   
  5448. ***************
  5449. *** 99,105 ****
  5450.   
  5451.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  5452.   
  5453. ! int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  5454.   #include "machmode.def"        /* machine modes are documented here */
  5455.   };
  5456.   
  5457. --- 99,105 ----
  5458.   
  5459.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  5460.   
  5461. ! const int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  5462.   #include "machmode.def"        /* machine modes are documented here */
  5463.   };
  5464.   
  5465. ***************
  5466. *** 112,118 ****
  5467.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
  5468.     (enum machine_mode) WIDER,
  5469.   
  5470. ! enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  5471.   #include "machmode.def"        /* machine modes are documented here */
  5472.   };
  5473.   
  5474. --- 112,118 ----
  5475.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
  5476.     (enum machine_mode) WIDER,
  5477.   
  5478. ! const enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  5479.   #include "machmode.def"        /* machine modes are documented here */
  5480.   };
  5481.   
  5482. ***************
  5483. *** 126,132 ****
  5484.      rtx's of that code.  The sequence is a C string in which
  5485.      each character describes one operand.  */
  5486.   
  5487. ! char *rtx_format[] = {
  5488.     /* "*" undefined.
  5489.            can cause a warning message
  5490.        "0" field is unused (or used in a phase-dependent manner)
  5491. --- 126,132 ----
  5492.      rtx's of that code.  The sequence is a C string in which
  5493.      each character describes one operand.  */
  5494.   
  5495. ! char *const rtx_format[] = {
  5496.     /* "*" undefined.
  5497.            can cause a warning message
  5498.        "0" field is unused (or used in a phase-dependent manner)
  5499. ***************
  5500. *** 157,163 ****
  5501.   /* Indexed by rtx code, gives a character representing the "class" of
  5502.      that rtx code.  See rtl.def for documentation on the defined classes.  */
  5503.   
  5504. ! char rtx_class[] = {
  5505.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  5506.   #include "rtl.def"        /* rtl expressions are defined here */
  5507.   #undef DEF_RTL_EXPR
  5508. --- 157,163 ----
  5509.   /* Indexed by rtx code, gives a character representing the "class" of
  5510.      that rtx code.  See rtl.def for documentation on the defined classes.  */
  5511.   
  5512. ! const char rtx_class[] = {
  5513.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  5514.   #include "rtl.def"        /* rtl expressions are defined here */
  5515.   #undef DEF_RTL_EXPR
  5516. ***************
  5517. *** 165,171 ****
  5518.   
  5519.   /* Names for kinds of NOTEs and REG_NOTEs.  */
  5520.   
  5521. ! char *note_insn_name[] = { 0                    , "NOTE_INSN_DELETED",
  5522.                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  5523.                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  5524.                  "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
  5525. --- 165,171 ----
  5526.   
  5527.   /* Names for kinds of NOTEs and REG_NOTEs.  */
  5528.   
  5529. ! char * const note_insn_name[] = { 0                    , "NOTE_INSN_DELETED",
  5530.                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  5531.                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  5532.                  "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
  5533. ***************
  5534. *** 173,179 ****
  5535.                  "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
  5536.                  "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG"};
  5537.   
  5538. ! char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  5539.                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  5540.                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  5541.                 "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
  5542. --- 173,180 ----
  5543.                  "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
  5544.                  "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG"};
  5545.   
  5546. ! char * const reg_note_name[] =
  5547. !              { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  5548.                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  5549.                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  5550.                 "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
  5551. diff -rc --new-file gcc-2.5.7-fsf/rtl.h gcc-2.5.7-amiga/rtl.h
  5552. *** gcc-2.5.7-fsf/rtl.h    Wed Sep 29 22:34:24 1993
  5553. --- gcc-2.5.7-amiga/rtl.h    Sun Dec 12 17:27:00 1993
  5554. ***************
  5555. *** 44,56 ****
  5556.   extern int rtx_length[];
  5557.   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  5558.   
  5559. ! extern char *rtx_name[];
  5560.   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  5561.   
  5562. ! extern char *rtx_format[];
  5563.   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  5564.   
  5565. ! extern char rtx_class[];
  5566.   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  5567.   
  5568.   /* Common union for an element of an rtx.  */
  5569. --- 44,56 ----
  5570.   extern int rtx_length[];
  5571.   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  5572.   
  5573. ! extern char * const rtx_name[];
  5574.   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  5575.   
  5576. ! extern char * const rtx_format[];
  5577.   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  5578.   
  5579. ! extern const char rtx_class[];
  5580.   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  5581.   
  5582.   /* Common union for an element of an rtx.  */
  5583. ***************
  5584. *** 331,337 ****
  5585.   
  5586.   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  5587.   
  5588. ! extern char *reg_note_name[];
  5589.   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  5590.   
  5591.   /* The label-number of a code-label.  The assembler label
  5592. --- 331,337 ----
  5593.   
  5594.   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  5595.   
  5596. ! extern char *const reg_note_name[];
  5597.   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  5598.   
  5599.   /* The label-number of a code-label.  The assembler label
  5600. ***************
  5601. *** 408,414 ****
  5602.   
  5603.   /* Names for NOTE insn's other than line numbers.  */
  5604.   
  5605. ! extern char *note_insn_name[];
  5606.   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  5607.   
  5608.   /* The name of a label, in case it corresponds to an explicit label
  5609. --- 408,414 ----
  5610.   
  5611.   /* Names for NOTE insn's other than line numbers.  */
  5612.   
  5613. ! extern char *const note_insn_name[];
  5614.   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  5615.   
  5616.   /* The name of a label, in case it corresponds to an explicit label
  5617. diff -rc --new-file gcc-2.5.7-fsf/scan-types.sh gcc-2.5.7-amiga/scan-types.sh
  5618. *** gcc-2.5.7-fsf/scan-types.sh    Tue Oct 26 23:01:02 1993
  5619. --- gcc-2.5.7-amiga/scan-types.sh    Sun Dec 12 17:27:04 1993
  5620. ***************
  5621. *** 1,4 ****
  5622. ! #! /bin/sh
  5623.   # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
  5624.   # Emits macros definitions for these, and some other types.
  5625.   # Intended to be used to massage the sys-protos.h file.
  5626. --- 1,4 ----
  5627. ! #!/bin/sh
  5628.   # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
  5629.   # Emits macros definitions for these, and some other types.
  5630.   # Intended to be used to massage the sys-protos.h file.
  5631. diff -rc --new-file gcc-2.5.7-fsf/toplev.c gcc-2.5.7-amiga/toplev.c
  5632. *** gcc-2.5.7-fsf/toplev.c    Sat Dec 11 00:59:54 1993
  5633. --- gcc-2.5.7-amiga/toplev.c    Sun Dec 12 17:27:11 1993
  5634. ***************
  5635. *** 504,509 ****
  5636. --- 504,510 ----
  5637.     {"unroll-all-loops", &flag_unroll_all_loops, 1},
  5638.     {"writable-strings", &flag_writable_strings, 1},
  5639.     {"peephole", &flag_no_peephole, 0},
  5640. +   {"large-baserel", &flag_pic, 4},
  5641.     {"force-mem", &flag_force_mem, 1},
  5642.     {"force-addr", &flag_force_addr, 1},
  5643.     {"function-cse", &flag_no_function_cse, 0},
  5644. ***************
  5645. *** 522,527 ****
  5646. --- 523,529 ----
  5647.     {"schedule-insns2", &flag_schedule_insns_after_reload, 1},
  5648.     {"pic", &flag_pic, 1},
  5649.     {"PIC", &flag_pic, 2},
  5650. +   {"baserel", &flag_pic, 3},
  5651.     {"fast-math", &flag_fast_math, 1},
  5652.     {"common", &flag_no_common, 0},
  5653.     {"inhibit-size-directive", &flag_inhibit_size_directive, 1},
  5654. ***************
  5655. *** 1530,1535 ****
  5656. --- 1532,1540 ----
  5657.        FILE *asm_file;
  5658.        char *input_name;
  5659.   {
  5660. + #ifdef FILE_NAME_NONDIRECTORY
  5661. +   char *na = FILE_NAME_NONDIRECTORY (input_name);
  5662. + #else
  5663.     int len = strlen (input_name);
  5664.     char *na = input_name + len;
  5665.   
  5666. ***************
  5667. *** 1540,1545 ****
  5668. --- 1545,1551 ----
  5669.       break;
  5670.         na--;
  5671.       }
  5672. + #endif
  5673.   
  5674.   #ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
  5675.     ASM_OUTPUT_MAIN_SOURCE_FILENAME (asm_file, na);
  5676. ***************
  5677. *** 3507,3512 ****
  5678. --- 3513,3519 ----
  5679.   
  5680.   #ifndef OS2
  5681.   #ifndef VMS
  5682. + #ifndef amigados
  5683.     if (flag_print_mem)
  5684.       {
  5685.         char *lim = (char *) sbrk (0);
  5686. ***************
  5687. *** 3521,3526 ****
  5688. --- 3528,3534 ----
  5689.         system ("ps v");
  5690.   #endif /* not USG */
  5691.       }
  5692. + #endif /* not amigados */
  5693.   #endif /* not VMS */
  5694.   #endif /* not OS2 */
  5695.   
  5696. diff -rc --new-file gcc-2.5.7-fsf/tree.c gcc-2.5.7-amiga/tree.c
  5697. *** gcc-2.5.7-fsf/tree.c    Sun Oct 10 21:08:12 1993
  5698. --- gcc-2.5.7-amiga/tree.c    Sun Dec 12 17:27:17 1993
  5699. ***************
  5700. *** 248,254 ****
  5701.   /* Unique id for next type created.  */
  5702.   static int next_type_uid = 1;
  5703.   
  5704. ! extern char *mode_name[];
  5705.   
  5706.   void gcc_obstack_init ();
  5707.   static tree stabilize_reference_1 ();
  5708. --- 248,254 ----
  5709.   /* Unique id for next type created.  */
  5710.   static int next_type_uid = 1;
  5711.   
  5712. ! extern char *const mode_name[];
  5713.   
  5714.   void gcc_obstack_init ();
  5715.   static tree stabilize_reference_1 ();
  5716.