On Mon, Apr 22, 2024 at 11:08 AM Miguel Ojeda <ojeda@xxxxxxxxxx> wrote: > > If one attempts to build an essentially empty file somewhere in the > kernel tree, it leads to a build error because the compiler does not > recognize the `new_uninit` unstable feature: > > error[E0635]: unknown feature `new_uninit` > --> <crate attribute>:1:9 > | > 1 | feature(new_uninit) > | ^^^^^^^^^^ > > The reason is that we pass `-Zcrate-attr='feature(new_uninit)'` (together > with `-Zallow-features=new_uninit`) to let non-`rust/` code use that > unstable feature. > > However, the compiler only recognizes the feature if the `alloc` crate > is resolved (the feature is an `alloc` one). `--extern alloc`, which we > pass, is not enough to resolve the crate. > > Introducing a reference like `use alloc;` or `extern crate alloc;` > solves the issue, thus this is not seen in normal files. For instance, > `use`ing the `kernel` prelude introduces such a reference, since `alloc` > is used inside. > > While normal use of the build system is not impacted by this, it can still > be fairly confusing for kernel developers [1], thus use the unstable > `force` option of `--extern` [2] (added in Rust 1.71 [3]) to force the > compiler to resolve `alloc`. > > This new unstable feature is only needed meanwhile we use the other > unstable feature, since then we will not need `-Zcrate-attr`. > > Cc: stable@xxxxxxxxxxxxxxx # v6.6+ > Reported-by: Daniel Almeida <daniel.almeida@xxxxxxxxxxxxx> > Reported-by: Julian Stecklina <julian.stecklina@xxxxxxxxxxxxxxxxxxxxx> > Closes: https://rust-for-linux.zulipchat.com/#narrow/stream/288089-General/topic/x/near/424096982 [1] > Fixes: 2f7ab1267dc9 ("Kbuild: add Rust support") > Link: https://github.com/rust-lang/rust/issues/111302 [2] > Link: https://github.com/rust-lang/rust/pull/109421 [3] > Signed-off-by: Miguel Ojeda <ojeda@xxxxxxxxxx> Reviewed-by: Alice Ryhl <aliceryhl@xxxxxxxxxx>