about summary refs log tree commit diff
path: root/src/libcollections
diff options
context:
space:
mode:
authorThomas Garcia <thomasjgarcia1@gmail.com>2016-08-04 21:33:57 -0700
committerThomas Garcia <thomasjgarcia1@gmail.com>2016-08-04 21:33:57 -0700
commitbf592cefde313aed68bccc91c053f5912350249b (patch)
treea534f69b0d36c59304f2271f310498b00ee7a6ea /src/libcollections
parent40f3ee2a01ef24d57430726c098de905c7c6e04a (diff)
Made vec_deque::Drain, hash_map::Drain, and hash_set::Drain covariant
Diffstat (limited to 'src/libcollections')
-rw-r--r--src/libcollections/vec_deque.rs7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libcollections/vec_deque.rs b/src/libcollections/vec_deque.rs
index 9c3792afa2f..812a67a7e78 100644
--- a/src/libcollections/vec_deque.rs
+++ b/src/libcollections/vec_deque.rs
@@ -24,6 +24,7 @@ use core::iter::{repeat, FromIterator};
 use core::mem;
 use core::ops::{Index, IndexMut};
 use core::ptr;
+use core::ptr::Shared;
 use core::slice;
 
 use core::hash::{Hash, Hasher};
@@ -903,7 +904,7 @@ impl<T> VecDeque<T> {
         self.head = drain_tail;
 
         Drain {
-            deque: self as *mut _,
+            deque: unsafe { Shared::new(self as *mut _) },
             after_tail: drain_head,
             after_head: head,
             iter: Iter {
@@ -1985,7 +1986,7 @@ pub struct Drain<'a, T: 'a> {
     after_tail: usize,
     after_head: usize,
     iter: Iter<'a, T>,
-    deque: *mut VecDeque<T>,
+    deque: Shared<VecDeque<T>>,
 }
 
 #[stable(feature = "drain", since = "1.6.0")]
@@ -1998,7 +1999,7 @@ impl<'a, T: 'a> Drop for Drain<'a, T> {
     fn drop(&mut self) {
         for _ in self.by_ref() {}
 
-        let source_deque = unsafe { &mut *self.deque };
+        let source_deque = unsafe { &mut **self.deque };
 
         // T = source_deque_tail; H = source_deque_head; t = drain_tail; h = drain_head
         //