/rust/registry/src/index.crates.io-6f17d22bba15001f/getrandom-0.2.16/src/util.rs
Line | Count | Source (jump to first uncovered line) |
1 | | #![allow(dead_code)] |
2 | | use core::{mem::MaybeUninit, ptr}; |
3 | | |
4 | | /// Polyfill for `maybe_uninit_slice` feature's |
5 | | /// `MaybeUninit::slice_assume_init_mut`. Every element of `slice` must have |
6 | | /// been initialized. |
7 | | #[inline(always)] |
8 | 222 | pub unsafe fn slice_assume_init_mut<T>(slice: &mut [MaybeUninit<T>]) -> &mut [T] { |
9 | 222 | // SAFETY: `MaybeUninit<T>` is guaranteed to be layout-compatible with `T`. |
10 | 222 | &mut *(slice as *mut [MaybeUninit<T>] as *mut [T]) |
11 | 222 | } getrandom::util::slice_assume_init_mut::<u8> Line | Count | Source | 8 | 222 | pub unsafe fn slice_assume_init_mut<T>(slice: &mut [MaybeUninit<T>]) -> &mut [T] { | 9 | 222 | // SAFETY: `MaybeUninit<T>` is guaranteed to be layout-compatible with `T`. | 10 | 222 | &mut *(slice as *mut [MaybeUninit<T>] as *mut [T]) | 11 | 222 | } |
Unexecuted instantiation: getrandom::util::slice_assume_init_mut::<_> |
12 | | |
13 | | #[inline] |
14 | 0 | pub fn uninit_slice_fill_zero(slice: &mut [MaybeUninit<u8>]) -> &mut [u8] { |
15 | 0 | unsafe { ptr::write_bytes(slice.as_mut_ptr(), 0, slice.len()) }; |
16 | 0 | unsafe { slice_assume_init_mut(slice) } |
17 | 0 | } |
18 | | |
19 | | #[inline(always)] |
20 | 0 | pub fn slice_as_uninit<T>(slice: &[T]) -> &[MaybeUninit<T>] { |
21 | 0 | // SAFETY: `MaybeUninit<T>` is guaranteed to be layout-compatible with `T`. |
22 | 0 | // There is no risk of writing a `MaybeUninit<T>` into the result since |
23 | 0 | // the result isn't mutable. |
24 | 0 | unsafe { &*(slice as *const [T] as *const [MaybeUninit<T>]) } |
25 | 0 | } |
26 | | |
27 | | /// View an mutable initialized array as potentially-uninitialized. |
28 | | /// |
29 | | /// This is unsafe because it allows assigning uninitialized values into |
30 | | /// `slice`, which would be undefined behavior. |
31 | | #[inline(always)] |
32 | 222 | pub unsafe fn slice_as_uninit_mut<T>(slice: &mut [T]) -> &mut [MaybeUninit<T>] { |
33 | 222 | // SAFETY: `MaybeUninit<T>` is guaranteed to be layout-compatible with `T`. |
34 | 222 | &mut *(slice as *mut [T] as *mut [MaybeUninit<T>]) |
35 | 222 | } getrandom::util::slice_as_uninit_mut::<u8> Line | Count | Source | 32 | 222 | pub unsafe fn slice_as_uninit_mut<T>(slice: &mut [T]) -> &mut [MaybeUninit<T>] { | 33 | 222 | // SAFETY: `MaybeUninit<T>` is guaranteed to be layout-compatible with `T`. | 34 | 222 | &mut *(slice as *mut [T] as *mut [MaybeUninit<T>]) | 35 | 222 | } |
Unexecuted instantiation: getrandom::util::slice_as_uninit_mut::<_> |