------- Comment #4 from pinskia at gcc dot gnu dot org 2007-04-17 20:27 ------- And it is a bug on the 4.2 branch. Before Ian's patch we got the following ranges for the testcase in comment #2:
D.1528_1: VARYING start_2: VARYING D.1528_3: VARYING cur_bitshift_4: ~[0, 0] EQUIVALENCES: { } (0 elements) start_5: [0, 0fffffff8] EQUIVALENCES: { start_2 } (1 elements) <retval>_6: VARYING start_9: [0fffffff9, +INF] EQUIVALENCES: { start_2 } (1 elements) After we get: D.1528_1: VARYING start_2: VARYING D.1528_3: VARYING cur_bitshift_4: [-INF(OVF), -2147483648] EQUIVALENCES: { } (0 elements) start_5: [0, 0fffffff8] EQUIVALENCES: { start_2 } (1 elements) <retval>_6: VARYING start_9: [0fffffff9, +INF] EQUIVALENCES: { start_2 } (1 elements) Before: Visiting statement: cur_bitshift_4 = (int) start_9; Found new range for cur_bitshift_4: ~[0, 0] After: Visiting statement: cur_bitshift_4 = (int) start_9; Found new range for cur_bitshift_4: [-INF(OVF), -2147483648] That is just incorrect. -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|[4.3 Regression] VRP |[4.2/4.3 Regression] VRP |eliminates a useful test due|eliminates a useful test due |with conversion from |with conversion from |unsigned int to int |unsigned int to int Target Milestone|4.3.0 |4.2.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31605