fix box with custom allocator in miri
This commit is contained in:
parent
8aab472d52
commit
6e32a16520
2 changed files with 4 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,10 @@ 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")?;
|
||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
ty::FnPtr(_sig) => {
|
ty::FnPtr(_sig) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue