Skip to content

Commit b269bb0

Browse files
committed
Auto merge of #849 - RalfJung:rustup, r=RalfJung
bump rust
2 parents 619d29a + a2541aa commit b269bb0

File tree

6 files changed

+18
-11
lines changed

6 files changed

+18
-11
lines changed

rust-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
527dce7137f7a3c7bf47d9a503abf25f88ea22de
1+
1301422a6c2e8916560b8cc2f0564f38d8858a75

src/eval.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@ use syntax::source_map::DUMMY_SP;
77
use rustc::ty::{self, TyCtxt};
88
use rustc::ty::layout::{LayoutOf, Size, Align};
99
use rustc::hir::def_id::DefId;
10-
use rustc::mir;
1110

1211
use crate::{
1312
InterpResult, InterpError, InterpCx, StackPopCleanup, struct_error,
1413
Scalar, Tag, Pointer, FnVal,
15-
MemoryExtra, MiriMemoryKind, Evaluator, TlsEvalContextExt,
14+
MemoryExtra, MiriMemoryKind, Evaluator, TlsEvalContextExt, HelpersEvalContextExt,
1615
};
1716

1817
/// Configuration needed to spawn a Miri instance.
@@ -85,11 +84,11 @@ pub fn create_ecx<'mir, 'tcx: 'mir>(
8584

8685
// First argument: pointer to `main()`.
8786
let main_ptr = ecx.memory_mut().create_fn_alloc(FnVal::Instance(main_instance));
88-
let dest = ecx.eval_place(&mir::Place::Base(mir::PlaceBase::Local(args.next().unwrap())))?;
87+
let dest = ecx.local_place(args.next().unwrap())?;
8988
ecx.write_scalar(Scalar::Ptr(main_ptr), dest)?;
9089

9190
// Second argument (argc): `1`.
92-
let dest = ecx.eval_place(&mir::Place::Base(mir::PlaceBase::Local(args.next().unwrap())))?;
91+
let dest = ecx.local_place(args.next().unwrap())?;
9392
let argc = Scalar::from_uint(config.args.len() as u128, dest.layout.size);
9493
ecx.write_scalar(argc, dest)?;
9594
// Store argc for macOS's `_NSGetArgc`.
@@ -100,7 +99,7 @@ pub fn create_ecx<'mir, 'tcx: 'mir>(
10099
}
101100

102101
// Third argument (`argv`): created from `config.args`.
103-
let dest = ecx.eval_place(&mir::Place::Base(mir::PlaceBase::Local(args.next().unwrap())))?;
102+
let dest = ecx.local_place(args.next().unwrap())?;
104103
// For Windows, construct a command string with all the aguments.
105104
let mut cmd = String::new();
106105
for arg in config.args.iter() {

src/helpers.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::mem;
22

33
use rustc::ty::{self, layout::{self, Size, Align}};
44
use rustc::hir::def_id::{DefId, CRATE_DEF_INDEX};
5+
use rustc::mir;
56

67
use rand::RngCore;
78

@@ -67,6 +68,13 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
6768
})
6869
}
6970

71+
/// Get the `Place` for a local
72+
fn local_place(&mut self, local: mir::Local) -> InterpResult<'tcx, PlaceTy<'tcx, Tag>> {
73+
let this = self.eval_context_mut();
74+
let place = mir::Place { base: mir::PlaceBase::Local(local), projection: None };
75+
this.eval_place(&place)
76+
}
77+
7078
/// Generate some random bytes, and write them to `dest`.
7179
fn gen_random(
7280
&mut self,

src/machine.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,12 @@ impl<'mir, 'tcx> Machine<'mir, 'tcx> for Evaluator<'tcx> {
214214

215215
// First argument: `size`.
216216
// (`0` is allowed here -- this is expected to be handled by the lang item).
217-
let arg = ecx.eval_place(&mir::Place::Base(mir::PlaceBase::Local(args.next().unwrap())))?;
217+
let arg = ecx.local_place(args.next().unwrap())?;
218218
let size = layout.size.bytes();
219219
ecx.write_scalar(Scalar::from_uint(size, arg.layout.size), arg)?;
220220

221221
// Second argument: `align`.
222-
let arg = ecx.eval_place(&mir::Place::Base(mir::PlaceBase::Local(args.next().unwrap())))?;
222+
let arg = ecx.local_place(args.next().unwrap())?;
223223
let align = layout.align.abi.bytes();
224224
ecx.write_scalar(Scalar::from_uint(align, arg.layout.size), arg)?;
225225

src/shims/foreign_items.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
365365
.to_owned(),
366366
),
367367
)?;
368-
let arg_dest = this.eval_place(&mir::Place::Base(mir::PlaceBase::Local(arg_local)))?;
368+
let arg_dest = this.local_place(arg_local)?;
369369
this.write_scalar(data, arg_dest)?;
370370

371371
assert!(args.next().is_none(), "__rust_maybe_catch_panic argument has more arguments than expected");

src/shims/tls.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use std::collections::BTreeMap;
44

55
use rustc_target::abi::LayoutOf;
6-
use rustc::{ty, ty::layout::HasDataLayout, mir};
6+
use rustc::{ty, ty::layout::HasDataLayout};
77

88
use crate::{
99
InterpResult, InterpError, StackPopCleanup,
@@ -160,7 +160,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
160160
let arg_local = this.frame().body.args_iter().next().ok_or_else(
161161
|| InterpError::AbiViolation("TLS dtor does not take enough arguments.".to_owned()),
162162
)?;
163-
let dest = this.eval_place(&mir::Place::Base(mir::PlaceBase::Local(arg_local)))?;
163+
let dest = this.local_place(arg_local)?;
164164
this.write_scalar(ptr, dest)?;
165165

166166
// step until out of stackframes

0 commit comments

Comments
 (0)