Re: [PATCH] rust: rust_is_available: warn for `bindgen` < 0.72.1 && libclang >= 22

Miguel Ojeda <[email protected]> Mon, 3 Aug 2026 14:09:25 +0200
Newsgroups gmane.linux.kbuild.devel,gmane.linux.kernel.rust
Message-ID <CANiq72mKE66OthZ7hEfxqig7+9ePmdv+xSWQ4uMSZDhW-qt8DA@mail.gmail.com>
On Sun, Jul 19, 2026 at 2:05=E2=80=AFPM Miguel Ojeda <[email protected]> wro=
te:
>
> Starting with LLVM 22, `clang_getTypeDeclaration()` may return a forward
> declaration instead of the type definition. This made `bindgen` generate
> opaque types [1][2], which in turn made us fail with e.g.
>
>     error[E0609]: no field `__bindgen_anon_1` on type `bindings::kernel_p=
aram`
>       --> rust/kernel/module_param.rs:78:46
>        |
>     78 |         let container =3D unsafe { &*((*param).__bindgen_anon_1.=
arg.cast::<SetOnce<T>>()) };
>        |                                              ^^^^^^^^^^^^^^^^ un=
known field
>        |
>        =3D note: available field is: `_address`
>
> This was fixed in `bindgen` 0.72.1 [3].
>
> In order to clarify what is going on and avoid confusion [4][5], add
> a warning to `rust_is_available.sh` about it when the versions match,
> similar to past warnings like the one removed in:
>
>   commit ae64324ad5c1 ("rust: rust_is_available: remove warning for `bind=
gen` < 0.69.5 && libclang >=3D 19.1")
>
> In addition, even if the versions match, check if the issue appears to
> not reproduce with the given binaries, to avoid a warning in such a case.
>
> Finally, include tests.
>
> Link: https://github.com/rust-lang/rust-bindgen/issues/3264 [1]
> Link: https://github.com/Rust-for-Linux/linux/issues/353 [2] # "Missing f=
ields in nested class with LLVM 22."
> Link: https://github.com/rust-lang/rust-bindgen/pull/3278 [3]
> Reported-by: Burak Emir <[email protected]>
> Link: https://github.com/Rust-for-Linux/linux/issues/1247 [4]
> Link: https://lore.kernel.org/rust-for-linux/CABwQupNfMAJOGqRM9ke6tj4f53d=
[email protected]/ [5]
> Signed-off-by: Miguel Ojeda <[email protected]>

Applied to `rust-next` -- thanks everyone!

    [ Nathan, in parallel, updated the instructions of the LLVM+Rust
      kernel.org toolchains [6] so that `--version` is not passed to
      `cargo` for `bindgen`, and thus the latest `bindgen` is installed
      by default, which should help to avoid some of these situations.

      Thanks!

        - Miguel ]

    Cc: [email protected] # Needed in 6.12.y and later (Rust is
pinned in older LTSs).
    Link: https://mirrors.edge.kernel.org/pub/tools/llvm/rust/ [6]

Cheers,
Miguel