summaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>1994-05-19 23:14:04 +0000
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>1994-05-19 23:14:04 +0000
commitba7ee0e22b4593d845af79e3188141e3bade2979 (patch)
tree4ad8501dd0199a1c9efcef9839ac373c25a9bdbd /gcc/calls.c
parent68acc686f1cb1e1a8396ca5c86c9d7a36d9ad44e (diff)
downloadgcc-ba7ee0e22b4593d845af79e3188141e3bade2979.tar.gz
* calls.c (expand_call): Only destroy temps here, if -fshort-temps
is given. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7341 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index cc6a74a5668..4b264f88293 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -702,12 +702,16 @@ expand_call (exp, target, ignore)
/* If inlining succeeded, return. */
if ((HOST_WIDE_INT) temp != -1)
{
- /* Perform all cleanups needed for the arguments of this call
- (i.e. destructors in C++). It is ok if these destructors
- clobber RETURN_VALUE_REG, because the only time we care about
- this is when TARGET is that register. But in C++, we take
- care to never return that register directly. */
- expand_cleanups_to (old_cleanups);
+ if (flag_short_temps)
+ {
+ /* Perform all cleanups needed for the arguments of this
+ call (i.e. destructors in C++). It is ok if these
+ destructors clobber RETURN_VALUE_REG, because the
+ only time we care about this is when TARGET is that
+ register. But in C++, we take care to never return
+ that register directly. */
+ expand_cleanups_to (old_cleanups);
+ }
#ifdef ACCUMULATE_OUTGOING_ARGS
/* If the outgoing argument list must be preserved, push