@@ -11,7 +11,7 @@ use rustc::mir::interpret::{
11
11
use rustc:: mir:: CastKind ;
12
12
use rustc_apfloat:: Float ;
13
13
14
- use super :: { InterpretCx , Machine , PlaceTy , OpTy , ImmTy , Immediate } ;
14
+ use super :: { InterpretCx , Machine , PlaceTy , OpTy , Immediate } ;
15
15
16
16
impl < ' a , ' mir , ' tcx , M : Machine < ' a , ' mir , ' tcx > > InterpretCx < ' a , ' mir , ' tcx , M > {
17
17
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>
306
306
src : OpTy < ' tcx , M :: PointerTag > ,
307
307
dest : PlaceTy < ' tcx , M :: PointerTag > ,
308
308
) -> EvalResult < ' tcx > {
309
+ trace ! ( "Unsizing {:?} into {:?}" , src, dest) ;
309
310
match ( & src. layout . ty . sty , & dest. layout . ty . sty ) {
310
311
( & ty:: Ref ( _, s, _) , & ty:: Ref ( _, d, _) ) |
311
312
( & 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>
335
336
if dst_field. layout . is_zst ( ) {
336
337
continue ;
337
338
}
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 ) ?;
352
340
if src_field. layout . ty == dst_field. layout . ty {
353
341
self . copy_op ( src_field, dst_field) ?;
354
342
} else {
0 commit comments