diff --git a/compiler-rt/lib/asan/asan_allocator.cpp b/compiler-rt/lib/asan/asan_allocator.cpp index 691f64c0ef36..58b496a3ca4b 100644 --- a/compiler-rt/lib/asan/asan_allocator.cpp +++ b/compiler-rt/lib/asan/asan_allocator.cpp @@ -1172,8 +1172,10 @@ void ForEachChunk(ForEachChunkCallback callback, void *arg) { IgnoreObjectResult IgnoreObjectLocked(const void *p) { uptr addr = reinterpret_cast(p); __asan::AsanChunk *m = __asan::instance.GetAsanChunkByAddr(addr); - if (!m || (atomic_load(&m->chunk_state, memory_order_acquire) != - __asan::CHUNK_ALLOCATED)) { + if (!m || + (atomic_load(&m->chunk_state, memory_order_acquire) != + __asan::CHUNK_ALLOCATED) || + !m->AddrIsInside(addr)) { return kIgnoreObjectInvalid; } if (m->lsan_tag == kIgnored) diff --git a/compiler-rt/test/asan/TestCases/lsan_annotations.cpp b/compiler-rt/test/asan/TestCases/lsan_annotations.cpp index ce7c19b8f2d0..158c2fdf9f48 100644 --- a/compiler-rt/test/asan/TestCases/lsan_annotations.cpp +++ b/compiler-rt/test/asan/TestCases/lsan_annotations.cpp @@ -5,7 +5,7 @@ #include #include -int *x, *y, *z; +int *x, *y; int main() { x = new int; @@ -16,9 +16,6 @@ int main() { y = new int; } - z = new int; - __lsan_ignore_object(z - 1); - - x = y = z = nullptr; + x = y = nullptr; return 0; }