Commit e00737d2 by Mike Stump Committed by Mike Stump

91th Cygnus<->FSF quick merge

From-SVN: r14139
parent f3e10ef2
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> 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 * cvt.c (convert): Don't do any extra work, if we can avoid it
......
...@@ -262,6 +262,7 @@ init_exception_processing () ...@@ -262,6 +262,7 @@ init_exception_processing ()
vtype, NOT_BUILT_IN); vtype, NOT_BUILT_IN);
terminate_fndecl = auto_function (get_identifier ("terminate"), terminate_fndecl = auto_function (get_identifier ("terminate"),
vtype, NOT_BUILT_IN); vtype, NOT_BUILT_IN);
TREE_THIS_VOLATILE (terminate_fndecl) = 1;
push_lang_context (lang_name_c); push_lang_context (lang_name_c);
...@@ -916,25 +917,11 @@ expand_end_eh_spec (raises) ...@@ -916,25 +917,11 @@ expand_end_eh_spec (raises)
void void
expand_exception_blocks () expand_exception_blocks ()
{ {
rtx funcend; push_to_sequence (catch_clauses);
rtx insns;
start_sequence ();
funcend = gen_label_rtx ();
start_sequence ();
/* Add all the catch clauses here. */
emit_insns (catch_clauses);
catch_clauses = NULL_RTX;
expand_leftover_cleanups (); expand_leftover_cleanups ();
catch_clauses = get_insns ();
insns = get_insns ();
end_sequence (); end_sequence ();
#if 1
/* Do this after we expand leftover cleanups, so that the /* Do this after we expand leftover cleanups, so that the
expand_eh_region_end that expand_end_eh_spec does will match 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 right expand_eh_region_start, and make sure it comes out before
...@@ -942,20 +929,17 @@ expand_exception_blocks () ...@@ -942,20 +929,17 @@ expand_exception_blocks ()
if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl))) if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
{ {
expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl))); expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)));
push_to_sequence (insns); push_to_sequence (catch_clauses);
/* Now expand any new ones. */
expand_leftover_cleanups (); expand_leftover_cleanups ();
catch_clauses = get_insns ();
insns = get_insns ();
end_sequence (); 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 /* 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 EH region through the top of the region, as we have to with
the setjmp/longjmp approach. */ the setjmp/longjmp approach. */
...@@ -967,23 +951,16 @@ expand_exception_blocks () ...@@ -967,23 +951,16 @@ expand_exception_blocks ()
expand_eh_region_start (); expand_eh_region_start ();
} }
emit_insns (insns); emit_insns (catch_clauses);
catch_clauses = NULL_RTX;
if (exceptions_via_longjmp == 0) if (exceptions_via_longjmp == 0)
expand_eh_region_end (TerminateFunctionCall); expand_eh_region_end (TerminateFunctionCall);
expand_leftover_cleanups (); expand_leftover_cleanups ();
}
emit_label (funcend); 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);
} }
tree tree
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment