From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- src/test/ui/regions/regions-mock-codegen.rs | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/test/ui/regions/regions-mock-codegen.rs (limited to 'src/test/ui/regions/regions-mock-codegen.rs') diff --git a/src/test/ui/regions/regions-mock-codegen.rs b/src/test/ui/regions/regions-mock-codegen.rs new file mode 100644 index 000000000..9d0ca76e4 --- /dev/null +++ b/src/test/ui/regions/regions-mock-codegen.rs @@ -0,0 +1,54 @@ +// run-pass +#![allow(dead_code)] +#![allow(non_camel_case_types)] +// pretty-expanded FIXME #23616 +#![feature(allocator_api)] + +use std::alloc::{handle_alloc_error, Allocator, Global, Layout}; +use std::ptr::NonNull; + +struct arena(()); + +struct Bcx<'a> { + fcx: &'a Fcx<'a>, +} + +struct Fcx<'a> { + arena: &'a arena, + ccx: &'a Ccx, +} + +struct Ccx { + x: isize, +} + +fn allocate(_bcx: &arena) -> &Bcx<'_> { + unsafe { + let layout = Layout::new::(); + let ptr = Global.allocate(layout).unwrap_or_else(|_| handle_alloc_error(layout)); + &*(ptr.as_ptr() as *const _) + } +} + +fn h<'a>(bcx: &'a Bcx<'a>) -> &'a Bcx<'a> { + return allocate(bcx.fcx.arena); +} + +fn g(fcx: &Fcx) { + let bcx = Bcx { fcx }; + let bcx2 = h(&bcx); + unsafe { + Global.deallocate(NonNull::new_unchecked(bcx2 as *const _ as *mut _), Layout::new::()); + } +} + +fn f(ccx: &Ccx) { + let a = arena(()); + let fcx = Fcx { arena: &a, ccx }; + return g(&fcx); +} + +pub fn main() { + let ccx = Ccx { x: 0 }; + f(&ccx); +} -- cgit v1.2.3