@@ -116,36 +116,32 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
116116 . map( |( size, _) | size)
117117 . unwrap_or_else( || place. layout. size)
118118 ) ;
119- assert ! ( size. bytes( ) > 0 ) ;
120119 // Store how far we proceeded into the place so far. Everything to the left of
121120 // this offset has already been handled, in the sense that the frozen parts
122121 // have had `action` called on them.
123- let mut end_ptr = place. ptr ;
122+ let mut end_ptr = place. ptr . assert_ptr ( ) ;
124123 // Called when we detected an `UnsafeCell` at the given offset and size.
125124 // Calls `action` and advances `end_ptr`.
126125 let mut unsafe_cell_action = |unsafe_cell_ptr : Scalar < Tag > , unsafe_cell_size : Size | {
127- if unsafe_cell_size != Size :: ZERO {
128- debug_assert_eq ! ( unsafe_cell_ptr. to_ptr( ) . unwrap( ) . alloc_id,
129- end_ptr. to_ptr( ) . unwrap( ) . alloc_id) ;
130- debug_assert_eq ! ( unsafe_cell_ptr. to_ptr( ) . unwrap( ) . tag,
131- end_ptr. to_ptr( ) . unwrap( ) . tag) ;
132- }
126+ let unsafe_cell_ptr = unsafe_cell_ptr. assert_ptr ( ) ;
127+ debug_assert_eq ! ( unsafe_cell_ptr. alloc_id, end_ptr. alloc_id) ;
128+ debug_assert_eq ! ( unsafe_cell_ptr. tag, end_ptr. tag) ;
133129 // We assume that we are given the fields in increasing offset order,
134130 // and nothing else changes.
135- let unsafe_cell_offset = unsafe_cell_ptr. get_ptr_offset ( this ) ;
136- let end_offset = end_ptr. get_ptr_offset ( this ) ;
131+ let unsafe_cell_offset = unsafe_cell_ptr. offset ;
132+ let end_offset = end_ptr. offset ;
137133 assert ! ( unsafe_cell_offset >= end_offset) ;
138134 let frozen_size = unsafe_cell_offset - end_offset;
139135 // Everything between the end_ptr and this `UnsafeCell` is frozen.
140136 if frozen_size != Size :: ZERO {
141- action ( end_ptr. to_ptr ( ) ? , frozen_size, /*frozen*/ true ) ?;
137+ action ( end_ptr, frozen_size, /*frozen*/ true ) ?;
142138 }
143139 // This `UnsafeCell` is NOT frozen.
144140 if unsafe_cell_size != Size :: ZERO {
145- action ( unsafe_cell_ptr. to_ptr ( ) ? , unsafe_cell_size, /*frozen*/ false ) ?;
141+ action ( unsafe_cell_ptr, unsafe_cell_size, /*frozen*/ false ) ?;
146142 }
147143 // Update end end_ptr.
148- end_ptr = unsafe_cell_ptr. ptr_wrapping_offset ( unsafe_cell_size, this) ;
144+ end_ptr = unsafe_cell_ptr. wrapping_offset ( unsafe_cell_size, this) ;
149145 // Done
150146 Ok ( ( ) )
151147 } ;
@@ -234,7 +230,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
234230 layout:: FieldPlacement :: Arbitrary { .. } => {
235231 // Gather the subplaces and sort them before visiting.
236232 let mut places = fields. collect :: < InterpResult < ' tcx , Vec < MPlaceTy < ' tcx , Tag > > > > ( ) ?;
237- places. sort_by_key ( |place| place. ptr . get_ptr_offset ( self . ecx ( ) ) ) ;
233+ places. sort_by_key ( |place| place. ptr . assert_ptr ( ) . offset ) ;
238234 self . walk_aggregate ( place, places. into_iter ( ) . map ( Ok ) )
239235 }
240236 layout:: FieldPlacement :: Union { .. } => {
0 commit comments