https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83104
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |8.0 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Marc Glisse from comment #2) > two_valued_val_range_p doesn't work on pointers, it uses vrp_val_min on the > type of the arguments. Probably: > > --- vr-values.c (revision 255021) > +++ vr-values.c (working copy) > @@ -4091,7 +4091,7 @@ vr_values::simplify_stmt_using_ranges (g > LHS = VAR == VAL1 ? (VAL1 BINOP CST) : (VAL2 BINOP CST) */ > > if (TREE_CODE_CLASS (rhs_code) == tcc_binary > - && INTEGRAL_TYPE_P (TREE_TYPE (lhs)) > + && INTEGRAL_TYPE_P (TREE_TYPE (rhs1)) > && ((TREE_CODE (rhs1) == INTEGER_CST > && TREE_CODE (rhs2) == SSA_NAME) > || (TREE_CODE (rhs2) == INTEGER_CST > > (or keep both tests) and/or make two_valued_val_range_p return false for !INTEGRAL_TYPE_P the above and/or this is pre-approved.