@@ -55,6 +55,9 @@ impl<A: Aliasing, AA: Alignment, V: Validity> Invariants for (A, AA, V) {
5555}
5656
5757/// 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.
5861pub trait Aliasing : Sealed {
5962 /// Is `Self` [`Exclusive`]?
6063 #[ doc( hidden) ]
@@ -65,9 +68,6 @@ pub trait Aliasing: Sealed {
6568 /// Aliasing>::Variance<'a, T>` to inherit this variance.
6669 #[ doc( hidden) ]
6770 type Variance < ' a , T : ' a + ?Sized > ;
68-
69- #[ doc( hidden) ]
70- type MappedTo < M : AliasingMapping > : Aliasing ;
7171}
7272
7373/// The alignment invariant of a [`Ptr`][super::Ptr].
@@ -100,22 +100,6 @@ impl Validity for Unknown {
100100 type MappedTo < M : ValidityMapping > = M :: FromUnknown ;
101101}
102102
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-
119103/// The `Ptr<'a, T>` adheres to the aliasing rules of a `&'a T`.
120104///
121105/// The referent of a shared-aliased `Ptr` may be concurrently referenced by any
@@ -128,7 +112,6 @@ pub enum Shared {}
128112impl Aliasing for Shared {
129113 const IS_EXCLUSIVE : bool = false ;
130114 type Variance < ' a , T : ' a + ?Sized > = & ' a T ;
131- type MappedTo < M : AliasingMapping > = M :: FromShared ;
132115}
133116impl Reference for Shared { }
134117
@@ -141,7 +124,6 @@ pub enum Exclusive {}
141124impl Aliasing for Exclusive {
142125 const IS_EXCLUSIVE : bool = true ;
143126 type Variance < ' a , T : ' a + ?Sized > = & ' a mut T ;
144- type MappedTo < M : AliasingMapping > = M :: FromExclusive ;
145127}
146128impl Reference for Exclusive { }
147129
@@ -230,7 +212,7 @@ define_because!(
230212 pub BecauseImmutable
231213) ;
232214// 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 { }
234216
235217use sealed:: Sealed ;
236218mod sealed {
@@ -240,7 +222,6 @@ mod sealed {
240222
241223 impl Sealed for Unknown { }
242224
243- impl Sealed for Inaccessible { }
244225 impl Sealed for Shared { }
245226 impl Sealed for Exclusive { }
246227
@@ -257,23 +238,6 @@ pub use mapping::*;
257238mod mapping {
258239 use super :: * ;
259240
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-
277241 /// A mapping from one [`Alignment`] type to another.
278242 ///
279243 /// An `AlignmentMapping` is a type-level map which maps one `Alignment`
@@ -308,10 +272,6 @@ mod mapping {
308272 type FromValid : Validity ;
309273 }
310274
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-
315275 /// The application of the [`AlignmentMapping`] `M` to the [`Alignment`] `A`.
316276 #[ allow( type_alias_bounds) ]
317277 pub type MappedAlignment < A : Alignment , M : AlignmentMapping > = A :: MappedTo < M > ;
@@ -320,14 +280,6 @@ mod mapping {
320280 #[ allow( type_alias_bounds) ]
321281 pub type MappedValidity < V : Validity , M : ValidityMapping > = V :: MappedTo < M > ;
322282
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-
331283 impl < FromUnknown : Alignment , FromAligned : Alignment > AlignmentMapping
332284 for ( ( Unknown , FromUnknown ) , ( Shared , FromAligned ) )
333285 {
0 commit comments