Skip to content

Commit 350e112

Browse files
committed
deque: fix miri error with raw-borrowing twice.
When you take a raw pointer, previous raw pointers are invalidated. We get the pointer just once and use it twice.
1 parent 0738b3c commit 350e112

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

src/deque.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,22 +168,21 @@ impl<T, const N: usize> Deque<T, N> {
168168

169169
/// Returns a pair of mutable slices which contain, in order, the contents of the `Deque`.
170170
pub fn as_mut_slices(&mut self) -> (&mut [T], &mut [T]) {
171+
let ptr = self.buffer.as_mut_ptr();
172+
171173
// NOTE(unsafe) avoid bound checks in the slicing operation
172174
unsafe {
173175
if self.is_empty() {
174176
(&mut [], &mut [])
175177
} else if self.back <= self.front {
176178
(
177-
slice::from_raw_parts_mut(
178-
self.buffer.as_mut_ptr().add(self.front) as *mut T,
179-
N - self.front,
180-
),
181-
slice::from_raw_parts_mut(self.buffer.as_mut_ptr() as *mut T, self.back),
179+
slice::from_raw_parts_mut(ptr.add(self.front) as *mut T, N - self.front),
180+
slice::from_raw_parts_mut(ptr as *mut T, self.back),
182181
)
183182
} else {
184183
(
185184
slice::from_raw_parts_mut(
186-
self.buffer.as_mut_ptr().add(self.front) as *mut T,
185+
ptr.add(self.front) as *mut T,
187186
self.back - self.front,
188187
),
189188
&mut [],

0 commit comments

Comments
 (0)