Hello Toma, On Thu, Feb 16, 2017 at 02:39:12PM +0000, Toma Tabacu wrote: > It is caused by "gcc_assert (!JUMP_P (last))" in > commit_one_edge_insertion (gcc/cfgrtl.c:2059-2077): > > if (returnjump_p (last)) > { > /* ??? Remove all outgoing edges from BB and add one for EXIT. > This is not currently a problem because this only happens > for the (single) epilogue, which already has a fallthru edge > to EXIT. */ > > e = single_succ_edge (bb); > gcc_assert (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun) > && single_succ_p (bb) && (e->flags & EDGE_FALLTHRU)); > > e->flags &= ~EDGE_FALLTHRU; > emit_barrier_after (last); > > if (before) > delete_insn (before); > } > else > gcc_assert (!JUMP_P (last));
> I can't come up with a reason for this assert and this code hasn't been > touched > in a long time, so I'm not sure it's necessary. It looks to me like it was > added more out of habit rather than for a specific reason. This happens when you have inserted code ending in a jump on an edge. This then will need updating of the CFG, and this code does not know how to do that. Segher