Coverage Report

Created: 2025-07-11 06:35

/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::<_>