2023-08-21 05:35:08 -05:00
|
|
|
// Verify that move before the call of the function with noalias, nocapture, readonly.
|
|
|
|
// #107436
|
2024-02-22 06:10:29 -06:00
|
|
|
//@ compile-flags: -O
|
2023-08-21 05:35:08 -05:00
|
|
|
|
|
|
|
#![crate_type = "lib"]
|
|
|
|
|
|
|
|
#[repr(C)]
|
|
|
|
pub struct ThreeSlices<'a>(&'a [u32], &'a [u32], &'a [u32]);
|
|
|
|
|
|
|
|
#[no_mangle]
|
|
|
|
pub fn sum_slices(val: ThreeSlices) -> u32 {
|
|
|
|
// CHECK-NOT: memcpy
|
|
|
|
let val = val;
|
|
|
|
sum(&val)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[no_mangle]
|
|
|
|
#[inline(never)]
|
|
|
|
pub fn sum(val: &ThreeSlices) -> u32 {
|
|
|
|
val.0.iter().sum::<u32>() + val.1.iter().sum::<u32>() + val.2.iter().sum::<u32>()
|
|
|
|
}
|