提交 faef6a30 编写于 作者: W Wesley Wiser

Copy undef_masks correctly for repeated bytes

上级 84fe0c40
......@@ -666,7 +666,7 @@ pub fn copy_repeatedly(
}
}
self.copy_undef_mask(src, dest, size * length)?;
self.copy_undef_mask(src, dest, size, length)?;
// copy back the relocations
self.get_mut(dest.alloc_id)?.relocations.insert_presorted(relocations);
......@@ -887,6 +887,7 @@ fn copy_undef_mask(
src: Pointer,
dest: Pointer,
size: Size,
repeat: u64,
) -> 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());
......@@ -896,10 +897,13 @@ fn copy_undef_mask(
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
);
for j in 0..repeat {
dest_allocation.undef_mask.set(
dest.offset + Size::from_bytes(i + (size.bytes() * j)),
defined
);
}
}
Ok(())
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册