aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorBen Elliston <bje@redhat.com>2001-07-11 13:10:18 +0000
committerBen Elliston <bje@gcc.gnu.org>2001-07-11 23:10:18 +1000
commit219670f1728976e2d43cc054237e6196d78feefa (patch)
treed7996e70883a19e93c2f74f09f9c6c96b94e0abb /gcc/cp
parent0e41fb04c0b06c48d000f7f41c972c7dfcd89579 (diff)
downloadgcc-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/ChangeLog2
-rw-r--r--gcc/cp/cp-tree.h2
-rw-r--r--gcc/cp/decl.c18
-rw-r--r--gcc/cp/parse.y21
-rw-r--r--gcc/cp/pt.c2
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));
}