------- Comment #11 from rguenth at gcc dot gnu dot org 2007-03-10 22:46 ------- Actually my patch is wrong as well. We just trigger it only with ians patch as -[-INF,-1] is [1, +INF(OVF)] with overflowed +INF.
I'll re-test the following with my previous fix for negative shift counts. Index: tree-vrp.c =================================================================== *** tree-vrp.c (revision 122805) --- tree-vrp.c (working copy) *************** vrp_int_const_binop (enum tree_code code *** 1554,1559 **** --- 1554,1565 ---- && (sgn1 >= 0 ? !is_positive_overflow_infinity (val2) : is_negative_overflow_infinity (val2))) + /* We only get in here with positive shift count, so the + overflow direction is the same as the sign of val1. + Actually rshift does not overflow at all, but we only + handle the case of shifting overflowed -INF and +INF. */ + || (code == RSHIFT_EXPR + && sgn1 >= 0) /* For division, the only case is -INF / -1 = +INF. */ || code == TRUNC_DIV_EXPR || code == FLOOR_DIV_EXPR -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31115