if UB un IndexPtr ArenaAllocated impl
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user