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/36554] [4.4 regression] verify_flow_info ICE can not throw but has EH edges



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


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