Skip to content

Commit 8f85b90

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 916e9ce commit 8f85b90

File tree

19 files changed

+63
-57
lines changed

19 files changed

+63
-57
lines changed

compiler/rustc_codegen_cranelift/example/mini_core.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<*const U> for *const T {}
4747
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<*mut U> for *mut T {}
4848
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Box<U>> for Box<T> {}
4949

50-
#[lang = "receiver"]
51-
pub trait Receiver {}
50+
#[lang = "legacy_receiver"]
51+
pub trait LegacyReceiver {}
5252

53-
impl<T: ?Sized> Receiver for &T {}
54-
impl<T: ?Sized> Receiver for &mut T {}
55-
impl<T: ?Sized> Receiver for Box<T> {}
53+
impl<T: ?Sized> LegacyReceiver for &T {}
54+
impl<T: ?Sized> LegacyReceiver for &mut T {}
55+
impl<T: ?Sized> LegacyReceiver for Box<T> {}
5656

5757
#[lang = "copy"]
5858
pub unsafe trait Copy {}

compiler/rustc_codegen_gcc/example/mini_core.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ impl<T: ?Sized+Unsize<U>, U: ?Sized> DispatchFromDyn<*const U> for *const T {}
4444
impl<T: ?Sized+Unsize<U>, U: ?Sized> DispatchFromDyn<*mut U> for *mut T {}
4545
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Box<U, ()>> for Box<T, ()> {}
4646

47-
#[lang = "receiver"]
48-
pub trait Receiver {}
47+
#[lang = "legacy_receiver"]
48+
pub trait LegacyReceiver {}
4949

50-
impl<T: ?Sized> Receiver for &T {}
51-
impl<T: ?Sized> Receiver for &mut T {}
52-
impl<T: ?Sized, A: Allocator> Receiver for Box<T, A> {}
50+
impl<T: ?Sized> LegacyReceiver for &T {}
51+
impl<T: ?Sized> LegacyReceiver for &mut T {}
52+
impl<T: ?Sized, A: Allocator> LegacyReceiver for Box<T, A> {}
5353

5454
#[lang = "copy"]
5555
pub unsafe trait Copy {}

compiler/rustc_hir/src/lang_items.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ language_item_table! {
241241
DerefMut, sym::deref_mut, deref_mut_trait, Target::Trait, GenericRequirement::Exact(0);
242242
DerefPure, sym::deref_pure, deref_pure_trait, Target::Trait, GenericRequirement::Exact(0);
243243
DerefTarget, sym::deref_target, deref_target, Target::AssocTy, GenericRequirement::None;
244-
Receiver, sym::receiver, receiver_trait, Target::Trait, GenericRequirement::None;
244+
LegacyReceiver, sym::legacy_receiver, legacy_receiver_trait, Target::Trait, GenericRequirement::None;
245245

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

compiler/rustc_hir_analysis/src/check/wfcheck.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1801,7 +1801,7 @@ fn receiver_is_valid<'tcx>(
18011801
autoderef = autoderef.include_raw_pointers();
18021802
}
18031803

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

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

compiler/rustc_span/src/symbol.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,7 @@ symbols! {
11331133
lazy_normalization_consts,
11341134
lazy_type_alias,
11351135
le,
1136+
legacy_receiver,
11361137
len,
11371138
let_chains,
11381139
let_else,
@@ -1573,7 +1574,6 @@ symbols! {
15731574
readonly,
15741575
realloc,
15751576
reason,
1576-
receiver,
15771577
recursion_limit,
15781578
reexport_test_harness_main,
15791579
ref_pat_eat_one_layer_2024,

library/alloc/src/boxed.rs

Lines changed: 3 additions & 3 deletions
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, NonNull, Unique};
@@ -2378,8 +2378,8 @@ impl<T: ?Sized, A: Allocator> DerefMut for Box<T, A> {
23782378
#[unstable(feature = "deref_pure_trait", issue = "87121")]
23792379
unsafe impl<T: ?Sized, A: Allocator> DerefPure for Box<T, A> {}
23802380

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

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

library/alloc/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
#![feature(iter_advance_by)]
130130
#![feature(iter_next_chunk)]
131131
#![feature(layout_for_ptr)]
132+
#![feature(legacy_receiver_trait)]
132133
#![feature(local_waker)]
133134
#![feature(maybe_uninit_slice)]
134135
#![feature(maybe_uninit_uninit_array_transpose)]
@@ -138,7 +139,6 @@
138139
#![feature(ptr_internals)]
139140
#![feature(ptr_metadata)]
140141
#![feature(ptr_sub_ptr)]
141-
#![feature(receiver_trait)]
142142
#![feature(set_ptr_value)]
143143
#![feature(sized_type_properties)]
144144
#![feature(slice_from_ptr_range)]

library/alloc/src/rc.rs

Lines changed: 3 additions & 3 deletions
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, ManuallyDrop, align_of_val_raw};
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;
@@ -2222,8 +2222,8 @@ unsafe impl<T: ?Sized, A: Allocator> PinCoerceUnsized for Weak<T, A> {}
22222222
#[unstable(feature = "deref_pure_trait", issue = "87121")]
22232223
unsafe impl<T: ?Sized, A: Allocator> DerefPure for Rc<T, A> {}
22242224

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

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

library/alloc/src/sync.rs

Lines changed: 3 additions & 3 deletions
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, ManuallyDrop, align_of_val_raw};
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};
@@ -2189,8 +2189,8 @@ unsafe impl<T: ?Sized, A: Allocator> PinCoerceUnsized for Weak<T, A> {}
21892189
#[unstable(feature = "deref_pure_trait", issue = "87121")]
21902190
unsafe impl<T: ?Sized, A: Allocator> DerefPure for Arc<T, A> {}
21912191

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

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

library/core/src/ops/deref.rs

Lines changed: 13 additions & 7 deletions
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 {}

0 commit comments

Comments
 (0)