summaryrefslogtreecommitdiff
path: root/gcc/tree.def
diff options
context:
space:
mode:
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>1999-02-19 11:19:28 +0000
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>1999-02-19 11:19:28 +0000
commitca8c4cdab0cbde9ab5e1a6e55fc51204dae60922 (patch)
treef942380e3b0c0d2249241bd8dcac07cf02ab1635 /gcc/tree.def
parentf31ef787d3309f117cce6241c124e07e88abd5b8 (diff)
downloadgcc-ca8c4cdab0cbde9ab5e1a6e55fc51204dae60922.tar.gz
`
* tree.def (TRY_FINALLY_EXPR, GOTO_SUBROUTINE_EXPR): New tree nodes, * expr.c (expand_expr): Support new tree nodes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@25307 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree.def')
-rw-r--r--gcc/tree.def21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/tree.def b/gcc/tree.def
index 0a3502c0c71..02305e1ea66 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -702,6 +702,27 @@ DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", 'e', 2)
evaluated unless an exception is throw. */
DEFTREECODE (TRY_CATCH_EXPR, "try_catch_expr", 'e', 2)
+/* Evaluate the first operand.
+ The second operand is a a cleanup expression which is evaluated
+ before an exit (normal, exception, or jump out) from this expression.
+
+ Like a CLEANUP_POINT_EXPR/WITH_CLEANUP_EXPR combination, but those
+ always copy the cleanup expression where needed. In contrast,
+ TRY_FINALLY_EXPR generates a jump to a cleanup subroutine.
+ (At least conceptually; the optimizer could inline the cleanup
+ subroutine in the same way it could inline normal subroutines.)
+ TRY_FINALLY_EXPR should be used when the cleanup is actual statements
+ in the source of the current function (which people might want to
+ set breakpoints in). */
+DEFTREECODE (TRY_FINALLY_EXPR, "try_finally", 'e', 2)
+
+/* Used internally for cleanups in the implementation of TRY_FINALLY_EXPR.
+ (Specifically, it is created by expand_expr, not front-ends.)
+ Operand 0 is the rtx for the start of the subroutine we need to call.
+ Operand 1 is the rtx for a variable in which to store the address
+ of where the subroutine should return to. */
+DEFTREECODE (GOTO_SUBROUTINE_EXPR, "goto_subroutine", 'e', 2)
+
/* Pop the top element off the dynamic handler chain. Used in
conjunction with setjmp/longjmp based exception handling, see
except.c for more details. This is meant to be used only by the