diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2003-07-29 23:58:08 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2003-07-29 23:58:08 +0000 |
commit | 55d54003b6a58f3374f6db5c3143dabbdf0f7a69 (patch) | |
tree | fc99c4938074bab89837359b94d5e2bac42be0ed /gcc/c-parse.in | |
parent | 18c8152070f9939739b297a4f133db1ca2387b6d (diff) | |
download | gcc-55d54003b6a58f3374f6db5c3143dabbdf0f7a69.tar.gz |
c-decl.c (last_function_parm_vars, [...]): New static variables.
* c-decl.c (last_function_parm_vars, current_function_parm_vars):
New static variables.
(struct c_scope): Add parms and warned_forward_parm_decls
fields; remove parm_order.
(storedecls, storetags): Delete.
(poplevel): Also clear bindings on the parms chain.
(pushdecl): Handle forward declarations of parameters, and
chain PARM_DECLs on the parms list, not the names list.
(lookup_name_current_level): Check for PARM_DECLs on the parms
list too.
(push_parm_decl): Don't update parm_order.
(clear_parm_order): Rename mark_forward_parm_decls. Issue the
warning, only once per parameter list, and set TREE_ASM_WRITTEN
on the decls here. Then move the forward decls to the names list.
(grokparms): Set last_function_parm_vars.
(get_parm_info): Don't use gettags or getdecls. No need to
extract non-parms from the parms list, or reorganize the parms
list. Feed nonparms back in the TREE_TYPE of the list node
returned. Issue only one error per parameter list for "void"
appearing more than once in said parameter list. Collapse
parmlist_tags_warning into this function to avoid double scan
of tags list.
(start_function): Set current_function_parm_vars.
(store_parm_decls_newstyle): Bypass pushdecl, manipulate scope
directly. Get non-parms from current_function_parm_vars; no
need to extract them from the parms chain. Properly bind tags
in the new scope.
(store_parm_decls_oldstyle): No need to extract non-parameters
from the parms chain, nor to store them back afterward. Move
declaration to top of function, restructure code reordering
DECL_ARGUMENTS.
(store_parm_decls): No need to save and restore warn_shadow.
* c-parse.in: Don't call parmlist_tags_warning nor
clear_parm_order. Call mark_forward_parm_decls when forward
parm decls are encountered.
* c-tree.h: Prototype mark_forward_parm_decls; not
clear_parm_order or parmlist_tags_warning.
testsuite:
* gcc.dg/struct-in-proto-1.c: New test.
From-SVN: r69945
Diffstat (limited to 'gcc/c-parse.in')
-rw-r--r-- | gcc/c-parse.in | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/gcc/c-parse.in b/gcc/c-parse.in index 22b1531afa1..dfdd9abd22b 100644 --- a/gcc/c-parse.in +++ b/gcc/c-parse.in @@ -2478,24 +2478,16 @@ asm_clobbers: parmlist: maybe_attribute { pushlevel (0); - clear_parm_order (); declare_parm_level (); } parmlist_1 { $$ = $3; - parmlist_tags_warning (); poplevel (0, 0, 0); } ; parmlist_1: parmlist_2 ')' | parms ';' - { tree parm; - if (pedantic) - pedwarn ("ISO C forbids forward parameter declarations"); - /* Mark the forward decls as such. */ - for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) - TREE_ASM_WRITTEN (parm) = 1; - clear_parm_order (); } + { mark_forward_parm_decls (); } maybe_attribute { /* Dummy action so attributes are in known place on parser stack. */ } @@ -2600,11 +2592,9 @@ setspecs_fp: parmlist_or_identifiers: maybe_attribute { pushlevel (0); - clear_parm_order (); declare_parm_level (); } parmlist_or_identifiers_1 { $$ = $3; - parmlist_tags_warning (); poplevel (0, 0, 0); } ; |