fix UB in ancient test

This commit is contained in:
Ralf Jung 2023-02-12 16:30:37 +01:00
parent adb4bfd25d
commit 0ea0c90d58

View File

@ -22,15 +22,15 @@ struct Ccx {
x: isize, x: isize,
} }
fn allocate(_bcx: &arena) -> &Bcx<'_> { fn allocate(_bcx: &arena) -> &mut Bcx<'_> {
unsafe { unsafe {
let layout = Layout::new::<Bcx>(); let layout = Layout::new::<Bcx>();
let ptr = Global.allocate(layout).unwrap_or_else(|_| handle_alloc_error(layout)); let ptr = Global.allocate(layout).unwrap_or_else(|_| handle_alloc_error(layout));
&*(ptr.as_ptr() as *const _) &mut *ptr.as_ptr().cast()
} }
} }
fn h<'a>(bcx: &'a Bcx<'a>) -> &'a Bcx<'a> { fn h<'a>(bcx: &'a Bcx<'a>) -> &'a mut Bcx<'a> {
return allocate(bcx.fcx.arena); return allocate(bcx.fcx.arena);
} }
@ -38,7 +38,7 @@ fn g(fcx: &Fcx) {
let bcx = Bcx { fcx }; let bcx = Bcx { fcx };
let bcx2 = h(&bcx); let bcx2 = h(&bcx);
unsafe { unsafe {
Global.deallocate(NonNull::new_unchecked(bcx2 as *const _ as *mut _), Layout::new::<Bcx>()); Global.deallocate(NonNull::new_unchecked(bcx2 as *mut _ as *mut _), Layout::new::<Bcx>());
} }
} }