2024-08-21 08:45:47 -05:00
|
|
|
//@ revisions: DEBUGINFO NODEBUGINFO
|
2024-10-30 08:11:37 -05:00
|
|
|
//@ compile-flags: -Zunsound-mir-opts
|
|
|
|
// FIXME: see <https://github.com/rust-lang/rust/issues/132353>
|
2024-08-21 08:45:47 -05:00
|
|
|
//@ compile-flags: -O -Cno-prepopulate-passes
|
|
|
|
//@ [DEBUGINFO] compile-flags: -Cdebuginfo=full
|
|
|
|
|
|
|
|
// From https://github.com/rust-lang/rust/issues/128081.
|
|
|
|
// Ensure that we only generate a memcpy instruction.
|
|
|
|
|
|
|
|
#![crate_type = "lib"]
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
struct SubCloneAndCopy {
|
|
|
|
v1: u32,
|
|
|
|
v2: u32,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
struct CloneOnly {
|
|
|
|
v1: u8,
|
|
|
|
v2: u8,
|
|
|
|
v3: u8,
|
|
|
|
v4: u8,
|
|
|
|
v5: u8,
|
|
|
|
v6: u8,
|
|
|
|
v7: u8,
|
|
|
|
v8: u8,
|
|
|
|
v9: u8,
|
|
|
|
v_sub: SubCloneAndCopy,
|
|
|
|
v_large: [u8; 256],
|
|
|
|
}
|
|
|
|
|
|
|
|
// CHECK-LABEL: define {{.*}}@clone_only(
|
|
|
|
#[no_mangle]
|
|
|
|
pub fn clone_only(v: &CloneOnly) -> CloneOnly {
|
|
|
|
// CHECK-NOT: call {{.*}}clone
|
|
|
|
// CHECK-NOT: store i8
|
|
|
|
// CHECK-NOT: store i32
|
|
|
|
// CHECK: call void @llvm.memcpy
|
|
|
|
// CHECK-NEXT: ret void
|
|
|
|
v.clone()
|
|
|
|
}
|