diff --git a/compiler/rustc_mir/src/interpret/step.rs b/compiler/rustc_mir/src/interpret/step.rs index 5a3fc9f51611..cc5e34fbde5a 100644 --- a/compiler/rustc_mir/src/interpret/step.rs +++ b/compiler/rustc_mir/src/interpret/step.rs @@ -119,15 +119,23 @@ pub fn step(&mut self) -> InterpResult<'tcx, bool> { let dst = { let dst = self.eval_operand(dst, None)?; - dst.assert_mem_place(self) + let mplace = *dst.assert_mem_place(self); + match mplace.ptr { + Scalar::Ptr(ptr) => ptr, + _ => panic!(), + } }; let src = { let src = self.eval_operand(src, None)?; - src.assert_mem_place(self) + let mplace = *src.assert_mem_place(self); + match mplace.ptr { + Scalar::Ptr(ptr) => ptr, + _ => panic!(), + } }; // Not sure how to convert an MPlaceTy<'_, >::PointerTag> // to a pointer, or OpTy to a size - self.memory.copy(src, dst, size, /*nonoverlapping*/ true)?; + self.memory.copy(src, dst, size.layout.layout.size, /*nonoverlapping*/ true)?; } // Statements we do not track. diff --git a/compiler/rustc_mir/src/transform/coverage/spans.rs b/compiler/rustc_mir/src/transform/coverage/spans.rs index fd3e782f6df4..e7097ce86190 100644 --- a/compiler/rustc_mir/src/transform/coverage/spans.rs +++ b/compiler/rustc_mir/src/transform/coverage/spans.rs @@ -687,6 +687,7 @@ pub(super) fn filtered_statement_span( // Retain spans from all other statements StatementKind::FakeRead(_, _) // Not including `ForGuardBinding` + | StatementKind::CopyNonOverlapping(..) | StatementKind::Assign(_) | StatementKind::SetDiscriminant { .. } | StatementKind::LlvmInlineAsm(_) diff --git a/compiler/rustc_mir/src/transform/simplify.rs b/compiler/rustc_mir/src/transform/simplify.rs index 85f27428bbbf..a5764d9bf4e3 100644 --- a/compiler/rustc_mir/src/transform/simplify.rs +++ b/compiler/rustc_mir/src/transform/simplify.rs @@ -428,6 +428,7 @@ impl Visitor<'_> for UsedLocals { fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location) { match statement.kind { StatementKind::LlvmInlineAsm(..) + | StatementKind::CopyNonOverlapping(..) | StatementKind::Retag(..) | StatementKind::Coverage(..) | StatementKind::FakeRead(..)