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.