[release/7.0-rc1] Fix one more Crossgen2 field layout mismatch with runtime #74293
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 #73978 to release/7.0-rc1
/cc @trylek
Customer Impact
This bug was only found recently due to more widespread use of Vector128 in framework codebase. In classes containing 16-aligned fields, this causes a layout mismatch between Crossgen2 and native runtime with the potential to cause data corruptions, crashes or GC holes.
Testing
Innerloop & Crossgen2 composite testing (the bug was originally observed in Crossgen2 composite runs), as part of the change I wrote two more dedicated Crossgen2 typesystem tests to exercise this behavior.
Risk
Relatively low - most of the actual code logic is pre-existing, the fix only changes how it's applied to the individual architectures.
IMPORTANT: Is this backport for a servicing release? If so and this change touches code that ships in a NuGet package, please make certain that you have added any necessary package authoring and gotten it explicitly reviewed.