diff options
author | wilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-09-16 20:59:22 +0000 |
---|---|---|
committer | wilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-09-16 20:59:22 +0000 |
commit | 4d22520da941ef0b2b44948129ff1a48bf66f124 (patch) | |
tree | a5b5c80ce7c7eb18c2b823306cc1138c3b672c7a /gcc/expr.c | |
parent | a968e32d2daeeff4c07c7f6c687f8e6dd8983140 (diff) | |
download | ppe42-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.c | 18 |
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); |