fix suggestion in E0373 for !Unpin coroutines by jwong101 · Pull Request #125301 · rust-lang/rust (original) (raw)
Coroutines can be prefixed with the static
keyword to make them!Unpin
.
However, given the following function:
fn check() -> impl Sized { let x = 0; #[coroutine] static || { yield; x } }
We currently suggest prefixing move
before static
, which is
syntactically incorrect:
error[E0373]: coroutine may outlive the current function, but it borrows
...
--> src/main.rs:6:5
|
6 | static || {
| ^^^^^^^^^ may outlive borrowed value `x`
7 | yield;
8 | x
| - `x` is borrowed here
|
note: coroutine is returned here
--> src/main.rs:6:5
|
6 | / static || {
7 | | yield;
8 | | x
9 | | }
| |_____^
help: to force the coroutine to take ownership of `x` (and any other
referenced variables), use the `move` keyword
| // this is syntactically incorrect, it should be `static move ||`
6 | move static || {
| ++++
This PR suggests adding move
after static
for these coroutines.
I also added a UI test for this case.