diff options
author | Andrew Haley <aph@redhat.com> | 2004-03-10 17:47:45 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 2004-03-10 17:47:45 +0000 |
commit | ffad84cd8567351d0c988cebdd5b95e4a4bc04ef (patch) | |
tree | 9b9a5f5981328e5ac58fde98a1519e76bad04d2f | |
parent | 65cd26a6f5334fceb8b1a8c21d22b00e05215290 (diff) | |
download | gcc-ffad84cd8567351d0c988cebdd5b95e4a4bc04ef.zip gcc-ffad84cd8567351d0c988cebdd5b95e4a4bc04ef.tar.gz gcc-ffad84cd8567351d0c988cebdd5b95e4a4bc04ef.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/except.c | 10 | ||||
-rw-r--r-- | gcc/function.c | 8 |
3 files changed, 21 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eb0a825..3bfc3ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/except.c b/gcc/except.c index 0084af1..60edf82 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -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) diff --git a/gcc/function.c b/gcc/function.c index 4fffcd8..2f68eaa 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -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. */ |