diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2022-12-24 01:13:40 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-24 01:13:40 -0800 |
commit | b9332ac8e7126066ac4238443d63eaa4c06789f9 (patch) | |
tree | 1d3d45ec28ddbcc7e124d026540be61cf4ef3840 /vm.c | |
parent | d521c9e5a7ed603f8f1aaa9a9a66c3cc80599b0c (diff) | |
download | ruby-b9332ac8e7126066ac4238443d63eaa4c06789f9.tar.gz |
MJIT: Cancel all on disastrous situations (#7019)
I noticed this while running test_yjit with --mjit-call-threshold=1,
which redefines `Integer#<`. When Ruby is monkey-patched,
MJIT itself could be broken.
Similarly, Ruby scripts could break MJIT in many different ways. I
prepared the same set of hooks as YJIT so that we could possibly
override it and disable it on those moments. Every constant under
RubyVM::MJIT is private and thus it's an unsupported behavior though.
Diffstat (limited to 'vm.c')
-rw-r--r-- | vm.c | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -1975,6 +1975,7 @@ rb_vm_check_redefinition_opt_method(const rb_method_entry_t *me, VALUE klass) int flag = vm_redefinition_check_flag(klass); if (flag != 0) { rb_yjit_bop_redefined(flag, (enum ruby_basic_operators)bop); + rb_mjit_bop_redefined(flag, (enum ruby_basic_operators)bop); ruby_vm_redefined_flag[bop] |= flag; } } |