From e360934bdb5beb85e08106617475128334d18a65 Mon Sep 17 00:00:00 2001 From: Gary Guo Date: Fri, 8 May 2026 17:06:55 +0100 Subject: [PATCH] internal: use `loop {}` to produce never value In the `init!`/`pin_init!` macros, we rely on a trick that assigns never (`!`) values to all mentioned fields in never-executed code to let the compiler check that all fields have been initialized. Currently we use `::core::panic!()` to produce this value, but before Rust 1.91.0, it creates outlined `panic_cold_explicit` functions which do not get removed by the optimizer, thus leaving dead code behind in the binary. This has been fixed by [1], which lands in Rust 1.91.0+, higher than the kernel minimum version 1.85.0. This causes ~200 dead `panic_cold_explicit` instances being included in the binary, with ~90 of them from nova-core's usage of pin-init. Work around the issue by using `loop {}` which creates the never value without macro expansion or function call at all. All instances of `panic_cold_explicit` outside libcore are removed by this change in my kernel build. Link: https://github.com/rust-lang/rust/pull/145304 [1] Signed-off-by: Gary Guo --- internal/src/init.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/src/init.rs b/internal/src/init.rs index 487ee001..7ca90873 100644 --- a/internal/src/init.rs +++ b/internal/src/init.rs @@ -389,7 +389,7 @@ fn make_field_check( ::core::ptr::write(slot, #path { #( #(#field_attrs)* - #field_name: ::core::panic!(), + #field_name: loop {}, )* #zeroing_trailer })