@@ -100,32 +100,14 @@ safety_comment! {
100100 unsafe_impl!( bool : Immutable , FromZeros , IntoBytes , Unaligned ) ;
101101 assert_unaligned!( bool ) ;
102102 /// SAFETY:
103- /// - The safety requirements for `unsafe_impl!` with an `is_bit_valid`
104- /// closure:
105- /// - Given `t: *mut bool` and `let r = *mut u8`, `r` refers to an object
106- /// of the same size as that referred to by `t`. This is true because
107- /// `bool` and `u8` have the same size (1 byte) [1]. Neither `r` nor `t`
108- /// contain `UnsafeCell`s because neither `bool` nor `u8` do [3].
109- /// - The impl must only return `true` for its argument if the original
110- /// `Maybe<bool>` refers to a valid `bool`. We only return true if the
111- /// `u8` value is 0 or 1, and both of these are valid values for `bool`.
112- /// [2]
103+ /// The impl must only return `true` for its argument if the original
104+ /// `Maybe<bool>` refers to a valid `bool`. We only return true if the `u8`
105+ /// value is 0 or 1, and both of these are valid values for `bool` [1].
113106 ///
114- /// [1] Per https://doc.rust-lang.org/1.81.0/reference/type-layout.html#primitive-data-layout:
115- ///
116- /// The size of most primitives is given in this table.
117- ///
118- /// | Type | `size_of::<Type>() ` |
119- /// |-----------|----------------------|
120- /// | `bool` | 1 |
121- /// | `u8`/`i8` | 1 |
122- ///
123- /// [2] Per https://doc.rust-lang.org/1.81.0/reference/types/boolean.html:
107+ /// [1] Per https://doc.rust-lang.org/1.81.0/reference/types/boolean.html:
124108 ///
125109 /// The value false has the bit pattern 0x00 and the value true has the
126110 /// bit pattern 0x01.
127- ///
128- /// [3] TODO(#429): Justify this claim.
129111 unsafe_impl!( => TryFromBytes for bool ; |byte| {
130112 let byte = byte. transmute:: <u8 , invariant:: Valid , _>( ) ;
131113 * byte. unaligned_as_ref( ) < 2
@@ -148,27 +130,14 @@ safety_comment! {
148130 /// [1] https://doc.rust-lang.org/1.81.0/reference/types/textual.html
149131 unsafe_impl!( char : Immutable , FromZeros , IntoBytes ) ;
150132 /// SAFETY:
151- /// - The safety requirements for `unsafe_impl!` with an `is_bit_valid`
152- /// closure:
153- /// - Given `t: *mut char` and `let r = *mut u32`, `r` refers to an object
154- /// of the same size as that referred to by `t`. This is true because
155- /// `char` and `u32` have the same size [1]. Neither `r` nor `t` contain
156- /// `UnsafeCell`s because neither `char` nor `u32` do [3].
157- /// - The impl must only return `true` for its argument if the original
158- /// `Maybe<char>` refers to a valid `char`. `char::from_u32` guarantees
159- /// that it returns `None` if its input is not a valid `char`. [2]
133+ /// The impl must only return `true` for its argument if the original
134+ /// `Maybe<char>` refers to a valid `char`. `char::from_u32` guarantees that
135+ /// it returns `None` if its input is not a valid `char` [1].
160136 ///
161- /// [1] Per https://doc.rust-lang.org/nightly/reference/types/textual.html#layout-and-bit-validity:
162- ///
163- /// `char` is guaranteed to have the same size and alignment as `u32` on
164- /// all platforms.
165- ///
166- /// [2] Per https://doc.rust-lang.org/core/primitive.char.html#method.from_u32:
137+ /// [1] Per https://doc.rust-lang.org/core/primitive.char.html#method.from_u32:
167138 ///
168139 /// `from_u32()` will return `None` if the input is not a valid value for
169140 /// a `char`.
170- ///
171- /// [3] TODO(#429): Justify this claim.
172141 unsafe_impl!( => TryFromBytes for char ; |c| {
173142 let c = c. transmute:: <Unalign <u32 >, invariant:: Valid , _>( ) ;
174143 let c = c. read_unaligned( ) . into_inner( ) ;
@@ -196,20 +165,9 @@ safety_comment! {
196165 /// [1] https://doc.rust-lang.org/1.81.0/reference/type-layout.html#str-layout
197166 unsafe_impl!( str : Immutable , FromZeros , IntoBytes , Unaligned ) ;
198167 /// SAFETY:
199- /// - The safety requirements for `unsafe_impl!` with an `is_bit_valid`
200- /// closure:
201- /// - Given `t: *mut str` and `let r = *mut [u8]`, `r` refers to an object
202- /// of the same size as that referred to by `t`. This is true because
203- /// `str` and `[u8]` have the same representation. [1] Neither `t` nor
204- /// `r` contain `UnsafeCell`s because `[u8]` doesn't, and both `t` and
205- /// `r` have that representation.
206- /// - The impl must only return `true` for its argument if the original
207- /// `Maybe<str>` refers to a valid `str`. `str::from_utf8` guarantees
208- /// that it returns `Err` if its input is not a valid `str`. [2]
209- ///
210- /// [1] Per https://doc.rust-lang.org/1.81.0/reference/types/textual.html:
211- ///
212- /// A value of type `str` is represented the same was as `[u8]`.
168+ /// The impl must only return `true` for its argument if the original
169+ /// `Maybe<str>` refers to a valid `str`. `str::from_utf8` guarantees that
170+ /// it returns `Err` if its input is not a valid `str` [1].
213171 ///
214172 /// [2] Per https://doc.rust-lang.org/core/str/fn.from_utf8.html#errors:
215173 ///
@@ -307,25 +265,6 @@ safety_comment! {
307265 unsafe_impl!( NonZeroI128 : Immutable , IntoBytes ) ;
308266 unsafe_impl!( NonZeroUsize : Immutable , IntoBytes ) ;
309267 unsafe_impl!( NonZeroIsize : Immutable , IntoBytes ) ;
310- /// SAFETY:
311- /// - The safety requirements for `unsafe_impl!` with an `is_bit_valid`
312- /// closure:
313- /// - Given `t: *mut NonZeroXxx` and `let r = *mut xxx`, `r` refers to an
314- /// object of the same size as that referred to by `t`. This is true
315- /// because `NonZeroXxx` and `xxx` have the same size. [1] Neither `r`
316- /// nor `t` refer to any `UnsafeCell`s because neither `NonZeroXxx` [2]
317- /// nor `xxx` do.
318- /// - The impl must only return `true` for its argument if the original
319- /// `Maybe<NonZeroXxx>` refers to a valid `NonZeroXxx`. The only `xxx`
320- /// which is not also a valid `NonZeroXxx` is 0. [1]
321- ///
322- /// [1] Per https://doc.rust-lang.org/1.81.0/core/num/type.NonZeroU16.html:
323- ///
324- /// `NonZeroU16` is guaranteed to have the same layout and bit validity as
325- /// `u16` with the exception that `0` is not a valid instance.
326- ///
327- /// [2] `NonZeroXxx` self-evidently does not contain `UnsafeCell`s. This is
328- /// not a proof, but we are accepting this as a known risk per #1358.
329268 unsafe_impl_try_from_bytes_for_nonzero!(
330269 NonZeroU8 [ u8 ] ,
331270 NonZeroI8 [ i8 ] ,
0 commit comments