diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2012-01-16 14:27:41 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2012-01-16 14:27:41 +0100 |
| commit | d673f76fdf39143f81f842471088d50a80f37dcb (patch) | |
| tree | 5929f3e6868a1ccaf710ef3683a39ea0c1f317ad /src/comp | |
| parent | 498ad91d063f50522a619adca169f9efabc1b1aa (diff) | |
| download | rust-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.rs | 12 |
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)); } |
