Commit 30ff8252 by Nathan Sidwell Committed by Nathan Sidwell

decl.c (start_enum): Show location of previous definition.

        * decl.c (start_enum): Show location of previous definition.
        * parse.y (enumlist_opt): New reduction.
        (structsp): Simplify enum rules to use enumlist_opt.

From-SVN: r28471
parent f124f84a
1999-08-03 Nathan Sidwell <nathan@acm.org>
* decl.c (start_enum): Show location of previous definition.
* parse.y (enumlist_opt): New reduction.
(structsp): Simplify enum rules to use enumlist_opt.
1999-08-03 Jason Merrill <jason@yorick.cygnus.com> 1999-08-03 Jason Merrill <jason@yorick.cygnus.com>
* lex.c (yyprint): Handle PFUNCNAME. * lex.c (yyprint): Handle PFUNCNAME.
......
...@@ -12642,7 +12642,10 @@ start_enum (name) ...@@ -12642,7 +12642,10 @@ start_enum (name)
enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1); enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE) if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
{
cp_error ("multiple definition of `%#T'", enumtype); cp_error ("multiple definition of `%#T'", enumtype);
cp_error_at ("previous definition here", enumtype);
}
else else
{ {
enumtype = make_node (ENUMERAL_TYPE); enumtype = make_node (ENUMERAL_TYPE);
......
...@@ -211,7 +211,7 @@ empty_parms () ...@@ -211,7 +211,7 @@ empty_parms ()
%type <ttype> component_declarator component_declarator0 %type <ttype> component_declarator component_declarator0
%type <ttype> notype_component_declarator notype_component_declarator0 %type <ttype> notype_component_declarator notype_component_declarator0
%type <ttype> after_type_component_declarator after_type_component_declarator0 %type <ttype> after_type_component_declarator after_type_component_declarator0
%type <ttype> enumlist enumerator %type <ttype> enumlist_opt enumlist enumerator
%type <ttype> absdcl cv_qualifiers %type <ttype> absdcl cv_qualifiers
%type <ttype> direct_abstract_declarator conversion_declarator %type <ttype> direct_abstract_declarator conversion_declarator
%type <ttype> new_declarator direct_new_declarator %type <ttype> new_declarator direct_new_declarator
...@@ -2104,32 +2104,24 @@ structsp: ...@@ -2104,32 +2104,24 @@ structsp:
{ $<itype>3 = suspend_momentary (); { $<itype>3 = suspend_momentary ();
$<ttype>$ = current_enum_type; $<ttype>$ = current_enum_type;
current_enum_type = start_enum ($2); } current_enum_type = start_enum ($2); }
enumlist maybecomma_warn '}' enumlist_opt '}'
{ TYPE_VALUES (current_enum_type) = $5; { TYPE_VALUES (current_enum_type) = $5;
$$.t = finish_enum (current_enum_type); $$.t = finish_enum (current_enum_type);
$$.new_type_flag = 1; $$.new_type_flag = 1;
current_enum_type = $<ttype>4; current_enum_type = $<ttype>4;
resume_momentary ((int) $<itype>3); resume_momentary ((int) $<itype>3);
check_for_missing_semicolon ($$.t); } check_for_missing_semicolon ($$.t); }
| ENUM identifier '{' '}'
{ $$.t = finish_enum (start_enum ($2));
$$.new_type_flag = 1;
check_for_missing_semicolon ($$.t); }
| ENUM '{' | ENUM '{'
{ $<itype>2 = suspend_momentary (); { $<itype>2 = suspend_momentary ();
$<ttype>$ = current_enum_type; $<ttype>$ = current_enum_type;
current_enum_type = start_enum (make_anon_name ()); } current_enum_type = start_enum (make_anon_name ()); }
enumlist maybecomma_warn '}' enumlist_opt '}'
{ TYPE_VALUES (current_enum_type) = $4; { TYPE_VALUES (current_enum_type) = $4;
$$.t = finish_enum (current_enum_type); $$.t = finish_enum (current_enum_type);
$$.new_type_flag = 1; $$.new_type_flag = 1;
current_enum_type = $<ttype>3; current_enum_type = $<ttype>3;
resume_momentary ((int) $<itype>1); resume_momentary ((int) $<itype>1);
check_for_missing_semicolon ($$.t); } check_for_missing_semicolon ($$.t); }
| ENUM '{' '}'
{ $$.t = finish_enum (start_enum (make_anon_name()));
$$.new_type_flag = 1;
check_for_missing_semicolon ($$.t); }
| ENUM identifier | ENUM identifier
{ $$.t = xref_tag (enum_type_node, $2, 1); { $$.t = xref_tag (enum_type_node, $2, 1);
$$.new_type_flag = 0; } $$.new_type_flag = 0; }
...@@ -2681,6 +2673,12 @@ notype_component_declarator: ...@@ -2681,6 +2673,12 @@ notype_component_declarator:
cplus_decl_attributes ($$, $3, prefix_attributes); } cplus_decl_attributes ($$, $3, prefix_attributes); }
; ;
enumlist_opt:
enumlist maybecomma_warn
| maybecomma_warn
{ $$ = NULL_TREE; }
;
/* We chain the enumerators in reverse order. /* We chain the enumerators in reverse order.
Because of the way enums are built, the order is Because of the way enums are built, the order is
insignificant. Take advantage of this fact. */ insignificant. Take advantage of this fact. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment