Re: [PATCH v4 1/2] rust: transmute: implement FromBytes and AsBytes for inhabited ZSTs
From: Gary Guo
Date: Mon Dec 15 2025 - 06:31:43 EST
On Mon, 15 Dec 2025 14:49:09 +0900
Alexandre Courbot <acourbot@xxxxxxxxxx> wrote:
> This is useful when using types that may or may not be empty in generic
> code relying on these traits. It is also safe because technically a
> no-op.
>
> Reviewed-by: Alistair Popple <apopple@xxxxxxxxxx>
> Reviewed-by: Gary Guo <gary@xxxxxxxxxxx>
> Signed-off-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
> ---
> rust/kernel/transmute.rs | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/rust/kernel/transmute.rs b/rust/kernel/transmute.rs
> index be5dbf3829e2..5711580c9f9b 100644
> --- a/rust/kernel/transmute.rs
> +++ b/rust/kernel/transmute.rs
> @@ -170,6 +170,10 @@ macro_rules! impl_frombytes {
> }
>
> impl_frombytes! {
> + // SAFETY: Inhabited ZSTs only have one possible bit pattern, and these two have no invariant.
> + (),
> + {<T>} core::marker::PhantomData<T>,
> +
> // SAFETY: All bit patterns are acceptable values of the types below.
> u8, u16, u32, u64, usize,
> i8, i16, i32, i64, isize,
> @@ -230,6 +234,10 @@ macro_rules! impl_asbytes {
> }
>
> impl_asbytes! {
> + // SAFETY: Inhabited ZSTs only have one possible bit pattern, and these two have no invariant.
Some nit: technically you can turn any ZST into bytes, even those with
invariants or uninhabited. So while the comment is correct, it's kinda
redundant for the object -> bytes direction :)
No change required for this patch.
Best,
Gary
> + (),
> + {<T>} core::marker::PhantomData<T>,
> +
> // SAFETY: Instances of the following types have no uninitialized portions.
> u8, u16, u32, u64, usize,
> i8, i16, i32, i64, isize,
>