diff --git a/src/eval_context.rs b/src/eval_context.rs
index 43cd9fe56640220796ae7af798b4b167d58abbe4..aa2f44008d42cd6d01a4629fcdd3931e83a5cd7c 100644
--- a/src/eval_context.rs
+++ b/src/eval_context.rs
@@ -776,7 +776,8 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
     pub(super) fn eval_operand(&mut self, op: &mir::Operand<'tcx>) -> EvalResult<'tcx, Value> {
         use rustc::mir::Operand::*;
         match *op {
-            Consume(ref lvalue) => self.eval_and_read_lvalue(lvalue),
+            Copy(ref lvalue) => self.eval_and_read_lvalue(lvalue),
+            Move(ref lvalue) => self.eval_and_read_lvalue(lvalue),
 
             Constant(ref constant) => {
                 use rustc::mir::Literal;
diff --git a/src/terminator/mod.rs b/src/terminator/mod.rs
index e382098afa8819b4daf23c9f1d1b7ca3929c7de3..655c15a84ed0e220cfdffd7bc6fc53a431adbcb2 100644
--- a/src/terminator/mod.rs
+++ b/src/terminator/mod.rs
@@ -474,7 +474,8 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
                 let ty = self.operand_ty(&arg_operands[0]);
                 let ty = self.get_field_ty(ty, 0)?.ty;
                 match arg_operands[0] {
-                    mir::Operand::Consume(ref mut lval) => *lval = lval.clone().field(mir::Field::new(0), ty),
+                    mir::Operand::Copy(ref mut lval) => *lval = lval.clone().field(mir::Field::new(0), ty),
+                    mir::Operand::Move(ref mut lval) => *lval = lval.clone().field(mir::Field::new(0), ty),
                     _ => bug!("virtual call first arg cannot be a constant"),
                 }
                 // recurse with concrete function