about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_mir/src/interpret/step.rs14
-rw-r--r--compiler/rustc_mir/src/transform/coverage/spans.rs1
-rw-r--r--compiler/rustc_mir/src/transform/simplify.rs1
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(..)