summaryrefslogtreecommitdiff
path: root/gnu/egcs/gcc/function.c
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2001-01-29 16:15:45 +0000
committerMarc Espie <espie@cvs.openbsd.org>2001-01-29 16:15:45 +0000
commitce00b542f4ab30703f7dc27b55740fc46b36e093 (patch)
tree152bfc2529112384418b8c86cf16a7e26c2f4a24 /gnu/egcs/gcc/function.c
parentfbbd8adf8ad208245f18c2e4a068810b9c401242 (diff)
Automatic merger
Diffstat (limited to 'gnu/egcs/gcc/function.c')
-rw-r--r--gnu/egcs/gcc/function.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gnu/egcs/gcc/function.c b/gnu/egcs/gcc/function.c
index 60afafa9c19..a4033a9a6b8 100644
--- a/gnu/egcs/gcc/function.c
+++ b/gnu/egcs/gcc/function.c
@@ -1428,7 +1428,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 ();
}