1414#![ no_core]
1515#![ allow( dead_code, internal_features, ambiguous_wide_pointer_comparisons) ]
1616
17+ #[ lang = "pointee_sized" ]
18+ pub trait PointeeSized { }
19+
20+ #[ lang = "meta_sized" ]
21+ pub trait MetaSized : PointeeSized { }
22+
1723#[ lang = "sized" ]
18- pub trait Sized { }
24+ pub trait Sized : MetaSized { }
1925
2026#[ lang = "destruct" ]
2127pub trait Destruct { }
@@ -24,35 +30,35 @@ pub trait Destruct {}
2430pub trait Tuple { }
2531
2632#[ lang = "unsize" ]
27- pub trait Unsize < T : ? Sized > { }
33+ pub trait Unsize < T : PointeeSized > : PointeeSized { }
2834
2935#[ lang = "coerce_unsized" ]
3036pub trait CoerceUnsized < T > { }
3137
32- impl < ' a , ' b : ' a , T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < & ' a U > for & ' b T { }
33- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < & ' a mut U > for & ' a mut T { }
34- impl < T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < * const U > for * const T { }
35- impl < T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < * mut U > for * mut T { }
38+ impl < ' a , ' b : ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < & ' a U > for & ' b T { }
39+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < & ' a mut U > for & ' a mut T { }
40+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < * const U > for * const T { }
41+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < * mut U > for * mut T { }
3642
3743#[ lang = "dispatch_from_dyn" ]
3844pub trait DispatchFromDyn < T > { }
3945
4046// &T -> &U
41- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < & ' a U > for & ' a T { }
47+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < & ' a U > for & ' a T { }
4248// &mut T -> &mut U
43- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < & ' a mut U > for & ' a mut T { }
49+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < & ' a mut U > for & ' a mut T { }
4450// *const T -> *const U
45- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < * const U > for * const T { }
51+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < * const U > for * const T { }
4652// *mut T -> *mut U
47- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < * mut U > for * mut T { }
48- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < Box < U > > for Box < T > { }
53+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < * mut U > for * mut T { }
54+ impl < T : MetaSized + Unsize < U > , U : MetaSized > DispatchFromDyn < Box < U > > for Box < T > { }
4955
5056#[ lang = "legacy_receiver" ]
5157pub trait LegacyReceiver { }
5258
53- impl < T : ? Sized > LegacyReceiver for & T { }
54- impl < T : ? Sized > LegacyReceiver for & mut T { }
55- impl < T : ? Sized > LegacyReceiver for Box < T > { }
59+ impl < T : PointeeSized > LegacyReceiver for & T { }
60+ impl < T : PointeeSized > LegacyReceiver for & mut T { }
61+ impl < T : MetaSized > LegacyReceiver for Box < T > { }
5662
5763#[ lang = "copy" ]
5864pub trait Copy { }
@@ -74,9 +80,9 @@ impl Copy for isize {}
7480impl Copy for f32 { }
7581impl Copy for f64 { }
7682impl Copy for char { }
77- impl < ' a , T : ? Sized > Copy for & ' a T { }
78- impl < T : ? Sized > Copy for * const T { }
79- impl < T : ? Sized > Copy for * mut T { }
83+ impl < ' a , T : PointeeSized > Copy for & ' a T { }
84+ impl < T : PointeeSized > Copy for * const T { }
85+ impl < T : PointeeSized > Copy for * mut T { }
8086impl < T : Copy > Copy for Option < T > { }
8187
8288#[ lang = "sync" ]
@@ -94,17 +100,17 @@ unsafe impl Sync for i32 {}
94100unsafe impl Sync for isize { }
95101unsafe impl Sync for char { }
96102unsafe impl Sync for f32 { }
97- unsafe impl < ' a , T : ? Sized > Sync for & ' a T { }
103+ unsafe impl < ' a , T : PointeeSized > Sync for & ' a T { }
98104unsafe impl < T : Sync , const N : usize > Sync for [ T ; N ] { }
99105
100106#[ lang = "freeze" ]
101107unsafe auto trait Freeze { }
102108
103- unsafe impl < T : ? Sized > Freeze for PhantomData < T > { }
104- unsafe impl < T : ? Sized > Freeze for * const T { }
105- unsafe impl < T : ? Sized > Freeze for * mut T { }
106- unsafe impl < T : ? Sized > Freeze for & T { }
107- unsafe impl < T : ? Sized > Freeze for & mut T { }
109+ unsafe impl < T : PointeeSized > Freeze for PhantomData < T > { }
110+ unsafe impl < T : PointeeSized > Freeze for * const T { }
111+ unsafe impl < T : PointeeSized > Freeze for * mut T { }
112+ unsafe impl < T : PointeeSized > Freeze for & T { }
113+ unsafe impl < T : PointeeSized > Freeze for & mut T { }
108114
109115#[ lang = "structural_peq" ]
110116pub trait StructuralPartialEq { }
@@ -443,7 +449,7 @@ pub enum Option<T> {
443449pub use Option :: * ;
444450
445451#[ lang = "phantom_data" ]
446- pub struct PhantomData < T : ? Sized > ;
452+ pub struct PhantomData < T : PointeeSized > ;
447453
448454#[ lang = "fn_once" ]
449455#[ rustc_paren_sugar]
@@ -564,18 +570,18 @@ pub trait Deref {
564570#[ repr( transparent) ]
565571#[ rustc_layout_scalar_valid_range_start( 1 ) ]
566572#[ rustc_nonnull_optimization_guaranteed]
567- pub struct NonNull < T : ? Sized > ( pub * const T ) ;
573+ pub struct NonNull < T : PointeeSized > ( pub * const T ) ;
568574
569- impl < T : ? Sized , U : ? Sized > CoerceUnsized < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
570- impl < T : ? Sized , U : ? Sized > DispatchFromDyn < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
575+ impl < T : PointeeSized , U : PointeeSized > CoerceUnsized < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
576+ impl < T : PointeeSized , U : PointeeSized > DispatchFromDyn < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
571577
572- pub struct Unique < T : ? Sized > {
578+ pub struct Unique < T : PointeeSized > {
573579 pub pointer : NonNull < T > ,
574580 pub _marker : PhantomData < T > ,
575581}
576582
577- impl < T : ? Sized , U : ? Sized > CoerceUnsized < Unique < U > > for Unique < T > where T : Unsize < U > { }
578- impl < T : ? Sized , U : ? Sized > DispatchFromDyn < Unique < U > > for Unique < T > where T : Unsize < U > { }
583+ impl < T : PointeeSized , U : PointeeSized > CoerceUnsized < Unique < U > > for Unique < T > where T : Unsize < U > { }
584+ impl < T : PointeeSized , U : PointeeSized > DispatchFromDyn < Unique < U > > for Unique < T > where T : Unsize < U > { }
579585
580586#[ lang = "global_alloc_ty" ]
581587pub struct Global ;
0 commit comments