https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113551
--- Comment #18 from Yuxuan Shui <yshuiv7 at gmail dot com> --- (In reply to Andrew Pinski from comment #17) > (In reply to Yuxuan Shui from comment #16) > > ... > > So -fno-strict-overflow does -fno-wrapv-pointer so we can assume pointer > arithmetic wraps now and then `a+1` could in theory wrap to nullptr. hmm, but why does that make the null check that previously was not removable, removable? also another observation, if I change `struct obj *dso` to `int *dso`, and `&dso->i` to `&dso[1]`, then the null check will be preserved. despite this code still being undefined?