[release/6.0-rc2] [interp] Add wide data item index static load and stores #59262
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 #59220 to release/6.0-rc2
/cc @lambdageek
Customer Impact
Interpreted .NET 6 Android applications that depend on AndroidX, Maui, SkiaSharp and other frameworks crash at startup.
When a project references some of these frameworks, the build process generates a method that initializes C# fields corresponding to Android resources. This method can be very large and it can initialize on the order of ~100k fields. This stresses a limit in the interpreter on the number of data items that a single method can mention.
Testing
CI and manual testing.
Risk
Low.
The issue does not arise in the mono JIT or in AOT. While developers would lose out on the ability to use hot reload with their code, disabling the interpreter is a viable workaround.
The fix adds a new interpreter opcode that raises the limit on the number of data items that can be referenced from 64k to 4 billion. The fix is tailored to the particular generated UpdateIdValues method from .NET 6 Android. It does not address more general limitations of interpreting large method bodies.