diff --git a/src/eval_context.rs b/src/eval_context.rs index aa2f44008d42cd6d01a4629fcdd3931e83a5cd7c..fdfc56792cb36331c39f90c5631b798e6a962027 100644 --- a/src/eval_context.rs +++ b/src/eval_context.rs @@ -485,7 +485,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { pub(super) fn eval_rvalue_into_lvalue( &mut self, rvalue: &mir::Rvalue<'tcx>, - lvalue: &mir::Lvalue<'tcx>, + lvalue: &mir::Place<'tcx>, ) -> EvalResult<'tcx> { let dest = self.eval_lvalue(lvalue)?; let dest_ty = self.lvalue_ty(lvalue); diff --git a/src/lvalue.rs b/src/lvalue.rs index 6e13155a3a8f2db787cd4c0a6dc329ec1d1c3937..b41a4629301e08b7c91146797a95b29de62ffb94 100644 --- a/src/lvalue.rs +++ b/src/lvalue.rs @@ -121,11 +121,11 @@ impl<'tcx> Global<'tcx> { impl<'a, 'tcx> EvalContext<'a, 'tcx> { /// Reads a value from the lvalue without going through the intermediate step of obtaining /// a `miri::Lvalue` - pub fn try_read_lvalue(&mut self, lvalue: &mir::Lvalue<'tcx>) -> EvalResult<'tcx, Option<Value>> { - use rustc::mir::Lvalue::*; + pub fn try_read_lvalue(&mut self, lvalue: &mir::Place<'tcx>) -> EvalResult<'tcx, Option<Value>> { + use rustc::mir::Place::*; match *lvalue { // Might allow this in the future, right now there's no way to do this from Rust code anyway - Local(mir::RETURN_POINTER) => Err(EvalError::ReadFromReturnPointer), + Local(mir::RETURN_PLACE) => Err(EvalError::ReadFromReturnPointer), // Directly reading a local will always succeed Local(local) => self.frame().get_local(local).map(Some), // Directly reading a static will always succeed @@ -138,7 +138,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { } } - fn try_read_lvalue_projection(&mut self, proj: &mir::LvalueProjection<'tcx>) -> EvalResult<'tcx, Option<Value>> { + fn try_read_lvalue_projection(&mut self, proj: &mir::PlaceProjection<'tcx>) -> EvalResult<'tcx, Option<Value>> { use rustc::mir::ProjectionElem::*; let base = match self.try_read_lvalue(&proj.base)? { Some(base) => base, @@ -168,7 +168,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { } } - pub(super) fn eval_and_read_lvalue(&mut self, lvalue: &mir::Lvalue<'tcx>) -> EvalResult<'tcx, Value> { + pub(super) fn eval_and_read_lvalue(&mut self, lvalue: &mir::Place<'tcx>) -> EvalResult<'tcx, Value> { let ty = self.lvalue_ty(lvalue); // Shortcut for things like accessing a fat pointer's field, // which would otherwise (in the `eval_lvalue` path) require moving a `ByValPair` to memory @@ -209,10 +209,10 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { } } - pub(super) fn eval_lvalue(&mut self, mir_lvalue: &mir::Lvalue<'tcx>) -> EvalResult<'tcx, Lvalue<'tcx>> { - use rustc::mir::Lvalue::*; + pub(super) fn eval_lvalue(&mut self, mir_lvalue: &mir::Place<'tcx>) -> EvalResult<'tcx, Lvalue<'tcx>> { + use rustc::mir::Place::*; let lvalue = match *mir_lvalue { - Local(mir::RETURN_POINTER) => self.frame().return_lvalue, + Local(mir::RETURN_PLACE) => self.frame().return_lvalue, Local(local) => Lvalue::Local { frame: self.stack.len() - 1, local }, Static(ref static_) => { @@ -491,7 +491,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { Ok(Lvalue::Ptr { ptr: PrimVal::Ptr(ptr), extra }) } - pub(super) fn lvalue_ty(&self, lvalue: &mir::Lvalue<'tcx>) -> Ty<'tcx> { + pub(super) fn lvalue_ty(&self, lvalue: &mir::Place<'tcx>) -> Ty<'tcx> { self.monomorphize(lvalue.ty(self.mir(), self.tcx).to_ty(self.tcx), self.substs()) } } diff --git a/src/step.rs b/src/step.rs index 3eab447ed9ec17d0393e043ea7c5a0e676a60a56..d25f439552830661096646f36b8601a9f780ac07 100644 --- a/src/step.rs +++ b/src/step.rs @@ -4,7 +4,7 @@ use rustc::hir::def_id::DefId; use rustc::hir; -use rustc::mir::visit::{Visitor, LvalueContext}; +use rustc::mir::visit::{Visitor, PlaceContext}; use rustc::mir; use rustc::traits::Reveal; use rustc::ty::{subst, self}; @@ -82,14 +82,14 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { use rustc::mir::StatementKind::*; match stmt.kind { - Assign(ref lvalue, ref rvalue) => self.eval_rvalue_into_lvalue(rvalue, lvalue)?, + Assign(ref place, ref rvalue) => self.eval_rvalue_into_lvalue(rvalue, place)?, SetDiscriminant { - ref lvalue, + ref place, variant_index, } => { - let dest = self.eval_lvalue(lvalue)?; - let dest_ty = self.lvalue_ty(lvalue); + let dest = self.eval_lvalue(place)?; + let dest_ty = self.lvalue_ty(place); self.write_discriminant_value(dest_ty, dest, variant_index)?; } @@ -218,14 +218,14 @@ impl<'a, 'b, 'tcx> Visitor<'tcx> for ConstantExtractor<'a, 'b, 'tcx> { } } - fn visit_lvalue( + fn visit_place( &mut self, - lvalue: &mir::Lvalue<'tcx>, - context: LvalueContext<'tcx>, + lvalue: &mir::Place<'tcx>, + context: PlaceContext<'tcx>, location: mir::Location ) { - self.super_lvalue(lvalue, context, location); - if let mir::Lvalue::Static(ref static_) = *lvalue { + self.super_place(lvalue, context, location); + if let mir::Place::Static(ref static_) = *lvalue { let def_id = static_.def_id; let substs = self.ecx.tcx.intern_substs(&[]); let span = self.span; diff --git a/src/terminator/drop.rs b/src/terminator/drop.rs index 6d51ae758a410f972574649039d41bb8918adcd4..3cf20bb6cb071ff28e798c0124efe0b56a6f9314 100644 --- a/src/terminator/drop.rs +++ b/src/terminator/drop.rs @@ -62,7 +62,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { let mut arg_locals = self.frame().mir.args_iter(); assert_eq!(self.frame().mir.arg_count, 1); let arg_local = arg_locals.next().unwrap(); - let dest = self.eval_lvalue(&mir::Lvalue::Local(arg_local))?; + let dest = self.eval_lvalue(&mir::Place::Local(arg_local))?; let arg_ty = self.tcx.mk_mut_ptr(ty); self.write_value(arg, dest, arg_ty) } diff --git a/src/terminator/mod.rs b/src/terminator/mod.rs index 655c15a84ed0e220cfdffd7bc6fc53a431adbcb2..f62d12c12b3f01366f8f0d761c56ebe76128be43 100644 --- a/src/terminator/mod.rs +++ b/src/terminator/mod.rs @@ -344,7 +344,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { // closure as closure once Abi::RustCall => { for (arg_local, (arg_val, arg_ty)) in arg_locals.zip(args) { - let dest = self.eval_lvalue(&mir::Lvalue::Local(arg_local))?; + let dest = self.eval_lvalue(&mir::Place::Local(arg_local))?; self.write_value(arg_val, dest, arg_ty)?; } }, @@ -356,7 +356,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { trace!("arg_operands: {:?}", arg_operands); let local = arg_locals.nth(1).unwrap(); for (i, (arg_val, arg_ty)) in args.into_iter().enumerate() { - let dest = self.eval_lvalue(&mir::Lvalue::Local(local).field(mir::Field::new(i), arg_ty))?; + let dest = self.eval_lvalue(&mir::Place::Local(local).field(mir::Field::new(i), arg_ty))?; self.write_value(arg_val, dest, arg_ty)?; } }, @@ -401,7 +401,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { match sig.abi { Abi::Rust => { for (arg_local, ValTy { value: arg_val, ty: arg_ty }) in arg_locals.zip(args) { - let dest = self.eval_lvalue(&mir::Lvalue::Local(arg_local))?; + let dest = self.eval_lvalue(&mir::Place::Local(arg_local))?; self.write_value(arg_val, dest, arg_ty)?; } } @@ -410,7 +410,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { { // write first argument let first_local = arg_locals.next().unwrap(); - let dest = self.eval_lvalue(&mir::Lvalue::Local(first_local))?; + let dest = self.eval_lvalue(&mir::Place::Local(first_local))?; self.write_value(args[0].value, dest, args[0].ty)?; } @@ -425,7 +425,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { let offset = layout.fields.offset(i).bytes(); let arg = Value::ByRef(ptr.offset(offset, (&self).data_layout())?); let dest = - self.eval_lvalue(&mir::Lvalue::Local(arg_local))?; + self.eval_lvalue(&mir::Place::Local(arg_local))?; trace!( "writing arg {:?} to {:?} (type: {})", arg, @@ -438,7 +438,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { Value::ByVal(PrimVal::Undef) => {} other => { assert_eq!(layout.fields.count(), 1); - let dest = self.eval_lvalue(&mir::Lvalue::Local( + let dest = self.eval_lvalue(&mir::Place::Local( arg_locals.next().unwrap(), ))?; let field_ty = layout.field(&self, 0)?.ty; @@ -449,7 +449,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { trace!("manual impl of rust-call ABI"); // called a manual impl of a rust-call function let dest = self.eval_lvalue( - &mir::Lvalue::Local(arg_locals.next().unwrap()), + &mir::Place::Local(arg_locals.next().unwrap()), )?; self.write_value(args[1].value, dest, args[1].ty)?; }