diff options
| author | Max Bernstein <rubybugs@bernsteinbear.com> | 2026-02-09 16:40:25 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-09 21:40:25 +0000 |
| commit | 9efe557da5e17fc860f40956192e9df2e6bd1e6c (patch) | |
| tree | 2288d6eb5d2c976b537d8880d7d9220d85eb6b08 /test/ruby/test_thread_queue.rb | |
| parent | 51d4c2c465e3ce708dddcd65d93e6e29225b454d (diff) | |
ZJIT: Drop has_blockiseq guard on local variable access (#16113)
So `has_blockiseq` was masking two other bugs.
First, that we had only a static EP escape check for an iseq. We need to check
both that an iseq is not known to statically escape them *and that it has not
escaped them before*. Only then can we use SSA locals. This popped up in a
weird PP unit test that was reducible to the test cases added in the PR. So I
fixed that.
Second, that we didn't VM lock when code patching for EP escape. That showed up
in the Ractor btests in my previous PRs #14600 and #15254 #15316, and I had no
idea what was going on at the time, so I dropped it. But if we add this lock,
like all the other invariant patching cases have, the problem goes away. Seems
reasonable.
Finally, we can use normal full SSA locals even in the presence of a blockiseq.
We still reload all of them after each send-with-block, but we can in a later
PR reduce that to just the locals that are (recursively) visibly written to.
Diffstat (limited to 'test/ruby/test_thread_queue.rb')
0 files changed, 0 insertions, 0 deletions
