OSDN Git Service

2004-03-10 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Mar 2004 17:47:45 +0000 (17:47 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Mar 2004 17:47:45 +0000 (17:47 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79265 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/except.c
gcc/function.c

index eb0a825..3bfc3ed 100644 (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
index 0084af1..60edf82 100644 (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)
index 4fffcd8..2f68eaa 100644 (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.  */