@@ -11,7 +11,7 @@ use rustc::mir::interpret::{
1111use  rustc:: mir:: CastKind ; 
1212use  rustc_apfloat:: Float ; 
1313
14- use  super :: { InterpretCx ,  Machine ,  PlaceTy ,  OpTy ,  ImmTy ,   Immediate } ; 
14+ use  super :: { InterpretCx ,  Machine ,  PlaceTy ,  OpTy ,  Immediate } ; 
1515
1616impl < ' a ,  ' mir ,  ' tcx ,  M :  Machine < ' a ,  ' mir ,  ' tcx > >  InterpretCx < ' a ,  ' mir ,  ' tcx ,  M >  { 
1717    fn  type_is_fat_ptr ( & self ,  ty :  Ty < ' tcx > )  -> bool  { 
@@ -306,6 +306,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> InterpretCx<'a, 'mir, 'tcx, M>
306306        src :  OpTy < ' tcx ,  M :: PointerTag > , 
307307        dest :  PlaceTy < ' tcx ,  M :: PointerTag > , 
308308    )  -> EvalResult < ' tcx >  { 
309+         trace ! ( "Unsizing {:?} into {:?}" ,  src,  dest) ; 
309310        match  ( & src. layout . ty . sty ,  & dest. layout . ty . sty )  { 
310311            ( & ty:: Ref ( _,  s,  _) ,  & ty:: Ref ( _,  d,  _) )  |
311312            ( & ty:: Ref ( _,  s,  _) ,  & ty:: RawPtr ( TypeAndMut  {  ty :  d,  .. } ) )  |
@@ -335,20 +336,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> InterpretCx<'a, 'mir, 'tcx, M>
335336                    if  dst_field. layout . is_zst ( )  { 
336337                        continue ; 
337338                    } 
338-                     let  src_field = match  src. try_as_mplace ( )  { 
339-                         Ok ( mplace)  => { 
340-                             let  src_field = self . mplace_field ( mplace,  i as  u64 ) ?; 
341-                             src_field. into ( ) 
342-                         } 
343-                         Err ( ..)  => { 
344-                             let  src_field_layout = src. layout . field ( self ,  i) ?; 
345-                             // this must be a field covering the entire thing 
346-                             assert_eq ! ( src. layout. fields. offset( i) . bytes( ) ,  0 ) ; 
347-                             assert_eq ! ( src_field_layout. size,  src. layout. size) ; 
348-                             // just sawp out the layout 
349-                             OpTy :: from ( ImmTy  {  imm :  src. to_immediate ( ) ,  layout :  src_field_layout } ) 
350-                         } 
351-                     } ; 
339+                     let  src_field = self . operand_field ( src,  i as  u64 ) ?; 
352340                    if  src_field. layout . ty  == dst_field. layout . ty  { 
353341                        self . copy_op ( src_field,  dst_field) ?; 
354342                    }  else  { 
0 commit comments