Commit 50701474 by Steven Bosscher

stor-layout.c (pending_sizes): Change the type to VEC(tree,gc) *.

	* stor-layout.c (pending_sizes): Change the type to
	VEC(tree,gc) *.
	(get_pending_sizes, put_pending_size, put_pending_sizes):
	Update the uses of pending_sizes.
	* c-decl.c (store_parm_decls): Likewise.
	* c-tree.h (struct c_arg_info): Likewise.
	* tree.h: Update the prototype for get_pending_sizes and
	put_pending_sizes.

From-SVN: r159085
parent f0999267
2010-05-05 Steven Bosscher <steven@gcc.gnu.org>
* stor-layout.c (pending_sizes): Change the type to
VEC(tree,gc) *.
(get_pending_sizes, put_pending_size, put_pending_sizes):
Update the uses of pending_sizes.
* c-decl.c (store_parm_decls): Likewise.
* c-tree.h (struct c_arg_info): Likewise.
* tree.h: Update the prototype for get_pending_sizes and
put_pending_sizes.
2010-05-05 Jason Merrill <jason@redhat.com> 2010-05-05 Jason Merrill <jason@redhat.com>
PR debug/43370 PR debug/43370
......
...@@ -7990,9 +7990,12 @@ store_parm_decls (void) ...@@ -7990,9 +7990,12 @@ store_parm_decls (void)
thus won't naturally see the SAVE_EXPR containing the increment. All thus won't naturally see the SAVE_EXPR containing the increment. All
other pending sizes would be handled by gimplify_parameters. */ other pending sizes would be handled by gimplify_parameters. */
{ {
VEC(tree,gc) *pending_sizes = get_pending_sizes ();
tree t; tree t;
for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t)) int i;
add_stmt (TREE_VALUE (t));
for (i = 0; VEC_iterate (tree, pending_sizes, i, t); i++)
add_stmt (t);
} }
/* Even though we're inside a function body, we still don't want to /* Even though we're inside a function body, we still don't want to
......
...@@ -306,11 +306,11 @@ struct c_arg_info { ...@@ -306,11 +306,11 @@ struct c_arg_info {
/* A list of non-parameter decls (notably enumeration constants) /* A list of non-parameter decls (notably enumeration constants)
defined with the parameters. */ defined with the parameters. */
tree others; tree others;
/* A list of VLA sizes from the parameters. In a function /* A VEC of VLA sizes from the parameters. In a function
definition, these are used to ensure that side-effects in sizes definition, these are used to ensure that side-effects in sizes
of arrays converted to pointers (such as a parameter int i[n++]) of arrays converted to pointers (such as a parameter int i[n++])
take place; otherwise, they are ignored. */ take place; otherwise, they are ignored. */
tree pending_sizes; VEC(tree,gc) *pending_sizes;
/* True when these arguments had [*]. */ /* True when these arguments had [*]. */
BOOL_BITFIELD had_vla_unspec : 1; BOOL_BITFIELD had_vla_unspec : 1;
}; };
......
...@@ -69,7 +69,7 @@ extern void debug_rli (record_layout_info); ...@@ -69,7 +69,7 @@ extern void debug_rli (record_layout_info);
/* SAVE_EXPRs for sizes of types and decls, waiting to be expanded. */ /* SAVE_EXPRs for sizes of types and decls, waiting to be expanded. */
static GTY(()) tree pending_sizes; static GTY(()) VEC(tree,gc) *pending_sizes;
/* Show that REFERENCE_TYPES are internal and should use address_mode. /* Show that REFERENCE_TYPES are internal and should use address_mode.
Called only by front end. */ Called only by front end. */
...@@ -80,12 +80,12 @@ internal_reference_types (void) ...@@ -80,12 +80,12 @@ internal_reference_types (void)
reference_types_internal = 1; reference_types_internal = 1;
} }
/* Get a list of all the objects put on the pending sizes list. */ /* Get a VEC of all the objects put on the pending sizes list. */
tree VEC(tree,gc) *
get_pending_sizes (void) get_pending_sizes (void)
{ {
tree chain = pending_sizes; VEC(tree,gc) *chain = pending_sizes;
pending_sizes = 0; pending_sizes = 0;
return chain; return chain;
...@@ -101,14 +101,14 @@ put_pending_size (tree expr) ...@@ -101,14 +101,14 @@ put_pending_size (tree expr)
expr = skip_simple_arithmetic (expr); expr = skip_simple_arithmetic (expr);
if (TREE_CODE (expr) == SAVE_EXPR) if (TREE_CODE (expr) == SAVE_EXPR)
pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes); VEC_safe_push (tree, gc, pending_sizes, expr);
} }
/* Put a chain of objects into the pending sizes list, which must be /* Put a chain of objects into the pending sizes list, which must be
empty. */ empty. */
void void
put_pending_sizes (tree chain) put_pending_sizes (VEC(tree,gc) *chain)
{ {
gcc_assert (!pending_sizes); gcc_assert (!pending_sizes);
pending_sizes = chain; pending_sizes = chain;
......
...@@ -4424,9 +4424,9 @@ extern tree size_diffop_loc (location_t, tree, tree); ...@@ -4424,9 +4424,9 @@ extern tree size_diffop_loc (location_t, tree, tree);
extern tree round_up_loc (location_t, tree, int); extern tree round_up_loc (location_t, tree, int);
#define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N) #define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N)
extern tree round_down_loc (location_t, tree, int); extern tree round_down_loc (location_t, tree, int);
extern tree get_pending_sizes (void); extern VEC(tree,gc) *get_pending_sizes (void);
extern void put_pending_size (tree); extern void put_pending_size (tree);
extern void put_pending_sizes (tree); extern void put_pending_sizes (VEC(tree,gc) *);
extern void finalize_size_functions (void); extern void finalize_size_functions (void);
/* Type for sizes of data-type. */ /* Type for sizes of data-type. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment