@@ -19,8 +19,14 @@ unsafe extern "C" fn _Unwind_Resume() {
1919 intrinsics:: unreachable ( ) ;
2020}
2121
22+ #[ lang = "pointee_sized" ]
23+ pub trait PointeeSized { }
24+
25+ #[ lang = "meta_sized" ]
26+ pub trait MetaSized : PointeeSized { }
27+
2228#[ lang = "sized" ]
23- pub trait Sized { }
29+ pub trait Sized : MetaSized { }
2430
2531#[ lang = "destruct" ]
2632pub trait Destruct { }
@@ -29,35 +35,35 @@ pub trait Destruct {}
2935pub trait Tuple { }
3036
3137#[ lang = "unsize" ]
32- pub trait Unsize < T : ? Sized > { }
38+ pub trait Unsize < T : PointeeSized > : PointeeSized { }
3339
3440#[ lang = "coerce_unsized" ]
3541pub trait CoerceUnsized < T > { }
3642
37- impl < ' a , ' b : ' a , T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < & ' a U > for & ' b T { }
38- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < & ' a mut U > for & ' a mut T { }
39- impl < T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < * const U > for * const T { }
40- impl < T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < * mut U > for * mut T { }
43+ impl < ' a , ' b : ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < & ' a U > for & ' b T { }
44+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < & ' a mut U > for & ' a mut T { }
45+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < * const U > for * const T { }
46+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < * mut U > for * mut T { }
4147
4248#[ lang = "dispatch_from_dyn" ]
4349pub trait DispatchFromDyn < T > { }
4450
4551// &T -> &U
46- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < & ' a U > for & ' a T { }
52+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < & ' a U > for & ' a T { }
4753// &mut T -> &mut U
48- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < & ' a mut U > for & ' a mut T { }
54+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < & ' a mut U > for & ' a mut T { }
4955// *const T -> *const U
50- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < * const U > for * const T { }
56+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < * const U > for * const T { }
5157// *mut T -> *mut U
52- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < * mut U > for * mut T { }
53- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < Box < U , ( ) > > for Box < T , ( ) > { }
58+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < * mut U > for * mut T { }
59+ impl < T : MetaSized + Unsize < U > , U : MetaSized > DispatchFromDyn < Box < U , ( ) > > for Box < T , ( ) > { }
5460
5561#[ lang = "legacy_receiver" ]
5662pub trait LegacyReceiver { }
5763
58- impl < T : ? Sized > LegacyReceiver for & T { }
59- impl < T : ? Sized > LegacyReceiver for & mut T { }
60- impl < T : ? Sized , A : Allocator > LegacyReceiver for Box < T , A > { }
64+ impl < T : PointeeSized > LegacyReceiver for & T { }
65+ impl < T : PointeeSized > LegacyReceiver for & mut T { }
66+ impl < T : MetaSized > LegacyReceiver for Box < T > { }
6167
6268#[ lang = "receiver" ]
6369trait Receiver { }
@@ -84,9 +90,9 @@ impl Copy for i128 {}
8490impl Copy for f32 { }
8591impl Copy for f64 { }
8692impl Copy for char { }
87- impl < ' a , T : ? Sized > Copy for & ' a T { }
88- impl < T : ? Sized > Copy for * const T { }
89- impl < T : ? Sized > Copy for * mut T { }
93+ impl < ' a , T : PointeeSized > Copy for & ' a T { }
94+ impl < T : PointeeSized > Copy for * const T { }
95+ impl < T : PointeeSized > Copy for * mut T { }
9096
9197#[ lang = "sync" ]
9298pub unsafe trait Sync { }
@@ -102,17 +108,17 @@ unsafe impl Sync for i16 {}
102108unsafe impl Sync for i32 { }
103109unsafe impl Sync for isize { }
104110unsafe impl Sync for char { }
105- unsafe impl < ' a , T : ? Sized > Sync for & ' a T { }
111+ unsafe impl < ' a , T : PointeeSized > Sync for & ' a T { }
106112unsafe impl Sync for [ u8 ; 16 ] { }
107113
108114#[ lang = "freeze" ]
109115unsafe auto trait Freeze { }
110116
111- unsafe impl < T : ? Sized > Freeze for PhantomData < T > { }
112- unsafe impl < T : ? Sized > Freeze for * const T { }
113- unsafe impl < T : ? Sized > Freeze for * mut T { }
114- unsafe impl < T : ? Sized > Freeze for & T { }
115- unsafe impl < T : ? Sized > Freeze for & mut T { }
117+ unsafe impl < T : PointeeSized > Freeze for PhantomData < T > { }
118+ unsafe impl < T : PointeeSized > Freeze for * const T { }
119+ unsafe impl < T : PointeeSized > Freeze for * mut T { }
120+ unsafe impl < T : PointeeSized > Freeze for & T { }
121+ unsafe impl < T : PointeeSized > Freeze for & mut T { }
116122
117123#[ lang = "structural_peq" ]
118124pub trait StructuralPartialEq { }
@@ -456,7 +462,7 @@ pub enum Option<T> {
456462pub use Option :: * ;
457463
458464#[ lang = "phantom_data" ]
459- pub struct PhantomData < T : ? Sized > ;
465+ pub struct PhantomData < T : PointeeSized > ;
460466
461467#[ lang = "fn_once" ]
462468#[ rustc_paren_sugar]
@@ -576,18 +582,18 @@ impl Allocator for Global {}
576582#[ repr( transparent) ]
577583#[ rustc_layout_scalar_valid_range_start( 1 ) ]
578584#[ rustc_nonnull_optimization_guaranteed]
579- pub struct NonNull < T : ? Sized > ( pub * const T ) ;
585+ pub struct NonNull < T : PointeeSized > ( pub * const T ) ;
580586
581- impl < T : ? Sized , U : ? Sized > CoerceUnsized < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
582- impl < T : ? Sized , U : ? Sized > DispatchFromDyn < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
587+ impl < T : PointeeSized , U : PointeeSized > CoerceUnsized < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
588+ impl < T : PointeeSized , U : PointeeSized > DispatchFromDyn < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
583589
584- pub struct Unique < T : ? Sized > {
590+ pub struct Unique < T : PointeeSized > {
585591 pub pointer : NonNull < T > ,
586592 pub _marker : PhantomData < T > ,
587593}
588594
589- impl < T : ? Sized , U : ? Sized > CoerceUnsized < Unique < U > > for Unique < T > where T : Unsize < U > { }
590- impl < T : ? Sized , U : ? Sized > DispatchFromDyn < Unique < U > > for Unique < T > where T : Unsize < U > { }
595+ impl < T : PointeeSized , U : PointeeSized > CoerceUnsized < Unique < U > > for Unique < T > where T : Unsize < U > { }
596+ impl < T : PointeeSized , U : PointeeSized > DispatchFromDyn < Unique < U > > for Unique < T > where T : Unsize < U > { }
591597
592598#[ lang = "owned_box" ]
593599pub struct Box < T : ?Sized , A : Allocator = Global > ( Unique < T > , A ) ;
0 commit comments