aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 e9000e9..cedd190 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 e16045f..e4d8744 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