about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-01-16 14:27:41 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-01-16 14:27:41 +0100
commitd673f76fdf39143f81f842471088d50a80f37dcb (patch)
tree5929f3e6868a1ccaf710ef3683a39ea0c1f317ad /src/comp
parent498ad91d063f50522a619adca169f9efabc1b1aa (diff)
downloadrust-d673f76fdf39143f81f842471088d50a80f37dcb.tar.gz
rust-d673f76fdf39143f81f842471088d50a80f37dcb.zip
Remove misguided indirect return in trans_closure
Closes #1528
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/trans.rs12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 44b55b0c34d..ba7882331b1 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -4463,14 +4463,10 @@ fn trans_closure(cx: @local_ctxt, sp: span, decl: ast::fn_decl,
     // translation calls that don't have a return value (trans_crate,
     // trans_mod, trans_item, et cetera) and those that do
     // (trans_block, trans_expr, et cetera).
-    if ty::type_is_bot(cx.ccx.tcx, block_ty) ||
-       ty::type_is_nil(cx.ccx.tcx, block_ty) ||
-       option::is_none(body.node.expr) {
-        bcx = trans_block_dps(bcx, body, ignore);
-    } else if ty::type_is_immediate(cx.ccx.tcx, block_ty) {
-        let cell = empty_dest_cell();
-        bcx = trans_block_dps(bcx, body, by_val(cell));
-        Store(bcx, *cell, fcx.llretptr);
+    if option::is_none(body.node.expr) ||
+       ty::type_is_bot(cx.ccx.tcx, block_ty) ||
+       ty::type_is_nil(cx.ccx.tcx, block_ty) {
+        bcx = trans_block(bcx, body);
     } else {
         bcx = trans_block_dps(bcx, body, save_in(fcx.llretptr));
     }