diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 360821a0302..7e913c52839 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -6387,6 +6387,9 @@ fn trans_closure(bcx_maybe: &option::t[@block_ctxt], let closure = create_real_fn_pair(env.bcx, option::get(llfnty), llfndecl, env.ptr); + if copying { + add_clean_temp(bcx, closure, node_id_type(cx.ccx, id)) + } some({fn_pair: closure, bcx: env.bcx}) } _ { none } diff --git a/src/test/run-pass/lambda-no-leak.rs b/src/test/run-pass/lambda-no-leak.rs new file mode 100644 index 00000000000..183c1ae1446 --- /dev/null +++ b/src/test/run-pass/lambda-no-leak.rs @@ -0,0 +1,7 @@ +// Make sure we don't leak lambdas in silly ways. +fn force(f: &fn()) { f() } +fn main() { + let x = 7; + lambda() { log_err x; }; + force(lambda() { log_err x; }); +}