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.