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:
Jason Merrill 1997-11-21 20:23:57 +00:00 committed by Jason Merrill
parent 1418bb67a3
commit 25d5eb3f31
2 changed files with 23 additions and 20 deletions

View File

@ -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.

View File

@ -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. */