diff --git a/src/librustc_mir/interpret/memory.rs b/src/librustc_mir/interpret/memory.rs index 49ad4b49b88b7..2f961ef9d9782 100644 --- a/src/librustc_mir/interpret/memory.rs +++ b/src/librustc_mir/interpret/memory.rs @@ -882,25 +882,16 @@ impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'a, 'mir, 'tcx, M> { ) -> EvalResult<'tcx> { // The bits have to be saved locally before writing to dest in case src and dest overlap. assert_eq!(size.bytes() as usize as u64, size.bytes()); - let mut v = Vec::with_capacity(size.bytes() as usize); - { - let src_allocation = self.get(src.alloc_id)?; - for i in 0..size.bytes() { - let defined = src_allocation.undef_mask.get(src.offset + Size::from_bytes(i)); - v.push(defined); - } - } + let undef_mask = self.get(src.alloc_id)?.undef_mask.clone(); + let dest_allocation = self.get_mut(dest.alloc_id)?; - { - let dest_allocation = self.get_mut(dest.alloc_id)?; - for (i, defined) in v.into_iter().enumerate() { - dest_allocation.undef_mask.set( - dest.offset + - Size::from_bytes(i as u64), - defined, - ); - } + for i in 0..size.bytes() { + let defined = undef_mask.get(src.offset + Size::from_bytes(i)); + dest_allocation.undef_mask.set( + dest.offset + Size::from_bytes(i), + defined + ); } Ok(())