From fb5b268aa856f788fbf44b5e86c04c75cb7f47c2 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Tue, 17 Jul 2018 15:46:08 +0200 Subject: [PATCH] Pull out a statement that all match arms are executing --- src/librustc_mir/interpret/eval_context.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index a92c81e046a..96d0563c12d 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -771,16 +771,15 @@ pub(super) fn eval_rvalue_into_place( Cast(kind, ref operand, cast_ty) => { debug_assert_eq!(self.monomorphize(cast_ty, self.substs()), dest_ty); use rustc::mir::CastKind::*; + let src = self.eval_operand(operand)?; match kind { Unsize => { - let src = self.eval_operand(operand)?; let src_layout = self.layout_of(src.ty)?; let dst_layout = self.layout_of(dest_ty)?; self.unsize_into(src.value, src_layout, dest, dst_layout)?; } Misc => { - let src = self.eval_operand(operand)?; if self.type_is_fat_ptr(src.ty) { match (src.value, self.type_is_fat_ptr(dest_ty)) { (Value::ByRef { .. }, _) | @@ -840,7 +839,7 @@ pub(super) fn eval_rvalue_into_place( } ReifyFnPointer => { - match self.eval_operand(operand)?.ty.sty { + match src.ty.sty { ty::TyFnDef(def_id, substs) => { if self.tcx.has_attr(def_id, "rustc_args_required_const") { bug!("reifying a fn ptr that requires \ @@ -866,7 +865,7 @@ pub(super) fn eval_rvalue_into_place( UnsafeFnPointer => { match dest_ty.sty { ty::TyFnPtr(_) => { - let mut src = self.eval_operand(operand)?; + let mut src = src; src.ty = dest_ty; self.write_value(src, dest)?; } @@ -875,7 +874,7 @@ pub(super) fn eval_rvalue_into_place( } ClosureFnPointer => { - match self.eval_operand(operand)?.ty.sty { + match src.ty.sty { ty::TyClosure(def_id, substs) => { let substs = self.tcx.subst_and_normalize_erasing_regions( self.substs(), -- 2.44.0