| //@ 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.runtime-optimized.after.mir | |
| fn clone_as_copy(v: &NestCopy) -> NestCopy { | |
| // CHECK-LABEL: fn clone_as_copy( | |
| // CHECK: let [[DEAD_VAR:_.*]]: &AllCopy; | |
| // CHECK: bb0: { | |
| // CHECK-NEXT: DBG: [[DEAD_VAR]] = &((*_1).1: AllCopy) | |
| // CHECK-NEXT: _0 = copy (*_1); | |
| // CHECK-NEXT: return; | |
| v.clone() | |
| } | |
| // EMIT_MIR clone_as_copy.enum_clone_as_copy.runtime-optimized.after.mir | |
| fn enum_clone_as_copy(v: &Enum1) -> Enum1 { | |
| // CHECK-LABEL: fn enum_clone_as_copy( | |
| // CHECK: bb0: { | |
| // CHECK-NEXT: _0 = copy (*_1); | |
| // CHECK-NEXT: return; | |
| v.clone() | |
| } |