@@ -44,40 +44,28 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
4444 }
4545
4646 Misc => {
47- let src_layout = src. layout ;
4847 let src = self . read_immediate ( src) ?;
4948
50- let src = if M :: ENABLE_PTR_TRACKING_HOOKS && src_layout. ty . is_region_ptr ( ) {
51- // The only `Misc` casts on references are those creating raw pointers.
52- assert ! ( dest. layout. ty. is_unsafe_ptr( ) ) ;
53- // For the purpose of the "ptr tag hooks", treat this as creating
54- // a new, raw reference.
55- let place = self . ref_to_mplace ( src) ?;
56- self . create_ref ( place, None ) ?
57- } else {
58- * src
59- } ;
60-
61- if self . type_is_fat_ptr ( src_layout. ty ) {
62- match ( src, self . type_is_fat_ptr ( dest. layout . ty ) ) {
49+ if self . type_is_fat_ptr ( src. layout . ty ) {
50+ match ( * src, self . type_is_fat_ptr ( dest. layout . ty ) ) {
6351 // pointers to extern types
6452 ( Immediate :: Scalar ( _) , _) |
6553 // slices and trait objects to other slices/trait objects
6654 ( Immediate :: ScalarPair ( ..) , true ) => {
6755 // No change to immediate
68- self . write_immediate ( src, dest) ?;
56+ self . write_immediate ( * src, dest) ?;
6957 }
7058 // slices and trait objects to thin pointers (dropping the metadata)
7159 ( Immediate :: ScalarPair ( data, _) , false ) => {
7260 self . write_scalar ( data, dest) ?;
7361 }
7462 }
7563 } else {
76- match src_layout . variants {
64+ match src . layout . variants {
7765 layout:: Variants :: Single { index } => {
78- if let Some ( def) = src_layout . ty . ty_adt_def ( ) {
66+ if let Some ( def) = src . layout . ty . ty_adt_def ( ) {
7967 // Cast from a univariant enum
80- assert ! ( src_layout . is_zst( ) ) ;
68+ assert ! ( src . layout . is_zst( ) ) ;
8169 let discr_val = def
8270 . discriminant_for_variant ( * self . tcx , index)
8371 . val ;
@@ -90,8 +78,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
9078 layout:: Variants :: NicheFilling { .. } => { } ,
9179 }
9280
93- let src = src. to_scalar ( ) ?;
94- let dest_val = self . cast_scalar ( src, src_layout, dest. layout ) ?;
81+ let dest_val = self . cast_scalar ( src. to_scalar ( ) ?, src. layout , dest. layout ) ?;
9582 self . write_scalar ( dest_val, dest) ?;
9683 }
9784 }
0 commit comments