1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
//@ run-pass
// Based on addassign-yield.rs, but with drop tracking enabled. Originally we did not implement
// the fake_read callback on ExprUseVisitor which caused this case to break.
#![feature(coroutines, stmt_expr_attributes)]
fn foo() {
let _y = #[coroutine] static || {
let x = &mut 0;
*{
yield;
x
} += match String::new() {
_ => 0,
};
};
// Please don't ever actually write something like this
let _z = #[coroutine] static || {
let x = &mut 0;
*{
let inner = &mut 1;
*{
yield ();
inner
} += match String::new() {
_ => 1,
};
yield;
x
} += match String::new() {
_ => 2,
};
};
}
fn main() {
foo()
}
|