1
1
#![ feature(
2
2
no_core, lang_items, intrinsics, unboxed_closures, extern_types,
3
3
decl_macro, rustc_attrs, transparent_unions, auto_traits, freeze_impls,
4
- thread_local
4
+ thread_local, const_trait_impl
5
5
) ]
6
6
#![ no_core]
7
7
#![ allow( dead_code, internal_features, ambiguous_wide_pointer_comparisons) ]
@@ -11,8 +11,16 @@ unsafe extern "C" fn _Unwind_Resume() {
11
11
intrinsics:: unreachable ( ) ;
12
12
}
13
13
14
+ #[ lang = "pointeesized" ]
15
+ pub trait PointeeSized { }
16
+
17
+ #[ lang = "metasized" ]
18
+ #[ const_trait]
19
+ pub trait MetaSized : PointeeSized { }
20
+
14
21
#[ lang = "sized" ]
15
- pub trait Sized { }
22
+ #[ const_trait]
23
+ pub trait Sized : MetaSized { }
16
24
17
25
#[ lang = "destruct" ]
18
26
pub trait Destruct { }
@@ -21,35 +29,35 @@ pub trait Destruct {}
21
29
pub trait Tuple { }
22
30
23
31
#[ lang = "unsize" ]
24
- pub trait Unsize < T : ? Sized > { }
32
+ pub trait Unsize < T : PointeeSized > : PointeeSized { }
25
33
26
34
#[ lang = "coerce_unsized" ]
27
35
pub trait CoerceUnsized < T > { }
28
36
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 { }
33
41
34
42
#[ lang = "dispatch_from_dyn" ]
35
43
pub trait DispatchFromDyn < T > { }
36
44
37
45
// &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 { }
39
47
// &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 { }
41
49
// *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 { }
43
51
// *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 , ( ) > { }
46
54
47
55
#[ lang = "legacy_receiver" ]
48
56
pub trait LegacyReceiver { }
49
57
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 > { }
53
61
54
62
#[ lang = "copy" ]
55
63
pub trait Copy { }
@@ -70,9 +78,9 @@ impl Copy for isize {}
70
78
impl Copy for f32 { }
71
79
impl Copy for f64 { }
72
80
impl 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 { }
76
84
77
85
#[ lang = "sync" ]
78
86
pub unsafe trait Sync { }
@@ -88,17 +96,17 @@ unsafe impl Sync for i16 {}
88
96
unsafe impl Sync for i32 { }
89
97
unsafe impl Sync for isize { }
90
98
unsafe impl Sync for char { }
91
- unsafe impl < ' a , T : ? Sized > Sync for & ' a T { }
99
+ unsafe impl < ' a , T : PointeeSized > Sync for & ' a T { }
92
100
unsafe impl Sync for [ u8 ; 16 ] { }
93
101
94
102
#[ lang = "freeze" ]
95
103
unsafe auto trait Freeze { }
96
104
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 { }
102
110
103
111
#[ lang = "structural_peq" ]
104
112
pub trait StructuralPartialEq { }
@@ -403,7 +411,7 @@ pub enum Option<T> {
403
411
pub use Option :: * ;
404
412
405
413
#[ lang = "phantom_data" ]
406
- pub struct PhantomData < T : ? Sized > ;
414
+ pub struct PhantomData < T : PointeeSized > ;
407
415
408
416
#[ lang = "fn_once" ]
409
417
#[ rustc_paren_sugar]
@@ -520,18 +528,18 @@ impl Allocator for Global {}
520
528
#[ repr( transparent) ]
521
529
#[ rustc_layout_scalar_valid_range_start( 1 ) ]
522
530
#[ rustc_nonnull_optimization_guaranteed]
523
- pub struct NonNull < T : ? Sized > ( pub * const T ) ;
531
+ pub struct NonNull < T : PointeeSized > ( pub * const T ) ;
524
532
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 > { }
527
535
528
- pub struct Unique < T : ? Sized > {
536
+ pub struct Unique < T : PointeeSized > {
529
537
pub pointer : NonNull < T > ,
530
538
pub _marker : PhantomData < T > ,
531
539
}
532
540
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 > { }
535
543
536
544
#[ lang = "owned_box" ]
537
545
pub struct Box < T : ?Sized , A : Allocator = Global > ( Unique < T > , A ) ;
0 commit comments