diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2024-01-23 12:35:34 -0500 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2024-01-23 19:22:57 -0500 |
commit | ac1e9e443a0d6a4d4c0801c26d1d8bd33d9eb431 (patch) | |
tree | e93ed953f8b4ed28850c8b6c18f6011988cfadd2 /yjit/bindgen/src/main.rs | |
parent | c0cabc0a699b2c8b0fded6d0ed85aff4bf102c03 (diff) | |
download | ruby-ac1e9e443a0d6a4d4c0801c26d1d8bd33d9eb431.tar.gz |
YJIT: Fix ruby2_keywords splat+rest and drop bogus checks
YJIT didn't guard for ruby2_keywords hash in case of splat calls that
land in methods with a rest parameter, creating incorrect results.
The compile-time checks didn't correspond to any actual effects of
ruby2_keywords, so it was masking this bug and YJIT was needlessly
refusing to compile some code. About 16% of fallback reasons in
`lobsters` was due to the ISeq check.
We already handle the tagging part with
exit_if_supplying_kw_and_has_no_kw() and should now have a dynamic guard
for all splat cases.
Note for backporting: You also need 7f51959ff1.
[Bug #20195]
Diffstat (limited to 'yjit/bindgen/src/main.rs')
-rw-r--r-- | yjit/bindgen/src/main.rs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/yjit/bindgen/src/main.rs b/yjit/bindgen/src/main.rs index e249181d51..742885de3b 100644 --- a/yjit/bindgen/src/main.rs +++ b/yjit/bindgen/src/main.rs @@ -426,6 +426,7 @@ fn main() { .allowlist_function("rb_yarv_str_eql_internal") .allowlist_function("rb_str_neq_internal") .allowlist_function("rb_yarv_ary_entry_internal") + .allowlist_function("rb_yjit_ruby2_keywords_splat_p") .allowlist_function("rb_yjit_fix_div_fix") .allowlist_function("rb_yjit_fix_mod_fix") .allowlist_function("rb_FL_TEST") |