[release/7.0-rc1] Don't track current field of state machines #74216
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.
Backport of #74111 to release/7.0-rc1
/cc @MichalStrehovsky
Customer Impact
If customer code has many
yield return
statements and the method also requires reflection dataflow analysis, the compiler would take a long time to analyze the method. This would look like a hang that is hard to troubleshoot (it can increase compilation times by tens of minutes). These hangs could be a support cost because they're not easy to root cause (no obvious crash with a printed stack trace that can be cheaply bucketed, etc.).Testing
We found this in one of the libraries tests. The test now compiles in a reasonable amount of time. The change also passes all NativeAOT testing and all IL Linker unit tests (this issue was in a shared codebase with IL Linker and we made the fix there first).
Risk
The issue is in analysis of compiler-generated state machine that is a new feature in .NET 7. We have unit tests for the core scenarios and they all pass.