diff options
author | Tom Tromey <tromey@redhat.com> | 2007-06-04 23:19:19 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2007-06-04 23:19:19 +0000 |
commit | 7114359fb661692c92e7d57f7cb96a8787eb0db3 (patch) | |
tree | 6521609daacb24a634b68fedc99b126c449c8899 /gcc | |
parent | 762f7d9d8aa388aba0272677ab170741fe218260 (diff) | |
download | gcc-7114359fb661692c92e7d57f7cb96a8787eb0db3.zip gcc-7114359fb661692c92e7d57f7cb96a8787eb0db3.tar.gz gcc-7114359fb661692c92e7d57f7cb96a8787eb0db3.tar.bz2 |
c-tree.h (start_enum): Update.
* c-tree.h (start_enum): Update.
(build_enumerator): Likewise.
* c-decl.c (enum_next_value): Removed.
(enum_overflow): Likewise.
(start_enum): Add c_enum_contents argument. Don't use globals.
(build_enumerator): Likewise.
* c-tree.h (struct c_enum_contents): New struct.
From-SVN: r125322
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/c-decl.c | 29 | ||||
-rw-r--r-- | gcc/c-parser.c | 7 | ||||
-rw-r--r-- | gcc/c-tree.h | 17 |
4 files changed, 37 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e4c31ff..98212c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2007-06-04 Tom Tromey <tromey@redhat.com> + * c-tree.h (start_enum): Update. + (build_enumerator): Likewise. + * c-decl.c (enum_next_value): Removed. + (enum_overflow): Likewise. + (start_enum): Add c_enum_contents argument. Don't use globals. + (build_enumerator): Likewise. + * c-tree.h (struct c_enum_contents): New struct. + +2007-06-04 Tom Tromey <tromey@redhat.com> + * c-common.c (c_common_get_alias_set): Fix indentation. 2007-06-04 Ian Lance Taylor <iant@google.com> diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 1f8943f..838869c 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -81,18 +81,6 @@ location_t pending_invalid_xref_location; /* True means we've initialized exception handling. */ bool c_eh_initialized_p; -/* While defining an enum type, this is 1 plus the last enumerator - constant value. Note that will do not have to save this or `enum_overflow' - around nested function definition since such a definition could only - occur in an enum value expression and we don't use these variables in - that case. */ - -static tree enum_next_value; - -/* Nonzero means that there was overflow computing enum_next_value. */ - -static int enum_overflow; - /* The file and line that the prototype came from if this is an old-style definition; used for diagnostics in store_parm_decls_oldstyle. */ @@ -5801,7 +5789,7 @@ layout_array_type (tree t) may be used to declare the individual values as they are read. */ tree -start_enum (tree name) +start_enum (struct c_enum_contents *the_enum, tree name) { tree enumtype = 0; @@ -5833,8 +5821,8 @@ start_enum (tree name) TYPE_VALUES (enumtype) = 0; } - enum_next_value = integer_zero_node; - enum_overflow = 0; + the_enum->enum_next_value = integer_zero_node; + the_enum->enum_overflow = 0; if (flag_short_enums) TYPE_PACKED (enumtype) = 1; @@ -5987,7 +5975,7 @@ finish_enum (tree enumtype, tree values, tree attributes) Assignment of sequential values by default is handled here. */ tree -build_enumerator (tree name, tree value) +build_enumerator (struct c_enum_contents *the_enum, tree name, tree value) { tree decl, type; @@ -6017,8 +6005,8 @@ build_enumerator (tree name, tree value) in the default. */ if (value == 0) { - value = enum_next_value; - if (enum_overflow) + value = the_enum->enum_next_value; + if (the_enum->enum_overflow) error ("overflow in enumeration values"); } @@ -6031,8 +6019,9 @@ build_enumerator (tree name, tree value) } /* Set basis for default for next value. */ - enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0); - enum_overflow = tree_int_cst_lt (enum_next_value, value); + the_enum->enum_next_value = build_binary_op (PLUS_EXPR, value, + integer_one_node, 0); + the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value); /* Now create a declaration for the enum value name. */ diff --git a/gcc/c-parser.c b/gcc/c-parser.c index b1f40a4..39c63d5 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -1,6 +1,6 @@ /* Parser for C and Objective-C. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Parser actions based on the old Bison parser; structure somewhat influenced by and fragments based on the C++ parser. @@ -1698,7 +1698,8 @@ c_parser_enum_specifier (c_parser *parser) if (c_parser_next_token_is (parser, CPP_OPEN_BRACE)) { /* Parse an enum definition. */ - tree type = start_enum (ident); + struct c_enum_contents the_enum; + tree type = start_enum (&the_enum, ident); tree postfix_attrs; /* We chain the enumerators in reverse order, then put them in forward order at the end. */ @@ -1726,7 +1727,7 @@ c_parser_enum_specifier (c_parser *parser) } else enum_value = NULL_TREE; - enum_decl = build_enumerator (enum_id, enum_value); + enum_decl = build_enumerator (&the_enum, enum_id, enum_value); TREE_CHAIN (enum_decl) = values; values = enum_decl; seen_comma = false; diff --git a/gcc/c-tree.h b/gcc/c-tree.h index b2fe228..e5f4a15 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -1,6 +1,6 @@ /* Definitions for C parsing and type checking. Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GCC. @@ -425,6 +425,17 @@ struct c_label_context_vm struct c_label_context_vm *next; }; +/* Used when parsing an enum. Initialized by start_enum. */ +struct c_enum_contents +{ + /* While defining an enum type, this is 1 plus the last enumerator + constant value. */ + tree enum_next_value; + + /* Nonzero means that there was overflow computing enum_next_value. */ + int enum_overflow; +}; + /* in c-parser.c */ extern void c_parse_init (void); @@ -448,7 +459,7 @@ extern void c_print_identifier (FILE *, tree, int); extern int quals_from_declspecs (const struct c_declspecs *); extern struct c_declarator *build_array_declarator (tree, struct c_declspecs *, bool, bool); -extern tree build_enumerator (tree, tree); +extern tree build_enumerator (struct c_enum_contents *, tree, tree); extern tree check_for_loop_decls (void); extern void mark_forward_parm_decls (void); extern void declare_parm_level (void); @@ -476,7 +487,7 @@ extern struct c_declarator *set_array_declarator_inner (struct c_declarator *, extern tree c_builtin_function (tree); extern void shadow_tag (const struct c_declspecs *); extern void shadow_tag_warned (const struct c_declspecs *, int); -extern tree start_enum (tree); +extern tree start_enum (struct c_enum_contents *, tree); extern int start_function (struct c_declspecs *, struct c_declarator *, tree); extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool, tree); |