Skip to content

Commit 9040bb1

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 9040bb1

File tree

22 files changed

+70
-64
lines changed

22 files changed

+70
-64
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
@@ -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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

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, 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

Lines changed: 1 addition & 1 deletion
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

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, 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

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, 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

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)