To not extract type from op0.
Bootstrapped and tested on x86_64-unknown-linux-gnu. 2019-07-25 Richard Biener <rguent...@suse.de> * tree-vrp.c (extract_range_from_multiplicative_op): Add type parameter and use it instead of guessing expression type from the first operand. (extract_range_from_binary_expr): Pass expr_type down. Index: gcc/tree-vrp.c =================================================================== --- gcc/tree-vrp.c (revision 273792) +++ gcc/tree-vrp.c (working copy) @@ -1238,7 +1238,7 @@ extract_range_into_wide_ints (const valu static void extract_range_from_multiplicative_op (value_range_base *vr, - enum tree_code code, + enum tree_code code, tree type, const value_range_base *vr0, const value_range_base *vr1) { @@ -1253,7 +1253,6 @@ extract_range_from_multiplicative_op (va gcc_assert (vr0->kind () == VR_RANGE && vr0->kind () == vr1->kind ()); - tree type = vr0->type (); wide_int res_lb, res_ub; wide_int vr0_lb = wi::to_wide (vr0->min ()); wide_int vr0_ub = wi::to_wide (vr0->max ()); @@ -1785,7 +1784,7 @@ extract_range_from_binary_expr (value_ra vr->set_varying (); return; } - extract_range_from_multiplicative_op (vr, code, &vr0, &vr1); + extract_range_from_multiplicative_op (vr, code, expr_type, &vr0, &vr1); return; } else if (code == RSHIFT_EXPR @@ -1806,7 +1805,8 @@ extract_range_from_binary_expr (value_ra if (vr0.kind () != VR_RANGE || vr0.symbolic_p ()) vr0.set (VR_RANGE, vrp_val_min (expr_type), vrp_val_max (expr_type)); - extract_range_from_multiplicative_op (vr, code, &vr0, &vr1); + extract_range_from_multiplicative_op (vr, code, expr_type, + &vr0, &vr1); return; } else if (code == LSHIFT_EXPR