aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2007-07-20 03:32:47 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2007-07-20 01:32:47 +0000
commit30a873c3f3697132e95b32ba1cf261e93f27045b (patch)
tree5c837c5f6e803acf2fbd4efe010fd38dea7d6cb2 /gcc/function.c
parentd24a32a1860b9d5a23ccca40cc70d165cd285e8b (diff)
downloadgcc-30a873c3f3697132e95b32ba1cf261e93f27045b.zip
gcc-30a873c3f3697132e95b32ba1cf261e93f27045b.tar.gz
gcc-30a873c3f3697132e95b32ba1cf261e93f27045b.tar.bz2
function.c (thread_prologue_and_epilogue_insns): Fix exit predecessor fallthru flags.
* function.c (thread_prologue_and_epilogue_insns): Fix exit predecessor fallthru flags. From-SVN: r126797
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/function.c b/gcc/function.c
index c69e18b..68a3f7e 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5256,7 +5256,18 @@ thread_prologue_and_epilogue_insns (void)
epilogue_done:
if (inserted)
- commit_edge_insertions ();
+ {
+ commit_edge_insertions ();
+
+ /* The epilogue insns we inserted may cause the exit edge to no longer
+ be fallthru. */
+ FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
+ {
+ if (((e->flags & EDGE_FALLTHRU) != 0)
+ && returnjump_p (BB_END (e->src)))
+ e->flags &= ~EDGE_FALLTHRU;
+ }
+ }
#ifdef HAVE_sibcall_epilogue
/* Emit sibling epilogues before any sibling call sites. */