Commit ffad84cd by Andrew Haley Committed by Andrew Haley

function.c (expand_function_end): Emit a blockage insn before the epilogue when…

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
parent 65cd26a6
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> 2004-03-08 Joel Sherrill <joel@oarcorp.com>
PR target/14480 PR target/14480
......
...@@ -602,10 +602,12 @@ expand_start_all_catch (void) ...@@ -602,10 +602,12 @@ expand_start_all_catch (void)
emit_jump (region->u.try.continue_label); emit_jump (region->u.try.continue_label);
} }
/* Begin a catch clause. TYPE is the type caught, a list of such types, or /* Begin a catch clause. TYPE is the type caught, a list of such
null if this is a catch-all clause. Providing a type list enables to types, (in the case of Java) an ADDR_EXPR which points to the
associate the catch region with potentially several exception types, which runtime type to match, or null if this is a catch-all
is useful e.g. for Ada. */ clause. Providing a type list enables to associate the catch region
with potentially several exception types, which is useful e.g. for
Ada. */
void void
expand_start_catch (tree type_or_list) expand_start_catch (tree type_or_list)
......
...@@ -7016,6 +7016,14 @@ expand_function_end (void) ...@@ -7016,6 +7016,14 @@ expand_function_end (void)
clear_pending_stack_adjust (); clear_pending_stack_adjust ();
do_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. /* Mark the end of the function body.
If control reaches this insn, the function can drop through If control reaches this insn, the function can drop through
without returning a value. */ without returning a value. */
......
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