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 optimization/15159] [3.4 regression] ICE in rtl_verify_flow_info_1


------- 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


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