summaryrefslogtreecommitdiffstats
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1997-09-16 20:59:22 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1997-09-16 20:59:22 +0000
commit4d22520da941ef0b2b44948129ff1a48bf66f124 (patch)
treea5b5c80ce7c7eb18c2b823306cc1138c3b672c7a /gcc/expr.c
parenta968e32d2daeeff4c07c7f6c687f8e6dd8983140 (diff)
downloadppe42-gcc-4d22520da941ef0b2b44948129ff1a48bf66f124.tar.gz
ppe42-gcc-4d22520da941ef0b2b44948129ff1a48bf66f124.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@15496 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 96033da1baa..dd0050dd474 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);
OpenPOWER on IntegriCloud