aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-01-02 21:43:51 +0000
committerRichard Stallman <rms@gnu.org>1993-01-02 21:43:51 +0000
commit82c0ff026c37aa14ffeec831dfaac37896ebbb82 (patch)
treee4ac94aaba913d87aeee54b5e4774e39c8836370
parentb00e5f0d0f9def786b31ca998b407e09ceea3f78 (diff)
downloadgcc-82c0ff026c37aa14ffeec831dfaac37896ebbb82.zip
gcc-82c0ff026c37aa14ffeec831dfaac37896ebbb82.tar.gz
gcc-82c0ff026c37aa14ffeec831dfaac37896ebbb82.tar.bz2
(expand_call): Don't use int_size_in_bytes for a variable-size object.
From-SVN: r3060
-rw-r--r--gcc/calls.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index c23fb82..c132a65 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -886,10 +886,10 @@ expand_call (exp, target, ignore)
{
/* We make a copy of the object and pass the address to the function
being called. */
- int size = int_size_in_bytes (type);
rtx copy;
- if (size < 0)
+ if (TYPE_SIZE (type) == 0
+ || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
{
/* This is a variable-sized object. Make space on the stack
for it. */
@@ -908,7 +908,10 @@ expand_call (exp, target, ignore)
TYPE_ALIGN (type)));
}
else
- copy = assign_stack_temp (TYPE_MODE (type), size, 1);
+ {
+ int size = int_size_in_bytes (type);
+ copy = assign_stack_temp (TYPE_MODE (type), size, 1);
+ }
store_expr (args[i].tree_value, copy, 0);