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, _)) => {
|
||||
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
|
||||
// Example: `Arc<T>` -> `Arc<Trait>`
|
||||
|
|
|
@ -594,7 +594,10 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
|
|||
Ok(true)
|
||||
}
|
||||
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)
|
||||
}
|
||||
ty::FnPtr(_sig) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue