Skip to content

Commit 43b219d

Browse files
committed
Work around an apparent compiler bug to make my patch run
Without this, it would fail when optimization is turned on. The result of the Load(bcx, llclosure) call would end up in llenv in a corrupted form.
1 parent 575aae4 commit 43b219d

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/comp/middle/trans.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3709,19 +3709,20 @@ fn trans_call(in_cx: @block_ctxt, f: @ast::expr,
37093709
let bcx = f_res.bcx;
37103710

37113711
let faddr = f_res.val;
3712-
let llenv = alt f_res.env {
3713-
null_env. { C_null(T_opaque_closure_ptr(*bcx_ccx(cx))) }
3714-
some_env(e) { e }
3712+
let llenv;
3713+
alt f_res.env {
3714+
null_env. { llenv = C_null(T_opaque_closure_ptr(*bcx_ccx(cx))); }
3715+
some_env(e) { llenv = e; }
37153716
is_closure. {
37163717
// It's a closure. Have to fetch the elements
37173718
if f_res.is_mem { faddr = load_if_immediate(bcx, faddr, fn_expr_ty); }
37183719
let pair = faddr;
37193720
faddr = GEP(bcx, pair, [C_int(0), C_int(abi::fn_field_code)]);
37203721
faddr = Load(bcx, faddr);
37213722
let llclosure = GEP(bcx, pair, [C_int(0), C_int(abi::fn_field_box)]);
3722-
Load(bcx, llclosure)
3723+
llenv = Load(bcx, llclosure);
37233724
}
3724-
};
3725+
}
37253726

37263727
let ret_ty = ty::node_id_to_type(bcx_tcx(cx), id);
37273728
let args_res =

0 commit comments

Comments
 (0)