| //@ compile-flags: -Copt-level=3 | |
| //@ needs-unwind | |
| #![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() | |
| } | |
| } |