This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/15159] [3.4 regression] ICE in rtl_verify_flow_info_1
- From: "rsandifo at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 May 2004 20:14:37 -0000
- Subject: [Bug optimization/15159] [3.4 regression] ICE in rtl_verify_flow_info_1
- References: <20040426233107.15159.bangerth@dealii.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From rsandifo at gcc dot gnu dot org 2004-05-01 20:14 -------
Been looking at this a little today. It seems to be specific to sibling
calls (there's no problem if you use -fno-optimize-sibling-calls) and
probably depends on how aggressively the backend tries to use them.
MIPS is very aggressive ;)
Taking the reduced example:
void bar () {
P p = new S();
p.s.foo ();
}
the first statement ends up in a call_placeholder. The call inside the
placeholder can throw, so it (correctly?) satisfies control_flow_insn_p.
It is initially placed in its own basic block.
However, reachable_handlers returns an empty list for call_placeholders,
so there are no EH edges from this block. The only edge is a fallthru
to the second block. This convinces try_optimize_cfg that the blocks
can be merged by merge_blocks_move().
I'm not sure when I'll next have time to look at this, but maybe the
above will be enough to trigger an Aha!
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |rsandifo at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15159