[release/10.0] JIT: Disallow widening tailcalls in async functions#119175
Merged
jeffschwMSFT merged 4 commits intorelease/10.0from Aug 29, 2025
Merged
[release/10.0] JIT: Disallow widening tailcalls in async functions#119175jeffschwMSFT merged 4 commits intorelease/10.0from
jeffschwMSFT merged 4 commits intorelease/10.0from
Conversation
The JIT allows tailcalls that depend on widening happening in the callee: e.g. an int32 returning function can tailcall an int16 returning function because the managed ABI specifies that the callee will widen anyway. However, this is not legal for async methods. For async methods the int32 and int16 returning functions come with two different resumption stubs that are responsible for propagating the returned result into the next continuation in asynchronous cases. Allowing an int32 -> int16 tailcall means only a 16-bit value gets propagated into a caller that expects 32 bits to be written into its continuation. Fix #119060
jakobbotsch
reviewed
Aug 28, 2025
jeffschwMSFT
approved these changes
Aug 28, 2025
Member
jeffschwMSFT
left a comment
There was a problem hiding this comment.
approved. please get a code review. we can merge when ready
EgorBo
approved these changes
Aug 28, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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 #119145 to release/10.0
/cc @jakobbotsch
Customer Impact
In some cases a runtime async method may tailcall another runtime async method even though such a tailcall is incompatible. In particular a function returning an an int16 can tailcall a function returning an int8. If the runtime async function finishes asynchronously, then only an 8 bit result value will be propagated to a caller expecting a 16 bit result value.
Regression
Testing
Unit test added.
Risk
Low, only has an impact when runtime async is enabled.