Rollup merge of #98554 - DrMeepster:box_unsizing_is_not_special, r=RalfJung
Fix box with custom allocator in miri This should fix the failures in https://github.com/rust-lang/miri/pull/2072 and https://github.com/rust-lang/rust/pull/98510. cc ```@RalfJung```
This commit is contained in:
commit
b2836bd34c
2 changed files with 7 additions and 17 deletions
|
@ -366,22 +366,6 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
}
|
}
|
||||||
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) => {
|
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) => {
|
||||||
assert_eq!(def_a, def_b);
|
assert_eq!(def_a, def_b);
|
||||||
if def_a.is_box() || def_b.is_box() {
|
|
||||||
if !def_a.is_box() || !def_b.is_box() {
|
|
||||||
span_bug!(
|
|
||||||
self.cur_span(),
|
|
||||||
"invalid unsizing between {:?} -> {:?}",
|
|
||||||
src.layout.ty,
|
|
||||||
cast_ty.ty
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return self.unsize_into_ptr(
|
|
||||||
src,
|
|
||||||
dest,
|
|
||||||
src.layout.ty.boxed_ty(),
|
|
||||||
cast_ty.ty.boxed_ty(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// unsizing of generic struct with pointer fields
|
// unsizing of generic struct with pointer fields
|
||||||
// Example: `Arc<T>` -> `Arc<Trait>`
|
// Example: `Arc<T>` -> `Arc<Trait>`
|
||||||
|
|
|
@ -594,7 +594,13 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
|
||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
ty::Adt(def, ..) if def.is_box() => {
|
ty::Adt(def, ..) if def.is_box() => {
|
||||||
self.check_safe_pointer(value, "box")?;
|
let unique = self.ecx.operand_field(value, 0)?;
|
||||||
|
let nonnull = self.ecx.operand_field(&unique, 0)?;
|
||||||
|
let ptr = self.ecx.operand_field(&nonnull, 0)?;
|
||||||
|
self.check_safe_pointer(&ptr, "box")?;
|
||||||
|
|
||||||
|
// Check other fields of Box
|
||||||
|
self.walk_value(value)?;
|
||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
ty::FnPtr(_sig) => {
|
ty::FnPtr(_sig) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue