//@ compile-flags: -O //@ needs-unwind //@ min-llvm-version: 18 #![feature(c_unwind)] #![crate_type = "lib"] pub struct Foo([u8; 1000]); extern "C" { fn init(p: *mut Foo); } pub fn new_from_uninit() -> Foo { // CHECK-LABEL: new_from_uninit // CHECK-NOT: call void @llvm.memcpy. let mut x = std::mem::MaybeUninit::uninit(); unsafe { init(x.as_mut_ptr()); x.assume_init() } } extern "C-unwind" { fn init_unwind(p: *mut Foo); } pub fn new_from_uninit_unwind() -> Foo { // CHECK-LABEL: new_from_uninit_unwind // CHECK-NOT: call void @llvm.memcpy. let mut x = std::mem::MaybeUninit::uninit(); unsafe { init_unwind(x.as_mut_ptr()); x.assume_init() } }