@@ -116,36 +116,32 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
116
116
. map( |( size, _) | size)
117
117
. unwrap_or_else( || place. layout. size)
118
118
) ;
119
- assert ! ( size. bytes( ) > 0 ) ;
120
119
// Store how far we proceeded into the place so far. Everything to the left of
121
120
// this offset has already been handled, in the sense that the frozen parts
122
121
// have had `action` called on them.
123
- let mut end_ptr = place. ptr ;
122
+ let mut end_ptr = place. ptr . assert_ptr ( ) ;
124
123
// Called when we detected an `UnsafeCell` at the given offset and size.
125
124
// Calls `action` and advances `end_ptr`.
126
125
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) ;
133
129
// We assume that we are given the fields in increasing offset order,
134
130
// 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 ;
137
133
assert ! ( unsafe_cell_offset >= end_offset) ;
138
134
let frozen_size = unsafe_cell_offset - end_offset;
139
135
// Everything between the end_ptr and this `UnsafeCell` is frozen.
140
136
if frozen_size != Size :: ZERO {
141
- action ( end_ptr. to_ptr ( ) ? , frozen_size, /*frozen*/ true ) ?;
137
+ action ( end_ptr, frozen_size, /*frozen*/ true ) ?;
142
138
}
143
139
// This `UnsafeCell` is NOT frozen.
144
140
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 ) ?;
146
142
}
147
143
// 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) ;
149
145
// Done
150
146
Ok ( ( ) )
151
147
} ;
@@ -234,7 +230,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
234
230
layout:: FieldPlacement :: Arbitrary { .. } => {
235
231
// Gather the subplaces and sort them before visiting.
236
232
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 ) ;
238
234
self . walk_aggregate ( place, places. into_iter ( ) . map ( Ok ) )
239
235
}
240
236
layout:: FieldPlacement :: Union { .. } => {
0 commit comments