diff options
author | Alan Wu <[email protected]> | 2024-04-22 11:16:46 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2024-04-22 11:16:46 -0400 |
commit | 1bb7638e7a864db9b635c5d41f18653e8451dbc7 (patch) | |
tree | af4691ec83a265ee1aee689a082e305ccc20b44c /object.c | |
parent | aa5b53d232c36d9b0c73336fc112d8fb20145d18 (diff) |
YJIT: Fix shrinking block with assumption too much (#10585)
* YJIT: Fix shrinking block with assumption too much
Under the very specific circumstances, discovered by a test case in
`ruby/spec`, an `expandarray` block can contain just a branch and carry
a method lookup assumption. Previously, when we regenerated the branch,
we allowed it to shrink to empty, since we put the code at the jump
target immediately after it. That was incorrect and caused a crash while
the block is invalidated, since that left no room to patch in an exit.
When regenerating a branch that makes up a block entirely, and the block
could be invalidated, we need to ensure there is room for invalidation.
When there is code before the branch, they should act as padding, so we
don't need to worry about those cases.
* skip on RJIT
Diffstat (limited to 'object.c')
0 files changed, 0 insertions, 0 deletions