https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80776

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
For this case it is

  <bb 2> [100.00%]:
  # RANGE [0, 2147483647] NONZERO 2147483647
  # USE = nonlocal { D.1796 } (nonlocal, escaped, interposable)
  # CLB = nonlocal { D.1796 } (nonlocal, escaped, interposable)
  i_4 = somerandom ();
  # RANGE [0, 4294967295]
  _1 = (unsigned int) i_4;
  # RANGE [0, 1]
  _7 = _1 > 999999;
  if (_7 != 0)
    goto <bb 3>; [0.04%]
  else
    goto <bb 4>; [99.96%]

  <bb 3> [0.08%]:
  __builtin_unreachable ();

  <bb 4> [99.92%]:
  # USE = nonlocal { D.1796 } (nonlocal, escaped, interposable)
  # CLB = nonlocal { D.1796 } (nonlocal, escaped, interposable)
  __builtin___sprintf_chk (&number, 1, 7, "%d", i_4);
  return;


that is not handled because we don't insert ASSERT_EXPRs for i_4 (we don't
do that for uses appearing in PHI merge position because we don't insert
PHIs).

The DOM algorithm would get this right but it doesn't have the
remove_range_assertions () "trick" of handling __builtin_unreachable ().

Let me see if I can manage to fix that.

Reply via email to