From 27401fbc229f1ef9f19e9d598c0e718c675e7569 Mon Sep 17 00:00:00 2001 From: Ulrik Sverdrup Date: Thu, 7 Mar 2024 20:44:32 +0100 Subject: [PATCH] Fix miri error in extend_zst Miri reported this here: Undefined Behavior: memory access failed: alloc42975 has size 4, so pointer at offset 5 is out-of-bounds specifically for the ptr.write() where ptr is a pointer to ZST. Somewhat confusing that miri complains about the write, maybe a new feature. --- src/arrayvec.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/arrayvec.rs b/src/arrayvec.rs index 37e151a..d51fbf7 100644 --- a/src/arrayvec.rs +++ b/src/arrayvec.rs @@ -1088,7 +1088,9 @@ impl ArrayVec { if let Some(elt) = iter.next() { if ptr == end_ptr && CHECK { extend_panic(); } debug_assert_ne!(ptr, end_ptr); - ptr.write(elt); + if mem::size_of::() != 0 { + ptr.write(elt); + } ptr = raw_ptr_add(ptr, 1); guard.data += 1; } else { @@ -1115,7 +1117,7 @@ impl ArrayVec { unsafe fn raw_ptr_add(ptr: *mut T, offset: usize) -> *mut T { if mem::size_of::() == 0 { // Special case for ZST - ptr.cast::().wrapping_add(offset).cast() + ptr.cast::().wrapping_add(offset).cast::() } else { ptr.add(offset) }