Skip to content

Commit 168d9e7

Browse files
committed
don't use type_is_immediate for finding fat ptr casts
1 parent d627cc7 commit 168d9e7

File tree

1 file changed

+7
-30
lines changed

1 file changed

+7
-30
lines changed

src/interpreter/mod.rs

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -604,16 +604,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
604604
Misc => {
605605
let src = self.eval_operand(operand)?;
606606
let src_ty = self.operand_ty(operand);
607-
if self.type_is_immediate(src_ty) {
608-
// FIXME: dest_ty should already be monomorphized
609-
let dest_ty = self.monomorphize(dest_ty, self.substs());
610-
assert!(self.type_is_immediate(dest_ty));
611-
let src_val = self.read_primval(src, src_ty)?;
612-
let dest_val = self.cast_primval(src_val, dest_ty)?;
613-
self.memory.write_primval(dest, dest_val)?;
614-
} else {
615-
// Casts from a fat-ptr.
616-
assert!(self.type_is_fat_ptr(src_ty));
607+
if self.type_is_fat_ptr(src_ty) {
617608
let (data_ptr, _meta_ptr) = self.get_fat_ptr(src);
618609
let ptr_size = self.memory.pointer_size();
619610
let dest_ty = self.monomorphize(dest_ty, self.substs());
@@ -626,6 +617,12 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
626617
// pointer-cast of that pointer to desired pointer type.
627618
self.memory.copy(data_ptr, dest, ptr_size, ptr_size)?;
628619
}
620+
} else {
621+
// FIXME: dest_ty should already be monomorphized
622+
let dest_ty = self.monomorphize(dest_ty, self.substs());
623+
let src_val = self.read_primval(src, src_ty)?;
624+
let dest_val = self.cast_primval(src_val, dest_ty)?;
625+
self.memory.write_primval(dest, dest_val)?;
629626
}
630627
}
631628

@@ -656,26 +653,6 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
656653
Ok(())
657654
}
658655

659-
/// equivalent to rustc_trans::common::type_is_immediate
660-
fn type_is_immediate(&self, ty: Ty<'tcx>) -> bool {
661-
let simple = ty.is_scalar() ||
662-
ty.is_unique() || ty.is_region_ptr() ||
663-
ty.is_simd();
664-
if simple && !self.type_is_fat_ptr(ty) {
665-
return true;
666-
}
667-
if !self.type_is_sized(ty) {
668-
return false;
669-
}
670-
match ty.sty {
671-
ty::TyStruct(..) | ty::TyEnum(..) | ty::TyTuple(..) | ty::TyArray(_, _) |
672-
ty::TyClosure(..) => {
673-
self.type_size(ty) < self.memory.pointer_size()
674-
}
675-
_ => self.type_size(ty) == 0
676-
}
677-
}
678-
679656
fn type_is_fat_ptr(&self, ty: Ty<'tcx>) -> bool {
680657
match ty.sty {
681658
ty::TyRawPtr(ty::TypeAndMut{ty, ..}) |

0 commit comments

Comments
 (0)