about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src/errors.rs
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2024-01-18 10:34:18 +0100
committerGitHub <noreply@github.com>2024-01-18 10:34:18 +0100
commit536fc22917674972edd93800e31b7a6980a281aa (patch)
treede07afdc7cef05993bb256d552fdfe35f5e349bd /compiler/rustc_codegen_llvm/src/errors.rs
parent1f93d2b411cc6096ec460d4122252076fbda32b0 (diff)
parent04a5ee6f1d6ab1270b95c6c91a718d900a762eb8 (diff)
downloadrust-536fc22917674972edd93800e31b7a6980a281aa.tar.gz
rust-536fc22917674972edd93800e31b7a6980a281aa.zip
Rollup merge of #119978 - compiler-errors:async-closure-captures, r=oli-obk
Move async closure parameters into the resultant closure's future eagerly

Move async closure parameters into the closure's resultant future eagerly.

Before, we used to desugar `async |p1, p2, ..| { body }` as `|p1, p2, ..| { || async { body } }`. Now, we desugar the above like `|p1, p2, ..| { async move { let p1 = p1; let p2 = p2; ... body } }`. This mirrors the same desugaring that `async fn` does with its parameter types, and the compiler literally uses the same code via a shared helper function.

This removes the necessity for E0708, since now expressions like `async |x: i32| { x }` will not give you confusing borrow errors.

This does *not* fix the case where async closures have self-borrows. This will come with a general implementation of async closures, which is still in the works.

r? oli-obk
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/errors.rs')
0 files changed, 0 insertions, 0 deletions