X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-eh.c;h=0ddf849c9ccbd2b06bf4b5403edfd44ec5622f60;hb=34d2ae7f01a3522bde5149aef4a883795eb60004;hp=a231f29b0a2d48d16d2948b73ff7bd7e9c78fad5;hpb=7c446c951a941facd5f225bba9916ff669420c34;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index a231f29b0a2..0ddf849c9cc 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -77,7 +77,7 @@ struct_ptr_hash (const void *a) we get to rtl. Once we're done with lowering here, if we lose the information there's no way to recover it! - (2) There are many more statements that *cannot* throw as + (2) There are many more statements that *cannot* throw as compared to those that can. We should be saving some amount of space by only allocating memory for those that can throw. */ @@ -265,7 +265,7 @@ outside_finally_tree (tree start, tree target) struct leh_state { - /* What's "current" while constructing the eh region tree. These + /* What's "current" while constructing the eh region tree. These correspond to variables of the same name in cfun->eh, which we don't have easy access to. */ struct eh_region *cur_region; @@ -280,7 +280,7 @@ struct leh_state struct leh_tf_state { /* Pointer to the TRY_FINALLY node under discussion. The try_finally_expr - is the original TRY_FINALLY_EXPR. We need to retain this so that + is the original TRY_FINALLY_EXPR. We need to retain this so that outside_finally_tree can reliably reference the tree used in the collect_finally_tree data structures. */ tree try_finally_expr; @@ -311,7 +311,7 @@ struct leh_tf_state though subsequent transformations may have cleared that flag. */ tree fallthru_label; - /* A label that has been registered with except.c to be the + /* A label that has been registered with except.c to be the landing pad for this try block. */ tree eh_label; @@ -330,7 +330,7 @@ struct leh_tf_state static void lower_eh_filter (struct leh_state *, tree *); static void lower_eh_constructs_1 (struct leh_state *, tree *); -/* Comparison function for qsort/bsearch. We're interested in +/* Comparison function for qsort/bsearch. We're interested in searching goto queue elements for source statements. */ static int @@ -383,7 +383,7 @@ replace_goto_queue_cond_clause (tree *tp, struct leh_tf_state *tf, tsi_link_after (tsi, new, TSI_CONTINUE_LINKING); } -/* The real work of replace_goto_queue. Returns with TSI updated to +/* The real work of replace_goto_queue. Returns with TSI updated to point to the next statement. */ static void replace_goto_queue_stmt_list (tree, struct leh_tf_state *); @@ -471,7 +471,7 @@ maybe_record_in_goto_queue (struct leh_state *state, tree stmt) { tree lab = GOTO_DESTINATION (stmt); - /* Computed and non-local gotos do not get processed. Given + /* Computed and non-local gotos do not get processed. Given their nature we can neither tell whether we've escaped the finally block nor redirect them if we knew. */ if (TREE_CODE (lab) != LABEL_DECL) @@ -480,7 +480,7 @@ maybe_record_in_goto_queue (struct leh_state *state, tree stmt) /* No need to record gotos that don't leave the try block. */ if (! outside_finally_tree (lab, tf->try_finally_expr)) return; - + if (! tf->dest_array) { VARRAY_TREE_INIT (tf->dest_array, 10, "dest_array"); @@ -520,7 +520,7 @@ maybe_record_in_goto_queue (struct leh_state *state, tree stmt) q = &tf->goto_queue[active]; tf->goto_queue_active = active + 1; - + memset (q, 0, sizeof (*q)); q->stmt = stmt; q->index = index; @@ -709,7 +709,7 @@ lower_try_finally_dup_block (tree t, struct leh_state *outer_state) { tree region = NULL; - t = lhd_unsave_expr_now (t); + t = unsave_expr_now (t); if (outer_state->tf) region = outer_state->tf->try_finally_expr; @@ -731,7 +731,7 @@ lower_try_finally_fallthru_label (struct leh_tf_state *tf) label = create_artificial_label (); tf->fallthru_label = label; if (tf->outer->tf) - record_in_finally_tree (label, tf->outer->tf->try_finally_expr); + record_in_finally_tree (label, tf->outer->tf->try_finally_expr); } return label; } @@ -752,7 +752,7 @@ lower_try_finally_fallthru_label (struct leh_tf_state *tf) where "fintmp" is the temporary used in the switch statement generation alternative considered below. For the nonce, we always choose the first - option. + option. THIS_STATE may be null if if this is a try-cleanup, not a try-finally. */ @@ -937,7 +937,7 @@ lower_try_finally_onedest (struct leh_state *state, struct leh_tf_state *tf) append_to_statement_list (x, tf->top_p); append_to_statement_list (finally, tf->top_p); - + x = build1 (RESX_EXPR, void_type_node, build_int_cst (NULL_TREE, get_eh_region_number (tf->region), 0)); @@ -977,7 +977,7 @@ lower_try_finally_onedest (struct leh_state *state, struct leh_tf_state *tf) for (; q < qe; ++q) do_goto_redirection (q, finally_label, NULL); replace_goto_queue (tf); - + if (VARRAY_TREE (tf->dest_array, 0) == tf->fallthru_label) { /* Reachable by goto to fallthru label only. Redirect it @@ -1284,7 +1284,7 @@ decide_copy_try_finally (int ndests, tree finally) /* A subroutine of lower_eh_constructs_1. Lower a TRY_FINALLY_EXPR nodes to a sequence of labels and blocks, plus the exception region trees - that record all the magic. This is complicated by the need to + that record all the magic. This is complicated by the need to arrange for the FINALLY block to be executed on all exits. */ static void @@ -1374,7 +1374,7 @@ lower_try_finally (struct leh_state *state, tree *tp) } /* A subroutine of lower_eh_constructs_1. Lower a TRY_CATCH_EXPR with a - list of CATCH_EXPR nodes to a sequence of labels and blocks, plus the + list of CATCH_EXPR nodes to a sequence of labels and blocks, plus the exception region trees that record all the magic. */ static void @@ -1444,7 +1444,7 @@ lower_eh_filter (struct leh_state *state, tree *tp) struct eh_region *this_region; tree inner = expr_first (TREE_OPERAND (*tp, 1)); tree eh_label; - + if (EH_FILTER_MUST_NOT_THROW (inner)) this_region = gen_eh_region_must_not_throw (state->cur_region); else @@ -1452,7 +1452,7 @@ lower_eh_filter (struct leh_state *state, tree *tp) EH_FILTER_TYPES (inner)); this_state = *state; this_state.cur_region = this_region; - + lower_eh_constructs_1 (&this_state, &TREE_OPERAND (*tp, 0)); if (!get_eh_region_may_contain_throw (this_region)) @@ -1568,7 +1568,7 @@ lower_eh_constructs_1 (struct leh_state *state, tree *tp) record_stmt_eh_region (state->cur_region, t); note_eh_region_may_contain_throw (state->cur_region); - /* ??? For the benefit of calls.c, converting all this to rtl, + /* ??? For the benefit of calls.c, converting all this to rtl, we need to record the call expression, not just the outer modify statement. */ op = get_call_expr_in (t); @@ -1647,7 +1647,7 @@ lower_eh_constructs (void) collect_eh_region_array (); } -struct tree_opt_pass pass_lower_eh = +struct tree_opt_pass pass_lower_eh = { "eh", /* name */ NULL, /* gate */ @@ -1680,7 +1680,7 @@ make_eh_edge (struct eh_region *region, void *data) make_edge (src, dst, EDGE_ABNORMAL | EDGE_EH); } - + void make_eh_edges (tree stmt) {