We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 21b5950 commit b0c4a35Copy full SHA for b0c4a35
src/liballoc/collections/vec_deque.rs
@@ -1019,14 +1019,19 @@ impl<T> VecDeque<T> {
1019
// the drain is complete and the Drain destructor is run.
1020
self.head = drain_tail;
1021
1022
+ // `deque` and `ring` overlap in what they point to, so we must make sure
1023
+ // that `ring` is "derived-from" `deque`, or else even just creating ring
1024
+ // from `self` already invalidates `deque`.
1025
+ let deque = NonNull::from(&mut *self);
1026
+
1027
Drain {
- deque: NonNull::from(&mut *self),
1028
+ deque,
1029
after_tail: drain_head,
1030
after_head: head,
1031
iter: Iter {
1032
tail: drain_tail,
1033
head: drain_head,
- ring: unsafe { self.buffer_as_mut_slice() },
1034
+ ring: unsafe { (&mut *deque.as_ptr()).buffer_as_mut_slice() },
1035
},
1036
}
1037
0 commit comments