diff options
| author | Takashi Kokubun <takashikkbn@gmail.com> | 2023-02-14 23:44:44 -0800 |
|---|---|---|
| committer | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-05 23:28:59 -0800 |
| commit | 4271927d619469faa7f82e8899b8c185961137f3 (patch) | |
| tree | bc4461a5ad3926a6e64c8f00ca61ef5897b3b7b5 | |
| parent | 4d97f9319c23dc051ac9cdc8fa3279265da304da (diff) | |
Side-exit on cfunc with -2 argc
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7448
| -rw-r--r-- | lib/ruby_vm/mjit/insn_compiler.rb | 4 | ||||
| -rw-r--r-- | mjit_c.h | 1 | ||||
| -rw-r--r-- | mjit_c.rb | 1 |
3 files changed, 6 insertions, 0 deletions
diff --git a/lib/ruby_vm/mjit/insn_compiler.rb b/lib/ruby_vm/mjit/insn_compiler.rb index dabc0b385c..04f1a349c7 100644 --- a/lib/ruby_vm/mjit/insn_compiler.rb +++ b/lib/ruby_vm/mjit/insn_compiler.rb @@ -1731,6 +1731,10 @@ module RubyVM::MJIT asm.incr_counter(:send_arity) return CantCompile end + if cfunc.argc == -2 + asm.incr_counter(:send_cfunc_ruby_array_varg) + return CantCompile + end # Check interrupts before SP motion to safely side-exit with the original SP. jit_check_ints(jit, ctx, asm) @@ -135,6 +135,7 @@ MJIT_RUNTIME_COUNTERS( send_cfunc_variadic, send_cfunc_too_many_args, + send_cfunc_ruby_array_varg, send_ivar, send_ivar_splat, @@ -1061,6 +1061,7 @@ module RubyVM::MJIT # :nodoc: all send_iseq_kw_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_iseq_kw_splat)")], send_cfunc_variadic: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_cfunc_variadic)")], send_cfunc_too_many_args: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_cfunc_too_many_args)")], + send_cfunc_ruby_array_varg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_cfunc_ruby_array_varg)")], send_ivar: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_ivar)")], send_ivar_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_ivar_splat)")], send_ivar_opt_send: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_ivar_opt_send)")], |
