-
Notifications
You must be signed in to change notification settings - Fork 4.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
[release/9.0-rc1] Fix Type System Equivalence Checks #106666
[release/9.0-rc1] Fix Type System Equivalence Checks #106666
Conversation
Do we have Tactics approval on this @steveisok @ivdiazsa ? |
Yeah, but we haven't formed the request yet. |
Alright. Ping me when ready. |
From the Servicing chat, if you can fill out the template and add the |
From Tactics: Let's retarget this PR to Either that, or you can close this PR, and run the command again in the original PR but targeting the RC2 branch: |
I also think making a new PR when the RC2 branch becomes available is the better option. Closing this PR and will be on the lookout for the RC2 branch. Thanks @carlossanlop. |
The |
Backport of #106498 to release/9.0-rc1
/cc @steveisok @ivdiazsa
Customer Impact
A customer found a considerable slowdown in their WinForms App when enabling ReadyToRun, as described on issue #96242. Upon investigation, we found that certain methods that were supposed to be precompiled were getting ignored and being deferred to the JIT. This was caused by a new feature added in .NET 8 to add support for type equivalence checks under certain scenarios. However, these checks were interfering in use cases where they were not needed, like our customer's app in this case.
Regression
Pull Request: #87899
Testing
Crossgen2 threw an error only viewable through verbose output but did not crash. Tested the fix manually for multiple scenarios ensuring that said error was no longer present. The resulting R2R image also had a larger size, which confirms the method was successfully compiled, as opposed to before implementing the fix.
Risk
Low. This fix corrects an erroneous behavior that could go unnoticed. At worst, with the fix everything will look the same.