From 55d54003b6a58f3374f6db5c3143dabbdf0f7a69 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Tue, 29 Jul 2003 23:58:08 +0000 Subject: 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 --- gcc/c-tree.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'gcc/c-tree.h') diff --git a/gcc/c-tree.h b/gcc/c-tree.h index cbc83a5..f2f27de 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -193,7 +193,7 @@ extern void c_print_identifier (FILE *, tree, int); extern tree build_array_declarator (tree, tree, int, int); extern tree build_enumerator (tree, tree); extern void check_for_loop_decls (void); -extern void clear_parm_order (void); +extern void mark_forward_parm_decls (void); extern int complete_array_type (tree, tree, int); extern void declare_parm_level (void); extern void undeclared_variable (tree); @@ -211,7 +211,6 @@ extern tree implicitly_declare (tree); extern int in_parm_level_p (void); extern void keep_next_level (void); extern tree lookup_name (tree); -extern void parmlist_tags_warning (void); extern void pending_xref_error (void); extern void c_push_function_context (struct function *); extern void c_pop_function_context (struct function *); -- cgit v1.1