Commit 76d971cc by Nathan Froyd Committed by Nathan Froyd

tree.h (record_layout_info): Change type of pending_statics field to a VEC.

	* tree.h (record_layout_info): Change type of pending_statics field
	to a VEC.
	* stor-layout.c (start_record_layout): Store NULL into
	pending_statics.
	(debug_rli): Call debug_vec_tree instead of debug_tree.
	(place_field): Likewise.
	(finish_record_layout): Likewise.

From-SVN: r161000
parent d4fc0fb4
2010-06-18 Nathan Froyd <froydnj@codesourcery.com>
* tree.h (record_layout_info): Change type of pending_statics field
to a VEC.
* stor-layout.c (start_record_layout): Store NULL into
pending_statics.
(debug_rli): Call debug_vec_tree instead of debug_tree.
(place_field): Likewise.
(finish_record_layout): Likewise.
2010-06-18 Alan Modra <amodra@gmail.com> 2010-06-18 Alan Modra <amodra@gmail.com>
* config/rs6000/linux64.h (SET_CMODEL): Don't expand to empty. * config/rs6000/linux64.h (SET_CMODEL): Don't expand to empty.
......
...@@ -743,7 +743,7 @@ start_record_layout (tree t) ...@@ -743,7 +743,7 @@ start_record_layout (tree t)
rli->offset = size_zero_node; rli->offset = size_zero_node;
rli->bitpos = bitsize_zero_node; rli->bitpos = bitsize_zero_node;
rli->prev_field = 0; rli->prev_field = 0;
rli->pending_statics = 0; rli->pending_statics = NULL;
rli->packed_maybe_necessary = 0; rli->packed_maybe_necessary = 0;
rli->remaining_in_alignment = 0; rli->remaining_in_alignment = 0;
...@@ -827,10 +827,12 @@ debug_rli (record_layout_info rli) ...@@ -827,10 +827,12 @@ debug_rli (record_layout_info rli)
if (rli->packed_maybe_necessary) if (rli->packed_maybe_necessary)
fprintf (stderr, "packed may be necessary\n"); fprintf (stderr, "packed may be necessary\n");
if (rli->pending_statics) if (!VEC_empty (tree, rli->pending_statics))
{ {
unsigned ix;
tree t;
fprintf (stderr, "pending statics:\n"); fprintf (stderr, "pending statics:\n");
debug_tree (rli->pending_statics); debug_vec_tree (rli->pending_statics);
} }
} }
...@@ -1041,8 +1043,7 @@ place_field (record_layout_info rli, tree field) ...@@ -1041,8 +1043,7 @@ place_field (record_layout_info rli, tree field)
it *after* the record is laid out. */ it *after* the record is laid out. */
if (TREE_CODE (field) == VAR_DECL) if (TREE_CODE (field) == VAR_DECL)
{ {
rli->pending_statics = tree_cons (NULL_TREE, field, VEC_safe_push (tree, gc, rli->pending_statics, field);
rli->pending_statics);
return; return;
} }
...@@ -1718,15 +1719,15 @@ finish_record_layout (record_layout_info rli, int free_p) ...@@ -1718,15 +1719,15 @@ finish_record_layout (record_layout_info rli, int free_p)
/* Lay out any static members. This is done now because their type /* Lay out any static members. This is done now because their type
may use the record's type. */ may use the record's type. */
while (rli->pending_statics) while (!VEC_empty (tree, rli->pending_statics))
{ layout_decl (VEC_pop (tree, rli->pending_statics), 0);
layout_decl (TREE_VALUE (rli->pending_statics), 0);
rli->pending_statics = TREE_CHAIN (rli->pending_statics);
}
/* Clean up. */ /* Clean up. */
if (free_p) if (free_p)
free (rli); {
VEC_free (tree, gc, rli->pending_statics);
free (rli);
}
} }
......
...@@ -4334,7 +4334,7 @@ typedef struct record_layout_info_s ...@@ -4334,7 +4334,7 @@ typedef struct record_layout_info_s
tree prev_field; tree prev_field;
/* The static variables (i.e., class variables, as opposed to /* The static variables (i.e., class variables, as opposed to
instance variables) encountered in T. */ instance variables) encountered in T. */
tree pending_statics; VEC(tree,gc) *pending_statics;
/* Bits remaining in the current alignment group */ /* Bits remaining in the current alignment group */
int remaining_in_alignment; int remaining_in_alignment;
/* True if we've seen a packed field that didn't have normal /* True if we've seen a packed field that didn't have normal
......
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