aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorMike Stump <mrs@gcc.gnu.org>1996-05-17 21:48:14 +0000
committerMike Stump <mrs@gcc.gnu.org>1996-05-17 21:48:14 +0000
commit4847c9386bfbaf333a36d7086c74a4b29f3b1461 (patch)
treed45ed9209ff2030610011f8365b79f5db25beac6 /gcc/tree.c
parent3cd456066e16f812b16ea0095bc392adbb94fa8f (diff)
downloadgcc-4847c9386bfbaf333a36d7086c74a4b29f3b1461.zip
gcc-4847c9386bfbaf333a36d7086c74a4b29f3b1461.tar.gz
gcc-4847c9386bfbaf333a36d7086c74a4b29f3b1461.tar.bz2
expr.c (expand_expr, [...]): Make TARGET_EXPRs redoable for UNSAVE_EXPR.
* expr.c (expand_expr, cond TARGET_EXPR): Make TARGET_EXPRs redoable for UNSAVE_EXPR. * stmt.c (expand_decl_cleanup): Wrap the cleanup in an UNSAVE_EXPR to that we can redo it. * tree.c (unsave_expr_now): Handle TARGET_EXPRs fully now. * tree.def (TARGET_EXPR): Add a third field so that TARGET_EXPRs are redoable. From-SVN: r12018
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index fc4c983..0e31d53 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2195,12 +2195,14 @@ unsave_expr_now (expr)
break;
case TARGET_EXPR:
- sorry ("TARGET_EXPR reused inside UNSAVE_EXPR");
+ TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
+ TREE_OPERAND (expr, 3) = NULL_TREE;
break;
case RTL_EXPR:
- warning ("RTL_EXPR reused inside UNSAVE_EXPR");
- RTL_EXPR_SEQUENCE (expr) = NULL_RTX;
+ /* I don't yet know how to emit a sequence multiple times. */
+ if (RTL_EXPR_SEQUENCE (expr) != NULL_RTX)
+ abort ();
break;
case CALL_EXPR: