https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88367
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW --- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- I think even the old if (range_is_nonnull (&vr0) || range_is_nonnull (&vr1)) set_value_range_to_nonnull (vr, expr_type); code is wrong with -fno-delete-null-pointer-checks (which is overloaded with the case that address zero is a valid pointer to an object). So IMHO you can simplify the patch and guard the affected places with flag_delete_null_pointer_checks. Strictly the kernel case of computing NULL - 24 invokes UB and needs -fwrapv-pointer (but IIRC the kernel uses -fno-strict-overflow which enables that already). I don't think we exploint wrapping UB for pointers in the VRP case though.