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)?;
                             }