This is the mail archive of the gcc-bugs@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]

[Bug middle-end/25459] [4.2 Regression] builtins.c:6283: ICE: in struct_equiv_block_eq, at struct-equiv.c:1149



------- Comment #7 from amylaar at gcc dot gnu dot org  2006-01-24 23:09 -------
(In reply to comment #2)
> It seems condjump_equiv_p (info, false) returns false because
> f1->dest and f2->dest are forwarder blocks:

This means that they have to have been forwarder blocks to forwarder blocks
originally, since one level of forwarder block for the fall-through edges for
f1 / f2 is already resolved.  I don't understand how this can happen with
the backtrace from the original report (in particular frames 0..2).
try_crossjump_to_edge should already have checked outgoing_edges_match,
which should have forwarded the result from a condjump_equiv_p call.



> 
> (gdb) p/x f1->dest->flags
> $6 = 0xc01
> (gdb) p/x f2->dest->flags
> $8 = 0xc01
> 
>   /* To simplify use of this function, return false if there are
>      unneeded forwarder blocks.  These will get eliminated later
>      during cleanup_cfg.  */
>   if (FORWARDER_BLOCK_P (f1->dest)
>       || FORWARDER_BLOCK_P (f2->dest)
>       || FORWARDER_BLOCK_P (b1->dest)
>       || FORWARDER_BLOCK_P (b2->dest))
>     return false;
> 


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25459


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