Re: [PATCH] rust: bitfield: require Zeroable storage for Zeroable impl
From: Alexandre Courbot
Date: Mon Sep 21 2026 - 03:23:30 EST
On Mon Sep 21, 2026 at 3:32 PM JST, Yilin Chen wrote:
> Hi Gary,
>
> Resending my reply for visibility on the mailing list.
>
> You are right that a bitfield with at least one field generates a use of
> `Bounded<$storage, ...>`, which requires the storage type to implement
> `Integer`. However, `bitfield!` also accepts an empty field list. In that
> case, no `Bounded` use is generated, so the `Integer` requirement is
> absent, while the macro still generates the unconditional `Zeroable`
> implementation.
>
> For example:
>
> use core::num::NonZeroU32;
> use pin_init::Zeroable;
>
> bitfield! {
> struct Bad(NonZeroU32) {}
> }
>
> fn check_bad_zeroable() {
> let _: Bad = <Bad as Zeroable>::zeroed();
> }
>
> This currently compiles.
No it doesn't.
error[E0277]: the trait bound `core::num::NonZero<u32>: kernel::mem::AsRepr` is not satisfied
364 | / bitfield! {
365 | | struct Bad(NonZeroU32) {}
366 | | }
| |_________^ the trait `kernel::mem::AsRepr` is not implemented for `core::num::NonZero<u32>`