diff options
author | Mike Stump <mrs@cygnus.com> | 1997-05-29 20:29:01 +0000 |
---|---|---|
committer | Mike Stump <mrs@gcc.gnu.org> | 1997-05-29 20:29:01 +0000 |
commit | e00737d221dbedf7f176a5c1d09ec3e4d855fc72 (patch) | |
tree | e52dca0e05223da8463c0c2251032dcb0549e961 | |
parent | f3e10ef29e6b2b6e6d1918ce10426dcf73285825 (diff) | |
download | gcc-e00737d221dbedf7f176a5c1d09ec3e4d855fc72.zip gcc-e00737d221dbedf7f176a5c1d09ec3e4d855fc72.tar.gz gcc-e00737d221dbedf7f176a5c1d09ec3e4d855fc72.tar.bz2 |
91th Cygnus<->FSF quick merge
From-SVN: r14139
-rw-r--r-- | gcc/cp/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/cp/except.c | 49 |
2 files changed, 24 insertions, 36 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a61f4ee..ccf8c1c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +Thu May 29 13:02:06 1997 Mike Stump <mrs@cygnus.com> + + * 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 <mrs@cygnus.com> + + * 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 <mrs@cygnus.com> * 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 83363db..eb2a255 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 |