Closed
Description
Creating a stack closure which references an owned pointer and then transferring ownership of the owned box before invoking the stack closure results in a crash.
For example, in Rust 0.6, this will compile
fn twice(x: ~uint) -> uint
{
*x * 2
}
fn invoke(f : &fn() -> uint)
{
f();
}
fn main()
{
let x : ~uint = ~9;
let sq : &fn() -> uint = || { *x * *x };
twice(x);
invoke(sq);
}
and the resulting program will then crash with a SEGV