Fix H.J. Lu's alpha-linux bug with TImode constructors.
authorJim Wilson <wilson@cygnus.com>
Tue, 16 Sep 1997 20:59:22 +0000 (20:59 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Tue, 16 Sep 1997 20:59:22 +0000 (13:59 -0700)
* expr.c (expand_expr): Remove previous incorrect change.
If target and slot has no DECL_RTL, then call mark_addressable
again for the slot after we give it RTL.

From-SVN: r15496

gcc/ChangeLog
gcc/expr.c

index 50633dc..53929a1 100644 (file)
@@ -1,3 +1,9 @@
+Tue Sep 16 11:13:46 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * expr.c (expand_expr): Remove previous incorrect change.
+       If target and slot has no DECL_RTL, then call mark_addressable
+       again for the slot after we give it RTL.
+
 Tue Sep 16 10:14:55 1997  Jeffrey A Law  (law@cygnus.com)
 
        * version.c: Bump for snapshot.
index 96033da..dd0050d 100644 (file)
@@ -6919,11 +6919,6 @@ expand_expr (exp, target, tmode, modifier)
                /* All temp slots at this level must not conflict.  */
                preserve_temp_slots (target);
                DECL_RTL (slot) = target;
-               if (TREE_ADDRESSABLE (slot))
-                 {
-                   TREE_ADDRESSABLE (slot) = 0;
-                   mark_addressable (slot);
-                 }
 
                /* Since SLOT is not known to the called function
                   to belong to its stack frame, we must build an explicit
@@ -6955,8 +6950,17 @@ expand_expr (exp, target, tmode, modifier)
                 if (TREE_OPERAND (exp, 1) == NULL_TREE)
                   return target;
              }
-
-           DECL_RTL (slot) = target;
+           else
+             {
+               DECL_RTL (slot) = target;
+               /* If we must have an addressable slot, then make sure that
+                  the RTL that we just stored in slot is OK.  */
+               if (TREE_ADDRESSABLE (slot))
+                 {
+                   TREE_ADDRESSABLE (slot) = 0;
+                   mark_addressable (slot);
+                 }
+             }
          }
 
        exp1 = TREE_OPERAND (exp, 3) = TREE_OPERAND (exp, 1);