]> git.lizzy.rs Git - rust.git/commitdiff
Mark bytes undefined in uninit intrinsic.
authorScott Olson <scott@solson.me>
Mon, 28 Mar 2016 22:37:07 +0000 (16:37 -0600)
committerScott Olson <scott@solson.me>
Mon, 28 Mar 2016 22:37:07 +0000 (16:37 -0600)
src/interpreter.rs
src/memory.rs

index fcdf2e8f4646d260e8f1502eb5dea15fef7e2f12..72e5a56c141218a3ac9234ee7094d49bd0b871e5 100644 (file)
@@ -439,8 +439,9 @@ fn call_intrinsic(&mut self, name: &str, substs: &'tcx Substs<'tcx>,
                 try!(self.memory.copy(src, dest, dest_size));
             }
 
-            // TODO(tsion): Mark bytes as undef.
-            "uninit" => {}
+            "uninit" => {
+                try!(self.memory.mark_definedness(dest, dest_size, false));
+            }
 
             name => panic!("can't handle intrinsic: {}", name),
         }
index 76c41b0c814c3a340abfe3c3df8f4002c8253cef..18638b8b0321dad0c437f1f8342a84b7ff8764a1 100644 (file)
@@ -348,7 +348,9 @@ fn check_defined(&self, ptr: Pointer, size: usize) -> EvalResult<()> {
         Ok(())
     }
 
-    fn mark_definedness(&mut self, ptr: Pointer, size: usize, new_state: bool) -> EvalResult<()> {
+    pub fn mark_definedness(&mut self, ptr: Pointer, size: usize, new_state: bool)
+        -> EvalResult<()>
+    {
         let mut alloc = try!(self.get_mut(ptr.alloc_id));
         alloc.mark_definedness(ptr.offset, ptr.offset + size, new_state);
         Ok(())