Skip to content

Commit 0e9e0f2

Browse files
authored
Merge pull request #510 from solson/rustup
rustup: value -> immediate, by-value HasLayout, edition 2018
2 parents c6ffcd0 + f6d6470 commit 0e9e0f2

File tree

9 files changed

+78
-77
lines changed

9 files changed

+78
-77
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ repository = "https://github.com/solson/miri"
99
version = "0.1.0"
1010
build = "build.rs"
1111
default-run = "miri"
12+
edition = "2018"
1213

1314
[lib]
1415
test = true # we have unit tests

rust-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
nightly-2018-11-04
1+
nightly-2018-11-05

src/bin/miri-rustc-tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(rustc_private)]
1+
#![feature(rustc_private, extern_crate_item_prelude)]
22
extern crate miri;
33
extern crate getopts;
44
extern crate rustc;

src/bin/miri.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(rustc_private)]
1+
#![feature(rustc_private, extern_crate_item_prelude)]
22

33
extern crate getopts;
44
extern crate miri;

src/fn_call.rs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
120120

121121
match &link_name[..] {
122122
"malloc" => {
123-
let size = self.read_scalar(args[0])?.to_usize(&self)?;
123+
let size = self.read_scalar(args[0])?.to_usize(self)?;
124124
if size == 0 {
125125
self.write_null(dest)?;
126126
} else {
@@ -132,7 +132,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
132132

133133
"free" => {
134134
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) {
136136
self.memory_mut().deallocate(
137137
ptr.to_ptr()?.with_default_tag(),
138138
None,
@@ -142,8 +142,8 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
142142
}
143143

144144
"__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)?;
147147
if size == 0 {
148148
return err!(HeapAllocZeroBytes);
149149
}
@@ -160,8 +160,8 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
160160
self.write_scalar(Scalar::Ptr(ptr), dest)?;
161161
}
162162
"__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)?;
165165
if size == 0 {
166166
return err!(HeapAllocZeroBytes);
167167
}
@@ -180,8 +180,8 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
180180
}
181181
"__rust_dealloc" => {
182182
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)?;
185185
if old_size == 0 {
186186
return err!(HeapAllocZeroBytes);
187187
}
@@ -196,9 +196,9 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
196196
}
197197
"__rust_realloc" => {
198198
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)?;
202202
if old_size == 0 || new_size == 0 {
203203
return err!(HeapAllocZeroBytes);
204204
}
@@ -222,7 +222,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
222222
//
223223
// libc::syscall(NR_GETRANDOM, buf.as_mut_ptr(), buf.len(), GRND_NONBLOCK)
224224
// 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)? {
226226
318 | 511 => {
227227
return err!(Unimplemented(
228228
"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
260260
// Now we make a function call. TODO: Consider making this re-usable? EvalContext::step does sth. similar for the TLS dtors,
261261
// and of course eval_main.
262262
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();
264264
self.push_stack_frame(
265265
f_instance,
266266
mir.span,
@@ -294,7 +294,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
294294
"memcmp" => {
295295
let left = self.read_scalar(args[0])?.not_undef()?.erase_tag(); // raw ptr operation
296296
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)?);
298298

299299
let result = {
300300
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
318318
let ptr = self.read_scalar(args[0])?.not_undef()?.erase_tag(); // raw ptr operation
319319
let ptr = ptr.with_default_tag();
320320
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)?;
322322
if let Some(idx) = self.memory().read_bytes(ptr, Size::from_bytes(num))?
323323
.iter().rev().position(|&c| c == val)
324324
{
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)?;
326326
self.write_scalar(new_ptr, dest)?;
327327
} else {
328328
self.write_null(dest)?;
@@ -333,12 +333,12 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
333333
let ptr = self.read_scalar(args[0])?.not_undef()?.erase_tag(); // raw ptr operation
334334
let ptr = ptr.with_default_tag();
335335
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)?;
337337
if let Some(idx) = self.memory().read_bytes(ptr, Size::from_bytes(num))?.iter().position(
338338
|&c| c == val,
339339
)
340340
{
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)?;
342342
self.write_scalar(new_ptr, dest)?;
343343
} else {
344344
self.write_null(dest)?;
@@ -351,7 +351,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
351351
let name = self.memory().read_c_str(name_ptr.with_default_tag())?;
352352
match self.machine.env_vars.get(name) {
353353
Some(&var) => Scalar::Ptr(var),
354-
None => Scalar::ptr_null(*self.tcx),
354+
None => Scalar::ptr_null(&*self.tcx),
355355
}
356356
};
357357
self.write_scalar(result, dest)?;
@@ -361,7 +361,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
361361
let mut success = None;
362362
{
363363
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) {
365365
let name = self.memory().read_c_str(name_ptr.to_ptr()?
366366
.with_default_tag())?.to_owned();
367367
if !name.is_empty() && !name.contains(&b'=') {
@@ -385,7 +385,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
385385
let name_ptr = self.read_scalar(args[0])?.not_undef()?.erase_tag(); // raw ptr operation
386386
let value_ptr = self.read_scalar(args[1])?.to_ptr()?.erase_tag(); // raw ptr operation
387387
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) {
389389
let name = self.memory().read_c_str(name_ptr.to_ptr()?.with_default_tag())?;
390390
if !name.is_empty() && !name.contains(&b'=') {
391391
new = Some((name.to_owned(), value.to_owned()));
@@ -400,7 +400,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
400400
MiriMemoryKind::Env.into(),
401401
)?.with_default_tag();
402402
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();
404404
self.memory_mut().write_bytes(trailing_zero_ptr, &[0])?;
405405
if let Some(var) = self.machine.env_vars.insert(
406406
name.to_owned(),
@@ -510,7 +510,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
510510
let key_layout = self.layout_of(key_type)?;
511511

512512
// 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;
514514
if key_layout.size.bits() < 128 && key >= (1u128 << key_layout.size.bits() as u128) {
515515
return err!(OutOfTls);
516516
}
@@ -555,7 +555,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
555555
}
556556
"pthread_attr_getstack" => {
557557
// 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])?)?;
559559
let stackaddr = Scalar::from_int(0x80000, args[1].layout.size); // just any address
560560
self.write_scalar(stackaddr, ptr.into())?;
561561
// return 0
@@ -613,7 +613,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for super::MiriEvalCo
613613
// This just creates a key; Windows does not natively support TLS dtors.
614614

615615
// 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;
617617

618618
// Figure out how large a TLS key actually is. This is c::DWORD.
619619
if dest.layout.size.bits() < 128 && key >= (1u128 << dest.layout.size.bits() as u128) {

0 commit comments

Comments
 (0)