mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 09:14:20 +00:00
Rollup merge of #91303 - RalfJung:array-init-align, r=oli-obk
Miri: fix alignment check in array initialization https://github.com/rust-lang/rust/pull/85376 introduced a regression in Miri, reported at https://github.com/rust-lang/miri/issues/1919 and https://github.com/rust-lang/miri/issues/1925. This PR fixes that. I will add tests to Miri once this lands. r? `@oli-obk` Fixes https://github.com/rust-lang/miri/issues/1919 Fixes https://github.com/rust-lang/miri/issues/1925
This commit is contained in:
commit
7134ae0a8d
@ -242,11 +242,15 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
let elem_size = first.layout.size;
|
||||
let first_ptr = first.ptr;
|
||||
let rest_ptr = first_ptr.offset(elem_size, self)?;
|
||||
// For the alignment of `rest_ptr`, we crucially do *not* use `first.align` as
|
||||
// that place might be more aligned than its type mandates (a `u8` array could
|
||||
// be 4-aligned if it sits at the right spot in a struct). Instead we use
|
||||
// `first.layout.align`, i.e., the alignment given by the type.
|
||||
self.memory.copy_repeatedly(
|
||||
first_ptr,
|
||||
first.align,
|
||||
rest_ptr,
|
||||
first.align,
|
||||
first.layout.align.abi,
|
||||
elem_size,
|
||||
length - 1,
|
||||
/*nonoverlapping:*/ true,
|
||||
|
Loading…
Reference in New Issue
Block a user