Closed compiler-errors closed 1 week ago
Some changes occurred to the core trait solver
cc @rust-lang/initiative-trait-system-refactor
@bors r+ rollup
:pushpin: Commit 2e97dae8d468623474d05dd84c270583ec3ed374 has been approved by oli-obk
It is now in the queue for this repository.
bors sleepy @bors r-
There's no reason that async closures may not implement
FnMut
orFn
if they don't actually borrow anything with the closure's env lifetime. Specifically, #123660 made it so that we don't always need to borrow captures from the closure's env.See the doc comment on
should_reborrow_from_env_of_parent_coroutine_closure
:https://github.com/rust-lang/rust/blob/c00957a3e269219413041a4e3565f33b1f9d0779/compiler/rustc_hir_typeck/src/upvar.rs#L1777-L1823
If there are no such borrows, then we are free to implement
FnMut
andFn
as permitted by our closure's inferredClosureKind
.As far as I can tell, this change makes
async || {}
work in precisely the set of places they used to work before #120361. Fixes #125247.r? oli-obk