summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/function.c
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2001-01-03 17:17:01 +0000
committerobrien <obrien@FreeBSD.org>2001-01-03 17:17:01 +0000
commitb2d68729b209563670578d03c54d470ec5edefdf (patch)
tree28fed99e28a9cb8667601d16cc95b36e24dbafba /contrib/gcc/function.c
parent180bdd72fff21c97f6f0d23aaba7870a213a0860 (diff)
downloadFreeBSD-src-b2d68729b209563670578d03c54d470ec5edefdf.zip
FreeBSD-src-b2d68729b209563670578d03c54d470ec5edefdf.tar.gz
Merge gcc.2.95.3-test1 changes onto mainline
Diffstat (limited to 'contrib/gcc/function.c')
-rw-r--r--contrib/gcc/function.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/contrib/gcc/function.c b/contrib/gcc/function.c
index cd8f249..3237efc 100644
--- a/contrib/gcc/function.c
+++ b/contrib/gcc/function.c
@@ -1430,7 +1430,16 @@ free_temps_for_rtl_expr (t)
for (p = temp_slots; p; p = p->next)
if (p->rtl_expr == t)
- p->in_use = 0;
+ {
+ /* If this slot is below the current TEMP_SLOT_LEVEL, then it
+ needs to be preserved. This can happen if a temporary in
+ the RTL_EXPR was addressed; preserve_temp_slots will move
+ the temporary into a higher level. */
+ if (temp_slot_level <= p->level)
+ p->in_use = 0;
+ else
+ p->rtl_expr = NULL_TREE;
+ }
combine_temp_slots ();
}
OpenPOWER on IntegriCloud