aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-10-03 21:46:46 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-10-03 21:46:46 -0400
commit99098c669ede8d46e430a5f387d18ea3c097fb4f (patch)
treed1cff8b9d9b8dd6deba04ca9054557b585614f4a /gcc
parentdec20b4baeb52647657acc42a34a8c6bdcfaee35 (diff)
downloadgcc-99098c669ede8d46e430a5f387d18ea3c097fb4f.zip
gcc-99098c669ede8d46e430a5f387d18ea3c097fb4f.tar.gz
gcc-99098c669ede8d46e430a5f387d18ea3c097fb4f.tar.bz2
(expr_size): If the size contains a PLACEHOLDER_EXPR, surround it with
a WITH_RECORD_EXPR. From-SVN: r5582
Diffstat (limited to 'gcc')
-rw-r--r--gcc/explow.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/explow.c b/gcc/explow.c
index f8d4751..86726c9 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -242,8 +242,13 @@ rtx
expr_size (exp)
tree exp;
{
- return expand_expr (size_in_bytes (TREE_TYPE (exp)),
- NULL_RTX, TYPE_MODE (sizetype), 0);
+ tree size = size_in_bytes (TREE_TYPE (exp));
+
+ if (TREE_CODE (size) != INTEGER_CST
+ && contains_placeholder_p (size))
+ size = build (WITH_RECORD_EXPR, sizetype, size, exp);
+
+ return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), 0);
}
/* Return a copy of X in which all memory references