Messages in this thread |  | | From | Miguel Ojeda <> | | Date | Thu, 12 Mar 2026 20:20:10 +0100 | | Subject | Re: [PATCH v12 1/1] rust: interop: Add list module for C linked list interface |
| |
On Fri, Mar 6, 2026 at 9:37 PM Joel Fernandes <joelagnelf@nvidia.com> wrote: > > +//! // Create typed [`CList`] from sentinel head. > +//! // SAFETY: head is valid and initialized, items are `SampleItemC` with > +//! // embedded `link` field, and `Item` is `#[repr(transparent)]` over `SampleItemC`. > +//! let list = clist_create!(unsafe { head, Item, SampleItemC, link });
Was the patch tested with Clippy? It has several issues.
The worst news is that it seems the "supposed to be `unsafe` block" does not count as one for Clippy, i.e.:
let list = clist_create!(unsafe { head, Item, SampleItemC, link });
So we get:
error: statement has unnecessary safety comment --> rust/doctests_kernel_generated.rs:7416:1 | 7416 | let list = clist_create!(unsafe { head, Item, SampleItemC, link }); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | help: consider removing the safety comment --> rust/doctests_kernel_generated.rs:7414:4 | 7414 | // SAFETY: head is valid and initialized, items are `SampleItemC` with | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.94.0/index.html#unnecessary_safety_comment = note: `-D clippy::unnecessary-safety-comment` implied by `-D warnings` = help: to override `-D warnings` add `#[allow(clippy::unnecessary_safety_comment)]`
For this, we could write them as a `// SAFETY*: ` comment or similar, to make progress for now, but it would best to request upstream Clippy to detect this or to rework the macro to force the `unsafe` block outside.
In addition:
error: unsafe block missing a safety comment --> rust/kernel/interop/list.rs:357:17 | 112 | let _list = clist_create!(unsafe { head, Item, SampleItemC, link }); | --------------------------------------------------------- in this macro invocation ... 357 | |p| unsafe { &raw const (*p).$($field).+ }; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: consider adding a safety comment on the preceding line = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.94.0/index.html#undocumented_unsafe_blocks = note: `-D clippy::undocumented-unsafe-blocks` implied by `-D warnings` = help: to override `-D warnings` add `#[allow(clippy::undocumented_unsafe_blocks)]` = note: this error originates in the macro `clist_create` (in Nightly builds, run with -Z macro-backtrace for more info)
So this needs a `// SAFETY:` comment on top of the closure.
error: this macro expands metavariables in an unsafe block --> rust/kernel/interop/list.rs:362:9 | 362 | unsafe { $crate::interop::list::CList::<$rust_type, OFFSET>::from_raw($head) } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: this allows the user of the macro to write unsafe code outside of an unsafe block = help: consider expanding any metavariables outside of this block, e.g. by storing them in a variable = help: ... or also expand referenced metavariables in a safe context to require an unsafe block at callsite = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.94.0/index.html#macro_metavars_in_unsafe = note: `-D clippy::macro-metavars-in-unsafe` implied by `-D warnings` = help: to override `-D warnings` add `#[allow(clippy::macro_metavars_in_unsafe)]`
For this one, to begin with, do we expect to have actual expressions for `$head`, or could we constrain it for now to an identifier for instance?
With an identifier there is no issue then -- the example currently has just an identifier anyway.
I hope that helps.
Cheers, Miguel
|  |