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}