Enforce coroutine-closure layouts are identical by compiler-errors · Pull Request #121122 · rust-lang/rust

@rustbot rustbot added S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

T-compiler

Relevant to the compiler team, which will review and decide on the PR/issue.

labels

Feb 15, 2024

@compiler-errors

@bors bors added S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

and removed S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

labels

Feb 15, 2024

bors added a commit to rust-lang-ci/rust that referenced this pull request

Feb 15, 2024
…iaskrgr

Rollup of 10 pull requests

Successful merges:

 - rust-lang#111106 (Add known issue of let binding to format_args doc)
 - rust-lang#118749 (Make contributing to windows bindings easier)
 - rust-lang#120982 (Add APIs for fetching foreign items )
 - rust-lang#121022 (rustdoc: cross-crate re-exports: correctly render late-bound params in source order even if early-bound params are present)
 - rust-lang#121082 (Clarified docs on non-atomic oprations on owned/mut refs to atomics)
 - rust-lang#121084 (Make sure `tcx.create_def` also depends on the forever red node, instead of just `tcx.at(span).create_def`)
 - rust-lang#121098 (Remove unnecessary else block from `thread_local!` expanded code)
 - rust-lang#121105 (Do not report overflow errors on ConstArgHasType goals)
 - rust-lang#121116 (Reinstate some delayed bugs.)
 - rust-lang#121122 (Enforce coroutine-closure layouts are identical)

r? `@ghost`
`@rustbot` modify labels: rollup

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Feb 15, 2024
Rollup merge of rust-lang#121122 - compiler-errors:identical-layouts, r=oli-obk

Enforce coroutine-closure layouts are identical

Enforce that for an async closure, the by-ref and by-move coroutine layouts are identical. This is just a sanity check to make sure that optimizations aren't doing anything fishy.

r? oli-obk

GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request

Mar 27, 2024
…ol, r=oli-obk

Make `TyCtxt::coroutine_layout` take coroutine's kind parameter

For coroutines that come from coroutine-closures (i.e. async closures), we may have two kinds of bodies stored in the coroutine; one that takes the closure's captures by reference, and one that takes the captures by move.

These currently have identical layouts, but if we do any optimization for these layouts that are related to the upvars, then they will diverge -- e.g. rust-lang#120168 (comment).

This PR relaxes the assertion I added in rust-lang#121122, and instead make the `TyCtxt::coroutine_layout` method take the `coroutine_kind_ty` argument from the coroutine, which will allow us to differentiate these by-move and by-ref bodies.

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Mar 27, 2024
Rollup merge of rust-lang#123021 - compiler-errors:coroutine-layout-lol, r=oli-obk

Make `TyCtxt::coroutine_layout` take coroutine's kind parameter

For coroutines that come from coroutine-closures (i.e. async closures), we may have two kinds of bodies stored in the coroutine; one that takes the closure's captures by reference, and one that takes the captures by move.

These currently have identical layouts, but if we do any optimization for these layouts that are related to the upvars, then they will diverge -- e.g. rust-lang#120168 (comment).

This PR relaxes the assertion I added in rust-lang#121122, and instead make the `TyCtxt::coroutine_layout` method take the `coroutine_kind_ty` argument from the coroutine, which will allow us to differentiate these by-move and by-ref bodies.