Replace usages of ManuallyDrop::take with ::into_inner

This commit is contained in:
Richard Feldman 2022-08-08 12:02:14 -04:00
parent 0ca0da85cf
commit 1ad59c6c45
No known key found for this signature in database
GPG key ID: 7E4127D1E4241798

View file

@ -640,8 +640,14 @@ pub struct {name} {{
owned_get_payload = format!(
r#"{{
let ptr = (self.pointer as usize & !{bitmask}) as *mut {union_name};
let mut uninitialized = core::mem::MaybeUninit::uninit();
let swapped = core::mem::replace(
&mut (*ptr).{tag_name},
core::mem::ManuallyDrop::new(uninitialized.assume_init()),
);
core::mem::forget(self);
core::mem::ManuallyDrop::take(&mut (*ptr).{tag_name})
core::mem::ManuallyDrop::into_inner(swapped)
}}"#
);
borrowed_get_payload = format!(
@ -674,8 +680,18 @@ pub struct {name} {{
}
Recursiveness::NonRecursive => {
if cannot_derive_copy(payload_type, types) {
owned_get_payload =
format!("core::mem::ManuallyDrop::take(&mut self.{tag_name})");
owned_get_payload = format!(
r#"{{
let mut uninitialized = core::mem::MaybeUninit::uninit();
let swapped = core::mem::replace(
&mut self.{tag_name},
core::mem::ManuallyDrop::new(uninitialized.assume_init()),
);
core::mem::forget(self);
core::mem::ManuallyDrop::into_inner(swapped)
}}"#
);
borrowed_get_payload = format!("&self.{tag_name}");
// we need `mut self` for the argument because of ManuallyDrop
self_for_into = "mut self";
@ -1599,7 +1615,16 @@ pub struct {name} {{
{
let assign_payload = if cannot_derive_copy {
"core::mem::ManuallyDrop::take(&mut *self.pointer)"
r#"{{
let mut uninitialized = core::mem::MaybeUninit::uninit();
let swapped = core::mem::replace(
&mut *self.pointer,
core::mem::ManuallyDrop::new(uninitialized.assume_init()),
);
core::mem::forget(self);
core::mem::ManuallyDrop::into_inner(swapped)
}}"#
} else {
"*self.pointer"
};
@ -1617,8 +1642,6 @@ pub struct {name} {{
let payload = {assign_payload};
core::mem::drop::<Self>(self);
{owned_ret}
}}"#,
),