Skip to content

Commit 4d74681

Browse files
authored
Rollup merge of #103110 - RalfJung:manual-send, r=thomcc
remove redundant Send impl for references Also explain why the other instance is not redundant, move it next to the trait they are implementing, and out of the redundant module. This seems to go back all the way to rust-lang/rust@35ca50b, not sure why the module was added. The instance for `&mut` is the default instance we get anyway, and we don't have anything similar for `Sync`, so IMO we should be consistent and not have the redundant instance here, either.
2 parents 303572e + d407dff commit 4d74681

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

core/src/marker.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ impl<T: ?Sized> !Send for *const T {}
4444
#[stable(feature = "rust1", since = "1.0.0")]
4545
impl<T: ?Sized> !Send for *mut T {}
4646

47+
// Most instances arise automatically, but this instance is needed to link up `T: Sync` with
48+
// `&T: Send` (and it also removes the unsound default instance `T Send` -> `&T: Send` that would
49+
// otherwise exist).
50+
#[stable(feature = "rust1", since = "1.0.0")]
51+
unsafe impl<T: Sync + ?Sized> Send for &T {}
52+
4753
/// Types with a constant size known at compile time.
4854
///
4955
/// All type parameters have an implicit bound of `Sized`. The special syntax
@@ -674,13 +680,6 @@ impl<T: ?Sized> StructuralPartialEq for PhantomData<T> {}
674680
#[unstable(feature = "structural_match", issue = "31434")]
675681
impl<T: ?Sized> StructuralEq for PhantomData<T> {}
676682

677-
mod impls {
678-
#[stable(feature = "rust1", since = "1.0.0")]
679-
unsafe impl<T: Sync + ?Sized> Send for &T {}
680-
#[stable(feature = "rust1", since = "1.0.0")]
681-
unsafe impl<T: Send + ?Sized> Send for &mut T {}
682-
}
683-
684683
/// Compiler-internal trait used to indicate the type of enum discriminants.
685684
///
686685
/// This trait is automatically implemented for every type and does not add any

0 commit comments

Comments
 (0)