[release/8.0-staging] [mono][interp] Fix execution of delegate invoke wrapper with interpreter #112008
+60
−1
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 #111310 to release/8.0-staging
/cc @BrzVlad
Customer Impact
This issue was customer reported #110995. It impacts customers using reflection to obtain the value of a virtual property, on iOS. This reflection capability requires fallback to interpreter, where the app crash occurs in this scenario.
Regression
This is a regression introduced in .NET8. The runtime bug causing the crash was introduced in #83461, but it seems there might have been additional changes leading to the crash actually reproducing to customers.
Testing
The fix was verified on the customer provided sample application. CI testing confirmed that JIT/AOT paths haven't been impacted.
Risk
Low risk. This commit contains a change to the IL code of a specific delegate invoke wrapper. For the interpreter, the previous path was crashing every time, so this fix can only make things better. For the rest of the execution engines (jit/aot) the change represents a minimal refactoring that shouldn't have any side effects.