[compiler-rt] [TSan] Clarify and enforce shadow end alignment (PR #144648)

Thurston Dang via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 25 09:23:27 PDT 2025


================
@@ -688,16 +688,17 @@ void MemoryAccessRangeT(ThreadState* thr, uptr pc, uptr addr, uptr size) {
     DCHECK(IsShadowMem(shadow_mem));
   }
 
-  RawShadow* shadow_mem_end = reinterpret_cast<RawShadow*>(
-      reinterpret_cast<uptr>(shadow_mem) + size * kShadowMultiplier - 1);
-  if (!IsShadowMem(shadow_mem_end)) {
-    Printf("Bad shadow end addr: %p (%p)\n", shadow_mem_end,
+  uptr size1 =
+      (RoundUpTo(addr + size, kShadowCell) - RoundDownTo(addr, kShadowCell));
+  RawShadow* shadow_mem_end = shadow_mem + size1 / kShadowCell * kShadowCnt;
+  if (!IsShadowMem(shadow_mem_end - 1)) {
+    Printf("Bad shadow end addr: %p (%p)\n", shadow_mem_end - 1,
----------------
thurstond wrote:

Nit: please add size1 to one of the Printfs

https://github.com/llvm/llvm-project/pull/144648


More information about the llvm-commits mailing list