about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOliver Scherer <github35764891676564198441@oli-obk.de>2018-11-13 10:19:12 +0100
committerOliver Scherer <github35764891676564198441@oli-obk.de>2018-11-24 11:36:31 +0100
commita835555474c87def84099df412816d5edfa2b9cb (patch)
treed6783cde2e902e817315b8528d0e452dc0eaaf99
parent3a0e8254b06c8a9c8e4b775a18524797f1e3d44c (diff)
downloadrust-a835555474c87def84099df412816d5edfa2b9cb.tar.gz
rust-a835555474c87def84099df412816d5edfa2b9cb.zip
Make zst accesses in allocations take the regular path.
Speeding up zst accesses should be done on a higher level.
-rw-r--r--src/librustc/mir/interpret/allocation.rs21
1 files changed, 0 insertions, 21 deletions
diff --git a/src/librustc/mir/interpret/allocation.rs b/src/librustc/mir/interpret/allocation.rs
index 42bcd3a9027..ba2755b29f0 100644
--- a/src/librustc/mir/interpret/allocation.rs
+++ b/src/librustc/mir/interpret/allocation.rs
@@ -116,12 +116,7 @@ impl<'tcx, Tag: Copy, Extra: AllocationExtra<Tag>> Allocation<Tag, Extra> {
         size: Size,
         allow_ptr_and_undef: bool,
     ) -> EvalResult<'tcx> {
-        // Empty accesses don't need to be valid pointers, but they should still be non-NULL
         let align = Align::from_bytes(1).unwrap();
-        if size.bytes() == 0 {
-            self.check_align(ptr, align)?;
-            return Ok(());
-        }
         // Check bounds, align and relocations on the edges
         self.get_bytes_with_undef_and_ptr(cx, ptr, size, align)?;
         // Check undef and ptr
@@ -138,12 +133,7 @@ impl<'tcx, Tag: Copy, Extra: AllocationExtra<Tag>> Allocation<Tag, Extra> {
         ptr: Pointer<Tag>,
         size: Size,
     ) -> EvalResult<'tcx, &[u8]> {
-        // Empty accesses don't need to be valid pointers, but they should still be non-NULL
         let align = Align::from_bytes(1).unwrap();
-        if size.bytes() == 0 {
-            self.check_align(ptr, align)?;
-            return Ok(&[]);
-        }
         self.get_bytes(cx, ptr, size, align)
     }
 
@@ -153,12 +143,7 @@ impl<'tcx, Tag: Copy, Extra: AllocationExtra<Tag>> Allocation<Tag, Extra> {
         ptr: Pointer<Tag>,
         src: &[u8],
     ) -> EvalResult<'tcx> {
-        // Empty accesses don't need to be valid pointers, but they should still be non-NULL
         let align = Align::from_bytes(1).unwrap();
-        if src.is_empty() {
-            self.check_align(ptr, align)?;
-            return Ok(());
-        }
         let bytes = self.get_bytes_mut(
             cx, ptr, Size::from_bytes(src.len() as u64), align,
         )?;
@@ -173,12 +158,7 @@ impl<'tcx, Tag: Copy, Extra: AllocationExtra<Tag>> Allocation<Tag, Extra> {
         val: u8,
         count: Size
     ) -> EvalResult<'tcx> {
-        // Empty accesses don't need to be valid pointers, but they should still be non-NULL
         let align = Align::from_bytes(1).unwrap();
-        if count.bytes() == 0 {
-            self.check_align(ptr, align)?;
-            return Ok(());
-        }
         let bytes = self.get_bytes_mut(cx, ptr, count, align)?;
         for b in bytes {
             *b = val;
@@ -329,7 +309,6 @@ impl<'tcx, Tag: Copy, Extra: AllocationExtra<Tag>> Allocation<Tag, Extra> {
         align: Align,
         check_defined_and_ptr: bool,
     ) -> EvalResult<'tcx, &[u8]> {
-        assert_ne!(size.bytes(), 0, "0-sized accesses should never even get a `Pointer`");
         self.check_align(ptr.into(), align)?;
         self.check_bounds(cx, ptr, size)?;