summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorfroydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-08 17:44:53 +0000
committerfroydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-08 17:44:53 +0000
commitcfbfcd0bed73597ac4d7a4411ab84d5353695d7f (patch)
tree86621b607f8bb644e7ccb61ff809d59519a940b2 /gcc
parent9d61f04b037fb797ff38098a9b42aa3b6ba4e286 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/c-decl.c25
-rw-r--r--gcc/c-parser.c23
-rw-r--r--gcc/c-tree.h1
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 *);