https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71916

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The following patch fixes this:

--- gcc/cfgrtl.c.jj     2016-05-11 15:15:49.000000000 +0200
+++ gcc/cfgrtl.c        2016-07-19 16:38:20.362303955 +0200
@@ -574,8 +574,10 @@ contains_no_active_insn_p (const_basic_b
 {
   rtx_insn *insn;

-  if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb == ENTRY_BLOCK_PTR_FOR_FN
(cfun)
-      || !single_succ_p (bb))
+  if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun)
+      || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)
+      || !single_succ_p (bb)
+      || (single_succ_edge (bb)->flags & EDGE_FAKE) != 0)
     return false;

   for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = NEXT_INSN (insn))

Normally, empty bbs that fall through into nowhere aren't considered as
forwarders, because those require single_succ_p.  But if there are fake edges
added, this doesn't work anymore.

Reply via email to