miri cast: avoid unnecessary to_scalar_ptr
This commit is contained in:
parent
e4931eaaa3
commit
14ee66acec
2 changed files with 5 additions and 3 deletions
|
@ -260,7 +260,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
|
|
||||||
match (&src_pointee_ty.kind, &dest_pointee_ty.kind) {
|
match (&src_pointee_ty.kind, &dest_pointee_ty.kind) {
|
||||||
(&ty::Array(_, length), &ty::Slice(_)) => {
|
(&ty::Array(_, length), &ty::Slice(_)) => {
|
||||||
let ptr = self.read_immediate(src)?.to_scalar_ptr()?;
|
let ptr = self.read_immediate(src)?.to_scalar()?;
|
||||||
// u64 cast is from usize to u64, which is always good
|
// u64 cast is from usize to u64, which is always good
|
||||||
let val = Immediate::new_slice(
|
let val = Immediate::new_slice(
|
||||||
ptr,
|
ptr,
|
||||||
|
@ -279,7 +279,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
(_, &ty::Dynamic(ref data, _)) => {
|
(_, &ty::Dynamic(ref data, _)) => {
|
||||||
// Initial cast from sized to dyn trait
|
// Initial cast from sized to dyn trait
|
||||||
let vtable = self.get_vtable(src_pointee_ty, data.principal())?;
|
let vtable = self.get_vtable(src_pointee_ty, data.principal())?;
|
||||||
let ptr = self.read_immediate(src)?.to_scalar_ptr()?;
|
let ptr = self.read_immediate(src)?.to_scalar()?;
|
||||||
let val = Immediate::new_dyn_trait(ptr, vtable);
|
let val = Immediate::new_dyn_trait(ptr, vtable);
|
||||||
self.write_immediate(val, dest)
|
self.write_immediate(val, dest)
|
||||||
}
|
}
|
||||||
|
|
|
@ -287,7 +287,9 @@ where
|
||||||
&self,
|
&self,
|
||||||
val: ImmTy<'tcx, M::PointerTag>,
|
val: ImmTy<'tcx, M::PointerTag>,
|
||||||
) -> InterpResult<'tcx, MPlaceTy<'tcx, M::PointerTag>> {
|
) -> InterpResult<'tcx, MPlaceTy<'tcx, M::PointerTag>> {
|
||||||
let pointee_type = val.layout.ty.builtin_deref(true).unwrap().ty;
|
let pointee_type = val.layout.ty.builtin_deref(true)
|
||||||
|
.expect("`ref_to_mplace` called on non-ptr type")
|
||||||
|
.ty;
|
||||||
let layout = self.layout_of(pointee_type)?;
|
let layout = self.layout_of(pointee_type)?;
|
||||||
|
|
||||||
let mplace = MemPlace {
|
let mplace = MemPlace {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue