aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@cygnus.com>1997-09-16 20:59:22 +0000
committerJim Wilson <wilson@gcc.gnu.org>1997-09-16 13:59:22 -0700
commit21002281e55cbe5b1c8fbacc9074629612dd1b4a (patch)
treea5b5c80ce7c7eb18c2b823306cc1138c3b672c7a
parent7d9e0d333c7cff4c6deecef4a8fd2b407a5c3f2b (diff)
downloadgcc-21002281e55cbe5b1c8fbacc9074629612dd1b4a.zip
gcc-21002281e55cbe5b1c8fbacc9074629612dd1b4a.tar.gz
gcc-21002281e55cbe5b1c8fbacc9074629612dd1b4a.tar.bz2
Fix H.J. Lu's alpha-linux bug with TImode constructors.
* 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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/expr.c18
2 files changed, 17 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 50633dc..53929a1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/expr.c b/gcc/expr.c
index 96033da..dd0050d 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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);