// compile-flags: -O #![crate_type = "lib"] // Ensure that we do not call `memcpy` for the following function. // `memset` and `init` should be called directly on the return pointer. #[no_mangle] pub fn nrvo(init: fn(&mut [u8; 4096])) -> [u8; 4096] { // CHECK-LABEL: nrvo // CHECK: @llvm.memset // FIXME: turn on nrvo then check-not: @llvm.memcpy // CHECK: ret // CHECK-EMPTY let mut buf = [0; 4096]; init(&mut buf); buf }