diff options
author | froydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-08-08 17:44:53 +0000 |
---|---|---|
committer | froydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-08-08 17:44:53 +0000 |
commit | cfbfcd0bed73597ac4d7a4411ab84d5353695d7f (patch) | |
tree | 86621b607f8bb644e7ccb61ff809d59519a940b2 /gcc | |
parent | 9d61f04b037fb797ff38098a9b42aa3b6ba4e286 (diff) | |
download | gcc-cfbfcd0bed73597ac4d7a4411ab84d5353695d7f.tar.gz |
* c-tree.h (build_arg_info): Declare.
* c-decl.c (build_arg_info): Define.
(get_parm_info): Call it. Delete initialization code.
* c-parser.c (c_parser_parms_declarator): Likewise.
(c_parser_parms_list_declaractor): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163014 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/c-decl.c | 25 | ||||
-rw-r--r-- | gcc/c-parser.c | 23 | ||||
-rw-r--r-- | gcc/c-tree.h | 1 |
4 files changed, 30 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b3bcc73e32b..93cc8edbd74 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2010-08-08 Nathan Froyd <froydnj@codesourcery.com> + * c-tree.h (build_arg_info): Declare. + * c-decl.c (build_arg_info): Define. + (get_parm_info): Call it. Delete initialization code. + * c-parser.c (c_parser_parms_declarator): Likewise. + (c_parser_parms_list_declaractor): Likewise. + +2010-08-08 Nathan Froyd <froydnj@codesourcery.com> + * c-tree.h (c_arg_tag): Define. Define a VEC containing it. (struct c_arg_info): Change type of tags field. * c-decl.c (grokdeclarator): Update for changed type of tags field. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index e4e872d9b9d..ec6669219db 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -6176,6 +6176,22 @@ grokparms (struct c_arg_info *arg_info, bool funcdef_flag) } } +/* Allocate and initialize a c_arg_info structure from the parser's + obstack. */ + +struct c_arg_info * +build_arg_info (void) +{ + struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info); + ret->parms = NULL_TREE; + ret->tags = NULL; + ret->types = NULL_TREE; + ret->others = NULL_TREE; + ret->pending_sizes = NULL; + ret->had_vla_unspec = 0; + return ret; +} + /* Take apart the current scope and return a c_arg_info structure with info on a parameter list just parsed. @@ -6188,8 +6204,8 @@ struct c_arg_info * get_parm_info (bool ellipsis) { struct c_binding *b = current_scope->bindings; - struct c_arg_info *arg_info = XOBNEW (&parser_obstack, - struct c_arg_info); + struct c_arg_info *arg_info = build_arg_info (); + tree parms = 0; VEC(c_arg_tag,gc) *tags = NULL; tree types = 0; @@ -6198,11 +6214,6 @@ get_parm_info (bool ellipsis) static bool explained_incomplete_types = false; bool gave_void_only_once_err = false; - arg_info->parms = 0; - arg_info->tags = 0; - arg_info->types = 0; - arg_info->others = 0; - arg_info->pending_sizes = 0; arg_info->had_vla_unspec = current_scope->had_vla_unspec; /* The bindings in this scope must not get put into a block. diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 306d46ba65f..031c6887cad 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -194,7 +194,6 @@ typedef struct GTY(()) c_parser { static GTY (()) c_parser *the_parser; - /* Read in and lex a single token, storing it in *TOKEN. */ static void @@ -2672,13 +2671,8 @@ c_parser_parms_declarator (c_parser *parser, bool id_list_ok, tree attrs) } if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN)) { - struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info); - ret->parms = 0; - ret->tags = 0; + struct c_arg_info *ret = build_arg_info (); ret->types = list; - ret->others = 0; - ret->pending_sizes = 0; - ret->had_vla_unspec = 0; c_parser_consume_token (parser); pop_scope (); return ret; @@ -2715,24 +2709,13 @@ c_parser_parms_list_declarator (c_parser *parser, tree attrs) declarations. */ if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN)) { - struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info); - ret->parms = 0; - ret->tags = 0; - ret->types = 0; - ret->others = 0; - ret->pending_sizes = 0; - ret->had_vla_unspec = 0; + struct c_arg_info *ret = build_arg_info (); c_parser_consume_token (parser); return ret; } if (c_parser_next_token_is (parser, CPP_ELLIPSIS)) { - struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info); - ret->parms = 0; - ret->tags = 0; - ret->others = 0; - ret->pending_sizes = 0; - ret->had_vla_unspec = 0; + struct c_arg_info *ret = build_arg_info (); /* Suppress -Wold-style-definition for this case. */ ret->types = error_mark_node; error_at (c_parser_peek_token (parser)->location, diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 745dd053a8c..a04d45c8eb1 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -444,6 +444,7 @@ extern tree finish_enum (tree, tree, tree); extern void finish_function (void); extern tree finish_struct (location_t, tree, tree, tree, struct c_struct_parse_info *); +extern struct c_arg_info *build_arg_info (void); extern struct c_arg_info *get_parm_info (bool); extern tree grokfield (location_t, struct c_declarator *, struct c_declspecs *, tree, tree *); |