]> git.lizzy.rs Git - rust.git/commitdiff
Fix drop fill checking on 32-bit hosts.
authorScott Olson <scott@solson.me>
Fri, 15 Apr 2016 09:16:35 +0000 (03:16 -0600)
committerScott Olson <scott@solson.me>
Fri, 15 Apr 2016 09:16:35 +0000 (03:16 -0600)
src/interpreter.rs
src/memory.rs

index e52aaf37f2e0afb56f090d69aab4ef930fc6d099..91682207ed638f72bf5ba808b5bc41a2dc52655b 100644 (file)
@@ -393,8 +393,9 @@ fn drop(&mut self, ptr: Pointer, ty: ty::Ty<'tcx>) -> EvalResult<()> {
                         try!(self.memory.deallocate(contents_ptr));
                     }
                     Err(EvalError::ReadBytesAsPointer) => {
-                        let possible_drop_fill = try!(self.memory.read_usize(ptr));
-                        if possible_drop_fill == mem::POST_DROP_U64 {
+                        let size = self.memory.pointer_size;
+                        let possible_drop_fill = try!(self.memory.read_bytes(ptr, size));
+                        if possible_drop_fill.iter().all(|&b| b == mem::POST_DROP_U8) {
                             return Ok(());
                         } else {
                             return Err(EvalError::ReadBytesAsPointer);
index 21ab8e36c563fd0ad3f887bf9b799d77a44d43ce..b99dae15970f88c594409338ce92733570fec37c 100644 (file)
@@ -284,6 +284,10 @@ pub fn copy(&mut self, src: Pointer, dest: Pointer, size: usize) -> EvalResult<(
         Ok(())
     }
 
+    pub fn read_bytes(&self, ptr: Pointer, size: usize) -> EvalResult<&[u8]> {
+        self.get_bytes(ptr, size)
+    }
+
     pub fn write_bytes(&mut self, ptr: Pointer, src: &[u8]) -> EvalResult<()> {
         let bytes = try!(self.get_bytes_mut(ptr, src.len()));
         bytes.clone_from_slice(src);