@@ -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