except.c (expand_start_catch_block): We only need the rethrow region for non-sjlj exceptions.
* except.c (expand_start_catch_block): We only need the rethrow region for non-sjlj exceptions. (expand_end_catch_block): Likewise. Use outer_context_label_stack. From-SVN: r16648
This commit is contained in:
parent
1418bb67a3
commit
25d5eb3f31
@ -1,3 +1,9 @@
|
||||
Fri Nov 21 12:22:07 1997 Jason Merrill <jason@yorick.cygnus.com>
|
||||
|
||||
* except.c (expand_start_catch_block): We only need the rethrow
|
||||
region for non-sjlj exceptions.
|
||||
(expand_end_catch_block): Likewise. Use outer_context_label_stack.
|
||||
|
||||
Thu Nov 20 14:40:17 1997 Jason Merrill <jason@yorick.cygnus.com>
|
||||
|
||||
* Make-lang.in (CXX_LIB2FUNCS): Add new op new and op delete objs.
|
||||
|
@ -558,7 +558,8 @@ expand_start_catch_block (declspecs, declarator)
|
||||
that contains this catch block.
|
||||
|
||||
Matches the end in expand_end_catch_block. */
|
||||
expand_eh_region_start ();
|
||||
if (! exceptions_via_longjmp)
|
||||
expand_eh_region_start ();
|
||||
|
||||
/* Create a binding level for the eh_info and the exception object
|
||||
cleanup. */
|
||||
@ -667,10 +668,6 @@ expand_start_catch_block (declspecs, declarator)
|
||||
void
|
||||
expand_end_catch_block ()
|
||||
{
|
||||
rtx start_region_label_rtx;
|
||||
rtx end_region_label_rtx;
|
||||
tree decls, t;
|
||||
|
||||
if (! doing_eh (1))
|
||||
return;
|
||||
|
||||
@ -684,13 +681,6 @@ expand_end_catch_block ()
|
||||
/* Cleanup the EH object. */
|
||||
expand_end_bindings (getdecls (), kept_level_p (), 0);
|
||||
poplevel (kept_level_p (), 1, 0);
|
||||
|
||||
t = make_node (RTL_EXPR);
|
||||
TREE_TYPE (t) = void_type_node;
|
||||
RTL_EXPR_RTL (t) = const0_rtx;
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
do_pending_stack_adjust ();
|
||||
start_sequence_for_rtl_expr (t);
|
||||
|
||||
if (! exceptions_via_longjmp)
|
||||
{
|
||||
@ -698,16 +688,23 @@ expand_end_catch_block ()
|
||||
region around the whole catch block to skip through the
|
||||
terminate region we are nested in. */
|
||||
|
||||
expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack)));
|
||||
tree t = make_node (RTL_EXPR);
|
||||
TREE_TYPE (t) = void_type_node;
|
||||
RTL_EXPR_RTL (t) = const0_rtx;
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
do_pending_stack_adjust ();
|
||||
start_sequence_for_rtl_expr (t);
|
||||
|
||||
expand_internal_throw (outer_context_label_stack->u.rlabel);
|
||||
|
||||
do_pending_stack_adjust ();
|
||||
RTL_EXPR_SEQUENCE (t) = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
/* For the rethrow region. */
|
||||
expand_eh_region_end (t);
|
||||
}
|
||||
|
||||
do_pending_stack_adjust ();
|
||||
RTL_EXPR_SEQUENCE (t) = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
/* For the rethrow region. */
|
||||
expand_eh_region_end (t);
|
||||
|
||||
/* Fall to outside the try statement when done executing handler and
|
||||
we fall off end of handler. This is jump Lresume in the
|
||||
documentation. */
|
||||
|
Loading…
Reference in New Issue
Block a user