https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303
--- Comment #4 from Jiu Fu Guo <guojiufu at gcc dot gnu.org> --- For the pattern: "(X + C) / N", "op (plus@3 @0 INTEGER_CST@1) INTEGER_CST@2)" where "X" has value-range, and "X + C" does not overflow: && get_range_query (cfun)->range_of_expr (vr0, @0)) && get_range_query (cfun)->range_of_expr (vr1, @1) && range_op_handler (PLUS_EXPR).overflow_free_p (vr0, vr1) Then "@3"(it is X+C) would be with value-range usually. But for particular cases, like this PR, "vr3" is undefined. Below would be the reason for why "vr3" is undefined: _3 = _2 + -5; if (0 != 0) goto <bb 3>; [34.00%] else goto <bb 4>; [66.00%] ;; succ: 3 ;; 4 ;; basic block 3, loop depth 0 ;; pred: 2 _5 = _3 / 5; ;; succ: 4 The whole pattern "(_2 + -5 ) / 5" is in "bb 3", but "bb" would be unreachable (because "if (0 != 0)" is always false). And "get_range_query (cfun)->range_of_expr (vr3, @3)" is checked in "bb 3", "range_of_expr" gets an "undefined vr3".