about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2019-02-09 19:58:41 +0100
committerRalf Jung <post@ralfj.de>2019-02-09 21:24:29 +0100
commita01efbcbec2123429a7eaa73ce1c9198007af7cf (patch)
tree673b9b3e3af77dfdda4eabb83ee1c1f4e76bfd79
parent312f3827faa8dc3b8e1dc8c1ad685a6222f16f03 (diff)
downloadrust-a01efbcbec2123429a7eaa73ce1c9198007af7cf.tar.gz
rust-a01efbcbec2123429a7eaa73ce1c9198007af7cf.zip
operand-to-place copies should never be overlapping
-rw-r--r--src/librustc_mir/interpret/place.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/librustc_mir/interpret/place.rs b/src/librustc_mir/interpret/place.rs
index 9ca7f9d8e27..3d6fcae0cab 100644
--- a/src/librustc_mir/interpret/place.rs
+++ b/src/librustc_mir/interpret/place.rs
@@ -823,6 +823,8 @@ where
         let src = match self.try_read_immediate(src)? {
             Ok(src_val) => {
                 // Yay, we got a value that we can write directly.
+                // FIXME: Add a check to make sure that if `src` is indirect,
+                // it does not overlap with `dest`.
                 return self.write_immediate_no_validate(src_val, dest);
             }
             Err(mplace) => mplace,
@@ -836,7 +838,8 @@ where
         self.memory.copy(
             src_ptr, src_align,
             dest_ptr, dest_align,
-            dest.layout.size, false
+            dest.layout.size,
+            /*nonoverlapping*/ true,
         )?;
 
         Ok(())