aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@gcc.gnu.org>2001-04-26 20:54:51 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2001-04-26 20:54:51 +0000
commitfbffc70af694dc340bb390071e1cf7b80486a249 (patch)
treeffccfbfbd8a06c00a5e393e6d7df7510847830ec /gcc
parent9cc03fabc2fae764f2d2ca0bff25b1d34b8e96b6 (diff)
downloadgcc-fbffc70af694dc340bb390071e1cf7b80486a249.zip
gcc-fbffc70af694dc340bb390071e1cf7b80486a249.tar.gz
gcc-fbffc70af694dc340bb390071e1cf7b80486a249.tar.bz2
function.c (expand_function_end): Always clobber the return registers, even if there is no return label.
* function.c (expand_function_end): Always clobber the return registers, even if there is no return label. From-SVN: r41612
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/function.c36
2 files changed, 24 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dc1876d..957f047 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/function.c b/gcc/function.c
index 8de57df..482e3ef 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -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)