@@ -141,7 +141,7 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for super::MiriEvalContext<'a, 'mir, '
141
141
) -> EvalResult < ' tcx , bool > {
142
142
let size = self . pointer_size ( ) ;
143
143
Ok ( match ( left, right) {
144
- ( Scalar :: Bits { .. } , Scalar :: Bits { .. } ) =>
144
+ ( Scalar :: Raw { .. } , Scalar :: Raw { .. } ) =>
145
145
left. to_bits ( size) ? == right. to_bits ( size) ?,
146
146
( Scalar :: Ptr ( left) , Scalar :: Ptr ( right) ) => {
147
147
// Comparison illegal if one of them is out-of-bounds, *unless* they
@@ -165,10 +165,10 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for super::MiriEvalContext<'a, 'mir, '
165
165
}
166
166
}
167
167
// Comparing ptr and integer.
168
- ( Scalar :: Ptr ( ptr) , Scalar :: Bits { bits , size } ) |
169
- ( Scalar :: Bits { bits , size } , Scalar :: Ptr ( ptr) ) => {
168
+ ( Scalar :: Ptr ( ptr) , Scalar :: Raw { data , size } ) |
169
+ ( Scalar :: Raw { data , size } , Scalar :: Ptr ( ptr) ) => {
170
170
assert_eq ! ( size as u64 , self . pointer_size( ) . bytes( ) ) ;
171
- let bits = bits as u64 ;
171
+ let bits = data as u64 ;
172
172
173
173
// Case I: Comparing real pointers with "small" integers.
174
174
// Really we should only do this for NULL, but pragmatically speaking on non-bare-metal systems,
@@ -262,7 +262,7 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for super::MiriEvalContext<'a, 'mir, '
262
262
// Truncate (shift left to drop out leftover values, shift right to fill with zeroes).
263
263
( value << shift) >> shift
264
264
} ;
265
- let ptr_size = self . memory ( ) . pointer_size ( ) . bytes ( ) as u8 ;
265
+ let ptr_size = self . memory ( ) . pointer_size ( ) ;
266
266
trace ! ( "ptr BitAnd, align {}, operand {:#010x}, base_mask {:#010x}" ,
267
267
ptr_base_align, right, base_mask) ;
268
268
if right & base_mask == base_mask {
@@ -278,7 +278,8 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for super::MiriEvalContext<'a, 'mir, '
278
278
)
279
279
} else if right & base_mask == 0 {
280
280
// Case 2: the base address bits are all taken away, i.e., right is all-0 there.
281
- ( Scalar :: Bits { bits : ( left. offset . bytes ( ) as u128 ) & right, size : ptr_size } , false )
281
+ let v = Scalar :: from_uint ( ( left. offset . bytes ( ) as u128 ) & right, ptr_size) ;
282
+ ( v, false )
282
283
} else {
283
284
return err ! ( ReadPointerAsBytes ) ;
284
285
}
@@ -289,18 +290,15 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for super::MiriEvalContext<'a, 'mir, '
289
290
// (Intuition: modulo a divisor leaks less information.)
290
291
let ptr_base_align = self . memory ( ) . get ( left. alloc_id ) ?. align . bytes ( ) ;
291
292
let right = right as u64 ;
292
- let ptr_size = self . memory ( ) . pointer_size ( ) . bytes ( ) as u8 ;
293
+ let ptr_size = self . memory ( ) . pointer_size ( ) ;
293
294
if right == 1 {
294
295
// Modulo 1 is always 0.
295
- ( Scalar :: Bits { bits : 0 , size : ptr_size } , false )
296
+ ( Scalar :: from_uint ( 0u32 , ptr_size) , false )
296
297
} else if ptr_base_align % right == 0 {
297
298
// The base address would be cancelled out by the modulo operation, so we can
298
299
// just take the modulo of the offset.
299
300
(
300
- Scalar :: Bits {
301
- bits : ( left. offset . bytes ( ) % right) as u128 ,
302
- size : ptr_size
303
- } ,
301
+ Scalar :: from_uint ( ( left. offset . bytes ( ) % right) as u128 , ptr_size) ,
304
302
false ,
305
303
)
306
304
} else {
0 commit comments