diff --git a/src/libsync/arc.rs b/src/libsync/arc.rs index ae76357a2be83..ecfeade2fb437 100644 --- a/src/libsync/arc.rs +++ b/src/libsync/arc.rs @@ -124,12 +124,10 @@ impl Clone for Arc { } } -// FIXME(#13042): this should have T: Send, and use self.inner() -impl Deref for Arc { +impl Deref for Arc { #[inline] fn deref<'a>(&'a self) -> &'a T { - let inner = unsafe { &*self.x }; - &inner.data + &self.inner().data } } diff --git a/src/libsync/lock.rs b/src/libsync/lock.rs index 67b725f040b4d..b83bdf9df299e 100644 --- a/src/libsync/lock.rs +++ b/src/libsync/lock.rs @@ -231,11 +231,10 @@ impl Mutex { } } -// FIXME(#13042): these should both have T: Send -impl<'a, T> Deref for MutexGuard<'a, T> { +impl<'a, T: Send> Deref for MutexGuard<'a, T> { fn deref<'a>(&'a self) -> &'a T { &*self.data } } -impl<'a, T> DerefMut for MutexGuard<'a, T> { +impl<'a, T: Send> DerefMut for MutexGuard<'a, T> { fn deref_mut<'a>(&'a mut self) -> &'a mut T { &mut *self.data } } @@ -363,14 +362,13 @@ impl<'a, T: Send + Share> RWLockWriteGuard<'a, T> { } } -// FIXME(#13042): these should all have T: Send + Share -impl<'a, T> Deref for RWLockReadGuard<'a, T> { +impl<'a, T: Send + Share> Deref for RWLockReadGuard<'a, T> { fn deref<'a>(&'a self) -> &'a T { self.data } } -impl<'a, T> Deref for RWLockWriteGuard<'a, T> { +impl<'a, T: Send + Share> Deref for RWLockWriteGuard<'a, T> { fn deref<'a>(&'a self) -> &'a T { &*self.data } } -impl<'a, T> DerefMut for RWLockWriteGuard<'a, T> { +impl<'a, T: Send + Share> DerefMut for RWLockWriteGuard<'a, T> { fn deref_mut<'a>(&'a mut self) -> &'a mut T { &mut *self.data } }