@@ -113,11 +113,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
113
113
if let ty:: Dynamic ( data, _, ty:: DynStar ) = cast_ty. kind ( ) {
114
114
// Initial cast from sized to dyn trait
115
115
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) ;
121
120
self . write_immediate ( val, dest) ?;
122
121
} else {
123
122
bug ! ( )
@@ -327,7 +326,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
327
326
let new_vptr = self . get_vtable_ptr ( ty, data_b. principal ( ) ) ?;
328
327
self . write_immediate ( Immediate :: new_dyn_trait ( old_data, new_vptr, self ) , dest)
329
328
}
330
- ( _, & ty:: Dynamic ( ref data, _, _repr ) ) => {
329
+ ( _, & ty:: Dynamic ( ref data, _, ty :: Dyn ) ) => {
331
330
// Initial cast from sized to dyn trait
332
331
let vtable = self . get_vtable_ptr ( src_pointee_ty, data. principal ( ) ) ?;
333
332
let ptr = self . read_scalar ( src) ?;
0 commit comments