-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix ByMove
coroutine-closure shim (for 2021 precise closure capturing behavior)
#123518
Conversation
Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt |
async fn async_main() { | ||
let x = &mut 0; | ||
let y = &mut 0; | ||
let c = async || { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Before this last commit, we accidentally matched the upvar for y
against x
because they both "match" (they both have no projections). Assertions should make sure we're not doing that, lol.
This comment has been minimized.
This comment has been minimized.
let final_deref = if needs_deref { | ||
let Some((mir::ProjectionElem::Deref, rest)) = projection.split_first() else { | ||
bug!(); | ||
let [mir::ProjectionElem::Deref] = projection else { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok this assumption was way too strong. Fixed in a follow-up.
@bors r+ rollup |
…iaskrgr Rollup of 9 pull requests Successful merges: - rust-lang#122781 (Fix argument ABI for overaligned structs on ppc64le) - rust-lang#123367 (Safe Transmute: Compute transmutability from `rustc_target::abi::Layout`) - rust-lang#123518 (Fix `ByMove` coroutine-closure shim (for 2021 precise closure capturing behavior)) - rust-lang#123547 (bootstrap: remove unused pub fns) - rust-lang#123564 (Don't emit divide-by-zero panic paths in `StepBy::len`) - rust-lang#123578 (Restore `pred_known_to_hold_modulo_regions`) - rust-lang#123591 (Remove unnecessary cast from `LLVMRustGetInstrProfIncrementIntrinsic`) - rust-lang#123632 (parser: reduce visibility of unnecessary public `UnmatchedDelim`) - rust-lang#123635 (CFI: Fix ICE in KCFI non-associated function pointers) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of rust-lang#123518 - compiler-errors:by-move-fixes, r=oli-obk Fix `ByMove` coroutine-closure shim (for 2021 precise closure capturing behavior) This PR reworks the way that we perform the `ByMove` coroutine-closure shim to account for the fact that the upvars of the outer coroutine-closure and the inner coroutine might not line up due to edition-2021 closure capture rules changes. Specifically, the number of upvars may differ *and/or* the inner coroutine may have additional projections applied to an upvar. This PR reworks the information we pass into the `ByMoveBody` MIR visitor to account for both of these facts. I tried to leave comments explaining exactly what everything is doing, but let me know if you have questions. r? oli-obk
This PR reworks the way that we perform the
ByMove
coroutine-closure shim to account for the fact that the upvars of the outer coroutine-closure and the inner coroutine might not line up due to edition-2021 closure capture rules changes.Specifically, the number of upvars may differ and/or the inner coroutine may have additional projections applied to an upvar. This PR reworks the information we pass into the
ByMoveBody
MIR visitor to account for both of these facts.I tried to leave comments explaining exactly what everything is doing, but let me know if you have questions.
r? oli-obk