Skip to content

Commit

Permalink
rust: Eschew Box<MaybeUninit<T>>::write
Browse files Browse the repository at this point in the history
T-libs-api 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:
rust-lang/rust#63291 (comment)

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.

Signed-off-by: Jubilee Young <workingjubilee@gmail.com>
Reviewed-by: Trevor Gross <tmgross@umich.edu>
Link: https://lore.kernel.org/r/20240823050359.1737893-1-workingjubilee@gmail.com
  • Loading branch information
workingjubilee authored and ojeda committed Aug 23, 2024
1 parent 8400291 commit 4c7864e
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions rust/kernel/alloc/box_ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ pub trait BoxExt<T>: Sized {

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

#[cfg(any(test, testlib))]
Expand Down

0 comments on commit 4c7864e

Please sign in to comment.