From 25d5eb3f317461c48e94e96b3ae1b4ab26b2270b Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 21 Nov 1997 20:23:57 +0000 Subject: 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/except.c | 35 ++++++++++++++++------------------- 2 files changed, 22 insertions(+), 19 deletions(-) (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 82c0e86..c88e084 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +Fri Nov 21 12:22:07 1997 Jason Merrill + + * 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 * Make-lang.in (CXX_LIB2FUNCS): Add new op new and op delete objs. diff --git a/gcc/cp/except.c b/gcc/cp/except.c index 009de14..5c2344d 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -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,15 +688,22 @@ 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); - do_pending_stack_adjust (); - RTL_EXPR_SEQUENCE (t) = get_insns (); - end_sequence (); + expand_internal_throw (outer_context_label_stack->u.rlabel); - /* 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 -- cgit v1.1