From: Geoffrey Keating Date: Thu, 26 Apr 2001 20:54:51 +0000 (+0000) Subject: function.c (expand_function_end): Always clobber the return registers, even if there... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fbffc70af694dc340bb390071e1cf7b80486a249;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dc1876d03a8..957f0471d52 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-04-26 Geoffrey Keating + + * 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 * (ix86_expand_fp_movcc): Re-enable SSE conditional move generation. @@ -77,6 +82,7 @@ Thu Apr 26 19:20:28 CEST 2001 Jan Hubicka * config/i386/i386.h (CC1_CPU_SPEC): Fix deprecation warnings for -m386 and -m486. +>>>>>>> 1.9867 2001-04-26 Alexandre Oliva * configure.in (configargs.h): Define thread_model. @@ -161,6 +167,7 @@ Wed Apr 25 17:09:50 2001 J"orn Rennecke (get_exception_filter): New fn. (finish_eh_generation): Use it. +>>>>>>> 1.9859 2001-04-24 Nathan Sidwell * c-semantics.c (add_scope_stmt): Don't call diff --git a/gcc/function.c b/gcc/function.c index 8de57df0ddb..482e3ef089d 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)