fix suggestion in E0373 for !Unpin coroutines
Coroutines can be prefixed with the `static` keyword to make them `!Unpin`. However, given the following function: ```rust 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.
This commit is contained in:
parent
d84b903754
commit
5d7eda224e
@ -3343,6 +3343,10 @@ fn report_escaping_closure_capture(
|
|||||||
} else if string.starts_with("gen") {
|
} else if string.starts_with("gen") {
|
||||||
// `gen` is 3 chars long
|
// `gen` is 3 chars long
|
||||||
Some(3)
|
Some(3)
|
||||||
|
} else if string.starts_with("static") {
|
||||||
|
// `static` is 6 chars long
|
||||||
|
// This is used for `!Unpin` coroutines
|
||||||
|
Some(6)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user