]> git.lizzy.rs Git - rust.git/commitdiff
Reduce coerce_unsized_into to one call
authorMark Simulacrum <mark.simulacrum@gmail.com>
Tue, 20 Dec 2016 01:47:30 +0000 (18:47 -0700)
committerMark Simulacrum <mark.simulacrum@gmail.com>
Wed, 21 Dec 2016 03:04:44 +0000 (20:04 -0700)
We cannot inline due to it being recursive.

src/librustc_trans/mir/rvalue.rs

index 0bca8429d22b24c2fe93f3a9769e78253dd314d4..a22b0a13f78369500fad1dae1cd082e129df4252 100644 (file)
@@ -69,7 +69,7 @@ pub fn trans_rvalue(&mut self,
                 // so the (generic) MIR may not be able to expand it.
                 let operand = self.trans_operand(&bcx, source);
                 let operand = operand.pack_if_pair(&bcx);
-                match operand.val {
+                let llref = match operand.val {
                     OperandValue::Pair(..) => bug!(),
                     OperandValue::Immediate(llval) => {
                         // unsize from an immediate structure. We don't
@@ -81,16 +81,11 @@ pub fn trans_rvalue(&mut self,
                         debug!("trans_rvalue: creating ugly alloca");
                         let lltemp = base::alloc_ty(&bcx, operand.ty, "__unsize_temp");
                         base::store_ty(&bcx, llval, lltemp, operand.ty);
-                        base::coerce_unsized_into(&bcx,
-                            lltemp, operand.ty,
-                            dest.llval, cast_ty);
+                        lltemp
                     }
-                    OperandValue::Ref(llref) => {
-                        base::coerce_unsized_into(&bcx,
-                            llref, operand.ty,
-                            dest.llval, cast_ty);
-                    }
-                }
+                    OperandValue::Ref(llref) => llref
+                };
+                base::coerce_unsized_into(&bcx, llref, operand.ty, dest.llval, cast_ty);
                 bcx
             }