(preserve_temp_slots): Preserve anything whose address was taken when
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 31 Oct 1994 12:24:20 +0000 (07:24 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 31 Oct 1994 12:24:20 +0000 (07:24 -0500)
X is zero.

From-SVN: r8363

gcc/function.c

index 2024933eb32e314f52cf85d45d5bc06973eed732..821d61ac7101f77ad49448a1a30b7104e06d97b6 100644 (file)
@@ -1028,8 +1028,16 @@ preserve_temp_slots (x)
 {
   struct temp_slot *p = 0;
 
+  /* If there is no result, we still might have some objects whose address
+     were taken, so we need to make sure they stay around.  */
   if (x == 0)
-    return;
+    {
+      for (p = temp_slots; p; p = p->next)
+       if (p->in_use && p->level == temp_slot_level && p->addr_taken)
+         p->level--;
+
+      return;
+    }
 
   /* If X is a register that is being used as a pointer, see if we have
      a temporary slot we know it points to.  To be consistent with
@@ -1051,7 +1059,7 @@ preserve_temp_slots (x)
     }
 
   /* First see if we can find a match.  */
-  if ( p== 0)
+  if (== 0)
     p = find_temp_slot_from_address (XEXP (x, 0));
 
   if (p != 0)