This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: ICE in gcc.dg/pr77834.c test for MIPS


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]