aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2004-03-10 17:47:45 +0000
committerAndrew Haley <aph@gcc.gnu.org>2004-03-10 17:47:45 +0000
commitffad84cd8567351d0c988cebdd5b95e4a4bc04ef (patch)
tree9b9a5f5981328e5ac58fde98a1519e76bad04d2f /gcc
parent65cd26a6f5334fceb8b1a8c21d22b00e05215290 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/except.c10
-rw-r--r--gcc/function.c8
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. */