mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2026-01-27 12:47:24 +01:00
rust: pin-init: improve safety documentation for impl<T> [Pin]Init<T> for T
The inner SAFETY comments were missing since commit 5cfe7bef6751 ("rust:
enable `clippy::undocumented_unsafe_blocks` lint").
Also rework the implementation of `__pinned_init` to better justify the
SAFETY comment.
Link: df925b2e27
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Link: https://lore.kernel.org/all/20250529081027.297648-1-lossin@kernel.org
Signed-off-by: Benno Lossin <lossin@kernel.org>
This commit is contained in:
parent
19272b37aa
commit
8b3d955f72
|
|
@ -1390,20 +1390,22 @@ where
|
|||
unsafe { pin_init_from_closure(init) }
|
||||
}
|
||||
|
||||
// SAFETY: Every type can be initialized by-value.
|
||||
// SAFETY: the `__init` function always returns `Ok(())` and initializes every field of `slot`.
|
||||
unsafe impl<T, E> Init<T, E> for T {
|
||||
unsafe fn __init(self, slot: *mut T) -> Result<(), E> {
|
||||
// SAFETY: TODO.
|
||||
// SAFETY: `slot` is valid for writes by the safety requirements of this function.
|
||||
unsafe { slot.write(self) };
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// SAFETY: Every type can be initialized by-value. `__pinned_init` calls `__init`.
|
||||
// SAFETY: the `__pinned_init` function always returns `Ok(())` and initializes every field of
|
||||
// `slot`. Additionally, all pinning invariants of `T` are upheld.
|
||||
unsafe impl<T, E> PinInit<T, E> for T {
|
||||
unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E> {
|
||||
// SAFETY: TODO.
|
||||
unsafe { self.__init(slot) }
|
||||
// SAFETY: `slot` is valid for writes by the safety requirements of this function.
|
||||
unsafe { slot.write(self) };
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user