rust/tests/ui/coroutine/drop-track-addassign-yield.rs
2023-10-20 21:14:02 +00:00

40 lines
816 B
Rust

// 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)]
fn foo() {
let _y = static || {
let x = &mut 0;
*{
yield;
x
} += match String::new() {
_ => 0,
};
};
// Please don't ever actually write something like this
let _z = static || {
let x = &mut 0;
*{
let inner = &mut 1;
*{
yield ();
inner
} += match String::new() {
_ => 1,
};
yield;
x
} += match String::new() {
_ => 2,
};
};
}
fn main() {
foo()
}