VRP should, if overfow is defined, create anti-ranges if plus or minus cause wrapping.
void test2 (unsigned int i) { if (i <= 0x0fffffffa) { return; } if (i == 0x0ffffffff) { return; } { unsigned int v = i + 2; { if (v != 0) { if (v != 0x0ffffffff) { link_error (); } } } } } we should be able to optimize this. So [UINT_MAX-4, UINT_MAX-1] + 2 is ~[1, UINT_MAX-1]. (I have a patch) -- Summary: VRP does not create ANIT_RANGEs on overflow Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: tree-optimization AssignedTo: rguenth at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30318