]> git.lizzy.rs Git - rust.git/blobdiff - src/intrinsic.rs
Merge remote-tracking branch 'origin/master' into zero-sized-accesses
[rust.git] / src / intrinsic.rs
index a8cb58fdddfe48e6496c8458dac40c0371ab47b1..5ee82bf56adb3c8714ad8d57ffcd9bc554a3e04a 100644 (file)
@@ -145,21 +145,17 @@ fn call_intrinsic(
                 let elem_layout = self.layout_of(elem_ty)?;
                 let elem_size = elem_layout.size.bytes();
                 let count = self.read_scalar(args[2])?.to_usize(&self)?;
-                if count * elem_size != 0 {
-                    // TODO: We do not even validate alignment for the 0-bytes case.  libstd relies on this in vec::IntoIter::next.
-                    // Also see the write_bytes intrinsic.
-                    let elem_align = elem_layout.align;
-                    let src = self.read_scalar(args[0])?.not_undef()?;
-                    let dest = self.read_scalar(args[1])?.not_undef()?;
-                    self.memory.copy(
-                        src,
-                        elem_align,
-                        dest,
-                        elem_align,
-                        Size::from_bytes(count * elem_size),
-                        intrinsic_name.ends_with("_nonoverlapping"),
-                    )?;
-                }
+                let elem_align = elem_layout.align;
+                let src = self.read_scalar(args[0])?.not_undef()?;
+                let dest = self.read_scalar(args[1])?.not_undef()?;
+                self.memory.copy(
+                    src,
+                    elem_align,
+                    dest,
+                    elem_align,
+                    Size::from_bytes(count * elem_size),
+                    intrinsic_name.ends_with("_nonoverlapping"),
+                )?;
             }
 
             "discriminant_value" => {
@@ -436,12 +432,8 @@ fn call_intrinsic(
                 let val_byte = self.read_scalar(args[1])?.to_u8()?;
                 let ptr = self.read_scalar(args[0])?.not_undef()?;
                 let count = self.read_scalar(args[2])?.to_usize(&self)?;
-                if count > 0 {
-                    // HashMap relies on write_bytes on a NULL ptr with count == 0 to work
-                    // TODO: Should we, at least, validate the alignment? (Also see the copy intrinsic)
-                    self.memory.check_align(ptr, ty_layout.align)?;
-                    self.memory.write_repeat(ptr, val_byte, ty_layout.size * count)?;
-                }
+                self.memory.check_align(ptr, ty_layout.align)?;
+                self.memory.write_repeat(ptr, val_byte, ty_layout.size * count)?;
             }
 
             name => return err!(Unimplemented(format!("unimplemented intrinsic: {}", name))),