diff options
| author | Michael Sullivan <sully@msully.net> | 2011-08-04 17:58:12 -0700 |
|---|---|---|
| committer | Michael Sullivan <sully@msully.net> | 2011-08-04 17:58:12 -0700 |
| commit | 66a255ac9291306f3943acb2a00e159ccc15dfa4 (patch) | |
| tree | 97cd78f37ad3710e9b402475c3356907d66bb68a | |
| parent | 9a5e9806f3845731b9c4bdb1b986332ac9ed35b2 (diff) | |
| download | rust-66a255ac9291306f3943acb2a00e159ccc15dfa4.tar.gz rust-66a255ac9291306f3943acb2a00e159ccc15dfa4.zip | |
Add a cleanup for copying closures. Closes #804.
| -rw-r--r-- | src/comp/middle/trans.rs | 3 | ||||
| -rw-r--r-- | src/test/run-pass/lambda-no-leak.rs | 7 |
2 files changed, 10 insertions, 0 deletions
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; }); +} |
