1
Fork 0

Explain why borrows can't be held across yield point in async blocks

This commit is contained in:
1000teslas 2021-01-02 22:03:21 +11:00
parent ef589490a7
commit 5ccef56456
3 changed files with 73 additions and 0 deletions

View file

@ -1323,6 +1323,16 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
suggestion,
Applicability::MachineApplicable,
);
if let Some(generator_kind) = use_span.generator_kind() {
if let GeneratorKind::Async(_) = generator_kind {
err.note(
"borrows cannot be held across a yield point, because the stack space of the current \
function is not preserved",
);
err.help("see https://rust-lang.github.io/async-book/03_async_await/01_chapter.html#awaiting-on-a-multithreaded-executor \
for more information");
}
}
let msg = match category {
ConstraintCategory::Return(_) | ConstraintCategory::OpaqueType => {