From fee7ba58b0fdb612e4ca1f521340cf4de0f51ba5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bennet=20Ble=C3=9Fmann?= Date: Sat, 6 Jul 2024 16:21:20 +0200 Subject: [PATCH] fix stack alignement - adjust align() in RawBlockTraits impl for Stack - ensure ptr is always aligned in RawBlock::allock --- src/machine/stack.rs | 5 +++-- src/raw_block.rs | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/machine/stack.rs b/src/machine/stack.rs index 604a52be..7f35cdbc 100644 --- a/src/machine/stack.rs +++ b/src/machine/stack.rs @@ -15,7 +15,9 @@ impl RawBlockTraits for Stack { #[inline] fn align() -> usize { - mem::align_of::() + mem::align_of::() + .max(mem::align_of::()) + .max(mem::align_of::()) } } @@ -281,7 +283,6 @@ mod tests { use crate::machine::mock_wam::*; #[test] - #[cfg_attr(miri, ignore = "blocked on stack.rs UB")] fn stack_tests() { let mut wam = MockWAM::new(); diff --git a/src/raw_block.rs b/src/raw_block.rs index 2c10f494..0c27bdde 100644 --- a/src/raw_block.rs +++ b/src/raw_block.rs @@ -96,9 +96,10 @@ impl RawBlock { } pub unsafe fn alloc(&self, size: usize) -> *mut u8 { - if self.free_space() >= size { + let aligned_size = size.next_multiple_of(size); + if self.free_space() >= aligned_size { let ptr = *self.ptr.get(); - *self.ptr.get() = ptr.add(size) as *mut _; + *self.ptr.get() = ptr.add(aligned_size) as *mut _; ptr } else { ptr::null_mut() -- 2.54.0