From 7d96cd21e779edc4fa44033ec4e9c30f9021aa78 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Tue, 23 Jan 2024 18:00:22 +0100 Subject: [PATCH] Fix `miri` errors. --- src/vec/drain.rs | 2 +- src/vec/mod.rs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/vec/drain.rs b/src/vec/drain.rs index f6df9e46ff..e12937025b 100644 --- a/src/vec/drain.rs +++ b/src/vec/drain.rs @@ -104,8 +104,8 @@ impl Drop for Drain<'_, T, N> { let start = source_vec.len(); let tail = self.0.tail_start; if tail != start { - let src = source_vec.as_ptr().add(tail); let dst = source_vec.as_mut_ptr().add(start); + let src = source_vec.as_ptr().add(tail); ptr::copy(src, dst, self.0.tail_len); } source_vec.set_len(start + self.0.tail_len); diff --git a/src/vec/mod.rs b/src/vec/mod.rs index 0118ae3085..49a8e1e1b9 100644 --- a/src/vec/mod.rs +++ b/src/vec/mod.rs @@ -345,12 +345,13 @@ impl Vec { unsafe { // Set `self.vec` length's to `start`, to be safe in case `Drain` is leaked. self.set_len(start); - let range_slice = slice::from_raw_parts(self.as_ptr().add(start), end - start); + let vec = NonNull::from(self); + let range_slice = slice::from_raw_parts(vec.as_ref().as_ptr().add(start), end - start); Drain { tail_start: end, tail_len: len - end, iter: range_slice.iter(), - vec: NonNull::from(self), + vec, } } }