https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95279
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- How would you know if there is or isn't an object at that those addresses? Sure, if you in #c4 change p + 1 into p, then it is undefined behavior, but as I said, UndefinedBehaviorSanitizer has no way to detect that, as doesn't track the object boundaries etc. AddressSanitizer (to some extent) does, but it will only complain if one either dereferences such a pointer, or with -fsanitize=address,pointer-compare,pointer-subtract can complain about pointer (non-equality) comparisons or pointer subtractions where the two pointers provably don't belong to the same object. In theory one could add similar pointer-arithmetics sanitizer that would use the asan infrastructure, though I must say it would be very expensive (at runtime).