mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 16:54:01 +00:00
41 lines
812 B
Rust
41 lines
812 B
Rust
|
//@ revisions: DEBUGINFO NODEBUGINFO
|
||
|
//@ 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()
|
||
|
}
|