home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 1 / FFMCD01.bin / useful / dist / gnu / gcc / gcc-2.4.5.diffs next >
Encoding:
Text File  |  1993-09-24  |  182.4 KB  |  6,281 lines

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