Fix coroutine layout bug from PR #150116 #150275
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes a critical bug introduced in PR #150116 that causes linker errors on PE/COFF targets (e.g.,
x86_64-unknown-uefi):Problem
PR #150116 optimized memory layout by inverting the storage representation from
memory_index(source→memory) toin_memory_order(memory→source).However, in
compiler/rustc_abi/src/layout/coroutine.rs(lines 244-276), the code was buildingcombined_in_memory_orderdirectly instead of:combined_memory_index(source→memory) firstin_memory_order(memory→source)This caused fields to be placed at incorrect offsets, violating PE/COFF alignment requirements (16-byte multiples).
Solution
Changed the coroutine layout code to:
combined_memory_indexas an intermediate representationcombined_memory_index[i] = memory_indexcombined_in_memory_order = combined_memory_index.invert_bijective_mapping()Testing
Verified that
rustc_abicompiles successfully with this fix.Impact
x86_64-unknown-uefi)