diff options
| -rw-r--r-- | compiler/rustc_mir/src/interpret/step.rs | 14 | ||||
| -rw-r--r-- | compiler/rustc_mir/src/transform/coverage/spans.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_mir/src/transform/simplify.rs | 1 |
3 files changed, 13 insertions, 3 deletions
diff --git a/compiler/rustc_mir/src/interpret/step.rs b/compiler/rustc_mir/src/interpret/step.rs index 5a3fc9f5161..cc5e34fbde5 100644 --- a/compiler/rustc_mir/src/interpret/step.rs +++ b/compiler/rustc_mir/src/interpret/step.rs @@ -119,15 +119,23 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { 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<'_, <M as Machine<'_, '_>>::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 fd3e782f6df..e7097ce8619 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 85f27428bbb..a5764d9bf4e 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(..) |
