From 04be4cf73e94ac42b7babc17bef2c166a5e6bdad Mon Sep 17 00:00:00 2001 From: janis Date: Tue, 11 Aug 2026 13:01:31 +0200 Subject: [PATCH] foundation: is_aligned --- crates/foundation/src/alloc/slab.rs | 2 +- crates/foundation/src/lib.rs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/foundation/src/alloc/slab.rs b/crates/foundation/src/alloc/slab.rs index 556962e..7ea28e1 100644 --- a/crates/foundation/src/alloc/slab.rs +++ b/crates/foundation/src/alloc/slab.rs @@ -251,12 +251,12 @@ impl Slab { let addr = unsafe { NonZero::new_unchecked(mem::align_down(slot.addr().get(), layout.align())) }; + let chunk_ptr: NonNull> = slot.with_addr(addr).cast(); // grab provenance exposed in alloc_chunk, since `slot` may be noalias restricted to its layout. // let chunk_ptr: NonNull> = NonNull::with_exposed_provenance(addr); - let chunk_ptr: NonNull> = slot.with_addr(addr).cast(); #[cfg(test)] std::eprintln!("Slab::free_slot(chunk: {chunk_ptr:#?})"); diff --git a/crates/foundation/src/lib.rs b/crates/foundation/src/lib.rs index cb26317..0c83b70 100644 --- a/crates/foundation/src/lib.rs +++ b/crates/foundation/src/lib.rs @@ -43,6 +43,10 @@ pub mod mem { value & !(alignment - T::one()) } + pub fn is_aligned(value: T, alignment: T) -> bool { + value & (alignment - T::one()) == T::zero() + } + /// # Safety pub unsafe fn volatile_copy(src: *const T, dst: *mut T, count: usize) { unsafe {