]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR middle-end/15054 (Bad code due to overlapping stack temporaries)
authorGabriel Dos Reis <gdr@integrable-solutions.net>
Sun, 16 May 2004 20:27:22 +0000 (20:27 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Sun, 16 May 2004 20:27:22 +0000 (20:27 +0000)
Backport from mainline
2004-05-01  Ulrich Weigand  <uweigand@de.ibm.com>
PR middle-end/15054
* expr.c (expand_expr_real): Do not call preserve_temp_slots
on a TARGET_EXPR temp.
* function.c (assign_stack_temp_for_type): Set 'keep' flag for
TARGET_EXPR temp slots.

From-SVN: r81924

gcc/ChangeLog
gcc/expr.c
gcc/function.c

index 4575407b114e44ea6f270e2cd2f62d60e4d72fb0..3f9c4ad91059b58cfa7825e77d42a7e10a78aab6 100644 (file)
@@ -1,3 +1,13 @@
+2004-05-16  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Backport from mainline
+       2004-05-01  Ulrich Weigand  <uweigand@de.ibm.com>
+       PR middle-end/15054
+       * expr.c (expand_expr_real): Do not call preserve_temp_slots 
+       on a TARGET_EXPR temp.
+       * function.c (assign_stack_temp_for_type): Set 'keep' flag for
+       TARGET_EXPR temp slots.
+
 2004-05-13  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        PR target/15130
index 7f253218a8751a27f981b111faa22c22e467684b..a2b0c830568713ce40f4674ec0ebab6fb61eb239 100644 (file)
@@ -8991,8 +8991,6 @@ expand_expr (exp, target, tmode, modifier)
            else
              {
                target = assign_temp (type, 2, 0, 1);
-               /* All temp slots at this level must not conflict.  */
-               preserve_temp_slots (target);
                SET_DECL_RTL (slot, target);
                if (TREE_ADDRESSABLE (slot))
                  put_var_into_stack (slot, /*rescan=*/false);
index 604655ad9239ff70af86991b51eaba2ff4aab040..f69b7898955487fe35c0a9917bc0a4a6bdc979a6 100644 (file)
@@ -777,7 +777,7 @@ assign_stack_temp_for_type (mode, size, keep, type)
   if (keep == 2)
     {
       p->level = target_temp_slot_level;
-      p->keep = 0;
+      p->keep = 1;
     }
   else if (keep == 3)
     {