@@ -113,11 +113,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
113113 if let ty:: Dynamic ( data, _, ty:: DynStar ) = cast_ty. kind ( ) {
114114 // Initial cast from sized to dyn trait
115115 let vtable = self . get_vtable_ptr ( src. layout . ty , data. principal ( ) ) ?;
116- let ptr = self . read_immediate ( src) ?. to_scalar ( ) ;
117- // FIXME(dyn-star): This should not use new_dyn_trait, but
118- // it does exactly the same thing (makes a scalar pair)...
119- // so maybe we should just duplicate/rename the function.
120- let val = Immediate :: new_dyn_trait ( ptr, vtable, & * self . tcx ) ;
116+ let vtable = Scalar :: from_maybe_pointer ( vtable, self ) ;
117+ let data = self . read_immediate ( src) ?. to_scalar ( ) ;
118+ let _assert_pointer_sized = data. to_pointer ( self ) ?;
119+ let val = Immediate :: ScalarPair ( data, vtable) ;
121120 self . write_immediate ( val, dest) ?;
122121 } else {
123122 bug ! ( )
@@ -327,7 +326,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
327326 let new_vptr = self . get_vtable_ptr ( ty, data_b. principal ( ) ) ?;
328327 self . write_immediate ( Immediate :: new_dyn_trait ( old_data, new_vptr, self ) , dest)
329328 }
330- ( _, & ty:: Dynamic ( ref data, _, _repr ) ) => {
329+ ( _, & ty:: Dynamic ( ref data, _, ty :: Dyn ) ) => {
331330 // Initial cast from sized to dyn trait
332331 let vtable = self . get_vtable_ptr ( src_pointee_ty, data. principal ( ) ) ?;
333332 let ptr = self . read_scalar ( src) ?;
0 commit comments