function.c (expand_function_end): Always clobber the return registers, even if there...
authorGeoffrey Keating <geoffk@gcc.gnu.org>
Thu, 26 Apr 2001 20:54:51 +0000 (20:54 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Thu, 26 Apr 2001 20:54:51 +0000 (20:54 +0000)
* function.c (expand_function_end): Always clobber the
return registers, even if there is no return label.

From-SVN: r41612

gcc/ChangeLog
gcc/function.c

index dc1876d03a8c31ef8e698129698b278ba8321166..957f0471d5276f9cfb9b15514e5cd0f19ca43d76 100644 (file)
@@ -1,3 +1,8 @@
+2001-04-26  Geoffrey Keating  <geoffk@redhat.com>
+
+       * function.c (expand_function_end): Always clobber the
+       return registers, even if there is no return label.
+
 Thu Apr 26 20:28:21 CEST 2001  Jan Hubicka  <jh@suse.cz>
 
        * (ix86_expand_fp_movcc): Re-enable SSE conditional move generation.
@@ -77,6 +82,7 @@ Thu Apr 26 19:20:28 CEST 2001  Jan Hubicka  <jh@suse.cz>
        * config/i386/i386.h (CC1_CPU_SPEC): Fix deprecation warnings for
        -m386 and -m486.
 
+>>>>>>> 1.9867
 2001-04-26  Alexandre Oliva  <aoliva@redhat.com>
 
        * configure.in (configargs.h): Define thread_model.
@@ -161,6 +167,7 @@ Wed Apr 25 17:09:50 2001  J"orn Rennecke <amylaar@redhat.com>
        (get_exception_filter): New fn.
        (finish_eh_generation): Use it.
 
+>>>>>>> 1.9859
 2001-04-24  Nathan Sidwell <nathan@codesourcery.com>
 
        * c-semantics.c (add_scope_stmt): Don't call
index 8de57df0ddb5ac548204e3575feefa4d30e8007a..482e3ef089da51f6b2d7cd8cdec4eba1de6f14f4 100644 (file)
@@ -6777,31 +6777,29 @@ expand_function_end (filename, line, end_bindings)
      SDB depends on this.  */
   emit_line_note_force (filename, line);
 
+  /* Before the return label (if any), clobber the return
+     registers so that they are not propogated live to the rest of
+     the function.  This can only happen with functions that drop
+     through; if there had been a return statement, there would
+     have either been a return rtx, or a jump to the return label.  */
+  {
+    rtx before, after;
+    
+    before = get_last_insn ();
+    clobber_return_register ();
+    after = get_last_insn ();
+    
+    if (before != after)
+      cfun->x_clobber_return_insn = after;
+  }
+
   /* Output the label for the actual return from the function,
      if one is expected.  This happens either because a function epilogue
      is used instead of a return instruction, or because a return was done
      with a goto in order to run local cleanups, or because of pcc-style
      structure returning.  */
-
   if (return_label)
-    {
-      rtx before, after;
-
-      /* Before the return label, clobber the return registers so that
-         they are not propogated live to the rest of the function.  This
-        can only happen with functions that drop through; if there had
-        been a return statement, there would have either been a return
-        rtx, or a jump to the return label.  */
-
-      before = get_last_insn ();
-      clobber_return_register ();
-      after = get_last_insn ();
-
-      if (before != after)
-       cfun->x_clobber_return_insn = after;
-
-      emit_label (return_label);
-    }
+    emit_label (return_label);
 
   /* C++ uses this.  */
   if (end_bindings)