OSDN Git Service

2007-03-06 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Mar 2007 17:21:37 +0000 (17:21 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Mar 2007 17:21:37 +0000 (17:21 +0000)
        * function.c (expand_function_end): Move blockage to just after we
        emit the label for the naked return from the function.

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

gcc/ChangeLog
gcc/function.c

index e6067d3..0e6de0b 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-06  Andrew Haley  <aph@redhat.com>
+
+       * function.c (expand_function_end): Move blockage to just after we
+       emit the label for the naked return from the function.
+
 2007-03-06  Richard Sandiford  <richard@codesourcery.com>
 
        * config/i386/att.h (ASM_OUTPUT_ASCII, ASM_OUTPUT_SKIP): Undefine
index 1d48f5b..f6ebb85 100644 (file)
@@ -4327,16 +4327,6 @@ expand_function_end (void)
       if (flag_exceptions)
        sjlj_emit_function_exit_after (get_last_insn ());
     }
-  else
-    {
-      /* @@@ 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, ""));
-    }
 
   /* If this is an implementation of throw, do what's necessary to
      communicate between __builtin_eh_return and the epilogue.  */
@@ -4478,6 +4468,14 @@ expand_function_end (void)
   /* Output the label for the naked return from the function.  */
   emit_label (naked_return_label);
 
+  /* @@@ 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 (! USING_SJLJ_EXCEPTIONS && flag_non_call_exceptions)
+    emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
+
   /* If stack protection is enabled for this function, check the guard.  */
   if (cfun->stack_protect_guard)
     stack_protect_epilogue ();