summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>1999-09-06 21:28:22 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>1999-09-06 21:28:22 +0000
commitdc12af010096308df38397ae5f895e02a3ea6037 (patch)
tree2092d851d6543942e355d2ca28226abc3bbe2721 /gcc
parent86f9e2d817933614e94cb566dc1ae2fc72c8c034 (diff)
downloadgcc-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.in14
-rw-r--r--gcc/c-common.c3
-rw-r--r--gcc/c-decl.c106
-rw-r--r--gcc/c-lang.c4
-rw-r--r--gcc/c-lex.c3
-rw-r--r--gcc/c-parse.c761
-rw-r--r--gcc/c-parse.in13
-rw-r--r--gcc/c-parse.y13
-rw-r--r--gcc/c-tree.h4
-rw-r--r--gcc/config/i386/i386.c19
-rw-r--r--gcc/objc/Make-lang.in2
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 (&current_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 (&current_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 (&current_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:
&current_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 (&current_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 (&current_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