aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2010-06-18 15:49:55 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2010-06-18 15:49:55 +0000
commit76d971ccfb886e192d3d21705b1d9327d61f8827 (patch)
treebf77ef78c9c1fda781e7ea74231e6b5dc0d22d25
parentd4fc0fb47f2fbc0910178660cffdf6f0b209fad9 (diff)
downloadgcc-76d971ccfb886e192d3d21705b1d9327d61f8827.zip
gcc-76d971ccfb886e192d3d21705b1d9327d61f8827.tar.gz
gcc-76d971ccfb886e192d3d21705b1d9327d61f8827.tar.bz2
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
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/stor-layout.c23
-rw-r--r--gcc/tree.h2
3 files changed, 23 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2af7e6b..ef71ff7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+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>
* config/rs6000/linux64.h (SET_CMODEL): Don't expand to empty.
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index d38a375..7e14432 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -743,7 +743,7 @@ start_record_layout (tree t)
rli->offset = size_zero_node;
rli->bitpos = bitsize_zero_node;
rli->prev_field = 0;
- rli->pending_statics = 0;
+ rli->pending_statics = NULL;
rli->packed_maybe_necessary = 0;
rli->remaining_in_alignment = 0;
@@ -827,10 +827,12 @@ debug_rli (record_layout_info rli)
if (rli->packed_maybe_necessary)
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");
- debug_tree (rli->pending_statics);
+ debug_vec_tree (rli->pending_statics);
}
}
@@ -1041,8 +1043,7 @@ place_field (record_layout_info rli, tree field)
it *after* the record is laid out. */
if (TREE_CODE (field) == VAR_DECL)
{
- rli->pending_statics = tree_cons (NULL_TREE, field,
- rli->pending_statics);
+ VEC_safe_push (tree, gc, rli->pending_statics, field);
return;
}
@@ -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
may use the record's type. */
- while (rli->pending_statics)
- {
- layout_decl (TREE_VALUE (rli->pending_statics), 0);
- rli->pending_statics = TREE_CHAIN (rli->pending_statics);
- }
+ while (!VEC_empty (tree, rli->pending_statics))
+ layout_decl (VEC_pop (tree, rli->pending_statics), 0);
/* Clean up. */
if (free_p)
- free (rli);
+ {
+ VEC_free (tree, gc, rli->pending_statics);
+ free (rli);
+ }
}
diff --git a/gcc/tree.h b/gcc/tree.h
index 0d8eefa..80f97ee 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4334,7 +4334,7 @@ typedef struct record_layout_info_s
tree prev_field;
/* The static variables (i.e., class variables, as opposed to
instance variables) encountered in T. */
- tree pending_statics;
+ VEC(tree,gc) *pending_statics;
/* Bits remaining in the current alignment group */
int remaining_in_alignment;
/* True if we've seen a packed field that didn't have normal