diff options
author | Ben Elliston <bje@redhat.com> | 2001-07-11 13:10:18 +0000 |
---|---|---|
committer | Ben Elliston <bje@gcc.gnu.org> | 2001-07-11 23:10:18 +1000 |
commit | 219670f1728976e2d43cc054237e6196d78feefa (patch) | |
tree | d7996e70883a19e93c2f74f09f9c6c96b94e0abb /gcc/cp | |
parent | 0e41fb04c0b06c48d000f7f41c972c7dfcd89579 (diff) | |
download | gcc-219670f1728976e2d43cc054237e6196d78feefa.zip gcc-219670f1728976e2d43cc054237e6196d78feefa.tar.gz gcc-219670f1728976e2d43cc054237e6196d78feefa.tar.bz2 |
* Revert today's change -- there is a subtle bug.
From-SVN: r43935
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 2 | ||||
-rw-r--r-- | gcc/cp/decl.c | 18 | ||||
-rw-r--r-- | gcc/cp/parse.y | 21 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 |
5 files changed, 17 insertions, 28 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4ecf0aa..03d03d3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2001-07-11 Ben Elliston <bje@redhat.com> + * Revert this change -- there is a subtle bug. + PR c++/80 * decl.c (finish_enum): New "attributes" argument; pass it to cplus_decl_attributes. Use a narrower type if the enum is packed. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index d27ee9f..66ce4fb 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3845,7 +3845,7 @@ extern tree xref_tag PARAMS ((tree, tree, int)); extern tree xref_tag_from_type PARAMS ((tree, tree, int)); extern void xref_basetypes PARAMS ((tree, tree, tree, tree)); extern tree start_enum PARAMS ((tree)); -extern void finish_enum PARAMS ((tree, tree)); +extern void finish_enum PARAMS ((tree)); extern void build_enumerator PARAMS ((tree, tree, tree)); extern int start_function PARAMS ((tree, tree, tree, int)); extern tree finish_function PARAMS ((int)); diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 15ee0be..5de71508 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -12984,9 +12984,8 @@ start_enum (name) ENUMTYPE is the type object and VALUES a list of name-value pairs. */ void -finish_enum (enumtype, attributes) +finish_enum (enumtype) tree enumtype; - tree attributes; { tree pair; tree minnode; @@ -12997,8 +12996,6 @@ finish_enum (enumtype, attributes) int highprec; int precision; - cplus_decl_attributes (enumtype, attributes, NULL_TREE); - /* We built up the VALUES in reverse order. */ TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype)); @@ -13077,14 +13074,11 @@ finish_enum (enumtype, attributes) else fixup_signed_type (enumtype); - if (flag_short_enums || TYPE_PACKED (enumtype) || - (precision > TYPE_PRECISION (integer_type_node))) - { - /* Use the width of the narrowest normal C type which is wide - enough. */ - TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size - (precision, 1)); - } + if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node))) + /* Use the width of the narrowest normal C type which is wide + enough. */ + TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size + (precision, 1)); else TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node); diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 6c2a6be..6e2ac18 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -340,7 +340,7 @@ cp_parse_init () %type <ttype> init initlist maybeasm maybe_init defarg defarg1 %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers %type <ttype> maybe_attribute attributes attribute attribute_list attrib -%type <ttype> any_word enum_head +%type <ttype> any_word %type <itype> save_lineno %type <ttype> simple_stmt simple_if @@ -2240,29 +2240,22 @@ pending_defargs: { do_pending_defargs (); } ; -enum_head: - ENUM - { $$ = NULL_TREE; } - | ENUM attributes - { $$ = $2; } - ; - structsp: - enum_head identifier '{' + ENUM identifier '{' { $<ttype>$ = current_enum_type; current_enum_type = start_enum ($2); } - enumlist_opt '}' maybe_attribute + enumlist_opt '}' { $$.t = current_enum_type; - finish_enum (current_enum_type, chainon ($1, $7)); + finish_enum (current_enum_type); $$.new_type_flag = 1; current_enum_type = $<ttype>4; check_for_missing_semicolon ($$.t); } - | enum_head '{' + | ENUM '{' { $<ttype>$ = current_enum_type; current_enum_type = start_enum (make_anon_name ()); } - enumlist_opt '}' maybe_attribute + enumlist_opt '}' { $$.t = current_enum_type; - finish_enum (current_enum_type, chainon ($1, $6)); + finish_enum (current_enum_type); $$.new_type_flag = 1; current_enum_type = $<ttype>3; check_for_missing_semicolon ($$.t); } diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 9503e3e..3d6279a 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10149,7 +10149,7 @@ tsubst_enum (tag, newtag, args) build_enumerator (TREE_PURPOSE (e), value, newtag); } - finish_enum (newtag, NULL_TREE); + finish_enum (newtag); DECL_SOURCE_LINE (TYPE_NAME (newtag)) = DECL_SOURCE_LINE (TYPE_NAME (tag)); DECL_SOURCE_FILE (TYPE_NAME (newtag)) = DECL_SOURCE_FILE (TYPE_NAME (tag)); } |