diff options
author | Mike Stump <mrs@gcc.gnu.org> | 1996-05-17 21:48:14 +0000 |
---|---|---|
committer | Mike Stump <mrs@gcc.gnu.org> | 1996-05-17 21:48:14 +0000 |
commit | 4847c9386bfbaf333a36d7086c74a4b29f3b1461 (patch) | |
tree | d45ed9209ff2030610011f8365b79f5db25beac6 /gcc/tree.c | |
parent | 3cd456066e16f812b16ea0095bc392adbb94fa8f (diff) | |
download | gcc-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.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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: |