if UB un IndexPtr ArenaAllocated impl

This commit is contained in:
Bennet Bleßmann
2024-07-06 17:43:13 +02:00
parent 1d66f91a41
commit ea041a40f9

View File

@@ -614,15 +614,17 @@ impl ArenaAllocated for IndexPtr {
#[inline] #[inline]
fn alloc(arena: &mut Arena, value: Self) -> TypedArenaPtr<Self> { fn alloc(arena: &mut Arena, value: Self) -> TypedArenaPtr<Self> {
let mut slab = Box::new(AllocSlab { let slab = Box::new(AllocSlab {
next: arena.base.take(), next: arena.base.take(),
#[cfg(target_pointer_width = "32")] #[cfg(target_pointer_width = "32")]
_padding: 0, _padding: 0,
header: HeaderOrIdxPtr { idx_ptr: value }, header: HeaderOrIdxPtr { idx_ptr: value },
}); });
let allocated_ptr = unsafe { TypedArenaPtr::new(ptr::addr_of_mut!(slab.header.idx_ptr)) }; let raw_box = Box::into_raw(slab);
arena.base = Some(NonNull::new(Box::into_raw(slab)).unwrap()); let allocated_ptr =
unsafe { TypedArenaPtr::new(ptr::addr_of_mut!((*raw_box).header.idx_ptr)) };
arena.base = Some(NonNull::new(raw_box).unwrap());
allocated_ptr allocated_ptr
} }
} }