summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-11-28 12:21:07 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-11-28 12:21:07 +0000
commitb7ba265505c7d538970e9b7fbf73929c8ba1197a (patch)
tree7f69598c8d9e75767d6a7fc9fd507ca3e7686a08 /gcc
parenta4dae3a8299cd8c9e7781e74e6db3757e7c2427c (diff)
downloadgcc-b7ba265505c7d538970e9b7fbf73929c8ba1197a.tar.gz
* stor-layout.c (put_pending_size): Look for SAVE_EXPR if not at top
level; only add to pending_sizes if find it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47415 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/stor-layout.c10
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e9000e97d97..cedd190d0d3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
Wed Nov 28 08:21:47 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+ * stor-layout.c (put_pending_size): Look for SAVE_EXPR if not at top
+ level; only add to pending_sizes if find it.
+
* langhooks.c (lhd_safe_from_p): Add ATTRIBUTE_UNUSED.
* df.c (iterate_dataflow_sbitmap, iterate_dataflow_bitmap):
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index e16045f1f5a..e4d8744faf1 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -114,7 +114,15 @@ void
put_pending_size (expr)
tree expr;
{
- pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes);
+ /* Strip any simple arithmetic from EXPR to see if it has an underlying
+ SAVE_EXPR. */
+ while (TREE_CODE_CLASS (TREE_CODE (expr)) == '1'
+ || (TREE_CODE_CLASS (TREE_CODE (expr)) == '2'
+ && TREE_CONSTANT (TREE_OPERAND (expr, 1))))
+ expr = TREE_OPERAND (expr, 0);
+
+ if (TREE_CODE (expr) == SAVE_EXPR)
+ pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes);
}
/* Put a chain of objects into the pending sizes list, which must be