11#![ feature(
22 no_core, lang_items, intrinsics, unboxed_closures, extern_types,
33 decl_macro, rustc_attrs, transparent_unions, auto_traits, freeze_impls,
4- thread_local
4+ thread_local, const_trait_impl
55) ]
66#![ no_core]
77#![ allow( dead_code, internal_features, ambiguous_wide_pointer_comparisons) ]
@@ -11,8 +11,16 @@ unsafe extern "C" fn _Unwind_Resume() {
1111 intrinsics:: unreachable ( ) ;
1212}
1313
14+ #[ lang = "pointeesized" ]
15+ pub trait PointeeSized { }
16+
17+ #[ lang = "metasized" ]
18+ #[ const_trait]
19+ pub trait MetaSized : PointeeSized { }
20+
1421#[ lang = "sized" ]
15- pub trait Sized { }
22+ #[ const_trait]
23+ pub trait Sized : MetaSized { }
1624
1725#[ lang = "destruct" ]
1826pub trait Destruct { }
@@ -21,35 +29,35 @@ pub trait Destruct {}
2129pub trait Tuple { }
2230
2331#[ lang = "unsize" ]
24- pub trait Unsize < T : ? Sized > { }
32+ pub trait Unsize < T : PointeeSized > : PointeeSized { }
2533
2634#[ lang = "coerce_unsized" ]
2735pub trait CoerceUnsized < T > { }
2836
29- impl < ' a , ' b : ' a , T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < & ' a U > for & ' b T { }
30- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < & ' a mut U > for & ' a mut T { }
31- impl < T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < * const U > for * const T { }
32- impl < T : ? Sized + Unsize < U > , U : ? Sized > CoerceUnsized < * mut U > for * mut T { }
37+ impl < ' a , ' b : ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < & ' a U > for & ' b T { }
38+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < & ' a mut U > for & ' a mut T { }
39+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < * const U > for * const T { }
40+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > CoerceUnsized < * mut U > for * mut T { }
3341
3442#[ lang = "dispatch_from_dyn" ]
3543pub trait DispatchFromDyn < T > { }
3644
3745// &T -> &U
38- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < & ' a U > for & ' a T { }
46+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < & ' a U > for & ' a T { }
3947// &mut T -> &mut U
40- impl < ' a , T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < & ' a mut U > for & ' a mut T { }
48+ impl < ' a , T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < & ' a mut U > for & ' a mut T { }
4149// *const T -> *const U
42- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < * const U > for * const T { }
50+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < * const U > for * const T { }
4351// *mut T -> *mut U
44- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < * mut U > for * mut T { }
45- impl < T : ? Sized + Unsize < U > , U : ? Sized > DispatchFromDyn < Box < U , ( ) > > for Box < T , ( ) > { }
52+ impl < T : PointeeSized + Unsize < U > , U : PointeeSized > DispatchFromDyn < * mut U > for * mut T { }
53+ impl < T : MetaSized + Unsize < U > , U : MetaSized > DispatchFromDyn < Box < U , ( ) > > for Box < T , ( ) > { }
4654
4755#[ lang = "legacy_receiver" ]
4856pub trait LegacyReceiver { }
4957
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 > { }
58+ impl < T : PointeeSized > LegacyReceiver for & T { }
59+ impl < T : PointeeSized > LegacyReceiver for & mut T { }
60+ impl < T : MetaSized > LegacyReceiver for Box < T > { }
5361
5462#[ lang = "copy" ]
5563pub trait Copy { }
@@ -70,9 +78,9 @@ impl Copy for isize {}
7078impl Copy for f32 { }
7179impl Copy for f64 { }
7280impl Copy for char { }
73- impl < ' a , T : ? Sized > Copy for & ' a T { }
74- impl < T : ? Sized > Copy for * const T { }
75- impl < T : ? Sized > Copy for * mut T { }
81+ impl < ' a , T : PointeeSized > Copy for & ' a T { }
82+ impl < T : PointeeSized > Copy for * const T { }
83+ impl < T : PointeeSized > Copy for * mut T { }
7684
7785#[ lang = "sync" ]
7886pub unsafe trait Sync { }
@@ -88,17 +96,17 @@ unsafe impl Sync for i16 {}
8896unsafe impl Sync for i32 { }
8997unsafe impl Sync for isize { }
9098unsafe impl Sync for char { }
91- unsafe impl < ' a , T : ? Sized > Sync for & ' a T { }
99+ unsafe impl < ' a , T : PointeeSized > Sync for & ' a T { }
92100unsafe impl Sync for [ u8 ; 16 ] { }
93101
94102#[ lang = "freeze" ]
95103unsafe auto trait Freeze { }
96104
97- unsafe impl < T : ? Sized > Freeze for PhantomData < T > { }
98- unsafe impl < T : ? Sized > Freeze for * const T { }
99- unsafe impl < T : ? Sized > Freeze for * mut T { }
100- unsafe impl < T : ? Sized > Freeze for & T { }
101- unsafe impl < T : ? Sized > Freeze for & mut T { }
105+ unsafe impl < T : PointeeSized > Freeze for PhantomData < T > { }
106+ unsafe impl < T : PointeeSized > Freeze for * const T { }
107+ unsafe impl < T : PointeeSized > Freeze for * mut T { }
108+ unsafe impl < T : PointeeSized > Freeze for & T { }
109+ unsafe impl < T : PointeeSized > Freeze for & mut T { }
102110
103111#[ lang = "structural_peq" ]
104112pub trait StructuralPartialEq { }
@@ -403,7 +411,7 @@ pub enum Option<T> {
403411pub use Option :: * ;
404412
405413#[ lang = "phantom_data" ]
406- pub struct PhantomData < T : ? Sized > ;
414+ pub struct PhantomData < T : PointeeSized > ;
407415
408416#[ lang = "fn_once" ]
409417#[ rustc_paren_sugar]
@@ -520,18 +528,18 @@ impl Allocator for Global {}
520528#[ repr( transparent) ]
521529#[ rustc_layout_scalar_valid_range_start( 1 ) ]
522530#[ rustc_nonnull_optimization_guaranteed]
523- pub struct NonNull < T : ? Sized > ( pub * const T ) ;
531+ pub struct NonNull < T : PointeeSized > ( pub * const T ) ;
524532
525- impl < T : ? Sized , U : ? Sized > CoerceUnsized < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
526- impl < T : ? Sized , U : ? Sized > DispatchFromDyn < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
533+ impl < T : PointeeSized , U : PointeeSized > CoerceUnsized < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
534+ impl < T : PointeeSized , U : PointeeSized > DispatchFromDyn < NonNull < U > > for NonNull < T > where T : Unsize < U > { }
527535
528- pub struct Unique < T : ? Sized > {
536+ pub struct Unique < T : PointeeSized > {
529537 pub pointer : NonNull < T > ,
530538 pub _marker : PhantomData < T > ,
531539}
532540
533- impl < T : ? Sized , U : ? Sized > CoerceUnsized < Unique < U > > for Unique < T > where T : Unsize < U > { }
534- impl < T : ? Sized , U : ? Sized > DispatchFromDyn < Unique < U > > for Unique < T > where T : Unsize < U > { }
541+ impl < T : PointeeSized , U : PointeeSized > CoerceUnsized < Unique < U > > for Unique < T > where T : Unsize < U > { }
542+ impl < T : PointeeSized , U : PointeeSized > DispatchFromDyn < Unique < U > > for Unique < T > where T : Unsize < U > { }
535543
536544#[ lang = "owned_box" ]
537545pub struct Box < T : ?Sized , A : Allocator = Global > ( Unique < T > , A ) ;
0 commit comments