ZJIT: Spill whole FrameState in Insn::SendWithoutBlock
#14308
Merged
+61
−33
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.
Previously, we only spilled the arguments necessary for the particular
send. In case the callee raises and a rescue resumes the ISEQ, that
did not present a complete stack state. E.g. in
[1, (raise rescue 2)]
the raise send only spills
self
, when1
also needs to be spilled.Spill the whole stack. Adjust parsing for
opt_aref_with
since thekey argument for the send now needs to be described by the frame state
of the send.
This changes the contract for
Insn::SendWithoutBlock
to use argumentsfrom the interpreter stack as described by its frame state.
self_val
andargs
are now redundant, but I'd like to do the removalin a separate diff to keep this one focused on the bugfix.