diff options
author | Nathan Froyd <froydnj@codesourcery.com> | 2010-06-18 15:49:55 +0000 |
---|---|---|
committer | Nathan Froyd <froydnj@gcc.gnu.org> | 2010-06-18 15:49:55 +0000 |
commit | 76d971ccfb886e192d3d21705b1d9327d61f8827 (patch) | |
tree | bf77ef78c9c1fda781e7ea74231e6b5dc0d22d25 | |
parent | d4fc0fb47f2fbc0910178660cffdf6f0b209fad9 (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/stor-layout.c | 23 | ||||
-rw-r--r-- | gcc/tree.h | 2 |
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); + } } @@ -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 |