lockfree/
ptr.rs

1use std::{
2    mem::align_of,
3    ptr::{null_mut, NonNull},
4};
5
6static _NON_NULL: u8 = /* dummy value */ 1;
7
8// don't use with bit flags
9#[inline(always)]
10pub fn non_zero_null<T>() -> NonNull<T> {
11    NonNull::from(&_NON_NULL).cast()
12}
13
14#[inline(always)]
15pub unsafe fn bypass_null<T>(ptr: *mut T) -> NonNull<T> {
16    debug_assert!(!ptr.is_null());
17    NonNull::new_unchecked(ptr)
18}
19
20#[inline(always)]
21pub fn check_null_align<T>() {
22    debug_assert!(null_mut::<T>() as usize % align_of::<T>() == 0);
23}