This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/25459] [4.2 Regression] builtins.c:6283: ICE: in struct_equiv_block_eq, at struct-equiv.c:1149
- From: "amylaar at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Jan 2006 23:09:00 -0000
- Subject: [Bug middle-end/25459] [4.2 Regression] builtins.c:6283: ICE: in struct_equiv_block_eq, at struct-equiv.c:1149
- References: <bug-25459-276@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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