@@ -120,7 +120,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
120
120
121
121
match & link_name[ ..] {
122
122
"malloc" => {
123
- let size = self . read_scalar ( args[ 0 ] ) ?. to_usize ( & self ) ?;
123
+ let size = self . read_scalar ( args[ 0 ] ) ?. to_usize ( self ) ?;
124
124
if size == 0 {
125
125
self . write_null ( dest) ?;
126
126
} else {
@@ -132,7 +132,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
132
132
133
133
"free" => {
134
134
let ptr = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?. erase_tag ( ) ; // raw ptr operation, no tag
135
- if !ptr. is_null_ptr ( & self ) {
135
+ if !ptr. is_null_ptr ( self ) {
136
136
self . memory_mut ( ) . deallocate (
137
137
ptr. to_ptr ( ) ?. with_default_tag ( ) ,
138
138
None ,
@@ -142,8 +142,8 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
142
142
}
143
143
144
144
"__rust_alloc" => {
145
- let size = self . read_scalar ( args[ 0 ] ) ?. to_usize ( & self ) ?;
146
- let align = self . read_scalar ( args[ 1 ] ) ?. to_usize ( & self ) ?;
145
+ let size = self . read_scalar ( args[ 0 ] ) ?. to_usize ( self ) ?;
146
+ let align = self . read_scalar ( args[ 1 ] ) ?. to_usize ( self ) ?;
147
147
if size == 0 {
148
148
return err ! ( HeapAllocZeroBytes ) ;
149
149
}
@@ -160,8 +160,8 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
160
160
self . write_scalar ( Scalar :: Ptr ( ptr) , dest) ?;
161
161
}
162
162
"__rust_alloc_zeroed" => {
163
- let size = self . read_scalar ( args[ 0 ] ) ?. to_usize ( & self ) ?;
164
- let align = self . read_scalar ( args[ 1 ] ) ?. to_usize ( & self ) ?;
163
+ let size = self . read_scalar ( args[ 0 ] ) ?. to_usize ( self ) ?;
164
+ let align = self . read_scalar ( args[ 1 ] ) ?. to_usize ( self ) ?;
165
165
if size == 0 {
166
166
return err ! ( HeapAllocZeroBytes ) ;
167
167
}
@@ -180,8 +180,8 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
180
180
}
181
181
"__rust_dealloc" => {
182
182
let ptr = self . read_scalar ( args[ 0 ] ) ?. to_ptr ( ) ?. erase_tag ( ) ; // raw ptr operation, no tag
183
- let old_size = self . read_scalar ( args[ 1 ] ) ?. to_usize ( & self ) ?;
184
- let align = self . read_scalar ( args[ 2 ] ) ?. to_usize ( & self ) ?;
183
+ let old_size = self . read_scalar ( args[ 1 ] ) ?. to_usize ( self ) ?;
184
+ let align = self . read_scalar ( args[ 2 ] ) ?. to_usize ( self ) ?;
185
185
if old_size == 0 {
186
186
return err ! ( HeapAllocZeroBytes ) ;
187
187
}
@@ -196,9 +196,9 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
196
196
}
197
197
"__rust_realloc" => {
198
198
let ptr = self . read_scalar ( args[ 0 ] ) ?. to_ptr ( ) ?. erase_tag ( ) ; // raw ptr operation, no tag
199
- let old_size = self . read_scalar ( args[ 1 ] ) ?. to_usize ( & self ) ?;
200
- let align = self . read_scalar ( args[ 2 ] ) ?. to_usize ( & self ) ?;
201
- let new_size = self . read_scalar ( args[ 3 ] ) ?. to_usize ( & self ) ?;
199
+ let old_size = self . read_scalar ( args[ 1 ] ) ?. to_usize ( self ) ?;
200
+ let align = self . read_scalar ( args[ 2 ] ) ?. to_usize ( self ) ?;
201
+ let new_size = self . read_scalar ( args[ 3 ] ) ?. to_usize ( self ) ?;
202
202
if old_size == 0 || new_size == 0 {
203
203
return err ! ( HeapAllocZeroBytes ) ;
204
204
}
@@ -222,7 +222,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
222
222
//
223
223
// libc::syscall(NR_GETRANDOM, buf.as_mut_ptr(), buf.len(), GRND_NONBLOCK)
224
224
// is called if a `HashMap` is created the regular way.
225
- match self . read_scalar ( args[ 0 ] ) ?. to_usize ( & self ) ? {
225
+ match self . read_scalar ( args[ 0 ] ) ?. to_usize ( self ) ? {
226
226
318 | 511 => {
227
227
return err ! ( Unimplemented (
228
228
"miri does not support random number generators" . to_owned( ) ,
@@ -260,7 +260,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
260
260
// Now we make a function call. TODO: Consider making this re-usable? EvalContext::step does sth. similar for the TLS dtors,
261
261
// and of course eval_main.
262
262
let mir = self . load_mir ( f_instance. def ) ?;
263
- let ret_place = MPlaceTy :: dangling ( self . layout_of ( self . tcx . mk_unit ( ) ) ?, & self ) . into ( ) ;
263
+ let ret_place = MPlaceTy :: dangling ( self . layout_of ( self . tcx . mk_unit ( ) ) ?, self ) . into ( ) ;
264
264
self . push_stack_frame (
265
265
f_instance,
266
266
mir. span ,
@@ -294,7 +294,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
294
294
"memcmp" => {
295
295
let left = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?. erase_tag ( ) ; // raw ptr operation
296
296
let right = self . read_scalar ( args[ 1 ] ) ?. not_undef ( ) ?. erase_tag ( ) ; // raw ptr operation
297
- let n = Size :: from_bytes ( self . read_scalar ( args[ 2 ] ) ?. to_usize ( & self ) ?) ;
297
+ let n = Size :: from_bytes ( self . read_scalar ( args[ 2 ] ) ?. to_usize ( self ) ?) ;
298
298
299
299
let result = {
300
300
let left_bytes = self . memory ( ) . read_bytes ( left. with_default_tag ( ) , n) ?;
@@ -318,11 +318,11 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
318
318
let ptr = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?. erase_tag ( ) ; // raw ptr operation
319
319
let ptr = ptr. with_default_tag ( ) ;
320
320
let val = self . read_scalar ( args[ 1 ] ) ?. to_bytes ( ) ? as u8 ;
321
- let num = self . read_scalar ( args[ 2 ] ) ?. to_usize ( & self ) ?;
321
+ let num = self . read_scalar ( args[ 2 ] ) ?. to_usize ( self ) ?;
322
322
if let Some ( idx) = self . memory ( ) . read_bytes ( ptr, Size :: from_bytes ( num) ) ?
323
323
. iter ( ) . rev ( ) . position ( |& c| c == val)
324
324
{
325
- let new_ptr = ptr. ptr_offset ( Size :: from_bytes ( num - idx as u64 - 1 ) , & self ) ?;
325
+ let new_ptr = ptr. ptr_offset ( Size :: from_bytes ( num - idx as u64 - 1 ) , self ) ?;
326
326
self . write_scalar ( new_ptr, dest) ?;
327
327
} else {
328
328
self . write_null ( dest) ?;
@@ -333,12 +333,12 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
333
333
let ptr = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?. erase_tag ( ) ; // raw ptr operation
334
334
let ptr = ptr. with_default_tag ( ) ;
335
335
let val = self . read_scalar ( args[ 1 ] ) ?. to_bytes ( ) ? as u8 ;
336
- let num = self . read_scalar ( args[ 2 ] ) ?. to_usize ( & self ) ?;
336
+ let num = self . read_scalar ( args[ 2 ] ) ?. to_usize ( self ) ?;
337
337
if let Some ( idx) = self . memory ( ) . read_bytes ( ptr, Size :: from_bytes ( num) ) ?. iter ( ) . position (
338
338
|& c| c == val,
339
339
)
340
340
{
341
- let new_ptr = ptr. ptr_offset ( Size :: from_bytes ( idx as u64 ) , & self ) ?;
341
+ let new_ptr = ptr. ptr_offset ( Size :: from_bytes ( idx as u64 ) , self ) ?;
342
342
self . write_scalar ( new_ptr, dest) ?;
343
343
} else {
344
344
self . write_null ( dest) ?;
@@ -351,7 +351,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
351
351
let name = self . memory ( ) . read_c_str ( name_ptr. with_default_tag ( ) ) ?;
352
352
match self . machine . env_vars . get ( name) {
353
353
Some ( & var) => Scalar :: Ptr ( var) ,
354
- None => Scalar :: ptr_null ( * self . tcx ) ,
354
+ None => Scalar :: ptr_null ( & * self . tcx ) ,
355
355
}
356
356
} ;
357
357
self . write_scalar ( result, dest) ?;
@@ -361,7 +361,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
361
361
let mut success = None ;
362
362
{
363
363
let name_ptr = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?. erase_tag ( ) ; // raw ptr operation
364
- if !name_ptr. is_null_ptr ( & self ) {
364
+ if !name_ptr. is_null_ptr ( self ) {
365
365
let name = self . memory ( ) . read_c_str ( name_ptr. to_ptr ( ) ?
366
366
. with_default_tag ( ) ) ?. to_owned ( ) ;
367
367
if !name. is_empty ( ) && !name. contains ( & b'=' ) {
@@ -385,7 +385,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
385
385
let name_ptr = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?. erase_tag ( ) ; // raw ptr operation
386
386
let value_ptr = self . read_scalar ( args[ 1 ] ) ?. to_ptr ( ) ?. erase_tag ( ) ; // raw ptr operation
387
387
let value = self . memory ( ) . read_c_str ( value_ptr. with_default_tag ( ) ) ?;
388
- if !name_ptr. is_null_ptr ( & self ) {
388
+ if !name_ptr. is_null_ptr ( self ) {
389
389
let name = self . memory ( ) . read_c_str ( name_ptr. to_ptr ( ) ?. with_default_tag ( ) ) ?;
390
390
if !name. is_empty ( ) && !name. contains ( & b'=' ) {
391
391
new = Some ( ( name. to_owned ( ) , value. to_owned ( ) ) ) ;
@@ -400,7 +400,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
400
400
MiriMemoryKind :: Env . into ( ) ,
401
401
) ?. with_default_tag ( ) ;
402
402
self . memory_mut ( ) . write_bytes ( value_copy. into ( ) , & value) ?;
403
- let trailing_zero_ptr = value_copy. offset ( Size :: from_bytes ( value. len ( ) as u64 ) , & self ) ?. into ( ) ;
403
+ let trailing_zero_ptr = value_copy. offset ( Size :: from_bytes ( value. len ( ) as u64 ) , self ) ?. into ( ) ;
404
404
self . memory_mut ( ) . write_bytes ( trailing_zero_ptr, & [ 0 ] ) ?;
405
405
if let Some ( var) = self . machine . env_vars . insert (
406
406
name. to_owned ( ) ,
@@ -510,7 +510,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
510
510
let key_layout = self . layout_of ( key_type) ?;
511
511
512
512
// Create key and write it into the memory where key_ptr wants it
513
- let key = self . machine . tls . create_tls_key ( dtor, * self . tcx ) as u128 ;
513
+ let key = self . machine . tls . create_tls_key ( dtor, & * self . tcx ) as u128 ;
514
514
if key_layout. size . bits ( ) < 128 && key >= ( 1u128 << key_layout. size . bits ( ) as u128 ) {
515
515
return err ! ( OutOfTls ) ;
516
516
}
@@ -555,7 +555,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
555
555
}
556
556
"pthread_attr_getstack" => {
557
557
// second argument is where we are supposed to write the stack size
558
- let ptr = self . ref_to_mplace ( self . read_value ( args[ 1 ] ) ?) ?;
558
+ let ptr = self . ref_to_mplace ( self . read_immediate ( args[ 1 ] ) ?) ?;
559
559
let stackaddr = Scalar :: from_int ( 0x80000 , args[ 1 ] . layout . size ) ; // just any address
560
560
self . write_scalar ( stackaddr, ptr. into ( ) ) ?;
561
561
// return 0
@@ -613,7 +613,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
613
613
// This just creates a key; Windows does not natively support TLS dtors.
614
614
615
615
// Create key and return it
616
- let key = self . machine . tls . create_tls_key ( None , * self . tcx ) as u128 ;
616
+ let key = self . machine . tls . create_tls_key ( None , & * self . tcx ) as u128 ;
617
617
618
618
// Figure out how large a TLS key actually is. This is c::DWORD.
619
619
if dest. layout . size . bits ( ) < 128 && key >= ( 1u128 << dest. layout . size . bits ( ) as u128 ) {
0 commit comments