@@ -19,8 +19,14 @@ unsafe extern "C" fn _Unwind_Resume() {
19
19
intrinsics:: unreachable ( ) ;
20
20
}
21
21
22
+ #[ lang = "pointee_sized" ]
23
+ pub trait PointeeSized { }
24
+
25
+ #[ lang = "meta_sized" ]
26
+ pub trait MetaSized : PointeeSized { }
27
+
22
28
#[ lang = "sized" ]
23
- pub trait Sized { }
29
+ pub trait Sized : MetaSized { }
24
30
25
31
#[ lang = "destruct" ]
26
32
pub trait Destruct { }
@@ -29,35 +35,35 @@ pub trait Destruct {}
29
35
pub trait Tuple { }
30
36
31
37
#[ lang = "unsize" ]
32
- pub trait Unsize < T : ? Sized > { }
38
+ pub trait Unsize < T : PointeeSized > : PointeeSized { }
33
39
34
40
#[ lang = "coerce_unsized" ]
35
41
pub trait CoerceUnsized < T > { }
36
42
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 { }
41
47
42
48
#[ lang = "dispatch_from_dyn" ]
43
49
pub trait DispatchFromDyn < T > { }
44
50
45
51
// &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 { }
47
53
// &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 { }
49
55
// *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 { }
51
57
// *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 , ( ) > { }
54
60
55
61
#[ lang = "legacy_receiver" ]
56
62
pub trait LegacyReceiver { }
57
63
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 > { }
61
67
62
68
#[ lang = "receiver" ]
63
69
trait Receiver { }
@@ -84,9 +90,9 @@ impl Copy for i128 {}
84
90
impl Copy for f32 { }
85
91
impl Copy for f64 { }
86
92
impl 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 { }
90
96
91
97
#[ lang = "sync" ]
92
98
pub unsafe trait Sync { }
@@ -102,17 +108,17 @@ unsafe impl Sync for i16 {}
102
108
unsafe impl Sync for i32 { }
103
109
unsafe impl Sync for isize { }
104
110
unsafe impl Sync for char { }
105
- unsafe impl < ' a , T : ? Sized > Sync for & ' a T { }
111
+ unsafe impl < ' a , T : PointeeSized > Sync for & ' a T { }
106
112
unsafe impl Sync for [ u8 ; 16 ] { }
107
113
108
114
#[ lang = "freeze" ]
109
115
unsafe auto trait Freeze { }
110
116
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 { }
116
122
117
123
#[ lang = "structural_peq" ]
118
124
pub trait StructuralPartialEq { }
@@ -456,7 +462,7 @@ pub enum Option<T> {
456
462
pub use Option :: * ;
457
463
458
464
#[ lang = "phantom_data" ]
459
- pub struct PhantomData < T : ? Sized > ;
465
+ pub struct PhantomData < T : PointeeSized > ;
460
466
461
467
#[ lang = "fn_once" ]
462
468
#[ rustc_paren_sugar]
@@ -576,18 +582,18 @@ impl Allocator for Global {}
576
582
#[ repr( transparent) ]
577
583
#[ rustc_layout_scalar_valid_range_start( 1 ) ]
578
584
#[ rustc_nonnull_optimization_guaranteed]
579
- pub struct NonNull < T : ? Sized > ( pub * const T ) ;
585
+ pub struct NonNull < T : PointeeSized > ( pub * const T ) ;
580
586
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 > { }
583
589
584
- pub struct Unique < T : ? Sized > {
590
+ pub struct Unique < T : PointeeSized > {
585
591
pub pointer : NonNull < T > ,
586
592
pub _marker : PhantomData < T > ,
587
593
}
588
594
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 > { }
591
597
592
598
#[ lang = "owned_box" ]
593
599
pub struct Box < T : ?Sized , A : Allocator = Global > ( Unique < T > , A ) ;
0 commit comments