[clang] [Clang] Add release note for pointer overflow optimization change (PR #122462)
Nikita Popov via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 10 08:25:42 PST 2025
================
@@ -58,6 +58,26 @@ code bases.
containing strict-aliasing violations. The new default behavior can be
disabled using ``-fno-pointer-tbaa``.
+- Clang will now more aggressively use undefined behavior on pointer addition
+ overflow for optimization purposes. For example, a check like
+ ``ptr + unsigned_offset < ptr`` will now optimize to ``false``, because
+ ``ptr + unsigned_offset`` will cause undefined behavior if it overflows (or
+ advances past the end of the object).
+
+ Previously, ``ptr + unsigned_offset < ptr`` was optimized (by both Clang and
+ GCC) to ``(ssize_t)unsigned_offset < 0``. This also results in an incorrect
+ overflow check, but in a way that is less apparent when only testing with
+ pointers in the low half of the address space.
+
+ To avoid pointer addition overflow, it is necessary to perform the addition
+ on integers, for example using
+ ``(uintptr_t)ptr + unsigned_offset < (uintptr_t)ptr``.
----------------
nikic wrote:
Is the case you have in mind here where people have a `ptr` and `end_ptr` and write something like `ptr + offset < end_ptr`, which can be rewritten as `offset < end_ptr - ptr`?
https://github.com/llvm/llvm-project/pull/122462
More information about the cfe-commits
mailing list