2024-08-21 21:45:47 +08:00
|
|
|
//@ compile-flags: -Cdebuginfo=full
|
|
|
|
|
|
|
|
|
|
// Check if we have transformed the nested clone to the copy in the complete pipeline.
|
|
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
|
struct AllCopy {
|
|
|
|
|
a: i32,
|
|
|
|
|
b: u64,
|
|
|
|
|
c: [i8; 3],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
|
struct NestCopy {
|
|
|
|
|
a: i32,
|
|
|
|
|
b: AllCopy,
|
|
|
|
|
c: [i8; 3],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
|
enum Enum1 {
|
|
|
|
|
A(AllCopy),
|
|
|
|
|
B(NestCopy),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// EMIT_MIR clone_as_copy.clone_as_copy.PreCodegen.after.mir
|
|
|
|
|
fn clone_as_copy(v: &NestCopy) -> NestCopy {
|
|
|
|
|
// CHECK-LABEL: fn clone_as_copy(
|
2025-07-15 22:54:54 +08:00
|
|
|
// CHECK: let [[DEAD_VAR:_.*]]: &AllCopy;
|
|
|
|
|
// CHECK: bb0: {
|
|
|
|
|
// CHECK-NEXT: DBG: [[DEAD_VAR]] = &((*_1).1: AllCopy)
|
|
|
|
|
// CHECK-NEXT: _0 = copy (*_1);
|
|
|
|
|
// CHECK-NEXT: return;
|
2024-08-21 21:45:47 +08:00
|
|
|
v.clone()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// EMIT_MIR clone_as_copy.enum_clone_as_copy.PreCodegen.after.mir
|
|
|
|
|
fn enum_clone_as_copy(v: &Enum1) -> Enum1 {
|
|
|
|
|
// CHECK-LABEL: fn enum_clone_as_copy(
|
2025-07-15 22:54:54 +08:00
|
|
|
// CHECK: bb0: {
|
|
|
|
|
// CHECK-NEXT: _0 = copy (*_1);
|
|
|
|
|
// CHECK-NEXT: return;
|
2024-08-21 21:45:47 +08:00
|
|
|
v.clone()
|
|
|
|
|
}
|