diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-06 21:28:22 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-06 21:28:22 +0000 |
commit | dc12af010096308df38397ae5f895e02a3ea6037 (patch) | |
tree | 2092d851d6543942e355d2ca28226abc3bbe2721 /gcc | |
parent | 86f9e2d817933614e94cb566dc1ae2fc72c8c034 (diff) | |
download | gcc-dc12af010096308df38397ae5f895e02a3ea6037.tar.gz |
* Makefile.in (C_AND_OBJC_OBJS): Remove ggc-callbacks.o.
(c-parse.o, c-decl.o, c-lang.o, c-lex.o, c-common.o,
$(out_object_file)): Depend on ggc.h.
* c-common.c: Include "ggc.h".
(combine_strings): If doing GC, use ggc_alloc_string.
* c-decl.c: Include "ggc.h".
(ggc_p): Define with value 0.
(mark_binding_level): New function.
(init_decl_processing): Add GC roots.
(mark_c_function_context): New function.
(lang_mark_false_label_stack): New function.
(lang_mark_tree): New function.
(lang_cleanup_tree): New function.
* c-lang.c: Include "ggc.h".
(lang_init): Call c_parse_init.
* c-lex.c: Include "ggc.h".
(check_linenum): If doing GC, don't copy filenames to permanent
obstack.
* c-parse.in: Include "ggc.h".
(c_parse_init): New function.
* c-tree.h (c_parse_init, mark_c_function_context): Declare.
* objc/Make-lang.in (objc-parse.o): Depend on ggc.h.
* except.c (mark_eh_state): Mark more state.
* function.c (mark_function_state): Likewise.
* ggc-simple.c (ggc_alloc_rtvec): Bring in sync with non-gc version.
(ggc_alloc_string) [GGC_DUMP]: Fix typo.
* toplev.c (mark_file_stack): New function.
(compile_file): If doing GC, use ggc_alloc_string on input filename.
(main): Add root for input_file_stack.
* i386.c: Include "ggc.h".
(ix86_mark_machine_status): New function.
(override_options): Set mark_machine_status.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29143 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/Makefile.in | 14 | ||||
-rw-r--r-- | gcc/c-common.c | 3 | ||||
-rw-r--r-- | gcc/c-decl.c | 106 | ||||
-rw-r--r-- | gcc/c-lang.c | 4 | ||||
-rw-r--r-- | gcc/c-lex.c | 3 | ||||
-rw-r--r-- | gcc/c-parse.c | 761 | ||||
-rw-r--r-- | gcc/c-parse.in | 13 | ||||
-rw-r--r-- | gcc/c-parse.y | 13 | ||||
-rw-r--r-- | gcc/c-tree.h | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 19 | ||||
-rw-r--r-- | gcc/objc/Make-lang.in | 2 |
11 files changed, 554 insertions, 388 deletions
diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 5cb7a7ca2d8..07a343703fe 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -659,7 +659,7 @@ SUBDIR_FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) \ # Language-specific object files for C and Objective C. C_AND_OBJC_OBJS = c-lex.o c-pragma.o c-decl.o c-typeck.o c-convert.o \ - c-aux-info.o c-common.o c-iterate.o ggc-callbacks.o @extra_c_objs@ + c-aux-info.o c-common.o c-iterate.o @extra_c_objs@ # Language-specific object files for C. C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS) @@ -1312,7 +1312,7 @@ s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H) # C language specific files. -c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h \ +c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h ggc.h \ $(srcdir)/c-parse.h c-tree.h c-common.h input.h flags.h system.h toplev.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c $(srcdir)/c-parse.h: $(srcdir)/c-parse.c @@ -1330,15 +1330,15 @@ $(srcdir)/c-gperf.h: c-parse.gperf -k1,3,$$ $(srcdir)/c-parse.gperf >tmp-gperf.h $(srcdir)/move-if-change tmp-gperf.h $(srcdir)/c-gperf.h -c-decl.o : c-decl.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h \ +c-decl.o : c-decl.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h ggc.h \ c-lex.h flags.h function.h output.h toplev.h defaults.h c-typeck.o : c-typeck.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h \ flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h -c-lang.o : c-lang.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h \ +c-lang.o : c-lang.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h ggc.h \ c-lex.h toplev.h output.h function.h c-lex.o : c-lex.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-lex.h c-tree.h \ c-common.h $(srcdir)/c-parse.h $(srcdir)/c-gperf.h c-pragma.h input.h \ - intl.h flags.h toplev.h output.h mbchar.h + intl.h flags.h toplev.h output.h mbchar.h ggc.h c-aux-info.o : c-aux-info.c $(CONFIG_H) system.h $(TREE_H) c-tree.h \ c-common.h flags.h toplev.h c-convert.o : c-convert.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h @@ -1395,7 +1395,7 @@ s-under: $(GCC_PASSES) # A file used by all variants of C. c-common.o : c-common.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-lex.h \ - c-common.h flags.h toplev.h output.h c-pragma.h $(RTL_H) + c-common.h flags.h toplev.h output.h c-pragma.h $(RTL_H) ggc.h # Language-independent files. @@ -1602,7 +1602,7 @@ reg-stack.o : reg-stack.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) recog.h \ dyn-string.o: dyn-string.c dyn-string.h $(CONFIG_H) system.h lists.o: lists.c $(CONFIG_H) system.h toplev.h $(RTL_H) -$(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) \ +$(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) ggc.h \ $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \ insn-flags.h output.h insn-attr.h insn-codes.h system.h toplev.h function.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(out_file) diff --git a/gcc/c-common.c b/gcc/c-common.c index 217f32d120c..4fea4ac70ae 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA. */ #include "output.h" #include "c-pragma.h" #include "rtl.h" +#include "ggc.h" #if USE_CPPLIB #include "cpplib.h" @@ -347,7 +348,7 @@ combine_strings (strings) if (wide_flag) length = length * wchar_bytes + wide_length; - p = savealloc (length); + p = ggc_p ? ggc_alloc_string (NULL, length) : savealloc (length); /* Copy the individual strings into the new combined string. If the combined string is wide, convert the chars to ints diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 68720ec821d..d4c4fe1178f 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -36,6 +36,7 @@ Boston, MA 02111-1307, USA. */ #include "c-lex.h" #include "toplev.h" #include "defaults.h" +#include "ggc.h" #if USE_CPPLIB #include "cpplib.h" @@ -105,6 +106,9 @@ enum decl_context #define WCHAR_TYPE "int" #endif +/* Don't do GC. */ +int ggc_p = 0; + /* a node which has tree code ERROR_MARK, and whose type is itself. All erroneous expressions are replaced with this node. All functions that accept nodes as arguments should avoid generating error messages @@ -342,6 +346,7 @@ tree static_ctors, static_dtors; /* Forward declarations. */ static struct binding_level * make_binding_level PROTO((void)); +static void mark_binding_level PROTO((void *)); static void clear_limbo_values PROTO((tree)); static int duplicate_decls PROTO((tree, tree, int)); static int redeclaration_error_message PROTO((tree, tree)); @@ -2928,6 +2933,25 @@ lookup_name_current_level (name) return t; } +/* Mark ARG for GC. */ +void +mark_binding_level (arg) + void *arg; +{ + struct binding_level *level = *(struct binding_level **) arg; + + while (level) + { + ggc_mark_tree (level->names); + ggc_mark_tree (level->tags); + ggc_mark_tree (level->shadowed); + ggc_mark_tree (level->blocks); + ggc_mark_tree (level->this_block); + ggc_mark_tree (level->parm_order); + level = level->level_chain; + } +} + /* Create the predefined scalar types of C, and some nodes representing standard constants (0, 1, (void *) 0). Initialize the global binding level. @@ -3222,6 +3246,31 @@ init_decl_processing () incomplete_decl_finalize_hook = finish_incomplete_decl; lang_get_alias_set = c_get_alias_set; + + /* Record our roots. */ + + ggc_add_tree_root (c_global_trees, CTI_MAX); + ggc_add_tree_root (¤t_function_decl, 1); + ggc_add_tree_root (&error_mark_node, 1); + ggc_add_tree_root (&ptr_type_node, 1); + ggc_add_tree_root (&va_list_type_node, 1); + ggc_add_tree_root (&void_type_node, 1); + ggc_add_tree_root (&char_type_node, 1); + ggc_add_tree_root (&integer_type_node, 1); + ggc_add_tree_root (&unsigned_type_node, 1); + ggc_add_tree_root (&integer_one_node, 1); + ggc_add_tree_root (&integer_zero_node, 1); + ggc_add_tree_root (&named_labels, 1); + ggc_add_tree_root (&null_pointer_node, 1); + ggc_add_tree_root (&size_one_node, 1); + ggc_add_tree_root (&size_zero_node, 1); + ggc_add_tree_root (&shadowed_labels, 1); + ggc_add_root (¤t_binding_level, 1, sizeof current_binding_level, + mark_binding_level); + ggc_add_root (&label_level_chain, 1, sizeof label_level_chain, + mark_binding_level); + ggc_add_tree_root (&static_ctors, 1); + ggc_add_tree_root (&static_dtors, 1); } /* Return a definition for a builtin function named NAME and whose data type @@ -7048,6 +7097,21 @@ pop_c_function_context (f) f->language = 0; } +/* Mark the language specific parts of F for GC. */ +void +mark_c_function_context (f) + struct function *f; +{ + struct language_function *p = f->language; + + if (p == 0) + return; + + ggc_mark_tree (p->shadowed_labels); + ggc_mark_tree (p->named_labels); + mark_binding_level (&p->binding_level); +} + /* integrate_decl_tree calls this function, but since we don't use the DECL_LANG_SPECIFIC field, this is a no-op. */ @@ -7056,3 +7120,45 @@ copy_lang_decl (node) tree node ATTRIBUTE_UNUSED; { } + +/* Mark ARG for GC. */ +void +lang_mark_false_label_stack (arg) + struct label_node *arg; +{ + /* C doesn't use false_label_stack. It better be NULL. */ + if (arg != NULL) + abort(); +} + +/* Mark the language specific bits in T for GC. */ +void +lang_mark_tree (t) + tree t; +{ + if (TREE_CODE (t) == IDENTIFIER_NODE) + { + struct lang_identifier *i = (struct lang_identifier *) t; + ggc_mark_tree (i->global_value); + ggc_mark_tree (i->local_value); + ggc_mark_tree (i->label_value); + ggc_mark_tree (i->implicit_decl); + ggc_mark_tree (i->error_locus); + ggc_mark_tree (i->limbo_value); + } +} + +/* Free the language specific bits in T for GC. */ +void +lang_cleanup_tree (t) + tree t; +{ + if (TREE_CODE_CLASS (TREE_CODE (t)) == 't' + && TYPE_LANG_SPECIFIC (t) != NULL) + { +#if 0 + /* This is currently allocated with an obstack. This will change. */ + free (TYPE_LANG_SPECIFIC (t)); +#endif + } +} diff --git a/gcc/c-lang.c b/gcc/c-lang.c index dbf46c4f3b8..24fc72c71b4 100644 --- a/gcc/c-lang.c +++ b/gcc/c-lang.c @@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */ #include "c-lex.h" #include "toplev.h" #include "output.h" +#include "ggc.h" #if USE_CPPLIB #include "cpplib.h" @@ -72,6 +73,9 @@ lang_init () save_lang_status = &push_c_function_context; restore_lang_status = &pop_c_function_context; + mark_lang_status = &mark_c_function_context; + + c_parse_init (); } void diff --git a/gcc/c-lex.c b/gcc/c-lex.c index 34dc5e62901..79002f3e3fd 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -32,6 +32,7 @@ Boston, MA 02111-1307, USA. */ #include "c-pragma.h" #include "toplev.h" #include "intl.h" +#include "ggc.h" /* MULTIBYTE_CHARS support only works for native compilers. ??? Ideally what we want is to model widechar support after @@ -752,7 +753,7 @@ linenum: goto skipline; } - if (!TREE_PERMANENT (yylval.ttype)) + if (! ggc_p && !TREE_PERMANENT (yylval.ttype)) { input_filename = (char *) permalloc (TREE_STRING_LENGTH (yylval.ttype) + 1); diff --git a/gcc/c-parse.c b/gcc/c-parse.c index 17a6b75b20a..919e0fc3dbd 100644 --- a/gcc/c-parse.c +++ b/gcc/c-parse.c @@ -80,7 +80,8 @@ #include "flags.h" #include "output.h" #include "toplev.h" - +#include "ggc.h" + #ifdef MULTIBYTE_CHARS #include <locale.h> #endif @@ -96,10 +97,10 @@ const char * const language_string = "GNU C"; /* Cause the `yydebug' variable to be defined. */ #define YYDEBUG 1 -#line 64 "c-parse.y" +#line 65 "c-parse.y" typedef union {long itype; tree ttype; enum tree_code code; char *filename; int lineno; int ends_in_label; } YYSTYPE; -#line 184 "c-parse.y" +#line 185 "c-parse.y" /* Number of statements (loosely speaking) and compound statements seen so far. */ @@ -126,6 +127,16 @@ static int undeclared_variable_notice; #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) extern void yyprint PROTO ((FILE *, int, YYSTYPE)); + +/* Add GC roots for variables local to this file. */ +void +c_parse_init () +{ + ggc_add_tree_root (&declspec_stack, 1); + ggc_add_tree_root (¤t_declspecs, 1); + ggc_add_tree_root (&prefix_attributes, 1); +} + #include <stdio.h> #ifndef __cplusplus @@ -360,47 +371,47 @@ static const short yyrhs[] = { -1, #if YYDEBUG != 0 static const short yyrline[] = { 0, - 213, 218, 232, 234, 234, 235, 237, 239, 240, 248, - 252, 263, 268, 273, 275, 277, 278, 279, 284, 291, - 293, 298, 303, 309, 311, 316, 321, 327, 329, 334, - 341, 343, 346, 348, 350, 352, 354, 356, 358, 362, - 366, 369, 372, 375, 379, 381, 384, 387, 391, 419, - 425, 428, 431, 434, 436, 438, 442, 446, 450, 452, - 455, 459, 486, 488, 490, 492, 494, 496, 498, 500, - 502, 504, 506, 508, 510, 512, 516, 518, 522, 524, - 527, 531, 533, 540, 543, 551, 562, 661, 662, 664, - 670, 672, 695, 704, 706, 708, 712, 718, 720, 725, - 727, 732, 734, 735, 745, 750, 752, 753, 754, 761, - 767, 772, 775, 783, 788, 790, 791, 792, 799, 810, - 814, 820, 825, 830, 835, 837, 839, 848, 851, 855, - 857, 859, 864, 868, 871, 875, 878, 880, 892, 895, - 897, 899, 903, 907, 909, 912, 925, 928, 932, 934, - 942, 943, 944, 948, 950, 956, 957, 958, 961, 963, - 966, 968, 971, 974, 980, 987, 989, 996, 1003, 1006, - 1013, 1016, 1020, 1023, 1027, 1032, 1035, 1039, 1042, 1044, - 1046, 1048, 1055, 1057, 1058, 1059, 1064, 1066, 1071, 1079, - 1084, 1088, 1091, 1093, 1098, 1100, 1101, 1104, 1104, 1107, - 1110, 1112, 1114, 1117, 1119, 1122, 1128, 1130, 1134, 1148, - 1156, 1160, 1174, 1182, 1189, 1191, 1196, 1199, 1204, 1206, - 1208, 1215, 1217, 1225, 1231, 1236, 1238, 1240, 1247, 1249, - 1255, 1261, 1263, 1265, 1270, 1272, 1279, 1281, 1284, 1287, - 1291, 1294, 1298, 1301, 1305, 1310, 1312, 1316, 1318, 1320, - 1322, 1326, 1328, 1331, 1334, 1337, 1340, 1344, 1346, 1349, - 1351, 1356, 1359, 1364, 1366, 1368, 1382, 1389, 1394, 1400, - 1405, 1407, 1412, 1414, 1418, 1422, 1426, 1436, 1438, 1443, - 1448, 1451, 1455, 1458, 1462, 1465, 1468, 1471, 1475, 1478, - 1482, 1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, 1504, - 1512, 1520, 1522, 1524, 1528, 1530, 1533, 1536, 1547, 1549, - 1554, 1556, 1559, 1573, 1576, 1579, 1581, 1583, 1591, 1599, - 1609, 1627, 1632, 1637, 1640, 1654, 1663, 1667, 1671, 1675, - 1681, 1685, 1690, 1693, 1698, 1701, 1702, 1719, 1724, 1727, - 1739, 1741, 1751, 1761, 1762, 1770, 1773, 1785, 1789, 1806, - 1816, 1825, 1830, 1835, 1840, 1844, 1848, 1859, 1866, 1873, - 1880, 1891, 1897, 1900, 1905, 1928, 1962, 1993, 2024, 2039, - 2053, 2057, 2061, 2064, 2069, 2071, 2074, 2076, 2080, 2085, - 2088, 2094, 2099, 2104, 2106, 2115, 2116, 2122, 2124, 2134, - 2136, 2140, 2143, 2149, 2159, 2168, 2177, 2187, 2201, 2206, - 2211, 2213, 2222, 2225, 2230, 2233, 2237 + 224, 229, 243, 245, 245, 246, 248, 250, 251, 259, + 263, 274, 279, 284, 286, 288, 289, 290, 295, 302, + 304, 309, 314, 320, 322, 327, 332, 338, 340, 345, + 352, 354, 357, 359, 361, 363, 365, 367, 369, 373, + 377, 380, 383, 386, 390, 392, 395, 398, 402, 430, + 436, 439, 442, 445, 447, 449, 453, 457, 461, 463, + 466, 470, 497, 499, 501, 503, 505, 507, 509, 511, + 513, 515, 517, 519, 521, 523, 527, 529, 533, 535, + 538, 542, 544, 551, 554, 562, 573, 672, 673, 675, + 681, 683, 706, 715, 717, 719, 723, 729, 731, 736, + 738, 743, 745, 746, 756, 761, 763, 764, 765, 772, + 778, 783, 786, 794, 799, 801, 802, 803, 810, 821, + 825, 831, 836, 841, 846, 848, 850, 859, 862, 866, + 868, 870, 875, 879, 882, 886, 889, 891, 903, 906, + 908, 910, 914, 918, 920, 923, 936, 939, 943, 945, + 953, 954, 955, 959, 961, 967, 968, 969, 972, 974, + 977, 979, 982, 985, 991, 998, 1000, 1007, 1014, 1017, + 1024, 1027, 1031, 1034, 1038, 1043, 1046, 1050, 1053, 1055, + 1057, 1059, 1066, 1068, 1069, 1070, 1075, 1077, 1082, 1090, + 1095, 1099, 1102, 1104, 1109, 1111, 1112, 1115, 1115, 1118, + 1121, 1123, 1125, 1128, 1130, 1133, 1139, 1141, 1145, 1159, + 1167, 1171, 1185, 1193, 1200, 1202, 1207, 1210, 1215, 1217, + 1219, 1226, 1228, 1236, 1242, 1247, 1249, 1251, 1258, 1260, + 1266, 1272, 1274, 1276, 1281, 1283, 1290, 1292, 1295, 1298, + 1302, 1305, 1309, 1312, 1316, 1321, 1323, 1327, 1329, 1331, + 1333, 1337, 1339, 1342, 1345, 1348, 1351, 1355, 1357, 1360, + 1362, 1367, 1370, 1375, 1377, 1379, 1393, 1400, 1405, 1411, + 1416, 1418, 1423, 1425, 1429, 1433, 1437, 1447, 1449, 1454, + 1459, 1462, 1466, 1469, 1473, 1476, 1479, 1482, 1486, 1489, + 1493, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1515, + 1523, 1531, 1533, 1535, 1539, 1541, 1544, 1547, 1558, 1560, + 1565, 1567, 1570, 1584, 1587, 1590, 1592, 1594, 1602, 1610, + 1620, 1638, 1643, 1648, 1651, 1665, 1674, 1678, 1682, 1686, + 1692, 1696, 1701, 1704, 1709, 1712, 1713, 1730, 1735, 1738, + 1750, 1752, 1762, 1772, 1773, 1781, 1784, 1796, 1800, 1817, + 1827, 1836, 1841, 1846, 1851, 1855, 1859, 1870, 1877, 1884, + 1891, 1902, 1908, 1911, 1916, 1939, 1973, 2004, 2035, 2050, + 2064, 2068, 2072, 2075, 2080, 2082, 2085, 2087, 2091, 2096, + 2099, 2105, 2110, 2115, 2117, 2126, 2127, 2133, 2135, 2145, + 2147, 2151, 2154, 2160, 2170, 2179, 2188, 2198, 2212, 2217, + 2222, 2224, 2233, 2236, 2241, 2244, 2248 }; #endif @@ -1788,14 +1799,14 @@ yyreduce: switch (yyn) { case 1: -#line 214 "c-parse.y" +#line 225 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids an empty source file"); finish_file (); ; break;} case 2: -#line 219 "c-parse.y" +#line 230 "c-parse.y" { /* In case there were missing closebraces, get us back to the global binding level. */ @@ -1805,15 +1816,15 @@ case 2: ; break;} case 3: -#line 233 "c-parse.y" +#line 244 "c-parse.y" {yyval.ttype = NULL_TREE; ; break;} case 5: -#line 234 "c-parse.y" +#line 245 "c-parse.y" {yyval.ttype = NULL_TREE; ; break;} case 9: -#line 241 "c-parse.y" +#line 252 "c-parse.y" { STRIP_NOPS (yyvsp[-2].ttype); if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) @@ -1823,11 +1834,11 @@ case 9: error ("argument of `asm' is not a constant string"); ; break;} case 10: -#line 249 "c-parse.y" +#line 260 "c-parse.y" { pedantic = yyvsp[-1].itype; ; break;} case 11: -#line 254 "c-parse.y" +#line 265 "c-parse.y" { if (pedantic) error ("ANSI C forbids data definition with no type or storage class"); else if (!flag_traditional) @@ -1839,45 +1850,45 @@ case 11: resume_momentary (yyvsp[-2].itype); ; break;} case 12: -#line 264 "c-parse.y" +#line 275 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 13: -#line 269 "c-parse.y" +#line 280 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 14: -#line 274 "c-parse.y" +#line 285 "c-parse.y" { pedwarn ("empty declaration"); ; break;} case 15: -#line 276 "c-parse.y" +#line 287 "c-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} case 18: -#line 280 "c-parse.y" +#line 291 "c-parse.y" { if (pedantic) pedwarn ("ANSI C does not allow extra `;' outside of a function"); ; break;} case 19: -#line 286 "c-parse.y" +#line 297 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, prefix_attributes, NULL_TREE, 0)) YYERROR1; reinit_parse_for_function (); ; break;} case 20: -#line 291 "c-parse.y" +#line 302 "c-parse.y" { store_parm_decls (); ; break;} case 21: -#line 293 "c-parse.y" +#line 304 "c-parse.y" { finish_function (0); current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); @@ -1885,25 +1896,25 @@ case 21: resume_momentary (yyvsp[-5].itype); ; break;} case 22: -#line 299 "c-parse.y" +#line 310 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 23: -#line 304 "c-parse.y" +#line 315 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, prefix_attributes, NULL_TREE, 0)) YYERROR1; reinit_parse_for_function (); ; break;} case 24: -#line 309 "c-parse.y" +#line 320 "c-parse.y" { store_parm_decls (); ; break;} case 25: -#line 311 "c-parse.y" +#line 322 "c-parse.y" { finish_function (0); current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); @@ -1911,25 +1922,25 @@ case 25: resume_momentary (yyvsp[-5].itype); ; break;} case 26: -#line 317 "c-parse.y" +#line 328 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 27: -#line 322 "c-parse.y" +#line 333 "c-parse.y" { if (! start_function (NULL_TREE, yyvsp[0].ttype, prefix_attributes, NULL_TREE, 0)) YYERROR1; reinit_parse_for_function (); ; break;} case 28: -#line 327 "c-parse.y" +#line 338 "c-parse.y" { store_parm_decls (); ; break;} case 29: -#line 329 "c-parse.y" +#line 340 "c-parse.y" { finish_function (0); current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); @@ -1937,72 +1948,72 @@ case 29: resume_momentary (yyvsp[-5].itype); ; break;} case 30: -#line 335 "c-parse.y" +#line 346 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 33: -#line 347 "c-parse.y" +#line 358 "c-parse.y" { yyval.code = ADDR_EXPR; ; break;} case 34: -#line 349 "c-parse.y" +#line 360 "c-parse.y" { yyval.code = NEGATE_EXPR; ; break;} case 35: -#line 351 "c-parse.y" +#line 362 "c-parse.y" { yyval.code = CONVERT_EXPR; ; break;} case 36: -#line 353 "c-parse.y" +#line 364 "c-parse.y" { yyval.code = PREINCREMENT_EXPR; ; break;} case 37: -#line 355 "c-parse.y" +#line 366 "c-parse.y" { yyval.code = PREDECREMENT_EXPR; ; break;} case 38: -#line 357 "c-parse.y" +#line 368 "c-parse.y" { yyval.code = BIT_NOT_EXPR; ; break;} case 39: -#line 359 "c-parse.y" +#line 370 "c-parse.y" { yyval.code = TRUTH_NOT_EXPR; ; break;} case 40: -#line 363 "c-parse.y" +#line 374 "c-parse.y" { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ; break;} case 41: -#line 368 "c-parse.y" +#line 379 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 43: -#line 374 "c-parse.y" +#line 385 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 44: -#line 376 "c-parse.y" +#line 387 "c-parse.y" { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 46: -#line 382 "c-parse.y" +#line 393 "c-parse.y" { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ; break;} case 47: -#line 385 "c-parse.y" +#line 396 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; pedantic = yyvsp[-1].itype; ; break;} case 48: -#line 388 "c-parse.y" +#line 399 "c-parse.y" { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); overflow_warning (yyval.ttype); ; break;} case 49: -#line 392 "c-parse.y" +#line 403 "c-parse.y" { tree label = lookup_label (yyvsp[0].ttype); if (pedantic) pedwarn ("ANSI C forbids `&&'"); @@ -2017,7 +2028,7 @@ case 49: ; break;} case 50: -#line 420 "c-parse.y" +#line 431 "c-parse.y" { skip_evaluation--; if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1))) @@ -2025,53 +2036,53 @@ case 50: yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ; break;} case 51: -#line 426 "c-parse.y" +#line 437 "c-parse.y" { skip_evaluation--; yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ; break;} case 52: -#line 429 "c-parse.y" +#line 440 "c-parse.y" { skip_evaluation--; yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ; break;} case 53: -#line 432 "c-parse.y" +#line 443 "c-parse.y" { skip_evaluation--; yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ; break;} case 54: -#line 435 "c-parse.y" +#line 446 "c-parse.y" { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ; break;} case 55: -#line 437 "c-parse.y" +#line 448 "c-parse.y" { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ; break;} case 56: -#line 439 "c-parse.y" +#line 450 "c-parse.y" { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ; break;} case 57: -#line 443 "c-parse.y" +#line 454 "c-parse.y" { skip_evaluation++; ; break;} case 58: -#line 447 "c-parse.y" +#line 458 "c-parse.y" { skip_evaluation++; ; break;} case 60: -#line 453 "c-parse.y" +#line 464 "c-parse.y" { tree type = groktypename (yyvsp[-2].ttype); yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ; break;} case 61: -#line 456 "c-parse.y" +#line 467 "c-parse.y" { start_init (NULL_TREE, NULL, 0); yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype); really_start_incremental_init (yyvsp[-2].ttype); ; break;} case 62: -#line 460 "c-parse.y" +#line 471 "c-parse.y" { char *name; tree result = pop_init_level (0); tree type = yyvsp[-5].ttype; @@ -2098,90 +2109,90 @@ case 62: ; break;} case 64: -#line 489 "c-parse.y" +#line 500 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 65: -#line 491 "c-parse.y" +#line 502 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 66: -#line 493 "c-parse.y" +#line 504 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 67: -#line 495 "c-parse.y" +#line 506 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 68: -#line 497 "c-parse.y" +#line 508 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 69: -#line 499 "c-parse.y" +#line 510 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 70: -#line 501 "c-parse.y" +#line 512 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 71: -#line 503 "c-parse.y" +#line 514 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 72: -#line 505 "c-parse.y" +#line 516 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 73: -#line 507 "c-parse.y" +#line 518 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 74: -#line 509 "c-parse.y" +#line 520 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 75: -#line 511 "c-parse.y" +#line 522 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 76: -#line 513 "c-parse.y" +#line 524 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} case 77: -#line 516 "c-parse.y" +#line 527 "c-parse.y" { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node; yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 78: -#line 519 "c-parse.y" +#line 530 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} case 79: -#line 522 "c-parse.y" +#line 533 "c-parse.y" { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node; yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 80: -#line 525 "c-parse.y" +#line 536 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} case 81: -#line 528 "c-parse.y" +#line 539 "c-parse.y" { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node) - (yyvsp[-4].ttype == boolean_false_node)); ; break;} case 82: -#line 531 "c-parse.y" +#line 542 "c-parse.y" { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 83: -#line 534 "c-parse.y" +#line 545 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids omitting the middle term of a ?: expression"); /* Make sure first operand is calculated only once. */ @@ -2190,12 +2201,12 @@ case 83: skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} case 84: -#line 541 "c-parse.y" +#line 552 "c-parse.y" { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 85: -#line 544 "c-parse.y" +#line 555 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); @@ -2205,7 +2216,7 @@ case 85: ; break;} case 86: -#line 552 "c-parse.y" +#line 563 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); /* This inhibits warnings in truthvalue_conversion. */ @@ -2216,7 +2227,7 @@ case 86: ; break;} case 87: -#line 564 "c-parse.y" +#line 575 "c-parse.y" { yyval.ttype = lastiddecl; if (!yyval.ttype || yyval.ttype == error_mark_node) @@ -2316,11 +2327,11 @@ case 87: ; break;} case 89: -#line 663 "c-parse.y" +#line 674 "c-parse.y" { yyval.ttype = combine_strings (yyvsp[0].ttype); ; break;} case 90: -#line 665 "c-parse.y" +#line 676 "c-parse.y" { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)); if (class == 'e' || class == '1' || class == '2' || class == '<') @@ -2328,11 +2339,11 @@ case 90: yyval.ttype = yyvsp[-1].ttype; ; break;} case 91: -#line 671 "c-parse.y" +#line 682 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} case 92: -#line 673 "c-parse.y" +#line 684 "c-parse.y" { tree rtl_exp; if (pedantic) pedwarn ("ANSI C forbids braced-groups within expressions"); @@ -2357,7 +2368,7 @@ case 92: ; break;} case 93: -#line 696 "c-parse.y" +#line 707 "c-parse.y" { /* Make sure we call expand_end_stmt_expr. Otherwise we are likely to lose sequences and crash later. */ @@ -2368,21 +2379,21 @@ case 93: ; break;} case 94: -#line 705 "c-parse.y" +#line 716 "c-parse.y" { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 95: -#line 707 "c-parse.y" +#line 718 "c-parse.y" { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 96: -#line 709 "c-parse.y" +#line 720 "c-parse.y" { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 97: -#line 713 "c-parse.y" +#line 724 "c-parse.y" { tree expr = build_indirect_ref (yyvsp[-2].ttype, "->"); @@ -2390,56 +2401,56 @@ case 97: ; break;} case 98: -#line 719 "c-parse.y" +#line 730 "c-parse.y" { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} case 99: -#line 721 "c-parse.y" +#line 732 "c-parse.y" { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} case 101: -#line 728 "c-parse.y" +#line 739 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 104: -#line 737 "c-parse.y" +#line 748 "c-parse.y" { c_mark_varargs (); if (pedantic) pedwarn ("ANSI C does not permit use of `varargs.h'"); ; break;} case 105: -#line 747 "c-parse.y" +#line 758 "c-parse.y" { ; break;} case 110: -#line 763 "c-parse.y" +#line 774 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 111: -#line 768 "c-parse.y" +#line 779 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 112: -#line 773 "c-parse.y" +#line 784 "c-parse.y" { shadow_tag_warned (yyvsp[-1].ttype, 1); pedwarn ("empty declaration"); ; break;} case 113: -#line 776 "c-parse.y" +#line 787 "c-parse.y" { pedwarn ("empty declaration"); ; break;} case 114: -#line 785 "c-parse.y" +#line 796 "c-parse.y" { ; break;} case 119: -#line 800 "c-parse.y" +#line 811 "c-parse.y" { yyval.itype = suspend_momentary (); pending_xref_error (); declspec_stack = tree_cons (prefix_attributes, @@ -2449,131 +2460,131 @@ case 119: ¤t_declspecs, &prefix_attributes); ; break;} case 120: -#line 811 "c-parse.y" +#line 822 "c-parse.y" { prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ; break;} case 121: -#line 816 "c-parse.y" +#line 827 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 122: -#line 821 "c-parse.y" +#line 832 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-2].itype); ; break;} case 123: -#line 826 "c-parse.y" +#line 837 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-1].itype); ; break;} case 124: -#line 831 "c-parse.y" +#line 842 "c-parse.y" { current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); declspec_stack = TREE_CHAIN (declspec_stack); resume_momentary (yyvsp[-1].itype); ; break;} case 125: -#line 836 "c-parse.y" +#line 847 "c-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} case 126: -#line 838 "c-parse.y" +#line 849 "c-parse.y" { pedwarn ("empty declaration"); ; break;} case 127: -#line 840 "c-parse.y" +#line 851 "c-parse.y" { pedantic = yyvsp[-1].itype; ; break;} case 128: -#line 850 "c-parse.y" +#line 861 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 129: -#line 852 "c-parse.y" +#line 863 "c-parse.y" { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ; break;} case 130: -#line 856 "c-parse.y" +#line 867 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 131: -#line 858 "c-parse.y" +#line 869 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 132: -#line 860 "c-parse.y" +#line 871 "c-parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 133: -#line 865 "c-parse.y" +#line 876 "c-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ; break;} case 134: -#line 870 "c-parse.y" +#line 881 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 135: -#line 872 "c-parse.y" +#line 883 "c-parse.y" { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ; break;} case 136: -#line 877 "c-parse.y" +#line 888 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 137: -#line 879 "c-parse.y" +#line 890 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 138: -#line 881 "c-parse.y" +#line 892 "c-parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 139: -#line 894 "c-parse.y" +#line 905 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 140: -#line 896 "c-parse.y" +#line 907 "c-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ; break;} case 141: -#line 898 "c-parse.y" +#line 909 "c-parse.y" { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 142: -#line 900 "c-parse.y" +#line 911 "c-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ; break;} case 143: -#line 905 "c-parse.y" +#line 916 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} case 144: -#line 908 "c-parse.y" +#line 919 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 145: -#line 910 "c-parse.y" +#line 921 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 146: -#line 913 "c-parse.y" +#line 924 "c-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); @@ -2581,138 +2592,138 @@ case 146: TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 147: -#line 927 "c-parse.y" +#line 938 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 148: -#line 929 "c-parse.y" +#line 940 "c-parse.y" { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ; break;} case 149: -#line 933 "c-parse.y" +#line 944 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 150: -#line 935 "c-parse.y" +#line 946 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 153: -#line 945 "c-parse.y" +#line 956 "c-parse.y" { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ yyval.ttype = lookup_name (yyvsp[0].ttype); ; break;} case 154: -#line 949 "c-parse.y" +#line 960 "c-parse.y" { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ; break;} case 155: -#line 951 "c-parse.y" +#line 962 "c-parse.y" { yyval.ttype = groktypename (yyvsp[-1].ttype); ; break;} case 163: -#line 973 "c-parse.y" +#line 984 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 164: -#line 975 "c-parse.y" +#line 986 "c-parse.y" { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ; break;} case 165: -#line 982 "c-parse.y" +#line 993 "c-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, yyvsp[-1].ttype, prefix_attributes); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} case 166: -#line 987 "c-parse.y" +#line 998 "c-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} case 167: -#line 990 "c-parse.y" +#line 1001 "c-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, yyvsp[0].ttype, prefix_attributes); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} case 168: -#line 998 "c-parse.y" +#line 1009 "c-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, yyvsp[-1].ttype, prefix_attributes); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} case 169: -#line 1003 "c-parse.y" +#line 1014 "c-parse.y" { finish_init (); decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} case 170: -#line 1007 "c-parse.y" +#line 1018 "c-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, yyvsp[0].ttype, prefix_attributes); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} case 171: -#line 1015 "c-parse.y" +#line 1026 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 172: -#line 1017 "c-parse.y" +#line 1028 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 173: -#line 1022 "c-parse.y" +#line 1033 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 174: -#line 1024 "c-parse.y" +#line 1035 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 175: -#line 1029 "c-parse.y" +#line 1040 "c-parse.y" { yyval.ttype = yyvsp[-2].ttype; ; break;} case 176: -#line 1034 "c-parse.y" +#line 1045 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 177: -#line 1036 "c-parse.y" +#line 1047 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 178: -#line 1041 "c-parse.y" +#line 1052 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 179: -#line 1043 "c-parse.y" +#line 1054 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ; break;} case 180: -#line 1045 "c-parse.y" +#line 1056 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ; break;} case 181: -#line 1047 "c-parse.y" +#line 1058 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ; break;} case 182: -#line 1049 "c-parse.y" +#line 1060 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 188: -#line 1067 "c-parse.y" +#line 1078 "c-parse.y" { really_start_incremental_init (NULL_TREE); /* Note that the call to clear_momentary is in process_init_element. */ push_momentary (); ; break;} case 189: -#line 1072 "c-parse.y" +#line 1083 "c-parse.y" { yyval.ttype = pop_init_level (0); if (yyval.ttype == error_mark_node && ! (yychar == STRING || yychar == CONSTANT)) @@ -2721,44 +2732,44 @@ case 189: pop_momentary_nofree (); ; break;} case 190: -#line 1080 "c-parse.y" +#line 1091 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} case 191: -#line 1086 "c-parse.y" +#line 1097 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids empty initializer braces"); ; break;} case 197: -#line 1102 "c-parse.y" +#line 1113 "c-parse.y" { set_init_label (yyvsp[-1].ttype); ; break;} case 200: -#line 1109 "c-parse.y" +#line 1120 "c-parse.y" { push_init_level (0); ; break;} case 201: -#line 1111 "c-parse.y" +#line 1122 "c-parse.y" { process_init_element (pop_init_level (0)); ; break;} case 202: -#line 1113 "c-parse.y" +#line 1124 "c-parse.y" { process_init_element (yyvsp[0].ttype); ; break;} case 206: -#line 1124 "c-parse.y" +#line 1135 "c-parse.y" { set_init_label (yyvsp[0].ttype); ; break;} case 207: -#line 1129 "c-parse.y" +#line 1140 "c-parse.y" { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 208: -#line 1131 "c-parse.y" +#line 1142 "c-parse.y" { set_init_index (yyvsp[-1].ttype, NULL_TREE); ; break;} case 209: -#line 1136 "c-parse.y" +#line 1147 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids nested functions"); @@ -2772,16 +2783,16 @@ case 209: reinit_parse_for_function (); ; break;} case 210: -#line 1148 "c-parse.y" +#line 1159 "c-parse.y" { store_parm_decls (); ; break;} case 211: -#line 1156 "c-parse.y" +#line 1167 "c-parse.y" { finish_function (1); pop_function_context (); ; break;} case 212: -#line 1162 "c-parse.y" +#line 1173 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids nested functions"); @@ -2795,211 +2806,211 @@ case 212: reinit_parse_for_function (); ; break;} case 213: -#line 1174 "c-parse.y" +#line 1185 "c-parse.y" { store_parm_decls (); ; break;} case 214: -#line 1182 "c-parse.y" +#line 1193 "c-parse.y" { finish_function (1); pop_function_context (); ; break;} case 217: -#line 1198 "c-parse.y" +#line 1209 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 218: -#line 1200 "c-parse.y" +#line 1211 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 219: -#line 1205 "c-parse.y" +#line 1216 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 220: -#line 1207 "c-parse.y" +#line 1218 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 221: -#line 1209 "c-parse.y" +#line 1220 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 222: -#line 1216 "c-parse.y" +#line 1227 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 224: -#line 1227 "c-parse.y" +#line 1238 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 225: -#line 1232 "c-parse.y" +#line 1243 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE); if (! flag_isoc9x) error ("`[*]' in parameter declaration only allowed in ISO C 9x"); ; break;} case 226: -#line 1237 "c-parse.y" +#line 1248 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 227: -#line 1239 "c-parse.y" +#line 1250 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 228: -#line 1241 "c-parse.y" +#line 1252 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 229: -#line 1248 "c-parse.y" +#line 1259 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 231: -#line 1257 "c-parse.y" +#line 1268 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 232: -#line 1262 "c-parse.y" +#line 1273 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 233: -#line 1264 "c-parse.y" +#line 1275 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 234: -#line 1266 "c-parse.y" +#line 1277 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE); if (! flag_isoc9x) error ("`[*]' in parameter declaration only allowed in ISO C 9x"); ; break;} case 235: -#line 1271 "c-parse.y" +#line 1282 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 236: -#line 1273 "c-parse.y" +#line 1284 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 237: -#line 1280 "c-parse.y" +#line 1291 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 239: -#line 1286 "c-parse.y" +#line 1297 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 240: -#line 1288 "c-parse.y" +#line 1299 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 241: -#line 1293 "c-parse.y" +#line 1304 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 242: -#line 1295 "c-parse.y" +#line 1306 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 243: -#line 1300 "c-parse.y" +#line 1311 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 244: -#line 1302 "c-parse.y" +#line 1313 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 245: -#line 1307 "c-parse.y" +#line 1318 "c-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ; break;} case 246: -#line 1311 "c-parse.y" +#line 1322 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} case 247: -#line 1313 "c-parse.y" +#line 1324 "c-parse.y" { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} case 248: -#line 1317 "c-parse.y" +#line 1328 "c-parse.y" { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ; break;} case 249: -#line 1319 "c-parse.y" +#line 1330 "c-parse.y" { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ; break;} case 250: -#line 1321 "c-parse.y" +#line 1332 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} case 251: -#line 1323 "c-parse.y" +#line 1334 "c-parse.y" { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE), yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} case 252: -#line 1327 "c-parse.y" +#line 1338 "c-parse.y" { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ; break;} case 253: -#line 1329 "c-parse.y" +#line 1340 "c-parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} case 254: -#line 1332 "c-parse.y" +#line 1343 "c-parse.y" { yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); resume_momentary (yyvsp[-5].itype); ; break;} case 255: -#line 1335 "c-parse.y" +#line 1346 "c-parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (NULL_TREE); ; break;} case 256: -#line 1338 "c-parse.y" +#line 1349 "c-parse.y" { yyval.ttype= finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); resume_momentary (yyvsp[-5].itype); ; break;} case 257: -#line 1341 "c-parse.y" +#line 1352 "c-parse.y" { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ; break;} case 261: -#line 1352 "c-parse.y" +#line 1363 "c-parse.y" { if (pedantic && ! flag_isoc9x) pedwarn ("comma at end of enumerator list"); ; break;} case 262: -#line 1358 "c-parse.y" +#line 1369 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 263: -#line 1360 "c-parse.y" +#line 1371 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); pedwarn ("no semicolon at end of struct or union"); ; break;} case 264: -#line 1365 "c-parse.y" +#line 1376 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 265: -#line 1367 "c-parse.y" +#line 1378 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} case 266: -#line 1369 "c-parse.y" +#line 1380 "c-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} case 267: -#line 1384 "c-parse.y" +#line 1395 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); @@ -3007,14 +3018,14 @@ case 267: resume_momentary (yyvsp[-1].itype); ; break;} case 268: -#line 1390 "c-parse.y" +#line 1401 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids member declarations with no members"); shadow_tag(yyvsp[0].ttype); yyval.ttype = NULL_TREE; ; break;} case 269: -#line 1395 "c-parse.y" +#line 1406 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; current_declspecs = TREE_VALUE (declspec_stack); prefix_attributes = TREE_PURPOSE (declspec_stack); @@ -3022,144 +3033,144 @@ case 269: resume_momentary (yyvsp[-1].itype); ; break;} case 270: -#line 1401 "c-parse.y" +#line 1412 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids member declarations with no members"); shadow_tag(yyvsp[0].ttype); yyval.ttype = NULL_TREE; ; break;} case 271: -#line 1406 "c-parse.y" +#line 1417 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 272: -#line 1408 "c-parse.y" +#line 1419 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; pedantic = yyvsp[-1].itype; ; break;} case 274: -#line 1415 "c-parse.y" +#line 1426 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 275: -#line 1420 "c-parse.y" +#line 1431 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 276: -#line 1424 "c-parse.y" +#line 1435 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 277: -#line 1427 "c-parse.y" +#line 1438 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype); decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 279: -#line 1439 "c-parse.y" +#line 1450 "c-parse.y" { if (yyvsp[-2].ttype == error_mark_node) yyval.ttype = yyvsp[-2].ttype; else yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} case 280: -#line 1444 "c-parse.y" +#line 1455 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} case 281: -#line 1450 "c-parse.y" +#line 1461 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ; break;} case 282: -#line 1452 "c-parse.y" +#line 1463 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 283: -#line 1457 "c-parse.y" +#line 1468 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 284: -#line 1459 "c-parse.y" +#line 1470 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 285: -#line 1464 "c-parse.y" +#line 1475 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 287: -#line 1470 "c-parse.y" +#line 1481 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 288: -#line 1472 "c-parse.y" +#line 1483 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 289: -#line 1477 "c-parse.y" +#line 1488 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 290: -#line 1479 "c-parse.y" +#line 1490 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 291: -#line 1484 "c-parse.y" +#line 1495 "c-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 292: -#line 1487 "c-parse.y" +#line 1498 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 293: -#line 1489 "c-parse.y" +#line 1500 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} case 294: -#line 1491 "c-parse.y" +#line 1502 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} case 295: -#line 1493 "c-parse.y" +#line 1504 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 296: -#line 1495 "c-parse.y" +#line 1506 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} case 297: -#line 1497 "c-parse.y" +#line 1508 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 298: -#line 1499 "c-parse.y" +#line 1510 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} case 299: -#line 1501 "c-parse.y" +#line 1512 "c-parse.y" { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ; break;} case 300: -#line 1505 "c-parse.y" +#line 1516 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 301: -#line 1514 "c-parse.y" +#line 1525 "c-parse.y" { if (pedantic && yyvsp[0].ends_in_label) pedwarn ("ANSI C forbids label at end of compound statement"); ; break;} case 303: -#line 1523 "c-parse.y" +#line 1534 "c-parse.y" { yyval.ends_in_label = yyvsp[0].ends_in_label; ; break;} case 304: -#line 1525 "c-parse.y" +#line 1536 "c-parse.y" { yyval.ends_in_label = 0; ; break;} case 308: -#line 1537 "c-parse.y" +#line 1548 "c-parse.y" { emit_line_note (input_filename, lineno); pushlevel (0); clear_last_expr (); @@ -3168,12 +3179,12 @@ case 308: ; break;} case 310: -#line 1550 "c-parse.y" +#line 1561 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids label declarations"); ; break;} case 313: -#line 1561 "c-parse.y" +#line 1572 "c-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { @@ -3184,19 +3195,19 @@ case 313: ; break;} case 314: -#line 1575 "c-parse.y" +#line 1586 "c-parse.y" {; break;} case 316: -#line 1579 "c-parse.y" +#line 1590 "c-parse.y" { compstmt_count++; ; break;} case 317: -#line 1582 "c-parse.y" +#line 1593 "c-parse.y" { yyval.ttype = convert (void_type_node, integer_zero_node); ; break;} case 318: -#line 1584 "c-parse.y" +#line 1595 "c-parse.y" { emit_line_note (input_filename, lineno); expand_end_bindings (getdecls (), 1, 0); yyval.ttype = poplevel (1, 1, 0); @@ -3206,7 +3217,7 @@ case 318: pop_momentary (); ; break;} case 319: -#line 1592 "c-parse.y" +#line 1603 "c-parse.y" { emit_line_note (input_filename, lineno); expand_end_bindings (getdecls (), kept_level_p (), 0); yyval.ttype = poplevel (kept_level_p (), 0, 0); @@ -3216,7 +3227,7 @@ case 319: pop_momentary (); ; break;} case 320: -#line 1600 "c-parse.y" +#line 1611 "c-parse.y" { emit_line_note (input_filename, lineno); expand_end_bindings (getdecls (), kept_level_p (), 0); yyval.ttype = poplevel (kept_level_p (), 0, 0); @@ -3226,7 +3237,7 @@ case 320: pop_momentary (); ; break;} case 321: -#line 1611 "c-parse.y" +#line 1622 "c-parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); @@ -3244,11 +3255,11 @@ case 321: ; break;} case 322: -#line 1628 "c-parse.y" +#line 1639 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 325: -#line 1642 "c-parse.y" +#line 1653 "c-parse.y" { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0, compstmt_count); @@ -3258,7 +3269,7 @@ case 325: position_after_white_space (); ; break;} case 326: -#line 1656 "c-parse.y" +#line 1667 "c-parse.y" { stmt_count++; compstmt_count++; emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno); @@ -3268,43 +3279,43 @@ case 326: position_after_white_space (); ; break;} case 327: -#line 1664 "c-parse.y" +#line 1675 "c-parse.y" { expand_loop_continue_here (); ; break;} case 328: -#line 1668 "c-parse.y" +#line 1679 "c-parse.y" { yyval.filename = input_filename; ; break;} case 329: -#line 1672 "c-parse.y" +#line 1683 "c-parse.y" { yyval.lineno = lineno; ; break;} case 330: -#line 1677 "c-parse.y" +#line 1688 "c-parse.y" { ; break;} case 331: -#line 1682 "c-parse.y" +#line 1693 "c-parse.y" { ; break;} case 332: -#line 1687 "c-parse.y" +#line 1698 "c-parse.y" { yyval.ends_in_label = yyvsp[0].ends_in_label; ; break;} case 333: -#line 1692 "c-parse.y" +#line 1703 "c-parse.y" { yyval.ends_in_label = 0; ; break;} case 334: -#line 1694 "c-parse.y" +#line 1705 "c-parse.y" { yyval.ends_in_label = 1; ; break;} case 335: -#line 1700 "c-parse.y" +#line 1711 "c-parse.y" { stmt_count++; ; break;} case 337: -#line 1703 "c-parse.y" +#line 1714 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno); /* It appears that this should not be done--that a non-lvalue array @@ -3323,19 +3334,19 @@ case 337: clear_momentary (); ; break;} case 338: -#line 1720 "c-parse.y" +#line 1731 "c-parse.y" { c_expand_start_else (); yyvsp[-1].itype = stmt_count; position_after_white_space (); ; break;} case 339: -#line 1724 "c-parse.y" +#line 1735 "c-parse.y" { c_expand_end_cond (); if (extra_warnings && stmt_count == yyvsp[-3].itype) warning ("empty body in an else-statement"); ; break;} case 340: -#line 1728 "c-parse.y" +#line 1739 "c-parse.y" { c_expand_end_cond (); /* This warning is here instead of in simple_if, because we do not want a warning if an empty if is followed by an @@ -3346,11 +3357,11 @@ case 340: "empty body in an if-statement"); ; break;} case 341: -#line 1740 "c-parse.y" +#line 1751 "c-parse.y" { c_expand_end_cond (); ; break;} case 342: -#line 1742 "c-parse.y" +#line 1753 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno); /* The emit_nop used to come before emit_line_note, @@ -3362,7 +3373,7 @@ case 342: emit_nop (); ; break;} case 343: -#line 1752 "c-parse.y" +#line 1763 "c-parse.y" { /* Don't start the loop till we have succeeded in parsing the end test. This is to make sure that we end every loop we start. */ @@ -3373,11 +3384,11 @@ case 343: position_after_white_space (); ; break;} case 344: -#line 1761 "c-parse.y" +#line 1772 "c-parse.y" { expand_end_loop (); ; break;} case 345: -#line 1764 "c-parse.y" +#line 1775 "c-parse.y" { emit_line_note (input_filename, lineno); expand_exit_loop_if_false (NULL_PTR, truthvalue_conversion (yyvsp[-2].ttype)); @@ -3385,12 +3396,12 @@ case 345: clear_momentary (); ; break;} case 346: -#line 1771 "c-parse.y" +#line 1782 "c-parse.y" { expand_end_loop (); clear_momentary (); ; break;} case 347: -#line 1775 "c-parse.y" +#line 1786 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); /* See comment in `while' alternative, above. */ @@ -3403,12 +3414,12 @@ case 347: ; break;} case 348: -#line 1787 "c-parse.y" +#line 1798 "c-parse.y" { yyvsp[0].lineno = lineno; yyval.filename = input_filename; ; break;} case 349: -#line 1790 "c-parse.y" +#line 1801 "c-parse.y" { /* Start the loop. Doing this after parsing all the expressions ensures we will end the loop. */ @@ -3426,7 +3437,7 @@ case 349: position_after_white_space (); ; break;} case 350: -#line 1806 "c-parse.y" +#line 1817 "c-parse.y" { /* Emit the increment expression, with a line number. */ emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno); expand_loop_continue_here (); @@ -3439,7 +3450,7 @@ case 350: expand_end_loop (); ; break;} case 351: -#line 1817 "c-parse.y" +#line 1828 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno); c_expand_start_case (yyvsp[-1].ttype); @@ -3449,7 +3460,7 @@ case 351: position_after_white_space (); ; break;} case 352: -#line 1825 "c-parse.y" +#line 1836 "c-parse.y" { expand_end_case (yyvsp[-3].ttype); if (yychar == CONSTANT || yychar == STRING) pop_momentary_nofree (); @@ -3457,33 +3468,33 @@ case 352: pop_momentary (); ; break;} case 353: -#line 1831 "c-parse.y" +#line 1842 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno); if ( ! expand_exit_something ()) error ("break statement not within loop or switch"); ; break;} case 354: -#line 1836 "c-parse.y" +#line 1847 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno); if (! expand_continue_loop (NULL_PTR)) error ("continue statement not within a loop"); ; break;} case 355: -#line 1841 "c-parse.y" +#line 1852 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno); c_expand_return (NULL_TREE); ; break;} case 356: -#line 1845 "c-parse.y" +#line 1856 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno); c_expand_return (yyvsp[-1].ttype); ; break;} case 357: -#line 1849 "c-parse.y" +#line 1860 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno); STRIP_NOPS (yyvsp[-2].ttype); @@ -3495,7 +3506,7 @@ case 357: error ("argument of `asm' is not a constant string"); ; break;} case 358: -#line 1860 "c-parse.y" +#line 1871 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno); c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE, @@ -3503,7 +3514,7 @@ case 358: input_filename, lineno); ; break;} case 359: -#line 1867 "c-parse.y" +#line 1878 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno); c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, @@ -3511,7 +3522,7 @@ case 359: input_filename, lineno); ; break;} case 360: -#line 1875 "c-parse.y" +#line 1886 "c-parse.y" { stmt_count++; emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno); c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, @@ -3519,7 +3530,7 @@ case 360: input_filename, lineno); ; break;} case 361: -#line 1881 "c-parse.y" +#line 1892 "c-parse.y" { tree decl; stmt_count++; emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno); @@ -3532,7 +3543,7 @@ case 361: ; break;} case 362: -#line 1892 "c-parse.y" +#line 1903 "c-parse.y" { if (pedantic) pedwarn ("ANSI C forbids `goto *expr;'"); stmt_count++; @@ -3540,7 +3551,7 @@ case 362: expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ; break;} case 365: -#line 1907 "c-parse.y" +#line 1918 "c-parse.y" { /* The value returned by this action is */ /* 1 if everything is OK */ @@ -3563,14 +3574,14 @@ case 365: ; break;} case 366: -#line 1928 "c-parse.y" +#line 1939 "c-parse.y" { if (yyvsp[-1].itype) iterator_for_loop_end (yyvsp[-3].ttype); ; break;} case 367: -#line 1963 "c-parse.y" +#line 1974 "c-parse.y" { register tree value = check_case_value (yyvsp[-1].ttype); register tree label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); @@ -3603,7 +3614,7 @@ case 367: position_after_white_space (); ; break;} case 368: -#line 1994 "c-parse.y" +#line 2005 "c-parse.y" { register tree value1 = check_case_value (yyvsp[-3].ttype); register tree value2 = check_case_value (yyvsp[-1].ttype); register tree label @@ -3636,7 +3647,7 @@ case 368: position_after_white_space (); ; break;} case 369: -#line 2025 "c-parse.y" +#line 2036 "c-parse.y" { tree duplicate; register tree label @@ -3653,7 +3664,7 @@ case 369: position_after_white_space (); ; break;} case 370: -#line 2040 "c-parse.y" +#line 2051 "c-parse.y" { tree label = define_label (input_filename, lineno, yyvsp[-2].ttype); stmt_count++; emit_nop (); @@ -3665,52 +3676,52 @@ case 370: position_after_white_space (); ; break;} case 371: -#line 2055 "c-parse.y" +#line 2066 "c-parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} case 372: -#line 2058 "c-parse.y" +#line 2069 "c-parse.y" { emit_line_note (input_filename, lineno); ; break;} case 373: -#line 2063 "c-parse.y" +#line 2074 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 375: -#line 2070 "c-parse.y" +#line 2081 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 378: -#line 2077 "c-parse.y" +#line 2088 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 379: -#line 2082 "c-parse.y" +#line 2093 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 380: -#line 2087 "c-parse.y" +#line 2098 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ; break;} case 381: -#line 2089 "c-parse.y" +#line 2100 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ; break;} case 382: -#line 2095 "c-parse.y" +#line 2106 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (0); ; break;} case 383: -#line 2099 "c-parse.y" +#line 2110 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} case 385: -#line 2107 "c-parse.y" +#line 2118 "c-parse.y" { tree parm; if (pedantic) pedwarn ("ANSI C forbids forward parameter declarations"); @@ -3720,19 +3731,19 @@ case 385: clear_parm_order (); ; break;} case 386: -#line 2115 "c-parse.y" +#line 2126 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 387: -#line 2117 "c-parse.y" +#line 2128 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ; break;} case 388: -#line 2123 "c-parse.y" +#line 2134 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} case 389: -#line 2125 "c-parse.y" +#line 2136 "c-parse.y" { yyval.ttype = get_parm_info (0); /* Gcc used to allow this as an extension. However, it does not work for all targets, and thus has been disabled. @@ -3744,23 +3755,23 @@ case 389: ; break;} case 390: -#line 2135 "c-parse.y" +#line 2146 "c-parse.y" { yyval.ttype = get_parm_info (1); ; break;} case 391: -#line 2137 "c-parse.y" +#line 2148 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} case 392: -#line 2142 "c-parse.y" +#line 2153 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} case 393: -#line 2144 "c-parse.y" +#line 2155 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} case 394: -#line 2151 "c-parse.y" +#line 2162 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), build_tree_list (prefix_attributes, @@ -3771,7 +3782,7 @@ case 394: resume_momentary (yyvsp[-2].itype); ; break;} case 395: -#line 2160 "c-parse.y" +#line 2171 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), build_tree_list (prefix_attributes, @@ -3782,7 +3793,7 @@ case 395: resume_momentary (yyvsp[-2].itype); ; break;} case 396: -#line 2169 "c-parse.y" +#line 2180 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), build_tree_list (prefix_attributes, @@ -3793,7 +3804,7 @@ case 396: resume_momentary (yyvsp[-2].itype); ; break;} case 397: -#line 2178 "c-parse.y" +#line 2189 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), build_tree_list (prefix_attributes, @@ -3804,7 +3815,7 @@ case 397: resume_momentary (yyvsp[-2].itype); ; break;} case 398: -#line 2188 "c-parse.y" +#line 2199 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), build_tree_list (prefix_attributes, @@ -3815,19 +3826,19 @@ case 398: resume_momentary (yyvsp[-2].itype); ; break;} case 399: -#line 2202 "c-parse.y" +#line 2213 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (1); ; break;} case 400: -#line 2206 "c-parse.y" +#line 2217 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} case 402: -#line 2214 "c-parse.y" +#line 2225 "c-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) @@ -3835,23 +3846,23 @@ case 402: yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ; break;} case 403: -#line 2224 "c-parse.y" +#line 2235 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 404: -#line 2226 "c-parse.y" +#line 2237 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 405: -#line 2232 "c-parse.y" +#line 2243 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 406: -#line 2234 "c-parse.y" +#line 2245 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 407: -#line 2239 "c-parse.y" +#line 2250 "c-parse.y" { yyval.itype = pedantic; pedantic = 0; ; break;} @@ -4077,5 +4088,5 @@ yyerrhandle: } return 1; } -#line 2243 "c-parse.y" +#line 2254 "c-parse.y" diff --git a/gcc/c-parse.in b/gcc/c-parse.in index 7dd65203997..a0c7f94712c 100644 --- a/gcc/c-parse.in +++ b/gcc/c-parse.in @@ -46,7 +46,8 @@ end ifc #include "flags.h" #include "output.h" #include "toplev.h" - +#include "ggc.h" + #ifdef MULTIBYTE_CHARS #include <locale.h> #endif @@ -245,6 +246,16 @@ end ifobjc #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) extern void yyprint PROTO ((FILE *, int, YYSTYPE)); + +/* Add GC roots for variables local to this file. */ +void +c_parse_init () +{ + ggc_add_tree_root (&declspec_stack, 1); + ggc_add_tree_root (¤t_declspecs, 1); + ggc_add_tree_root (&prefix_attributes, 1); +} + %} %% diff --git a/gcc/c-parse.y b/gcc/c-parse.y index 14b381a5eae..8e3730b595a 100644 --- a/gcc/c-parse.y +++ b/gcc/c-parse.y @@ -42,7 +42,8 @@ Boston, MA 02111-1307, USA. */ #include "flags.h" #include "output.h" #include "toplev.h" - +#include "ggc.h" + #ifdef MULTIBYTE_CHARS #include <locale.h> #endif @@ -207,6 +208,16 @@ static int undeclared_variable_notice; #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) extern void yyprint PROTO ((FILE *, int, YYSTYPE)); + +/* Add GC roots for variables local to this file. */ +void +c_parse_init () +{ + ggc_add_tree_root (&declspec_stack, 1); + ggc_add_tree_root (¤t_declspecs, 1); + ggc_add_tree_root (&prefix_attributes, 1); +} + %} %% diff --git a/gcc/c-tree.h b/gcc/c-tree.h index e11ed7bc4fb..a55785538c6 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -174,6 +174,9 @@ extern tree maybe_objc_method_name PROTO((tree)); extern int recognize_objc_keyword PROTO((void)); extern tree build_objc_string PROTO((int, const char *)); +/* in c-parse.in */ +extern void c_parse_init PROTO((void)); + /* in c-aux-info.c */ extern void gen_aux_info_record PROTO((tree, int, int, int)); @@ -222,6 +225,7 @@ extern tree lookup_name_current_level_global PROTO((tree)); extern tree maybe_build_cleanup PROTO((tree)); extern void parmlist_tags_warning PROTO((void)); extern void pending_xref_error PROTO((void)); +extern void mark_c_function_context PROTO((struct function *)); extern void push_c_function_context PROTO((struct function *)); extern void pop_c_function_context PROTO((struct function *)); extern void pop_label_level PROTO((void)); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 04b79b8d7e8..4c1460cc9bf 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -38,6 +38,7 @@ Boston, MA 02111-1307, USA. */ #include "expr.h" #include "toplev.h" #include "basic-block.h" +#include "ggc.h" #ifdef EXTRA_CONSTRAINT /* If EXTRA_CONSTRAINT is defined, then the 'S' @@ -248,6 +249,7 @@ static void ix86_reorder_insn PROTO ((rtx *, rtx *)); static rtx * ix86_pent_find_pair PROTO ((rtx *, rtx *, enum attr_pent_pair, rtx)); static void ix86_init_machine_status PROTO ((struct function *)); +static void ix86_mark_machine_status PROTO ((struct function *)); struct ix86_address { @@ -353,6 +355,7 @@ override_options () /* Arrange to set up i386_stack_locals for all functions. */ init_machine_status = ix86_init_machine_status; + mark_machine_status = ix86_mark_machine_status; /* Validate registers in register allocation order. */ if (ix86_reg_alloc_order) @@ -4962,7 +4965,7 @@ ix86_expand_strlensi_unroll_1 (out, align_rtx, scratch) static void ix86_init_machine_status (p) - struct function *p; + struct function *p; { enum machine_mode mode; int n; @@ -4975,6 +4978,20 @@ ix86_init_machine_status (p) ix86_stack_locals[(int) mode][n] = NULL_RTX; } +/* Mark machine specific bits of P for GC. */ +static void +ix86_mark_machine_status (p) + struct function *p; +{ + enum machine_mode mode; + int n; + + for (mode = VOIDmode; (int) mode < (int) MAX_MACHINE_MODE; + mode = (enum machine_mode) ((int) mode + 1)) + for (n = 0; n < MAX_386_STACK_LOCALS; n++) + ggc_mark_rtx (p->machine->stack_locals[(int) mode][n]); +} + /* Return a MEM corresponding to a stack slot with mode MODE. Allocate a new slot if necessary. diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in index 805c7cd1c20..50961883df2 100644 --- a/gcc/objc/Make-lang.in +++ b/gcc/objc/Make-lang.in @@ -65,7 +65,7 @@ cc1obj$(exeext): $(P) $(OBJS) $(OBJC_OBJS) $(LIBDEPS) # Objective C language specific files. objc-parse.o : $(srcdir)/objc/objc-parse.c \ - $(CONFIG_H) $(TREE_H) $(srcdir)/toplev.h \ + $(CONFIG_H) $(TREE_H) $(srcdir)/toplev.h $(srcdir)/ggc.h \ $(srcdir)/c-lex.h $(srcdir)/c-tree.h $(srcdir)/c-common.h \ $(srcdir)/input.h $(srcdir)/flags.h $(srcdir)/output.h \ $(srcdir)/objc/objc-act.h system.h |