Skip to content

Commit 9a47840

Browse files
committed
Rename Receiver -> LegacyReceiver
As part of the "arbitrary self types v2" project, we are going to replace the current `Receiver` trait with a new mechanism based on a new, different `Receiver` trait. This PR renames the old trait to get it out the way. Naming is hard. Options considered included: * HardCodedReceiver (because it should only be used for things in the standard library, and hence is sort-of hard coded) * LegacyReceiver * TargetLessReceiver * OldReceiver These are all bad names, but fortunately this will be temporary. Assuming the new mechanism proceeds to stabilization as intended, the legacy trait will be removed altogether. Although we expect this trait to be used only in the standard library, we suspect it may be in use elsehwere, so we're landing this change separately to identify any surprising breakages. It's known that this trait is used within the Rust for Linux project; a patch is in progress to remove their dependency. This is a part of the arbitrary self types v2 project, rust-lang/rfcs#3519 #44874 r? @wesleywiser
1 parent 7f4b270 commit 9a47840

File tree

20 files changed

+59
-53
lines changed

20 files changed

+59
-53
lines changed

compiler/rustc_hir/src/lang_items.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ language_item_table! {
232232
DerefMut, sym::deref_mut, deref_mut_trait, Target::Trait, GenericRequirement::Exact(0);
233233
DerefPure, sym::deref_pure, deref_pure_trait, Target::Trait, GenericRequirement::Exact(0);
234234
DerefTarget, sym::deref_target, deref_target, Target::AssocTy, GenericRequirement::None;
235-
Receiver, sym::receiver, receiver_trait, Target::Trait, GenericRequirement::None;
235+
LegacyReceiver, sym::legacy_receiver, legacy_receiver_trait, Target::Trait, GenericRequirement::None;
236236

237237
Fn, kw::Fn, fn_trait, Target::Trait, GenericRequirement::Exact(1);
238238
FnMut, sym::fn_mut, fn_mut_trait, Target::Trait, GenericRequirement::Exact(1);

compiler/rustc_hir_analysis/src/check/wfcheck.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1794,7 +1794,7 @@ fn receiver_is_valid<'tcx>(
17941794
autoderef = autoderef.include_raw_pointers();
17951795
}
17961796

1797-
let receiver_trait_def_id = tcx.require_lang_item(LangItem::Receiver, Some(span));
1797+
let receiver_trait_def_id = tcx.require_lang_item(LangItem::LegacyReceiver, Some(span));
17981798

17991799
// Keep dereferencing `receiver_ty` until we get to `self_ty`.
18001800
while let Some((potential_self_ty, _)) = autoderef.next() {

compiler/rustc_span/src/symbol.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,7 @@ symbols! {
10961096
lazy_normalization_consts,
10971097
lazy_type_alias,
10981098
le,
1099+
legacy_receiver,
10991100
len,
11001101
let_chains,
11011102
let_else,
@@ -1524,7 +1525,6 @@ symbols! {
15241525
readonly,
15251526
realloc,
15261527
reason,
1527-
receiver,
15281528
recursion_limit,
15291529
reexport_test_harness_main,
15301530
ref_pat_eat_one_layer_2024,

library/alloc/src/boxed.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ use core::marker::{Tuple, Unsize};
196196
use core::mem::{self, SizedTypeProperties};
197197
use core::ops::{
198198
AsyncFn, AsyncFnMut, AsyncFnOnce, CoerceUnsized, Coroutine, CoroutineState, Deref, DerefMut,
199-
DerefPure, DispatchFromDyn, Receiver,
199+
DerefPure, DispatchFromDyn, LegacyReceiver,
200200
};
201201
use core::pin::{Pin, PinCoerceUnsized};
202202
use core::ptr::{self, addr_of_mut, NonNull, Unique};
@@ -2153,8 +2153,8 @@ impl<T: ?Sized, A: Allocator> DerefMut for Box<T, A> {
21532153
#[unstable(feature = "deref_pure_trait", issue = "87121")]
21542154
unsafe impl<T: ?Sized, A: Allocator> DerefPure for Box<T, A> {}
21552155

2156-
#[unstable(feature = "receiver_trait", issue = "none")]
2157-
impl<T: ?Sized, A: Allocator> Receiver for Box<T, A> {}
2156+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
2157+
impl<T: ?Sized, A: Allocator> LegacyReceiver for Box<T, A> {}
21582158

21592159
#[stable(feature = "rust1", since = "1.0.0")]
21602160
impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> {

library/alloc/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@
131131
#![feature(iter_advance_by)]
132132
#![feature(iter_next_chunk)]
133133
#![feature(layout_for_ptr)]
134+
#![feature(legacy_receiver_trait)]
134135
#![feature(local_waker)]
135136
#![feature(maybe_uninit_slice)]
136137
#![feature(maybe_uninit_uninit_array_transpose)]
@@ -140,7 +141,6 @@
140141
#![feature(ptr_internals)]
141142
#![feature(ptr_metadata)]
142143
#![feature(ptr_sub_ptr)]
143-
#![feature(receiver_trait)]
144144
#![feature(set_ptr_value)]
145145
#![feature(sized_type_properties)]
146146
#![feature(slice_from_ptr_range)]

library/alloc/src/rc.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ use core::intrinsics::abort;
252252
use core::iter;
253253
use core::marker::{PhantomData, Unsize};
254254
use core::mem::{self, align_of_val_raw, ManuallyDrop};
255-
use core::ops::{CoerceUnsized, Deref, DerefMut, DerefPure, DispatchFromDyn, Receiver};
255+
use core::ops::{CoerceUnsized, Deref, DerefMut, DerefPure, DispatchFromDyn, LegacyReceiver};
256256
use core::panic::{RefUnwindSafe, UnwindSafe};
257257
#[cfg(not(no_global_oom_handling))]
258258
use core::pin::Pin;
@@ -2179,8 +2179,8 @@ unsafe impl<T: ?Sized, A: Allocator> PinCoerceUnsized for Weak<T, A> {}
21792179
#[unstable(feature = "deref_pure_trait", issue = "87121")]
21802180
unsafe impl<T: ?Sized, A: Allocator> DerefPure for Rc<T, A> {}
21812181

2182-
#[unstable(feature = "receiver_trait", issue = "none")]
2183-
impl<T: ?Sized> Receiver for Rc<T> {}
2182+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
2183+
impl<T: ?Sized> LegacyReceiver for Rc<T> {}
21842184

21852185
#[stable(feature = "rust1", since = "1.0.0")]
21862186
unsafe impl<#[may_dangle] T: ?Sized, A: Allocator> Drop for Rc<T, A> {

library/alloc/src/sync.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use core::intrinsics::abort;
1818
use core::iter;
1919
use core::marker::{PhantomData, Unsize};
2020
use core::mem::{self, align_of_val_raw, ManuallyDrop};
21-
use core::ops::{CoerceUnsized, Deref, DerefPure, DispatchFromDyn, Receiver};
21+
use core::ops::{CoerceUnsized, Deref, DerefPure, DispatchFromDyn, LegacyReceiver};
2222
use core::panic::{RefUnwindSafe, UnwindSafe};
2323
use core::pin::{Pin, PinCoerceUnsized};
2424
use core::ptr::{self, NonNull};
@@ -2143,8 +2143,8 @@ unsafe impl<T: ?Sized, A: Allocator> PinCoerceUnsized for Weak<T, A> {}
21432143
#[unstable(feature = "deref_pure_trait", issue = "87121")]
21442144
unsafe impl<T: ?Sized, A: Allocator> DerefPure for Arc<T, A> {}
21452145

2146-
#[unstable(feature = "receiver_trait", issue = "none")]
2147-
impl<T: ?Sized> Receiver for Arc<T> {}
2146+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
2147+
impl<T: ?Sized> LegacyReceiver for Arc<T> {}
21482148

21492149
#[cfg(not(no_global_oom_handling))]
21502150
impl<T: ?Sized + CloneToUninit, A: Allocator + Clone> Arc<T, A> {

library/core/src/ops/deref.rs

+13-7
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,21 @@ unsafe impl<T: ?Sized> DerefPure for &mut T {}
297297
/// Indicates that a struct can be used as a method receiver, without the
298298
/// `arbitrary_self_types` feature. This is implemented by stdlib pointer types like `Box<T>`,
299299
/// `Rc<T>`, `&T`, and `Pin<P>`.
300-
#[lang = "receiver"]
301-
#[unstable(feature = "receiver_trait", issue = "none")]
300+
///
301+
/// This trait will shortly be removed and replaced with a more generic
302+
/// facility based around the current "arbitrary self types" unstable feature.
303+
/// That new facility will use a replacement trait called `Receiver` which is
304+
/// why this is now named `LegacyReceiver`.
305+
#[cfg_attr(bootstrap, lang = "receiver")]
306+
#[cfg_attr(not(bootstrap), lang = "legacy_receiver")]
307+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
302308
#[doc(hidden)]
303-
pub trait Receiver {
309+
pub trait LegacyReceiver {
304310
// Empty.
305311
}
306312

307-
#[unstable(feature = "receiver_trait", issue = "none")]
308-
impl<T: ?Sized> Receiver for &T {}
313+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
314+
impl<T: ?Sized> LegacyReceiver for &T {}
309315

310-
#[unstable(feature = "receiver_trait", issue = "none")]
311-
impl<T: ?Sized> Receiver for &mut T {}
316+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
317+
impl<T: ?Sized> LegacyReceiver for &mut T {}

library/core/src/ops/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ pub use self::control_flow::ControlFlow;
168168
pub use self::coroutine::{Coroutine, CoroutineState};
169169
#[unstable(feature = "deref_pure_trait", issue = "87121")]
170170
pub use self::deref::DerefPure;
171-
#[unstable(feature = "receiver_trait", issue = "none")]
172-
pub use self::deref::Receiver;
171+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
172+
pub use self::deref::LegacyReceiver;
173173
#[stable(feature = "rust1", since = "1.0.0")]
174174
pub use self::deref::{Deref, DerefMut};
175175
pub(crate) use self::drop::fallback_surface_drop;

library/core/src/pin.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@
921921
#![stable(feature = "pin", since = "1.33.0")]
922922

923923
use crate::hash::{Hash, Hasher};
924-
use crate::ops::{CoerceUnsized, Deref, DerefMut, DerefPure, DispatchFromDyn, Receiver};
924+
use crate::ops::{CoerceUnsized, Deref, DerefMut, DerefPure, DispatchFromDyn, LegacyReceiver};
925925
#[allow(unused_imports)]
926926
use crate::{
927927
cell::{RefCell, UnsafeCell},
@@ -1692,8 +1692,8 @@ impl<Ptr: DerefMut<Target: Unpin>> DerefMut for Pin<Ptr> {
16921692
#[unstable(feature = "deref_pure_trait", issue = "87121")]
16931693
unsafe impl<Ptr: DerefPure> DerefPure for Pin<Ptr> {}
16941694

1695-
#[unstable(feature = "receiver_trait", issue = "none")]
1696-
impl<Ptr: Receiver> Receiver for Pin<Ptr> {}
1695+
#[unstable(feature = "legacy_receiver_trait", issue = "none")]
1696+
impl<Ptr: LegacyReceiver> LegacyReceiver for Pin<Ptr> {}
16971697

16981698
#[stable(feature = "pin", since = "1.33.0")]
16991699
impl<Ptr: fmt::Debug> fmt::Debug for Pin<Ptr> {

src/tools/rust-analyzer/crates/hir-def/src/lang_item.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ language_item_table! {
371371
Deref, sym::deref, deref_trait, Target::Trait, GenericRequirement::Exact(0);
372372
DerefMut, sym::deref_mut, deref_mut_trait, Target::Trait, GenericRequirement::Exact(0);
373373
DerefTarget, sym::deref_target, deref_target, Target::AssocTy, GenericRequirement::None;
374-
Receiver, sym::receiver, receiver_trait, Target::Trait, GenericRequirement::None;
374+
Receiver, sym::legacy_receiver, legacy_receiver_trait, Target::Trait, GenericRequirement::None;
375375

376376
Fn, sym::fn_, fn_trait, Target::Trait, GenericRequirement::Exact(1);
377377
FnMut, sym::fn_mut, fn_mut_trait, Target::Trait, GenericRequirement::Exact(1);

src/tools/rust-analyzer/crates/ide-db/src/generated/lints.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7818,8 +7818,8 @@ The tracking issue for this feature is: [#101196]
78187818
"##,
78197819
},
78207820
Lint {
7821-
label: "receiver_trait",
7822-
description: r##"# `receiver_trait`
7821+
label: "legacy_receiver_trait",
7822+
description: r##"# `legacy_receiver_trait`
78237823
78247824
This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
78257825

tests/ui/abi/compatibility.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ mod prelude {
8080
#[lang = "sized"]
8181
pub trait Sized {}
8282

83-
#[lang = "receiver"]
84-
pub trait Receiver {}
85-
impl<T: ?Sized> Receiver for &T {}
86-
impl<T: ?Sized> Receiver for &mut T {}
83+
#[lang = "legacy_receiver"]
84+
pub trait LegacyReceiver {}
85+
impl<T: ?Sized> LegacyReceiver for &T {}
86+
impl<T: ?Sized> LegacyReceiver for &mut T {}
8787

8888
#[lang = "copy"]
8989
pub trait Copy: Sized {}

tests/ui/closures/closure-move-sync.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ fn bar() {
55
let (send, recv) = channel();
66
let t = thread::spawn(|| {
77
recv.recv().unwrap();
8-
//~^^ ERROR `std::sync::mpsc::Receiver<()>` cannot be shared between threads safely
8+
//~^^ ERROR `Receiver<()>` cannot be shared between threads safely
99
});
1010

1111
send.send(());

tests/ui/closures/closure-move-sync.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
error[E0277]: `std::sync::mpsc::Receiver<()>` cannot be shared between threads safely
1+
error[E0277]: `Receiver<()>` cannot be shared between threads safely
22
--> $DIR/closure-move-sync.rs:6:27
33
|
44
LL | let t = thread::spawn(|| {
@@ -8,10 +8,10 @@ LL | let t = thread::spawn(|| {
88
LL | | recv.recv().unwrap();
99
LL | |
1010
LL | | });
11-
| |_____^ `std::sync::mpsc::Receiver<()>` cannot be shared between threads safely
11+
| |_____^ `Receiver<()>` cannot be shared between threads safely
1212
|
13-
= help: the trait `Sync` is not implemented for `std::sync::mpsc::Receiver<()>`, which is required by `{closure@$DIR/closure-move-sync.rs:6:27: 6:29}: Send`
14-
= note: required for `&std::sync::mpsc::Receiver<()>` to implement `Send`
13+
= help: the trait `Sync` is not implemented for `Receiver<()>`, which is required by `{closure@$DIR/closure-move-sync.rs:6:27: 6:29}: Send`
14+
= note: required for `&Receiver<()>` to implement `Send`
1515
note: required because it's used within this closure
1616
--> $DIR/closure-move-sync.rs:6:27
1717
|

tests/ui/privacy/privacy1.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ pub trait Deref {
1212
type Target;
1313
}
1414

15-
#[lang="receiver"]
16-
pub trait Receiver: Deref {}
15+
#[lang="legacy_receiver"]
16+
pub trait LegacyReceiver: Deref {}
1717

1818
impl<'a, T> Deref for &'a T {
1919
type Target = T;
2020
}
2121

22-
impl<'a, T> Receiver for &'a T {}
22+
impl<'a, T> LegacyReceiver for &'a T {}
2323

2424
mod bar {
2525
// shouldn't bring in too much

tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,12 @@ trait Copy {}
8282
#[lang = "tuple_trait"]
8383
trait Tuple {}
8484

85-
#[lang = "receiver"]
86-
trait Receiver {}
85+
#[lang = "legacy_receiver"]
86+
trait LegacyReceiver {}
8787

88-
impl<T: ?Sized> Receiver for &T {}
88+
impl<T: ?Sized> LegacyReceiver for &T {}
8989

90-
impl<T: ?Sized> Receiver for &mut T {}
90+
impl<T: ?Sized> LegacyReceiver for &mut T {}
9191

9292
#[stable(feature = "minicore", since = "1.0.0")]
9393
pub mod effects {

tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,12 @@ macro_rules! impl_fn_mut_tuple {
137137
//impl_fn_mut_tuple!(A B C D);
138138
//impl_fn_mut_tuple!(A B C D E);
139139

140-
#[lang = "receiver"]
141-
trait Receiver {}
140+
#[lang = "legacy_receiver"]
141+
trait LegacyReceiver {}
142142

143-
impl<T: ?Sized> Receiver for &T {}
143+
impl<T: ?Sized> LegacyReceiver for &T {}
144144

145-
impl<T: ?Sized> Receiver for &mut T {}
145+
impl<T: ?Sized> LegacyReceiver for &mut T {}
146146

147147
#[lang = "destruct"]
148148
#[const_trait]
@@ -454,7 +454,7 @@ impl<T> /* const */ Deref for Option<T> {
454454
}
455455
}
456456

457-
impl<P: Receiver> Receiver for Pin<P> {}
457+
impl<P: LegacyReceiver> LegacyReceiver for Pin<P> {}
458458

459459
impl<T: Clone> Clone for RefCell<T> {
460460
fn clone(&self) -> RefCell<T> {

tests/ui/stdlib-unit-tests/not-sync.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ fn main() {
1616
//~^ ERROR `std::rc::Weak<i32>` cannot be shared between threads safely [E0277]
1717

1818
test::<Receiver<i32>>();
19-
//~^ ERROR `std::sync::mpsc::Receiver<i32>` cannot be shared between threads safely [E0277]
19+
//~^ ERROR `Receiver<i32>` cannot be shared between threads safely [E0277]
2020
}

tests/ui/stdlib-unit-tests/not-sync.stderr

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ note: required by a bound in `test`
5252
LL | fn test<T: Sync>() {}
5353
| ^^^^ required by this bound in `test`
5454

55-
error[E0277]: `std::sync::mpsc::Receiver<i32>` cannot be shared between threads safely
55+
error[E0277]: `Receiver<i32>` cannot be shared between threads safely
5656
--> $DIR/not-sync.rs:18:12
5757
|
5858
LL | test::<Receiver<i32>>();
59-
| ^^^^^^^^^^^^^ `std::sync::mpsc::Receiver<i32>` cannot be shared between threads safely
59+
| ^^^^^^^^^^^^^ `Receiver<i32>` cannot be shared between threads safely
6060
|
61-
= help: the trait `Sync` is not implemented for `std::sync::mpsc::Receiver<i32>`
61+
= help: the trait `Sync` is not implemented for `Receiver<i32>`
6262
note: required by a bound in `test`
6363
--> $DIR/not-sync.rs:5:12
6464
|

0 commit comments

Comments
 (0)