Skip to content

Commit 0903b9e

Browse files
workingjubileeojeda
authored andcommitted
rust: alloc: eschew Box<MaybeUninit<T>>::write
Upstream Rust's libs-api team has consensus for stabilizing some of `feature(new_uninit)`, but not for `Box<MaybeUninit<T>>::write`. Instead, we can use `MaybeUninit<T>::write`, so Rust for Linux can drop the feature after stabilization. That will happen after merging, as the FCP has completed [1]. This is required before stabilization because remaining-unstable API will be divided into new features. This code doesn't know about those yet. It can't: they haven't landed, as the relevant PR is blocked on rustc's CI testing Rust-for-Linux without this patch. [ The PR has landed [2] and will be released in Rust 1.82.0 (expected on 2024-10-17), so we could conditionally enable the new unstable feature (`box_uninit_write` [3]) instead, but just for a single `unsafe` block it is probably not worth it. For the time being, I added it to the "nice to have" section of our unstable features list. - Miguel ] Link: rust-lang/rust#63291 (comment) [1] Link: rust-lang/rust#129416 [2] Link: rust-lang/rust#129397 [3] Signed-off-by: Jubilee Young <[email protected]> Reviewed-by: Alice Ryhl <[email protected]> Reviewed-by: Trevor Gross <[email protected]> [ Reworded slightly. - Miguel ] Signed-off-by: Miguel Ojeda <[email protected]>
1 parent 0ff8f3f commit 0903b9e

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

rust/kernel/alloc/box_ext.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ pub trait BoxExt<T>: Sized {
2121

2222
impl<T> BoxExt<T> for Box<T> {
2323
fn new(x: T, flags: Flags) -> Result<Self, AllocError> {
24-
let b = <Self as BoxExt<_>>::new_uninit(flags)?;
25-
Ok(Box::write(b, x))
24+
let mut b = <Self as BoxExt<_>>::new_uninit(flags)?;
25+
b.write(x);
26+
// SAFETY: We just wrote to it.
27+
Ok(unsafe { b.assume_init() })
2628
}
2729

2830
#[cfg(any(test, testlib))]

0 commit comments

Comments
 (0)