This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/36554] [4.4 regression] verify_flow_info ICE can not throw but has EH edges
- From: "ebotcazou at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 26 Jun 2008 11:02:31 -0000
- Subject: [Bug middle-end/36554] [4.4 regression] verify_flow_info ICE can not throw but has EH edges
- References: <bug-36554-7210@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from ebotcazou at gcc dot gnu dot org 2008-06-26 11:02 -------
The new forward_propagate_comparison in tree-ssa-forwprop.c screws up the CFG:
<bb 2>:
D.1416_13 = v_1(D) != v_1(D);
is_nan_6 = (const boolean) D.1416_13;
D.1402_28 = v_1(D) > 1.79769313486231570814527423731704356798070567526e+308;
<bb 3>:
is_p_inf_22 = (const boolean) D.1402_28;
D.1403_29 = v_1(D) < -1.79769313486231570814527423731704356798070567526e+308;
<bb 4>:
is_m_inf_36 = (const boolean) D.1403_29;
is turned into
<bb 2>:
is_nan_6 = v_1(D) != v_1(D);
<bb 3>:
is_p_inf_22 = v_1(D) >
1.79769313486231570814527423731704356798070567526e+308;
<bb 4>:
is_m_inf_36 = v_1(D) <
-1.79769313486231570814527423731704356798070567526e+308;
without any EH updating. The idiom used in tidy_after_forward_propagate_addr
/* We may have turned a trapping insn into a non-trapping insn. */
if (maybe_clean_or_replace_eh_stmt (stmt, stmt)
&& tree_purge_dead_eh_edges (bb_for_stmt (stmt)))
cfg_changed = true;
wouldn't be sufficient here because statements are removed (is it really the
job of the pass to remove statements?)
But all this mess stems again from the non-canonical "boolean" type of Ada so
it's probably worth trying to make it canonical at last...
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36554