summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/c-parse.in22
1 files changed, 16 insertions, 6 deletions
diff --git a/gcc/c-parse.in b/gcc/c-parse.in
index 36d24e74e58..2a40c5a3ce0 100644
--- a/gcc/c-parse.in
+++ b/gcc/c-parse.in
@@ -31,7 +31,7 @@ ifobjc
%expect 66
end ifobjc
ifc
-%expect 45
+%expect 46
/* These are the 23 conflicts you should get in parse.output;
the state numbers may vary if minor changes in the grammar are made.
@@ -309,6 +309,8 @@ end ifobjc
assemble_asm ($3);
else
error ("argument of `asm' is not a constant string"); }
+ | extension extdef
+ { pedantic = $<itype>1; }
;
datadef:
@@ -447,11 +449,8 @@ unary_expr:
| '*' cast_expr %prec UNARY
{ $$ = build_indirect_ref ($2, "unary *"); }
/* __extension__ turns off -pedantic for following primary. */
- | EXTENSION
- { $<itype>1 = pedantic;
- pedantic = 0; }
- cast_expr %prec UNARY
- { $$ = $3;
+ | extension cast_expr %prec UNARY
+ { $$ = $2;
pedantic = $<itype>1; }
| unop cast_expr %prec UNARY
{ $$ = build_unary_op ($1, $2, 0);
@@ -1012,6 +1011,8 @@ decl:
{ shadow_tag ($1); }
| declmods ';'
{ pedwarn ("empty declaration"); }
+ | extension decl
+ { pedantic = $<itype>1; }
;
/* Declspecs which contain at least one type specifier or typedef name.
@@ -1564,6 +1565,9 @@ component_decl:
$$ = NULL_TREE; }
| error
{ $$ = NULL_TREE; }
+ | extension component_decl
+ { $$ = $2;
+ pedantic = $<itype>1; }
;
components:
@@ -2357,6 +2361,12 @@ identifiers_or_typenames:
| identifiers_or_typenames ',' identifier
{ $$ = chainon ($1, build_tree_list (NULL_TREE, $3)); }
;
+
+extension:
+ EXTENSION
+ { $<itype>$ = pedantic;
+ pedantic = 0; }
+ ;
ifobjc
/* Objective-C productions. */