[interp] always widen i4 constants to i8 when pushing to stack #17652
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.
Fixes:
$ ./mono/mini/mono-sgen --interp=-all ./mono/mini/iltests.exeThis is the problematic trace:
and_ptr_i8expects a ptr and i8 on the stack. In the default configuration the interpreter inlinesand_ptr_i8and thus stores the arguments into some locals:mono/mono/mini/interp/transform.c
Lines 3360 to 3364 in b484979
where
store_localwill take care of a proper i4->i8 conversion:mono/mono/mini/interp/transform.c
Lines 820 to 825 in b484979
I'm not sure how to do that (effeciently) for regular calls. The suggested change here is a bit of a hack. Properly harmless on 64 bit systems, but potentially a performance penalty on 32 bit.
Maybe also addresses #17440it's a different problem@BrzVlad do you have a better suggestion how to fix this?