diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2021-12-03 06:24:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-03 06:24:11 +0100 |
| commit | 31003a3089cce2a918a9c8b73a77781d19c5f1d8 (patch) | |
| tree | 8e2318b63cfa60e6bf19534700afdb09bedd878e /compiler/rustc_data_structures | |
| parent | ff23ad3179014ba258f2b540fb39dd0f26852b7a (diff) | |
| parent | 41e21aa1c27522c6b29c5b88e37b1f479f63e38c (diff) | |
| download | rust-31003a3089cce2a918a9c8b73a77781d19c5f1d8.tar.gz rust-31003a3089cce2a918a9c8b73a77781d19c5f1d8.zip | |
Rollup merge of #88906 - Kixunil:box-maybe-uninit-write, r=dtolnay
Implement write() method for Box<MaybeUninit<T>> This adds method similar to `MaybeUninit::write` main difference being it returns owned `Box`. This can be used to elide copy from stack safely, however it's not currently tested that the optimization actually occurs. Analogous methods are not provided for `Rc` and `Arc` as those need to handle the possibility of sharing. Some version of them may be added in the future. This was discussed in #63291 which this change extends.
Diffstat (limited to 'compiler/rustc_data_structures')
| -rw-r--r-- | compiler/rustc_data_structures/src/functor.rs | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/compiler/rustc_data_structures/src/functor.rs b/compiler/rustc_data_structures/src/functor.rs index 9e1497961d9..71ff762c714 100644 --- a/compiler/rustc_data_structures/src/functor.rs +++ b/compiler/rustc_data_structures/src/functor.rs @@ -23,11 +23,9 @@ impl<T> IdFunctor for Box<T> { let value = raw.read(); // SAFETY: Converts `Box<T>` to `Box<MaybeUninit<T>>` which is the // inverse of `Box::assume_init()` and should be safe. - let mut raw: Box<mem::MaybeUninit<T>> = Box::from_raw(raw.cast()); + let raw: Box<mem::MaybeUninit<T>> = Box::from_raw(raw.cast()); // SAFETY: Write the mapped value back into the `Box`. - raw.write(f(value)?); - // SAFETY: We just initialized `raw`. - raw.assume_init() + Box::write(raw, f(value)?) }) } } |
