function.c (expand_function_end): Emit a blockage insn before the epilogue when -fnon-call-exceptions is used.

2004-03-10  Andrew Haley  <aph@redhat.com>

	* function.c (expand_function_end): Emit a blockage insn before
	the epilogue when -fnon-call-exceptions is used.

	* except.c (expand_start_all_catch): Make comment more accurate.

From-SVN: r79265
This commit is contained in:
Andrew Haley 2004-03-10 17:47:45 +00:00 committed by Andrew Haley
parent 65cd26a6f5
commit ffad84cd85
3 changed files with 21 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2004-03-10 Andrew Haley <aph@redhat.com>
* function.c (expand_function_end): Emit a blockage insn before
the epilogue when -fnon-call-exceptions is used.
* except.c (expand_start_all_catch): Make comment more accurate.
2004-03-08 Joel Sherrill <joel@oarcorp.com>
PR target/14480

View File

@ -602,10 +602,12 @@ expand_start_all_catch (void)
emit_jump (region->u.try.continue_label);
}
/* Begin a catch clause. TYPE is the type caught, a list of such types, or
null if this is a catch-all clause. Providing a type list enables to
associate the catch region with potentially several exception types, which
is useful e.g. for Ada. */
/* Begin a catch clause. TYPE is the type caught, a list of such
types, (in the case of Java) an ADDR_EXPR which points to the
runtime type to match, or null if this is a catch-all
clause. Providing a type list enables to associate the catch region
with potentially several exception types, which is useful e.g. for
Ada. */
void
expand_start_catch (tree type_or_list)

View File

@ -7016,6 +7016,14 @@ expand_function_end (void)
clear_pending_stack_adjust ();
do_pending_stack_adjust ();
/* @@@ This is a kludge. We want to ensure that instructions that
may trap are not moved into the epilogue by scheduling, because
we don't always emit unwind information for the epilogue.
However, not all machine descriptions define a blockage insn, so
emit an ASM_INPUT to act as one. */
if (flag_non_call_exceptions)
emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
/* Mark the end of the function body.
If control reaches this insn, the function can drop through
without returning a value. */