//@ revisions: DEBUGINFO NODEBUGINFO //@ compile-flags: -Zunsound-mir-opts // FIXME: see //@ 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() }