Skip to content

Which MIR passes should run on generator drop shims? #91576

Open
@ecstatic-morse

Description

@ecstatic-morse

Under normal circumstances, MIR shims have the following 5 passes applied:

However, generator drop shims are created by cloning the MIR for the original generator (?), which means they start out in MirPhase::GeneratorLowering. Prior to #91475, run_passes silently returned without doing anything if the MirPhase was greater than or equal to the expected one, so the aforementioned MIR passes were never executed. That behavior was only relevant when building drop shims, so #91475 added an explicit check to preserve it.

Was this intentional? Notably AddMovesForPackedDrops and AbortUnwindingCalls have soundness implications, and CriticalCallEdges is needed to work around some codegen issues, so it seems like they should always run. However, they might not be applicable to generators specifically.

Perhaps @tmandry knows the answer, or knows someone who does?

Metadata

Metadata

Assignees

Labels

A-MIRArea: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.htmlA-coroutinesArea: CoroutinesC-bugCategory: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions