summaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorgeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-11 19:31:55 +0000
committergeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-11 19:31:55 +0000
commitffb6162735a81d82e931314fe2bde06d9ea4a94e (patch)
tree128746f73c3e2da8ea83b98082bd6be445d4bdb3 /gcc/function.c
parenta76d7570bbfdd44a578c0093d009fcc73ebef39d (diff)
downloadgcc-ffb6162735a81d82e931314fe2bde06d9ea4a94e.tar.gz
* function.c (thread_prologue_and_epilogue_insns): Don't insert
a RETURN insn into a block which already ends with a jump. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31928 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 117074287f6..dd4bcb9d089 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -6746,13 +6746,25 @@ thread_prologue_and_epilogue_insns (f)
remove_edge (e);
make_edge (NULL, bb, EXIT_BLOCK_PTR, 0);
}
- }
- /* Emit a return insn for the exit fallthru block. Whether
- this is still reachable will be determined later. */
+ /* Emit a return insn for the exit fallthru block. Whether
+ this is still reachable will be determined later. */
- emit_barrier_after (last->end);
- emit_return_into_block (last);
+ emit_barrier_after (last->end);
+ emit_return_into_block (last);
+ }
+ else
+ {
+ /* The exit block wasn't empty. We have to use insert_insn_on_edge,
+ as it may be the exit block can go elsewhere as well
+ as exiting. */
+ start_sequence ();
+ emit_jump_insn (gen_return ());
+ seq = gen_sequence ();
+ end_sequence ();
+ insert_insn_on_edge (seq, e);
+ insertted = 1;
+ }
goto epilogue_done;
}
#endif