@@ -604,16 +604,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
604
604
Misc => {
605
605
let src = self . eval_operand ( operand) ?;
606
606
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) {
617
608
let ( data_ptr, _meta_ptr) = self . get_fat_ptr ( src) ;
618
609
let ptr_size = self . memory . pointer_size ( ) ;
619
610
let dest_ty = self . monomorphize ( dest_ty, self . substs ( ) ) ;
@@ -626,6 +617,12 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
626
617
// pointer-cast of that pointer to desired pointer type.
627
618
self . memory . copy ( data_ptr, dest, ptr_size, ptr_size) ?;
628
619
}
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) ?;
629
626
}
630
627
}
631
628
@@ -656,26 +653,6 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
656
653
Ok ( ( ) )
657
654
}
658
655
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
-
679
656
fn type_is_fat_ptr ( & self , ty : Ty < ' tcx > ) -> bool {
680
657
match ty. sty {
681
658
ty:: TyRawPtr ( ty:: TypeAndMut { ty, ..} ) |
0 commit comments