]> git.lizzy.rs Git - rust.git/commitdiff
Pull out a statement that all match arms are executing
authorOliver Schneider <github35764891676564198441@oli-obk.de>
Tue, 17 Jul 2018 13:46:08 +0000 (15:46 +0200)
committerOliver Schneider <github35764891676564198441@oli-obk.de>
Tue, 17 Jul 2018 15:54:42 +0000 (17:54 +0200)
src/librustc_mir/interpret/eval_context.rs

index a92c81e046a0ffd9f01d650d54875ab30191c272..96d0563c12d5127faa8d28793b747cedabde3d54 100644 (file)
@@ -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(),