From 5359aa53271ee9faeba6c5519221c18dcbb0a000 Mon Sep 17 00:00:00 2001 From: mrs Date: Thu, 29 May 1997 20:29:01 +0000 Subject: [PATCH] 91th Cygnus<->FSF quick merge git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@14139 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 11 +++++++++++ gcc/cp/except.c | 49 +++++++++++++------------------------------------ 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a61f4ee9158..ccf8c1cb5f3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +Thu May 29 13:02:06 1997 Mike Stump + + * except.c (expand_exception_blocks): Simplify and fix and make + sure we don't end a region in a sequence, as expand_end_bindings + doesn't like it. + +Wed May 28 17:08:03 1997 Mike Stump + + * except.c (init_exception_processing): Mark terminate as not + returning so that the optimizer can optimize better. + Tue May 27 19:49:19 1997 Mike Stump * cvt.c (convert): Don't do any extra work, if we can avoid it diff --git a/gcc/cp/except.c b/gcc/cp/except.c index 83363db7033..eb2a2559f84 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -262,6 +262,7 @@ init_exception_processing () vtype, NOT_BUILT_IN); terminate_fndecl = auto_function (get_identifier ("terminate"), vtype, NOT_BUILT_IN); + TREE_THIS_VOLATILE (terminate_fndecl) = 1; push_lang_context (lang_name_c); @@ -916,25 +917,11 @@ expand_end_eh_spec (raises) void expand_exception_blocks () { - rtx funcend; - rtx insns; - - start_sequence (); - - funcend = gen_label_rtx (); - - start_sequence (); - - /* Add all the catch clauses here. */ - emit_insns (catch_clauses); - catch_clauses = NULL_RTX; - + push_to_sequence (catch_clauses); expand_leftover_cleanups (); - - insns = get_insns (); + catch_clauses = get_insns (); end_sequence (); -#if 1 /* Do this after we expand leftover cleanups, so that the expand_eh_region_end that expand_end_eh_spec does will match the right expand_eh_region_start, and make sure it comes out before @@ -942,20 +929,17 @@ expand_exception_blocks () if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl))) { expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl))); - push_to_sequence (insns); - - /* Now expand any new ones. */ + push_to_sequence (catch_clauses); expand_leftover_cleanups (); - - insns = get_insns (); + catch_clauses = get_insns (); end_sequence (); } -#endif - - emit_jump (funcend); - if (insns) + if (catch_clauses) { + rtx funcend = gen_label_rtx (); + emit_jump (funcend); + /* We cannot protect n regions this way if we must flow into the EH region through the top of the region, as we have to with the setjmp/longjmp approach. */ @@ -967,23 +951,16 @@ expand_exception_blocks () expand_eh_region_start (); } - emit_insns (insns); + emit_insns (catch_clauses); + catch_clauses = NULL_RTX; if (exceptions_via_longjmp == 0) expand_eh_region_end (TerminateFunctionCall); expand_leftover_cleanups (); - } - emit_label (funcend); - - /* Only if we had previous insns do we want to emit the jump around - them. If there weren't any, then insns will remain NULL_RTX. */ - if (insns) - insns = get_insns (); - end_sequence (); - - emit_insns (insns); + emit_label (funcend); + } } tree -- 2.11.0