@@ -55,6 +55,9 @@ impl<A: Aliasing, AA: Alignment, V: Validity> Invariants for (A, AA, V) {
55
55
}
56
56
57
57
/// The aliasing invariant of a [`Ptr`][super::Ptr].
58
+ ///
59
+ /// All aliasing invariants must permit reading from the bytes of a pointer's
60
+ /// referent which are not covered by [`UnsafeCell`]s.
58
61
pub trait Aliasing : Sealed {
59
62
/// Is `Self` [`Exclusive`]?
60
63
#[ doc( hidden) ]
@@ -65,9 +68,6 @@ pub trait Aliasing: Sealed {
65
68
/// Aliasing>::Variance<'a, T>` to inherit this variance.
66
69
#[ doc( hidden) ]
67
70
type Variance < ' a , T : ' a + ?Sized > ;
68
-
69
- #[ doc( hidden) ]
70
- type MappedTo < M : AliasingMapping > : Aliasing ;
71
71
}
72
72
73
73
/// The alignment invariant of a [`Ptr`][super::Ptr].
@@ -100,22 +100,6 @@ impl Validity for Unknown {
100
100
type MappedTo < M : ValidityMapping > = M :: FromUnknown ;
101
101
}
102
102
103
- /// The `Ptr<'a, T>` does not permit any reads or writes from or to its referent.
104
- pub enum Inaccessible { }
105
-
106
- impl Aliasing for Inaccessible {
107
- const IS_EXCLUSIVE : bool = false ;
108
-
109
- // SAFETY: Inaccessible `Ptr`s permit neither reads nor writes, and so it
110
- // doesn't matter how long the referent actually lives. Thus, covariance is
111
- // fine (and is chosen because it is maximally permissive). Shared
112
- // references are covariant [1].
113
- //
114
- // [1] https://doc.rust-lang.org/1.81.0/reference/subtyping.html#variance
115
- type Variance < ' a , T : ' a + ?Sized > = & ' a T ;
116
- type MappedTo < M : AliasingMapping > = M :: FromInaccessible ;
117
- }
118
-
119
103
/// The `Ptr<'a, T>` adheres to the aliasing rules of a `&'a T`.
120
104
///
121
105
/// The referent of a shared-aliased `Ptr` may be concurrently referenced by any
@@ -128,7 +112,6 @@ pub enum Shared {}
128
112
impl Aliasing for Shared {
129
113
const IS_EXCLUSIVE : bool = false ;
130
114
type Variance < ' a , T : ' a + ?Sized > = & ' a T ;
131
- type MappedTo < M : AliasingMapping > = M :: FromShared ;
132
115
}
133
116
impl Reference for Shared { }
134
117
@@ -141,7 +124,6 @@ pub enum Exclusive {}
141
124
impl Aliasing for Exclusive {
142
125
const IS_EXCLUSIVE : bool = true ;
143
126
type Variance < ' a , T : ' a + ?Sized > = & ' a mut T ;
144
- type MappedTo < M : AliasingMapping > = M :: FromExclusive ;
145
127
}
146
128
impl Reference for Exclusive { }
147
129
@@ -230,7 +212,7 @@ define_because!(
230
212
pub BecauseImmutable
231
213
) ;
232
214
// SAFETY: `T: Immutable`.
233
- unsafe impl < A : Reference , T : ?Sized + crate :: Immutable > Read < A , BecauseImmutable > for T { }
215
+ unsafe impl < A : Aliasing , T : ?Sized + crate :: Immutable > Read < A , BecauseImmutable > for T { }
234
216
235
217
use sealed:: Sealed ;
236
218
mod sealed {
@@ -240,7 +222,6 @@ mod sealed {
240
222
241
223
impl Sealed for Unknown { }
242
224
243
- impl Sealed for Inaccessible { }
244
225
impl Sealed for Shared { }
245
226
impl Sealed for Exclusive { }
246
227
@@ -257,23 +238,6 @@ pub use mapping::*;
257
238
mod mapping {
258
239
use super :: * ;
259
240
260
- /// A mapping from one [`Aliasing`] type to another.
261
- ///
262
- /// An `AliasingMapping` is a type-level map which maps one `Aliasing` type
263
- /// to another. It is always "total" in the sense of having a mapping for
264
- /// any `A: Aliasing`.
265
- ///
266
- /// Given `A: Aliasing` and `M: AliasingMapping`, `M` can be applied to `A`
267
- /// as [`MappedAliasing<A, M>`](MappedAliasing).
268
- ///
269
- /// Mappings are used by [`Ptr`](crate::Ptr) conversion methods to preserve
270
- /// or modify invariants as required by each method's semantics.
271
- pub trait AliasingMapping {
272
- type FromInaccessible : Aliasing ;
273
- type FromShared : Aliasing ;
274
- type FromExclusive : Aliasing ;
275
- }
276
-
277
241
/// A mapping from one [`Alignment`] type to another.
278
242
///
279
243
/// An `AlignmentMapping` is a type-level map which maps one `Alignment`
@@ -308,10 +272,6 @@ mod mapping {
308
272
type FromValid : Validity ;
309
273
}
310
274
311
- /// The application of the [`AliasingMapping`] `M` to the [`Aliasing`] `A`.
312
- #[ allow( type_alias_bounds) ]
313
- pub type MappedAliasing < A : Aliasing , M : AliasingMapping > = A :: MappedTo < M > ;
314
-
315
275
/// The application of the [`AlignmentMapping`] `M` to the [`Alignment`] `A`.
316
276
#[ allow( type_alias_bounds) ]
317
277
pub type MappedAlignment < A : Alignment , M : AlignmentMapping > = A :: MappedTo < M > ;
@@ -320,14 +280,6 @@ mod mapping {
320
280
#[ allow( type_alias_bounds) ]
321
281
pub type MappedValidity < V : Validity , M : ValidityMapping > = V :: MappedTo < M > ;
322
282
323
- impl < FromInaccessible : Aliasing , FromShared : Aliasing , FromExclusive : Aliasing > AliasingMapping
324
- for ( ( Inaccessible , FromInaccessible ) , ( Shared , FromShared ) , ( Exclusive , FromExclusive ) )
325
- {
326
- type FromInaccessible = FromInaccessible ;
327
- type FromShared = FromShared ;
328
- type FromExclusive = FromExclusive ;
329
- }
330
-
331
283
impl < FromUnknown : Alignment , FromAligned : Alignment > AlignmentMapping
332
284
for ( ( Unknown , FromUnknown ) , ( Shared , FromAligned ) )
333
285
{
0 commit comments