Skip to content

Commit b101e26

Browse files
committed
rustc: Run scope cleanups in the implicit block created by log statements. Fixes a leak.
1 parent 64a5afa commit b101e26

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/comp/middle/trans.rs

+18-14
Original file line numberDiff line numberDiff line change
@@ -5294,6 +5294,7 @@ fn trans_log(int lvl, @block_ctxt cx, @ast.expr e) -> result {
52945294
auto sub = trans_expr(log_cx, e);
52955295
auto e_ty = ty.expr_ty(cx.fcx.lcx.ccx.tcx, e);
52965296

5297+
auto log_bcx = sub.bcx;
52975298
if (ty.type_is_fp(cx.fcx.lcx.ccx.tcx, e_ty)) {
52985299
let TypeRef tr;
52995300
let bool is32bit = false;
@@ -5310,38 +5311,41 @@ fn trans_log(int lvl, @block_ctxt cx, @ast.expr e) -> result {
53105311
}
53115312
}
53125313
if (is32bit) {
5313-
auto uval = trans_upcall(sub.bcx,
5314+
auto uval = trans_upcall(log_bcx,
53145315
"upcall_log_float",
53155316
vec(C_int(lvl), sub.val),
53165317
false);
5317-
uval.bcx.build.Br(after_cx.llbb);
5318+
log_bcx = uval.bcx;
53185319
} else {
5319-
auto tmp = alloca(sub.bcx, tr);
5320+
auto tmp = alloca(log_bcx, tr);
53205321
sub.bcx.build.Store(sub.val, tmp);
5321-
auto uval = trans_upcall(sub.bcx,
5322+
auto uval = trans_upcall(log_bcx,
53225323
"upcall_log_double",
5323-
vec(C_int(lvl), vp2i(sub.bcx, tmp)),
5324+
vec(C_int(lvl), vp2i(log_bcx, tmp)),
53245325
false);
5325-
uval.bcx.build.Br(after_cx.llbb);
5326+
log_bcx = uval.bcx;
53265327
}
53275328
} else {
53285329
alt (ty.struct(cx.fcx.lcx.ccx.tcx, e_ty)) {
53295330
case (ty.ty_str) {
5330-
auto v = vp2i(sub.bcx, sub.val);
5331-
trans_upcall(sub.bcx,
5332-
"upcall_log_str",
5333-
vec(C_int(lvl), v),
5334-
false).bcx.build.Br(after_cx.llbb);
5331+
auto v = vp2i(log_bcx, sub.val);
5332+
log_bcx = trans_upcall(log_bcx,
5333+
"upcall_log_str",
5334+
vec(C_int(lvl), v),
5335+
false).bcx;
53355336
}
53365337
case (_) {
53375338
auto v = vec(C_int(lvl), sub.val);
5338-
trans_upcall(sub.bcx,
5339-
"upcall_log_int",
5340-
v, false).bcx.build.Br(after_cx.llbb);
5339+
log_bcx = trans_upcall(log_bcx,
5340+
"upcall_log_int",
5341+
v, false).bcx;
53415342
}
53425343
}
53435344
}
53445345

5346+
log_bcx = trans_block_cleanups(log_bcx, log_cx);
5347+
log_bcx.build.Br(after_cx.llbb);
5348+
53455349
ret res(after_cx, C_nil());
53465350
}
53475351

0 commit comments

Comments
 (0)